dm-mongo-adapter 0.2.0.pre3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/Gemfile +27 -0
  2. data/README.rdoc +16 -35
  3. data/Rakefile +6 -16
  4. data/VERSION.yml +2 -2
  5. data/dm-mongo-adapter.gemspec +100 -121
  6. data/lib/mongo_adapter.rb +19 -62
  7. data/lib/mongo_adapter/adapter.rb +49 -36
  8. data/lib/mongo_adapter/conditions.rb +0 -5
  9. data/lib/mongo_adapter/migrations.rb +17 -23
  10. data/lib/mongo_adapter/model.rb +3 -74
  11. data/lib/mongo_adapter/modifier.rb +1 -1
  12. data/lib/mongo_adapter/property/array.rb +10 -0
  13. data/lib/mongo_adapter/property/db_ref.rb +17 -0
  14. data/lib/mongo_adapter/property/hash.rb +27 -0
  15. data/lib/mongo_adapter/property/object_id.rb +47 -0
  16. data/lib/mongo_adapter/query.rb +42 -45
  17. data/lib/mongo_adapter/rails/storage.rb +15 -0
  18. data/lib/mongo_adapter/resource.rb +0 -130
  19. data/lib/mongo_adapter/support/class.rb +11 -0
  20. data/lib/mongo_adapter/support/date.rb +11 -0
  21. data/lib/mongo_adapter/support/date_time.rb +12 -0
  22. data/lib/mongo_adapter/support/object.rb +9 -0
  23. data/spec/legacy/adapter_spec.rb +9 -6
  24. data/spec/legacy/associations_spec.rb +37 -29
  25. data/spec/legacy/property_spec.rb +4 -3
  26. data/spec/legacy/sti_spec.rb +1 -2
  27. data/spec/lib/cleanup_models.rb +0 -1
  28. data/spec/public/aggregates_spec.rb +171 -0
  29. data/spec/public/model_spec.rb +8 -22
  30. data/spec/public/modifier_spec.rb +109 -0
  31. data/spec/public/properties/db_ref_spec.rb +17 -0
  32. data/spec/public/properties/object_id_spec.rb +15 -0
  33. data/spec/public/resource_spec.rb +2 -383
  34. data/spec/public/shared/object_id_shared_spec.rb +16 -39
  35. data/spec/spec_helper.rb +0 -4
  36. metadata +87 -117
  37. data/.gitignore +0 -9
  38. data/lib/mongo_adapter/embedded_model.rb +0 -187
  39. data/lib/mongo_adapter/embedded_resource.rb +0 -134
  40. data/lib/mongo_adapter/embedments/one_to_many.rb +0 -144
  41. data/lib/mongo_adapter/embedments/one_to_one.rb +0 -57
  42. data/lib/mongo_adapter/embedments/relationship.rb +0 -258
  43. data/lib/mongo_adapter/model/embedment.rb +0 -215
  44. data/lib/mongo_adapter/types/date.rb +0 -24
  45. data/lib/mongo_adapter/types/date_time.rb +0 -28
  46. data/lib/mongo_adapter/types/db_ref.rb +0 -65
  47. data/lib/mongo_adapter/types/discriminator.rb +0 -32
  48. data/lib/mongo_adapter/types/object_id.rb +0 -72
  49. data/lib/mongo_adapter/types/objects.rb +0 -31
  50. data/spec/legacy/embedded_resource_spec.rb +0 -157
  51. data/spec/legacy/embedments_spec.rb +0 -177
  52. data/spec/legacy/modifier_spec.rb +0 -81
  53. data/spec/public/embedded_collection_spec.rb +0 -61
  54. data/spec/public/embedded_resource_spec.rb +0 -220
  55. data/spec/public/model/embedment_spec.rb +0 -186
  56. data/spec/public/shared/model_embedments_spec.rb +0 -338
  57. data/spec/public/types/df_ref_spec.rb +0 -6
  58. data/spec/public/types/discriminator_spec.rb +0 -118
  59. data/spec/public/types/embedded_array_spec.rb +0 -55
  60. data/spec/public/types/embedded_hash_spec.rb +0 -83
  61. data/spec/public/types/object_id_spec.rb +0 -6
  62. data/spec/semipublic/embedded_model_spec.rb +0 -43
  63. data/spec/semipublic/model/embedment_spec.rb +0 -42
  64. data/spec/semipublic/resource_spec.rb +0 -70
@@ -1,56 +1,33 @@
1
- share_examples_for 'An ObjectID Type' do
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
- @type_class.load(nil, nil).should be_nil
4
+ @property.typecast(nil).should be_nil
6
5
  end
7
6
 
8
- it 'should return the argument when given a string' do
9
- loaded = @type_class.load('avalue', nil)
10
- loaded.should == 'avalue'
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 return a string when given a Mongo::ObjectID' do
14
- mongo_id = ::Mongo::ObjectID.new
15
- loaded = @type_class.load(mongo_id, nil)
16
- loaded.should be_kind_of(String)
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 raise an error when given anything else' do
21
- [ 0, 1, Object.new, true, false, [], {} ].each do |value|
22
- lambda {
23
- @type_class.load(value, nil)
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
- @type_class.dump(value, nil)
28
+ @property.typecast(value)
51
29
  }.should raise_error(ArgumentError)
52
30
  end
53
31
  end
54
32
  end
55
-
56
33
  end
@@ -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: true
5
- segments:
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: 2010-02-22 00:00:00 +01:00
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: dm-core
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
- segments:
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-aggregates
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
- segments:
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: mongo
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
- segments:
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: mongo_ext
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
- segments:
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: rspec
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
- segments:
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: yard
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
- segments:
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: yardstick
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
- segments:
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
- - .gitignore
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/types/date.rb
152
- - lib/mongo_adapter/types/date_time.rb
153
- - lib/mongo_adapter/types/db_ref.rb
154
- - lib/mongo_adapter/types/discriminator.rb
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/embedded_collection_spec.rb
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
- - --charset=UTF-8
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
- segments:
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.3.6
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/spec_helper.rb
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,9 +0,0 @@
1
- *.sw?
2
- .DS_Store
3
- .yardoc
4
- coverage
5
- doc
6
- measurements
7
- pkg
8
- rdoc
9
- script/dumps
@@ -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