· 8 years ago · Mar 15, 2018, 09:46 AM
1#!/usr/bin/env ruby
2#
3# A one file test to show ...
4require 'rubygems'
5require 'dm-core'
6
7
8# setup the logger
9DataMapper::Logger.new(STDOUT, :debug)
10
11# connect to the DB
12DataMapper.setup(:default, 'sqlite3::memory:')
13
14class Person
15 include DataMapper::Resource
16 property :id, Serial
17 property :email, String, :unique => true
18 property :thing, Integer
19
20 has n, :mailers # A Person sends mailers.
21 has n, :conversations, :model => "Mailer", :through => Resource # A person receivers mailers.
22
23end
24
25class Mailer
26
27 include DataMapper::Resource
28 property :id, Serial
29 property :subject, String
30 property :body, Text
31 property :sent_at, DateTime
32
33 belongs_to :person
34 has n, :people, :through => Resource
35
36end
37
38DataMapper.auto_migrate!
39
40a = Person.new(:email => "greg@example.com")
41a.save
42a = Person.new(:email => "stan@example.com", :thing => 1)
43a.save
44a = Person.new(:email => "jim@example.com", :thing => 1)
45a.save
46
47m = Mailer.new()
48m.subject = "Subject"
49m.body = "Body"
50m.person = Person.first() # Greg
51m.people = Person.all(:thing => 1)
52m.save()
53
54
55__END__
56
57 ~ (0.000043) SELECT sqlite_version(*)
58 ~ (0.000062) DROP TABLE IF EXISTS "people"
59 ~ (0.000044) DROP TABLE IF EXISTS "mailers"
60 ~ (0.000013) DROP TABLE IF EXISTS "mailer_people"
61 ~ (0.000012) PRAGMA table_info("people")
62 ~ (0.000335) CREATE TABLE "people" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "email" VARCHAR(50), "thing" INTEGER)
63 ~ (0.000009) PRAGMA table_info("mailers")
64 ~ (0.000174) CREATE TABLE "mailers" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "subject" VARCHAR(50), "body" TEXT, "sent_at" TIMESTAMP, "person_id" INTEGER NOT NULL)
65 ~ (0.000098) CREATE INDEX "index_mailers_person" ON "mailers" ("person_id")
66 ~ (0.000009) PRAGMA table_info("mailer_people")
67 ~ (0.000157) CREATE TABLE "mailer_people" ("person_id" INTEGER NOT NULL, "conversation_id" INTEGER NOT NULL, "mailer_id" INTEGER NOT NULL, PRIMARY KEY("person_id", "conversation_id", "mailer_id"))
68 ~ (0.000039) INSERT INTO "people" ("email") VALUES ('greg@example.com')
69 ~ (0.000069) INSERT INTO "people" ("email", "thing") VALUES ('stan@example.com', 1)
70 ~ (0.000041) INSERT INTO "people" ("email", "thing") VALUES ('jim@example.com', 1)
71 ~ (0.000046) SELECT "id", "email", "thing" FROM "people" ORDER BY "id" LIMIT 1
72 ~ (0.000062) SELECT "id", "email", "thing" FROM "people" WHERE "thing" = 1 ORDER BY "id"
73 ~ (0.000082) INSERT INTO "mailers" ("subject", "body", "person_id") VALUES ('Subject', 'Body', 1)
74/Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/adapters/data_objects_adapter.rb:162:in `execute_non_query': mailer_people.conversation_id may not be NULL (DataObjects::IntegrityError)
75 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/adapters/data_objects_adapter.rb:162:in `execute'
76 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/adapters/data_objects_adapter.rb:266:in `with_connection'
77 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/adapters/data_objects_adapter.rb:160:in `execute'
78 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/adapters/data_objects_adapter.rb:58:in `create'
79 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/adapters/data_objects_adapter.rb:31:in `each'
80 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/adapters/data_objects_adapter.rb:31:in `create'
81 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/repository.rb:125:in `create'
82 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:808:in `_create'
83 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:621:in `hookable__create_hook_nan_before_advised'
84 from /Library/Ruby/Gems/1.8/gems/extlib-0.9.13/lib/extlib/hook.rb:299:in `create_hook'
85 from /Library/Ruby/Gems/1.8/gems/extlib-0.9.13/lib/extlib/hook.rb:297:in `catch'
86 from /Library/Ruby/Gems/1.8/gems/extlib-0.9.13/lib/extlib/hook.rb:297:in `create_hook'
87 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:554:in `save_self'
88 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:343:in `save'
89 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/model.rb:616:in `send'
90 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/model.rb:616:in `_create'
91 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/model.rb:403:in `create'
92 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/collection.rb:1061:in `send'
93 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/collection.rb:1061:in `_create'
94 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/repository.rb:107:in `scope'
95 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/collection.rb:1061:in `_create'
96 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/associations/one_to_many.rb:272:in `_create'
97 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/collection.rb:721:in `create'
98 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/associations/many_to_many.rb:416:in `send'
99 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/associations/many_to_many.rb:416:in `create_intermediary'
100 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/associations/many_to_many.rb:397:in `_save'
101 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/associations/relationship.rb:524:in `all?'
102 from /Library/Ruby/Gems/1.8/gems/extlib-0.9.13/lib/extlib/lazy_array.rb:452:in `each'
103 from /Library/Ruby/Gems/1.8/gems/extlib-0.9.13/lib/extlib/lazy_array.rb:452:in `all?'
104 from /Library/Ruby/Gems/1.8/gems/extlib-0.9.13/lib/extlib/lazy_array.rb:452:in `all?'
105 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/associations/many_to_many.rb:397:in `_save'
106 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/collection.rb:798:in `save'
107 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:584:in `save_children'
108 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/associations/relationship.rb:524:in `all?'
109 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:582:in `each'
110 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:582:in `all?'
111 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:582:in `save_children'
112 from /Library/Ruby/Gems/1.8/gems/dm-core-0.10.1/lib/dm-core/resource.rb:343:in `save'
113 from /Users/example/Ruby Workspace/gist-229865/standalone_example.rb:53
114 ~ (0.000193) SELECT "person_id", "conversation_id", "mailer_id" FROM "mailer_people" WHERE "mailer_id" = 1 AND "person_id" = 2 ORDER BY "person_id", "conversation_id", "mailer_id" LIMIT 1
115 ~ mailer_people.conversation_id may not be NULL (code: 19, sql state: , query: INSERT INTO "mailer_people" ("person_id", "mailer_id") VALUES (2, 1), uri: sqlite3://:memory:)