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.
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