dm-mongo-adapter 0.2.0.pre1

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 (65) hide show
  1. data/.gitignore +9 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +130 -0
  4. data/Rakefile +36 -0
  5. data/TODO +33 -0
  6. data/VERSION.yml +5 -0
  7. data/bin/console +31 -0
  8. data/dm-mongo-adapter.gemspec +154 -0
  9. data/lib/mongo_adapter.rb +71 -0
  10. data/lib/mongo_adapter/adapter.rb +255 -0
  11. data/lib/mongo_adapter/aggregates.rb +21 -0
  12. data/lib/mongo_adapter/conditions.rb +100 -0
  13. data/lib/mongo_adapter/embedded_model.rb +187 -0
  14. data/lib/mongo_adapter/embedded_resource.rb +134 -0
  15. data/lib/mongo_adapter/embedments/one_to_many.rb +139 -0
  16. data/lib/mongo_adapter/embedments/one_to_one.rb +53 -0
  17. data/lib/mongo_adapter/embedments/relationship.rb +258 -0
  18. data/lib/mongo_adapter/migrations.rb +45 -0
  19. data/lib/mongo_adapter/model.rb +89 -0
  20. data/lib/mongo_adapter/model/embedment.rb +215 -0
  21. data/lib/mongo_adapter/modifier.rb +85 -0
  22. data/lib/mongo_adapter/query.rb +252 -0
  23. data/lib/mongo_adapter/query/java_script.rb +145 -0
  24. data/lib/mongo_adapter/resource.rb +147 -0
  25. data/lib/mongo_adapter/types/date.rb +28 -0
  26. data/lib/mongo_adapter/types/date_time.rb +28 -0
  27. data/lib/mongo_adapter/types/db_ref.rb +65 -0
  28. data/lib/mongo_adapter/types/discriminator.rb +32 -0
  29. data/lib/mongo_adapter/types/object_id.rb +72 -0
  30. data/lib/mongo_adapter/types/objects.rb +31 -0
  31. data/script/performance.rb +260 -0
  32. data/spec/legacy/README +6 -0
  33. data/spec/legacy/adapter_shared_spec.rb +299 -0
  34. data/spec/legacy/adapter_spec.rb +174 -0
  35. data/spec/legacy/associations_spec.rb +140 -0
  36. data/spec/legacy/embedded_resource_spec.rb +157 -0
  37. data/spec/legacy/embedments_spec.rb +177 -0
  38. data/spec/legacy/modifier_spec.rb +81 -0
  39. data/spec/legacy/property_spec.rb +51 -0
  40. data/spec/legacy/spec_helper.rb +3 -0
  41. data/spec/legacy/sti_spec.rb +53 -0
  42. data/spec/lib/cleanup_models.rb +32 -0
  43. data/spec/lib/raw_connections.rb +11 -0
  44. data/spec/public/embedded_collection_spec.rb +61 -0
  45. data/spec/public/embedded_resource_spec.rb +220 -0
  46. data/spec/public/model/embedment_spec.rb +186 -0
  47. data/spec/public/model_spec.rb +37 -0
  48. data/spec/public/resource_spec.rb +564 -0
  49. data/spec/public/shared/model_embedments_spec.rb +338 -0
  50. data/spec/public/shared/object_id_shared_spec.rb +56 -0
  51. data/spec/public/types/df_ref_spec.rb +6 -0
  52. data/spec/public/types/discriminator_spec.rb +118 -0
  53. data/spec/public/types/embedded_array_spec.rb +55 -0
  54. data/spec/public/types/embedded_hash_spec.rb +83 -0
  55. data/spec/public/types/object_id_spec.rb +6 -0
  56. data/spec/rcov.opts +6 -0
  57. data/spec/semipublic/embedded_model_spec.rb +43 -0
  58. data/spec/semipublic/model/embedment_spec.rb +42 -0
  59. data/spec/semipublic/resource_spec.rb +70 -0
  60. data/spec/spec.opts +4 -0
  61. data/spec/spec_helper.rb +45 -0
  62. data/tasks/spec.rake +37 -0
  63. data/tasks/yard.rake +9 -0
  64. data/tasks/yardstick.rake +21 -0
  65. metadata +215 -0
@@ -0,0 +1,9 @@
1
+ *.sw?
2
+ .DS_Store
3
+ .yardoc
4
+ coverage
5
+ doc
6
+ measurements
7
+ pkg
8
+ rdoc
9
+ script/dumps
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 "Shane Hanna", 2009-2010 "Piotr Solnica"
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,130 @@
1
+ = DataMapper MongoDB Adapter
2
+
3
+ Useful links:
4
+
5
+ * http://github.com/solnic/dm-mongo-adapter
6
+ * http://groups.google.com/group/dm-mongo-adapter
7
+ * http://rdoc.info/projects/solnic/dm-mongo-adapter
8
+
9
+ == Dependencies
10
+
11
+ Ruby gems
12
+
13
+ * dm-core ~> 0.10.2
14
+ * dm-aggregates ~> 0.10.2
15
+ * mongo ~> 0.18.3
16
+
17
+ == Install
18
+
19
+ gem install dm-mongo-adapter --pre
20
+
21
+ == Synopsis
22
+
23
+ DataMapper.setup(:default,
24
+ :adapter => 'mongo',
25
+ :database => 'my_mongo_db',
26
+ )
27
+
28
+ # Define embedded resources
29
+ class Address
30
+ include DataMapper::Mongo::EmbeddedResource
31
+
32
+ property :street, String
33
+ property :city, String
34
+ property :state, String
35
+ property :postal_code, String
36
+ end
37
+
38
+ class Score
39
+ include DataMapper::Mongo::EmbeddedResource
40
+
41
+ property :grade, Float
42
+ property :course_id, DBRef
43
+
44
+ belongs_to :course
45
+ end
46
+
47
+ # Define top-level resources
48
+ class Student
49
+ include DataMapper::Mongo::Resource
50
+
51
+ property :id, ObjectID
52
+ property :name, String
53
+ property :age, Integer
54
+
55
+ embeds 1, :address, :model => Address
56
+ embeds n, :scores
57
+ end
58
+
59
+ class Course
60
+ include DataMapper::Mongo::Resource
61
+
62
+ property :id, ObjectID
63
+ property :name, String
64
+ end
65
+
66
+ # No need to (auto_)migrate!
67
+ biology = Course.create(:name => "Biology")
68
+ english = Course.create(:name => "English")
69
+
70
+ # Nested attributes
71
+ student = Student.create(:name => "John", :age => "26",
72
+ :address => { :street => "123 Main St.", :city => "New York", :state => "NY", :postal_code => "10014" },
73
+ :scores => [ { :grade => 4.0, :course_id => biology.id }, { :grade => 3.0, :course_id => english.id } ])
74
+
75
+ # Queries
76
+ Student.all(:age.gte => 20, :name => /oh/, :limit => 20, :order => [:age.asc])
77
+
78
+ # Reaching into embedded objects
79
+ Student.all(:"address.state" => "NY")
80
+
81
+ # Array and Hash as a property
82
+ class Zoo
83
+ include DataMapper::Mongo::Resource
84
+
85
+ property :id, ObjectID
86
+ property :opening_hours, Hash
87
+ property :animals, Array
88
+ end
89
+
90
+ Zoo.create(
91
+ :opening_hours => { :weekend => '9am-8pm', :weekdays => '11am-8pm' },
92
+ :animals => [ "Marty", "Alex", "Gloria" ])
93
+
94
+ Zoo.all(:animals => 'Alex')
95
+
96
+ == DataMapper plugins
97
+
98
+ Currently the adapter works with:
99
+
100
+ 1. dm-timestamps
101
+ 2. dm-validations
102
+ 3. dm-aggregates
103
+ 4. dm-pager
104
+ 5. dm-serializer
105
+ 6. dm-types
106
+
107
+ and expect more of course :)
108
+
109
+ == Authors and contributors
110
+
111
+ The adapter has been originally written by Shane Hanna (shanna). Project is currently maintained by Piotr Solnica (solnic).
112
+
113
+ Contributors:
114
+
115
+ * Anthony Williams (antw)
116
+ * Lance Carlson (lancecarlson)
117
+
118
+ == Note on Patches/Pull Requests
119
+
120
+ * Fork the project.
121
+ * Make your feature addition or bug fix.
122
+ * Add tests for it. This is important so I don't break it in a
123
+ future version unintentionally.
124
+ * Commit, do not mess with rakefile, version, or history.
125
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
126
+ * Send me a pull request. Bonus points for topic branches.
127
+
128
+ == Copyright
129
+
130
+ Copyright (c) 2009 "Shane Hanna", 2009-2010 "Piotr Solnica". See LICENSE for details.
@@ -0,0 +1,36 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+
5
+ CLOBBER.include ['pkg', '*.gem', 'doc', 'coverage', 'measurements']
6
+
7
+ begin
8
+ require 'jeweler'
9
+ Jeweler::Tasks.new do |gem|
10
+ gem.name = 'dm-mongo-adapter'
11
+ gem.summary = 'MongoDB DataMapper Adapter'
12
+ gem.email = "piotr.solnica@gmail.com"
13
+ gem.homepage = "http://github.com/solnic/dm-mongo-adapter"
14
+ gem.authors = ['Piotr Solnica']
15
+
16
+ gem.has_rdoc = false
17
+
18
+ # Dependencies
19
+ gem.add_dependency 'dm-core', '~> 0.10.2'
20
+ gem.add_dependency 'dm-aggregates', '~> 0.10.2'
21
+ gem.add_dependency 'mongo', '~> 0.18.3'
22
+ gem.add_dependency 'mongo_ext', '~> 0.18.3'
23
+ gem.add_development_dependency 'rspec', '>= 1.3.0'
24
+ gem.add_development_dependency 'yard', '>= 0.5'
25
+ gem.add_development_dependency 'yardstick', '>= 0.1'
26
+ end
27
+ Jeweler::GemcutterTasks.new
28
+ FileList['tasks/**/*.rake'].each { |task| import task }
29
+ rescue LoadError
30
+ puts 'Jeweler (or a dependency) not available. Install it with: sudo gem ' \
31
+ 'install jeweler'
32
+ end
33
+
34
+ task :install_fast do
35
+ sh "rake build; gem install pkg/dm-mongo-adapter*.gem --local"
36
+ end
data/TODO ADDED
@@ -0,0 +1,33 @@
1
+ Add support for:
2
+
3
+ - distinct function: http://www.mongodb.org/display/DOCS/Aggregation
4
+
5
+ - modifier functions: http://www.mongodb.org/display/DOCS/Updating
6
+
7
+ - declaring indexes: http://www.mongodb.org/display/DOCS/Indexes
8
+
9
+ User.index :foo
10
+
11
+ - embeds n, :resources - the work has been started but it's not finished yet
12
+
13
+ General stuff:
14
+
15
+ - figure out why DataMapper::Model::Hook and DataMapper::Validate need to be explicitly included on EmbeddedResource
16
+
17
+ - embeded resources within embedded resources
18
+
19
+ - figure out how to include the shared adapter spec from dm-core and overwrite Heffalump model so it will work fine
20
+
21
+ - organize specs in groups (public/semipublic like in dm-core maybe?)
22
+
23
+ - improve test coverage, especially for embedded resources and handling of custom types
24
+
25
+ - update README
26
+
27
+ - clean up and document the code
28
+
29
+ - write a basic tutorial
30
+
31
+ And a big one:
32
+
33
+ figure out what needs to be improved in dm-core so there won't be a need to override its private API :)
@@ -0,0 +1,5 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 2
4
+ :patch: 0
5
+ :build: pre1
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
4
+
5
+ require 'irb'
6
+ require 'rubygems'
7
+ require 'dm-core'
8
+
9
+ IRB.setup(nil)
10
+ irb = IRB::Irb.new
11
+
12
+ IRB.conf[:MAIN_CONTEXT] = irb.context
13
+
14
+ irb.context.evaluate("require 'irb/completion'", 0)
15
+ irb.context.evaluate(%(
16
+ DataMapper.setup(:default,
17
+ :adapter => 'mongo',
18
+ :hostname => 'localhost',
19
+ :database => 'dm-mongo-test'
20
+ )
21
+
22
+ db = Mongo::Connection.new.db('dm-mongo-test')
23
+ ), 0)
24
+
25
+ trap("SIGINT") do
26
+ irb.signal_handle
27
+ end
28
+
29
+ catch(:IRB_EXIT) do
30
+ irb.eval_input
31
+ end
@@ -0,0 +1,154 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{dm-mongo-adapter}
8
+ s.version = "0.2.0.pre1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Piotr Solnica"]
12
+ s.date = %q{2010-01-31}
13
+ s.default_executable = %q{console}
14
+ s.email = %q{piotr.solnica@gmail.com}
15
+ s.executables = ["console"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE",
18
+ "README.rdoc",
19
+ "TODO"
20
+ ]
21
+ s.files = [
22
+ ".gitignore",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "TODO",
27
+ "VERSION.yml",
28
+ "bin/console",
29
+ "dm-mongo-adapter.gemspec",
30
+ "lib/mongo_adapter.rb",
31
+ "lib/mongo_adapter/adapter.rb",
32
+ "lib/mongo_adapter/aggregates.rb",
33
+ "lib/mongo_adapter/conditions.rb",
34
+ "lib/mongo_adapter/embedded_model.rb",
35
+ "lib/mongo_adapter/embedded_resource.rb",
36
+ "lib/mongo_adapter/embedments/one_to_many.rb",
37
+ "lib/mongo_adapter/embedments/one_to_one.rb",
38
+ "lib/mongo_adapter/embedments/relationship.rb",
39
+ "lib/mongo_adapter/migrations.rb",
40
+ "lib/mongo_adapter/model.rb",
41
+ "lib/mongo_adapter/model/embedment.rb",
42
+ "lib/mongo_adapter/modifier.rb",
43
+ "lib/mongo_adapter/query.rb",
44
+ "lib/mongo_adapter/query/java_script.rb",
45
+ "lib/mongo_adapter/resource.rb",
46
+ "lib/mongo_adapter/types/date.rb",
47
+ "lib/mongo_adapter/types/date_time.rb",
48
+ "lib/mongo_adapter/types/db_ref.rb",
49
+ "lib/mongo_adapter/types/discriminator.rb",
50
+ "lib/mongo_adapter/types/object_id.rb",
51
+ "lib/mongo_adapter/types/objects.rb",
52
+ "script/performance.rb",
53
+ "spec/legacy/README",
54
+ "spec/legacy/adapter_shared_spec.rb",
55
+ "spec/legacy/adapter_spec.rb",
56
+ "spec/legacy/associations_spec.rb",
57
+ "spec/legacy/embedded_resource_spec.rb",
58
+ "spec/legacy/embedments_spec.rb",
59
+ "spec/legacy/modifier_spec.rb",
60
+ "spec/legacy/property_spec.rb",
61
+ "spec/legacy/spec_helper.rb",
62
+ "spec/legacy/sti_spec.rb",
63
+ "spec/lib/cleanup_models.rb",
64
+ "spec/lib/raw_connections.rb",
65
+ "spec/public/embedded_collection_spec.rb",
66
+ "spec/public/embedded_resource_spec.rb",
67
+ "spec/public/model/embedment_spec.rb",
68
+ "spec/public/model_spec.rb",
69
+ "spec/public/resource_spec.rb",
70
+ "spec/public/shared/model_embedments_spec.rb",
71
+ "spec/public/shared/object_id_shared_spec.rb",
72
+ "spec/public/types/df_ref_spec.rb",
73
+ "spec/public/types/discriminator_spec.rb",
74
+ "spec/public/types/embedded_array_spec.rb",
75
+ "spec/public/types/embedded_hash_spec.rb",
76
+ "spec/public/types/object_id_spec.rb",
77
+ "spec/rcov.opts",
78
+ "spec/semipublic/embedded_model_spec.rb",
79
+ "spec/semipublic/model/embedment_spec.rb",
80
+ "spec/semipublic/resource_spec.rb",
81
+ "spec/spec.opts",
82
+ "spec/spec_helper.rb",
83
+ "tasks/spec.rake",
84
+ "tasks/yard.rake",
85
+ "tasks/yardstick.rake"
86
+ ]
87
+ s.has_rdoc = false
88
+ s.homepage = %q{http://github.com/solnic/dm-mongo-adapter}
89
+ s.rdoc_options = ["--charset=UTF-8"]
90
+ s.require_paths = ["lib"]
91
+ s.rubygems_version = %q{1.3.5}
92
+ s.summary = %q{MongoDB DataMapper Adapter}
93
+ s.test_files = [
94
+ "spec/semipublic/model/embedment_spec.rb",
95
+ "spec/semipublic/resource_spec.rb",
96
+ "spec/semipublic/embedded_model_spec.rb",
97
+ "spec/spec_helper.rb",
98
+ "spec/legacy/sti_spec.rb",
99
+ "spec/legacy/property_spec.rb",
100
+ "spec/legacy/modifier_spec.rb",
101
+ "spec/legacy/adapter_spec.rb",
102
+ "spec/legacy/spec_helper.rb",
103
+ "spec/legacy/embedments_spec.rb",
104
+ "spec/legacy/adapter_shared_spec.rb",
105
+ "spec/legacy/associations_spec.rb",
106
+ "spec/legacy/embedded_resource_spec.rb",
107
+ "spec/public/embedded_collection_spec.rb",
108
+ "spec/public/model_spec.rb",
109
+ "spec/public/model/embedment_spec.rb",
110
+ "spec/public/shared/model_embedments_spec.rb",
111
+ "spec/public/shared/object_id_shared_spec.rb",
112
+ "spec/public/resource_spec.rb",
113
+ "spec/public/types/discriminator_spec.rb",
114
+ "spec/public/types/embedded_hash_spec.rb",
115
+ "spec/public/types/embedded_array_spec.rb",
116
+ "spec/public/types/df_ref_spec.rb",
117
+ "spec/public/types/object_id_spec.rb",
118
+ "spec/public/embedded_resource_spec.rb",
119
+ "spec/lib/cleanup_models.rb",
120
+ "spec/lib/raw_connections.rb"
121
+ ]
122
+
123
+ if s.respond_to? :specification_version then
124
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
125
+ s.specification_version = 3
126
+
127
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
128
+ s.add_runtime_dependency(%q<dm-core>, ["~> 0.10.2"])
129
+ s.add_runtime_dependency(%q<dm-aggregates>, ["~> 0.10.2"])
130
+ s.add_runtime_dependency(%q<mongo>, ["~> 0.18.3"])
131
+ s.add_runtime_dependency(%q<mongo_ext>, ["~> 0.18.3"])
132
+ s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
133
+ s.add_development_dependency(%q<yard>, [">= 0.5"])
134
+ s.add_development_dependency(%q<yardstick>, [">= 0.1"])
135
+ else
136
+ s.add_dependency(%q<dm-core>, ["~> 0.10.2"])
137
+ s.add_dependency(%q<dm-aggregates>, ["~> 0.10.2"])
138
+ s.add_dependency(%q<mongo>, ["~> 0.18.3"])
139
+ s.add_dependency(%q<mongo_ext>, ["~> 0.18.3"])
140
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
141
+ s.add_dependency(%q<yard>, [">= 0.5"])
142
+ s.add_dependency(%q<yardstick>, [">= 0.1"])
143
+ end
144
+ else
145
+ s.add_dependency(%q<dm-core>, ["~> 0.10.2"])
146
+ s.add_dependency(%q<dm-aggregates>, ["~> 0.10.2"])
147
+ s.add_dependency(%q<mongo>, ["~> 0.18.3"])
148
+ s.add_dependency(%q<mongo_ext>, ["~> 0.18.3"])
149
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
150
+ s.add_dependency(%q<yard>, [">= 0.5"])
151
+ s.add_dependency(%q<yardstick>, [">= 0.1"])
152
+ end
153
+ end
154
+
@@ -0,0 +1,71 @@
1
+ if defined?(gem)
2
+ gem 'dm-core', '~> 0.10.2'
3
+ gem 'mongo', '~> 0.18'
4
+ end
5
+
6
+ require 'dm-core'
7
+ require 'dm-aggregates'
8
+ require 'mongo'
9
+
10
+ dir = Pathname(__FILE__).dirname.expand_path / 'mongo_adapter'
11
+
12
+ require dir / 'query'
13
+ require dir / 'query' / 'java_script'
14
+ require dir / 'conditions'
15
+ require dir / 'types' / 'discriminator'
16
+ require dir / 'types' / 'date_time'
17
+ require dir / 'types' / 'date'
18
+ require dir / 'types' / 'object_id'
19
+ require dir / 'types' / 'db_ref'
20
+ require dir / 'types' / 'objects'
21
+
22
+ require dir / 'model' / 'embedment'
23
+ require dir / 'model'
24
+
25
+ require dir / 'resource'
26
+ require dir / 'migrations'
27
+
28
+ require dir / 'embedments' / 'relationship'
29
+ require dir / 'embedments' / 'one_to_one'
30
+ require dir / 'embedments' / 'one_to_many'
31
+
32
+ require dir / 'embedded_model'
33
+ require dir / 'embedded_resource'
34
+ require dir / 'modifier'
35
+
36
+ require dir / 'aggregates'
37
+ require dir / 'adapter'
38
+
39
+ module DataMapper
40
+ module Mongo
41
+ module QueryExtensions
42
+ def self.included(base)
43
+ # FIXME: figure out a cleaner approach than AMC
44
+ base.class_eval <<-RUBY, __FILE__, __LINE__ + 1
45
+ alias assert_valid_conditions_without_embedment assert_valid_conditions
46
+ alias assert_valid_conditions assert_valid_conditions_with_embedment
47
+ RUBY
48
+ end
49
+
50
+ def assert_valid_conditions_with_embedment(conditions)
51
+ if conditions.is_a?(Hash) && model.respond_to?(:embedments) && !model.embedments.blank?
52
+ conditions.each_key do |key|
53
+ key_s = key.to_s
54
+
55
+ name = if key_s.include?('.')
56
+ key_s.split('.')[0].to_sym
57
+ else
58
+ key
59
+ end
60
+
61
+ conditions.delete(key) if model.embedments.key?(name)
62
+ end
63
+ end
64
+
65
+ assert_valid_conditions_without_embedment(conditions)
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ DataMapper::Query.send(:include, DataMapper::Mongo::QueryExtensions)