· 8 years ago · Jul 03, 2018, 02:36 AM
1require "rubygems"
2require "dm-core"
3require "dm-validations"
4require "dm-is-remixable"
5
6DataMapper::Logger.new(STDOUT, :debug)
7DataMapper.setup(:default, "sqlite3::memory:")
8
9module Metadata
10 include DataMapper::Resource
11
12 property :id, Serial
13
14 is :remixable
15end
16
17class Stamp
18 include DataMapper::Resource
19
20 property :id, Serial
21
22 remix n, :metadata
23
24 enhance :metadata do
25 belongs_to :datatype
26 end
27end
28
29class Content
30 include DataMapper::Resource
31
32 property :id, Serial
33
34 remix n, :metadata
35
36 enhance :metadata do
37 belongs_to :datatype
38 end
39end
40
41class Datatype
42 include DataMapper::Resource
43
44 property :id, Serial
45 property :name, String
46
47 has n, :content_metadata, "ContentMetadata"
48 has n, :stamp_metadata, "StampMetadata"
49end
50
51puts DataMapper.auto_migrate!.inspect
52
53Datatype.create :name => 'foo'
54
55
56# mungo:snippets snusnu$ ruby narretgrez.rb
57# ~ Generating Remixed Model: StampMetadata
58# ~ Generating Remixed Model: ContentMetadata
59# ~ Skipping auto_migrate_down! for remixable module (Metadata)
60# ~ (0.000135) SELECT sqlite_version(*)
61# ~ (0.000096) DROP TABLE IF EXISTS "stamps"
62# ~ (0.000019) DROP TABLE IF EXISTS "stamp_metadatum"
63# ~ (0.000016) DROP TABLE IF EXISTS "contents"
64# ~ (0.000048) DROP TABLE IF EXISTS "content_metadatum"
65# ~ (0.000016) DROP TABLE IF EXISTS "datatypes"
66# ~ Skipping auto_migrate_up! for remixable module (Metadata)
67# ~ (0.000024) PRAGMA table_info("stamps")
68# ~ (0.000361) CREATE TABLE "stamps" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT)
69# ~ (0.000010) PRAGMA table_info("stamp_metadatum")
70# ~ (0.000116) CREATE TABLE "stamp_metadatum" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "stamp_id" INTEGER NOT NULL, "datatype_id" INTEGER NOT NULL)
71# ~ (0.000118) CREATE INDEX "index_stamp_metadatum_datatype" ON "stamp_metadatum" ("datatype_id")
72# ~ (0.000009) PRAGMA table_info("contents")
73# ~ (0.000105) CREATE TABLE "contents" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT)
74# ~ (0.000009) PRAGMA table_info("content_metadatum")
75# ~ (0.000117) CREATE TABLE "content_metadatum" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "content_id" INTEGER NOT NULL, "datatype_id" INTEGER NOT NULL)
76# ~ (0.000111) CREATE INDEX "index_content_metadatum_datatype" ON "content_metadatum" ("datatype_id")
77# ~ (0.000008) PRAGMA table_info("datatypes")
78# ~ (0.000123) CREATE TABLE "datatypes" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" VARCHAR(50))
79# #<DataMapper::Model::DescendantSet:0x32bae0 @descendants=[Metadata, Stamp, StampMetadata, Content, ContentMetadata, Datatype], @ancestors=nil>
80# ~ (0.000036) INSERT INTO "datatypes" ("name") VALUES ('foo')