dm-mongo-adapter 0.2.0.pre3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +27 -0
- data/README.rdoc +16 -35
- data/Rakefile +6 -16
- data/VERSION.yml +2 -2
- data/dm-mongo-adapter.gemspec +100 -121
- data/lib/mongo_adapter.rb +19 -62
- data/lib/mongo_adapter/adapter.rb +49 -36
- data/lib/mongo_adapter/conditions.rb +0 -5
- data/lib/mongo_adapter/migrations.rb +17 -23
- data/lib/mongo_adapter/model.rb +3 -74
- data/lib/mongo_adapter/modifier.rb +1 -1
- data/lib/mongo_adapter/property/array.rb +10 -0
- data/lib/mongo_adapter/property/db_ref.rb +17 -0
- data/lib/mongo_adapter/property/hash.rb +27 -0
- data/lib/mongo_adapter/property/object_id.rb +47 -0
- data/lib/mongo_adapter/query.rb +42 -45
- data/lib/mongo_adapter/rails/storage.rb +15 -0
- data/lib/mongo_adapter/resource.rb +0 -130
- data/lib/mongo_adapter/support/class.rb +11 -0
- data/lib/mongo_adapter/support/date.rb +11 -0
- data/lib/mongo_adapter/support/date_time.rb +12 -0
- data/lib/mongo_adapter/support/object.rb +9 -0
- data/spec/legacy/adapter_spec.rb +9 -6
- data/spec/legacy/associations_spec.rb +37 -29
- data/spec/legacy/property_spec.rb +4 -3
- data/spec/legacy/sti_spec.rb +1 -2
- data/spec/lib/cleanup_models.rb +0 -1
- data/spec/public/aggregates_spec.rb +171 -0
- data/spec/public/model_spec.rb +8 -22
- data/spec/public/modifier_spec.rb +109 -0
- data/spec/public/properties/db_ref_spec.rb +17 -0
- data/spec/public/properties/object_id_spec.rb +15 -0
- data/spec/public/resource_spec.rb +2 -383
- data/spec/public/shared/object_id_shared_spec.rb +16 -39
- data/spec/spec_helper.rb +0 -4
- metadata +87 -117
- data/.gitignore +0 -9
- data/lib/mongo_adapter/embedded_model.rb +0 -187
- data/lib/mongo_adapter/embedded_resource.rb +0 -134
- data/lib/mongo_adapter/embedments/one_to_many.rb +0 -144
- data/lib/mongo_adapter/embedments/one_to_one.rb +0 -57
- data/lib/mongo_adapter/embedments/relationship.rb +0 -258
- data/lib/mongo_adapter/model/embedment.rb +0 -215
- data/lib/mongo_adapter/types/date.rb +0 -24
- data/lib/mongo_adapter/types/date_time.rb +0 -28
- data/lib/mongo_adapter/types/db_ref.rb +0 -65
- data/lib/mongo_adapter/types/discriminator.rb +0 -32
- data/lib/mongo_adapter/types/object_id.rb +0 -72
- data/lib/mongo_adapter/types/objects.rb +0 -31
- data/spec/legacy/embedded_resource_spec.rb +0 -157
- data/spec/legacy/embedments_spec.rb +0 -177
- data/spec/legacy/modifier_spec.rb +0 -81
- data/spec/public/embedded_collection_spec.rb +0 -61
- data/spec/public/embedded_resource_spec.rb +0 -220
- data/spec/public/model/embedment_spec.rb +0 -186
- data/spec/public/shared/model_embedments_spec.rb +0 -338
- data/spec/public/types/df_ref_spec.rb +0 -6
- data/spec/public/types/discriminator_spec.rb +0 -118
- data/spec/public/types/embedded_array_spec.rb +0 -55
- data/spec/public/types/embedded_hash_spec.rb +0 -83
- data/spec/public/types/object_id_spec.rb +0 -6
- data/spec/semipublic/embedded_model_spec.rb +0 -43
- data/spec/semipublic/model/embedment_spec.rb +0 -42
- data/spec/semipublic/resource_spec.rb +0 -70
@@ -1,56 +1,33 @@
|
|
1
|
-
share_examples_for 'An
|
2
|
-
|
3
|
-
describe '.load' do
|
1
|
+
share_examples_for 'An ObjectId Type' do
|
2
|
+
describe '#typecast' do
|
4
3
|
it 'should return nil when given nil' do
|
5
|
-
@
|
4
|
+
@property.typecast(nil).should be_nil
|
6
5
|
end
|
7
6
|
|
8
|
-
it 'should return
|
9
|
-
|
10
|
-
loaded
|
7
|
+
it 'should return BSON::ObjectId when given a valid string' do
|
8
|
+
value = '4d7b57618f9f1f12bd000002'
|
9
|
+
loaded = @property.typecast(value)
|
10
|
+
loaded.should == ::BSON::ObjectId.from_string(value)
|
11
11
|
end
|
12
12
|
|
13
|
-
it 'should
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
loaded.should == mongo_id.to_s
|
13
|
+
it 'should raise BSON::InvalidObjectId when give an invalid string' do
|
14
|
+
lambda {
|
15
|
+
@property.typecast('#invalid#')
|
16
|
+
}.should raise_error(::BSON::InvalidObjectId)
|
18
17
|
end
|
19
18
|
|
20
|
-
it 'should
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
}.should raise_error(ArgumentError)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe '.dump' do
|
30
|
-
it 'should return nil when given nil' do
|
31
|
-
@type_class.dump(nil, nil).should be_nil
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'should return a Mongo::ObjectID when given a string' do
|
35
|
-
mongo_id = ::Mongo::ObjectID.new
|
36
|
-
dumped = @type_class.dump(mongo_id.to_s, nil)
|
37
|
-
dumped.should be_kind_of(::Mongo::ObjectID)
|
38
|
-
dumped.to_s.should == mongo_id.to_s
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should return the argument when given a Mongo::ObjectID' do
|
42
|
-
mongo_id = ::Mongo::ObjectID.new
|
43
|
-
dumped = @type_class.dump(mongo_id, nil)
|
44
|
-
dumped.should == mongo_id
|
19
|
+
it 'should return the argument when given a BSON::ObjectId' do
|
20
|
+
mongo_id = ::BSON::ObjectId.new
|
21
|
+
loaded = @property.typecast(mongo_id)
|
22
|
+
loaded.should be(mongo_id)
|
45
23
|
end
|
46
24
|
|
47
25
|
it 'should raise an error when given anything else' do
|
48
26
|
[ 0, 1, Object.new, true, false, [], {} ].each do |value|
|
49
27
|
lambda {
|
50
|
-
@
|
28
|
+
@property.typecast(value)
|
51
29
|
}.should raise_error(ArgumentError)
|
52
30
|
end
|
53
31
|
end
|
54
32
|
end
|
55
|
-
|
56
33
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'pathname'
|
2
|
-
require 'rubygems'
|
3
2
|
require 'spec'
|
4
3
|
|
5
4
|
MONGO_SPEC_ROOT = Pathname(__FILE__).dirname.expand_path
|
@@ -31,9 +30,6 @@ Spec::Runner.configure do |config|
|
|
31
30
|
|
32
31
|
config.before(:all) do
|
33
32
|
models = DataMapper::Model.descendants.to_a
|
34
|
-
models += DataMapper::Mongo::EmbeddedModel.descendants.to_a
|
35
|
-
models.delete(DataMapper::Mongo::EmbeddedResource)
|
36
|
-
|
37
33
|
cleanup_models(*models)
|
38
34
|
end
|
39
35
|
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-mongo-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 2
|
8
|
-
- 0
|
9
|
-
- pre3
|
10
|
-
version: 0.2.0.pre3
|
4
|
+
prerelease:
|
5
|
+
version: 0.6.0
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Piotr Solnica
|
@@ -15,105 +10,108 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date:
|
13
|
+
date: 2011-03-19 00:00:00 +01:00
|
19
14
|
default_executable: console
|
20
15
|
dependencies:
|
21
16
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
23
|
-
prerelease: false
|
17
|
+
name: mongo
|
24
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
25
20
|
requirements:
|
26
21
|
- - ~>
|
27
22
|
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
- 10
|
31
|
-
- 2
|
32
|
-
version: 0.10.2
|
23
|
+
version: 1.2.4
|
33
24
|
type: :runtime
|
25
|
+
prerelease: false
|
34
26
|
version_requirements: *id001
|
35
27
|
- !ruby/object:Gem::Dependency
|
36
|
-
name: dm-
|
37
|
-
prerelease: false
|
28
|
+
name: dm-core
|
38
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
39
31
|
requirements:
|
40
32
|
- - ~>
|
41
33
|
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
- 0
|
44
|
-
- 10
|
45
|
-
- 2
|
46
|
-
version: 0.10.2
|
34
|
+
version: 1.1.0
|
47
35
|
type: :runtime
|
36
|
+
prerelease: false
|
48
37
|
version_requirements: *id002
|
49
38
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
51
|
-
prerelease: false
|
39
|
+
name: dm-aggregates
|
52
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
53
42
|
requirements:
|
54
43
|
- - ~>
|
55
44
|
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
- 0
|
58
|
-
- 18
|
59
|
-
- 3
|
60
|
-
version: 0.18.3
|
45
|
+
version: 1.1.0
|
61
46
|
type: :runtime
|
47
|
+
prerelease: false
|
62
48
|
version_requirements: *id003
|
63
49
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
65
|
-
prerelease: false
|
50
|
+
name: dm-migrations
|
66
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
67
53
|
requirements:
|
68
54
|
- - ~>
|
69
55
|
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
- 0
|
72
|
-
- 18
|
73
|
-
- 3
|
74
|
-
version: 0.18.3
|
56
|
+
version: 1.1.0
|
75
57
|
type: :runtime
|
58
|
+
prerelease: false
|
76
59
|
version_requirements: *id004
|
77
60
|
- !ruby/object:Gem::Dependency
|
78
|
-
name:
|
79
|
-
prerelease: false
|
61
|
+
name: rake
|
80
62
|
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
81
64
|
requirements:
|
82
65
|
- - ">="
|
83
66
|
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
- 1
|
86
|
-
- 3
|
87
|
-
- 0
|
88
|
-
version: 1.3.0
|
67
|
+
version: "0"
|
89
68
|
type: :development
|
69
|
+
prerelease: false
|
90
70
|
version_requirements: *id005
|
91
71
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
93
|
-
prerelease: false
|
72
|
+
name: rcov
|
94
73
|
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
95
75
|
requirements:
|
96
76
|
- - ">="
|
97
77
|
- !ruby/object:Gem::Version
|
98
|
-
|
99
|
-
- 0
|
100
|
-
- 5
|
101
|
-
version: "0.5"
|
78
|
+
version: "0"
|
102
79
|
type: :development
|
80
|
+
prerelease: false
|
103
81
|
version_requirements: *id006
|
104
82
|
- !ruby/object:Gem::Dependency
|
105
|
-
name:
|
106
|
-
prerelease: false
|
83
|
+
name: rspec
|
107
84
|
requirement: &id007 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
108
86
|
requirements:
|
109
|
-
- -
|
87
|
+
- - ~>
|
110
88
|
- !ruby/object:Gem::Version
|
111
|
-
|
112
|
-
- 0
|
113
|
-
- 1
|
114
|
-
version: "0.1"
|
89
|
+
version: "1.3"
|
115
90
|
type: :development
|
91
|
+
prerelease: false
|
116
92
|
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: jeweler
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ~>
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 1.5.1
|
101
|
+
type: :development
|
102
|
+
prerelease: false
|
103
|
+
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: yard
|
106
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: "0.5"
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: *id009
|
117
115
|
description:
|
118
116
|
email: piotr.solnica@gmail.com
|
119
117
|
executables:
|
@@ -125,7 +123,7 @@ extra_rdoc_files:
|
|
125
123
|
- README.rdoc
|
126
124
|
- TODO
|
127
125
|
files:
|
128
|
-
-
|
126
|
+
- Gemfile
|
129
127
|
- LICENSE
|
130
128
|
- README.rdoc
|
131
129
|
- Rakefile
|
@@ -136,115 +134,87 @@ files:
|
|
136
134
|
- lib/mongo_adapter/adapter.rb
|
137
135
|
- lib/mongo_adapter/aggregates.rb
|
138
136
|
- lib/mongo_adapter/conditions.rb
|
139
|
-
- lib/mongo_adapter/embedded_model.rb
|
140
|
-
- lib/mongo_adapter/embedded_resource.rb
|
141
|
-
- lib/mongo_adapter/embedments/one_to_many.rb
|
142
|
-
- lib/mongo_adapter/embedments/one_to_one.rb
|
143
|
-
- lib/mongo_adapter/embedments/relationship.rb
|
144
137
|
- lib/mongo_adapter/migrations.rb
|
145
138
|
- lib/mongo_adapter/model.rb
|
146
|
-
- lib/mongo_adapter/model/embedment.rb
|
147
139
|
- lib/mongo_adapter/modifier.rb
|
140
|
+
- lib/mongo_adapter/property/array.rb
|
141
|
+
- lib/mongo_adapter/property/db_ref.rb
|
142
|
+
- lib/mongo_adapter/property/hash.rb
|
143
|
+
- lib/mongo_adapter/property/object_id.rb
|
148
144
|
- lib/mongo_adapter/query.rb
|
149
145
|
- lib/mongo_adapter/query/java_script.rb
|
146
|
+
- lib/mongo_adapter/rails/storage.rb
|
150
147
|
- lib/mongo_adapter/resource.rb
|
151
|
-
- lib/mongo_adapter/
|
152
|
-
- lib/mongo_adapter/
|
153
|
-
- lib/mongo_adapter/
|
154
|
-
- lib/mongo_adapter/
|
155
|
-
- lib/mongo_adapter/types/object_id.rb
|
156
|
-
- lib/mongo_adapter/types/objects.rb
|
148
|
+
- lib/mongo_adapter/support/class.rb
|
149
|
+
- lib/mongo_adapter/support/date.rb
|
150
|
+
- lib/mongo_adapter/support/date_time.rb
|
151
|
+
- lib/mongo_adapter/support/object.rb
|
157
152
|
- script/performance.rb
|
158
153
|
- spec/legacy/README
|
159
154
|
- spec/legacy/adapter_shared_spec.rb
|
160
155
|
- spec/legacy/adapter_spec.rb
|
161
156
|
- spec/legacy/associations_spec.rb
|
162
|
-
- spec/legacy/embedded_resource_spec.rb
|
163
|
-
- spec/legacy/embedments_spec.rb
|
164
|
-
- spec/legacy/modifier_spec.rb
|
165
157
|
- spec/legacy/property_spec.rb
|
166
158
|
- spec/legacy/spec_helper.rb
|
167
159
|
- spec/legacy/sti_spec.rb
|
168
160
|
- spec/lib/cleanup_models.rb
|
169
161
|
- spec/lib/raw_connections.rb
|
170
|
-
- spec/public/
|
171
|
-
- spec/public/embedded_resource_spec.rb
|
172
|
-
- spec/public/model/embedment_spec.rb
|
162
|
+
- spec/public/aggregates_spec.rb
|
173
163
|
- spec/public/model_spec.rb
|
164
|
+
- spec/public/modifier_spec.rb
|
165
|
+
- spec/public/properties/db_ref_spec.rb
|
166
|
+
- spec/public/properties/object_id_spec.rb
|
174
167
|
- spec/public/resource_spec.rb
|
175
|
-
- spec/public/shared/model_embedments_spec.rb
|
176
168
|
- spec/public/shared/object_id_shared_spec.rb
|
177
|
-
- spec/public/types/df_ref_spec.rb
|
178
|
-
- spec/public/types/discriminator_spec.rb
|
179
|
-
- spec/public/types/embedded_array_spec.rb
|
180
|
-
- spec/public/types/embedded_hash_spec.rb
|
181
|
-
- spec/public/types/object_id_spec.rb
|
182
169
|
- spec/rcov.opts
|
183
|
-
- spec/semipublic/embedded_model_spec.rb
|
184
|
-
- spec/semipublic/model/embedment_spec.rb
|
185
|
-
- spec/semipublic/resource_spec.rb
|
186
170
|
- spec/spec.opts
|
187
171
|
- spec/spec_helper.rb
|
188
172
|
- tasks/spec.rake
|
189
173
|
- tasks/yard.rake
|
190
174
|
- tasks/yardstick.rake
|
175
|
+
- bin/console
|
191
176
|
has_rdoc: true
|
192
177
|
homepage: http://github.com/solnic/dm-mongo-adapter
|
193
178
|
licenses: []
|
194
179
|
|
195
180
|
post_install_message:
|
196
|
-
rdoc_options:
|
197
|
-
|
181
|
+
rdoc_options: []
|
182
|
+
|
198
183
|
require_paths:
|
199
184
|
- lib
|
200
185
|
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
+
none: false
|
201
187
|
requirements:
|
202
188
|
- - ">="
|
203
189
|
- !ruby/object:Gem::Version
|
204
|
-
segments:
|
205
|
-
- 0
|
206
190
|
version: "0"
|
207
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
|
+
none: false
|
208
193
|
requirements:
|
209
|
-
- - "
|
194
|
+
- - ">="
|
210
195
|
- !ruby/object:Gem::Version
|
211
|
-
|
212
|
-
- 1
|
213
|
-
- 3
|
214
|
-
- 1
|
215
|
-
version: 1.3.1
|
196
|
+
version: "0"
|
216
197
|
requirements: []
|
217
198
|
|
218
199
|
rubyforge_project:
|
219
|
-
rubygems_version: 1.
|
200
|
+
rubygems_version: 1.6.2
|
220
201
|
signing_key:
|
221
202
|
specification_version: 3
|
222
203
|
summary: MongoDB DataMapper Adapter
|
223
204
|
test_files:
|
224
|
-
- spec/semipublic/model/embedment_spec.rb
|
225
|
-
- spec/semipublic/resource_spec.rb
|
226
|
-
- spec/semipublic/embedded_model_spec.rb
|
227
|
-
- spec/public/types/discriminator_spec.rb
|
228
|
-
- spec/public/types/df_ref_spec.rb
|
229
|
-
- spec/public/types/embedded_hash_spec.rb
|
230
|
-
- spec/public/types/object_id_spec.rb
|
231
|
-
- spec/public/types/embedded_array_spec.rb
|
232
|
-
- spec/public/model/embedment_spec.rb
|
233
|
-
- spec/public/resource_spec.rb
|
234
|
-
- spec/public/shared/object_id_shared_spec.rb
|
235
|
-
- spec/public/shared/model_embedments_spec.rb
|
236
|
-
- spec/public/embedded_resource_spec.rb
|
237
|
-
- spec/public/embedded_collection_spec.rb
|
238
|
-
- spec/public/model_spec.rb
|
239
|
-
- spec/legacy/property_spec.rb
|
240
|
-
- spec/legacy/associations_spec.rb
|
241
|
-
- spec/legacy/modifier_spec.rb
|
242
205
|
- spec/legacy/adapter_shared_spec.rb
|
243
|
-
- spec/legacy/embedded_resource_spec.rb
|
244
|
-
- spec/legacy/sti_spec.rb
|
245
|
-
- spec/legacy/embedments_spec.rb
|
246
206
|
- spec/legacy/adapter_spec.rb
|
207
|
+
- spec/legacy/associations_spec.rb
|
208
|
+
- spec/legacy/property_spec.rb
|
247
209
|
- spec/legacy/spec_helper.rb
|
248
|
-
- spec/
|
210
|
+
- spec/legacy/sti_spec.rb
|
249
211
|
- spec/lib/cleanup_models.rb
|
250
212
|
- spec/lib/raw_connections.rb
|
213
|
+
- spec/public/aggregates_spec.rb
|
214
|
+
- spec/public/model_spec.rb
|
215
|
+
- spec/public/modifier_spec.rb
|
216
|
+
- spec/public/properties/db_ref_spec.rb
|
217
|
+
- spec/public/properties/object_id_spec.rb
|
218
|
+
- spec/public/resource_spec.rb
|
219
|
+
- spec/public/shared/object_id_shared_spec.rb
|
220
|
+
- spec/spec_helper.rb
|
data/.gitignore
DELETED
@@ -1,187 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Mongo
|
3
|
-
module EmbeddedModel
|
4
|
-
extend Chainable
|
5
|
-
include DataMapper::Model
|
6
|
-
|
7
|
-
# Creates a new Model class with default_storage_name +storage_name+
|
8
|
-
#
|
9
|
-
# If a block is passed, it will be eval'd in the context of the new Model
|
10
|
-
#
|
11
|
-
# @param [Proc] block
|
12
|
-
# a block that will be eval'd in the context of the new Model class
|
13
|
-
#
|
14
|
-
# @return [Model]
|
15
|
-
# the newly created Model class
|
16
|
-
#
|
17
|
-
# @api semipublic
|
18
|
-
def self.new(&block)
|
19
|
-
model = Class.new
|
20
|
-
|
21
|
-
model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
22
|
-
include DataMapper::Mongo::EmbeddedResource
|
23
|
-
|
24
|
-
def self.name
|
25
|
-
to_s
|
26
|
-
end
|
27
|
-
RUBY
|
28
|
-
|
29
|
-
model.instance_eval(&block) if block
|
30
|
-
model
|
31
|
-
end
|
32
|
-
|
33
|
-
# Methods copied from DataMapper::Model
|
34
|
-
|
35
|
-
# Return all models that extend the Model module
|
36
|
-
#
|
37
|
-
# class Foo
|
38
|
-
# include DataMapper::Resource
|
39
|
-
# end
|
40
|
-
#
|
41
|
-
# DataMapper::Model.descendants.first #=> Foo
|
42
|
-
#
|
43
|
-
# @return [DescendantSet]
|
44
|
-
# Set containing the descendant models
|
45
|
-
#
|
46
|
-
# @api semipublic
|
47
|
-
def self.descendants
|
48
|
-
@descendants ||= DescendantSet.new
|
49
|
-
end
|
50
|
-
|
51
|
-
# Return all models that inherit from a Model
|
52
|
-
#
|
53
|
-
# class Foo
|
54
|
-
# include DataMapper::Resource
|
55
|
-
# end
|
56
|
-
#
|
57
|
-
# class Bar < Foo
|
58
|
-
# end
|
59
|
-
#
|
60
|
-
# Foo.descendants.first #=> Bar
|
61
|
-
#
|
62
|
-
# @return [Set]
|
63
|
-
# Set containing the descendant classes
|
64
|
-
#
|
65
|
-
# @api semipublic
|
66
|
-
attr_reader :descendants
|
67
|
-
|
68
|
-
# Appends a module for inclusion into the model class after Resource.
|
69
|
-
#
|
70
|
-
# This is a useful way to extend Resource while still retaining a
|
71
|
-
# self.included method.
|
72
|
-
#
|
73
|
-
# @param [Module] inclusions
|
74
|
-
# the module that is to be appended to the module after Resource
|
75
|
-
#
|
76
|
-
# @return [Boolean]
|
77
|
-
# true if the inclusions have been successfully appended to the list
|
78
|
-
#
|
79
|
-
# @api semipublic
|
80
|
-
def self.append_inclusions(*inclusions)
|
81
|
-
extra_inclusions.concat inclusions
|
82
|
-
|
83
|
-
# Add the inclusion to existing descendants
|
84
|
-
descendants.each do |model|
|
85
|
-
inclusions.each { |inclusion| model.send :include, inclusion }
|
86
|
-
end
|
87
|
-
|
88
|
-
true
|
89
|
-
end
|
90
|
-
|
91
|
-
# The current registered extra inclusions
|
92
|
-
#
|
93
|
-
# @return [Set]
|
94
|
-
#
|
95
|
-
# @api private
|
96
|
-
def self.extra_inclusions
|
97
|
-
@extra_inclusions ||= []
|
98
|
-
end
|
99
|
-
|
100
|
-
# Extends the model with this module after Resource has been included.
|
101
|
-
#
|
102
|
-
# This is a useful way to extend Model while still retaining a self.extended method.
|
103
|
-
#
|
104
|
-
# @param [Module] extensions
|
105
|
-
# List of modules that will extend the model after it is extended by Model
|
106
|
-
#
|
107
|
-
# @return [Boolean]
|
108
|
-
# whether or not the inclusions have been successfully appended to the list
|
109
|
-
#
|
110
|
-
# @api semipublic
|
111
|
-
def self.append_extensions(*extensions)
|
112
|
-
extra_extensions.concat extensions
|
113
|
-
|
114
|
-
# Add the extension to existing descendants
|
115
|
-
descendants.each do |model|
|
116
|
-
extensions.each { |extension| model.extend(extension) }
|
117
|
-
end
|
118
|
-
|
119
|
-
true
|
120
|
-
end
|
121
|
-
|
122
|
-
# The current registered extra extensions
|
123
|
-
#
|
124
|
-
# @return [Set]
|
125
|
-
#
|
126
|
-
# @api private
|
127
|
-
def self.extra_extensions
|
128
|
-
@extra_extensions ||= []
|
129
|
-
end
|
130
|
-
|
131
|
-
# @api private
|
132
|
-
def self.extended(model)
|
133
|
-
descendants = self.descendants
|
134
|
-
|
135
|
-
descendants << model
|
136
|
-
|
137
|
-
model.instance_variable_set(:@valid, false)
|
138
|
-
model.instance_variable_set(:@base_model, model)
|
139
|
-
model.instance_variable_set(:@storage_names, {})
|
140
|
-
model.instance_variable_set(:@default_order, {})
|
141
|
-
model.instance_variable_set(:@descendants, descendants.class.new(model, descendants))
|
142
|
-
|
143
|
-
extra_extensions.each { |mod| model.extend(mod) }
|
144
|
-
extra_inclusions.each { |mod| model.send(:include, mod) }
|
145
|
-
end
|
146
|
-
|
147
|
-
# @api private
|
148
|
-
chainable do
|
149
|
-
def inherited(model)
|
150
|
-
descendants = self.descendants
|
151
|
-
|
152
|
-
descendants << model
|
153
|
-
|
154
|
-
model.instance_variable_set(:@valid, false)
|
155
|
-
model.instance_variable_set(:@base_model, base_model)
|
156
|
-
model.instance_variable_set(:@storage_names, @storage_names.dup)
|
157
|
-
model.instance_variable_set(:@default_order, @default_order.dup)
|
158
|
-
model.instance_variable_set(:@descendants, descendants.class.new(model, descendants))
|
159
|
-
|
160
|
-
# TODO: move this into dm-validations
|
161
|
-
if respond_to?(:validators)
|
162
|
-
validators.contexts.each do |context, validators|
|
163
|
-
model.validators.context(context).concat(validators)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
# end of DataMapper::Model methods
|
170
|
-
|
171
|
-
append_extensions DataMapper::Model::Hook
|
172
|
-
append_extensions DataMapper::Model::Property
|
173
|
-
append_extensions DataMapper::Model::Relationship
|
174
|
-
|
175
|
-
# @overrides DataMapper::Model#assert_valid
|
176
|
-
def assert_valid
|
177
|
-
return if @valid
|
178
|
-
@valid = true
|
179
|
-
|
180
|
-
if properties.empty?
|
181
|
-
raise IncompleteModelError, "#{self.name} must have at least one property to be valid"
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
end # EmbeddedModel
|
186
|
-
end # Mongo
|
187
|
-
end # DataMapper
|