mongoid 0.9.0 → 0.9.1

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.
@@ -116,6 +116,30 @@ New School:
116
116
  Criteria.translate(:conditions => { :title => "Sir" }).execute
117
117
  </pre>
118
118
 
119
+ Chaining Scopes:
120
+
121
+ Class methods that return criteria, either through the Criteria API or the traditional Finder API, can
122
+ be chained, similar to DataMapper.
123
+
124
+ <pre>
125
+ class Person < Mongoid::Document
126
+ field :title
127
+ field :age, :type => Integer
128
+
129
+ class << self
130
+ def knighted
131
+ criteria.where(:title => "Sir")
132
+ end
133
+ def old
134
+ criteria.where(:age => { "$gt" > 70 })
135
+ end
136
+ end
137
+ end
138
+
139
+ Person.old.knighted
140
+ Person.old.paginate
141
+ </pre>
142
+
119
143
  Paginate Document search results:
120
144
 
121
145
  <pre>
data/Rakefile CHANGED
@@ -12,11 +12,15 @@ begin
12
12
  gem.email = "durran@gmail.com"
13
13
  gem.homepage = "http://github.com/durran/mongoid"
14
14
  gem.authors = ["Durran Jordan"]
15
+
15
16
  gem.add_dependency("durran-validatable", "1.8.2")
16
17
  gem.add_dependency("leshill-will_paginate", "2.3.11")
17
18
  gem.add_dependency("activesupport", "2.3.4")
18
19
  gem.add_dependency("mongo", "0.17.1")
19
20
  gem.add_dependency("mongo_ext", "0.17.1")
21
+
22
+ gem.add_development_dependency("rspec", "1.2.9")
23
+ gem.add_development_dependency("mocha", "0.9.8")
20
24
  end
21
25
  Jeweler::GemcutterTasks.new
22
26
  rescue LoadError
@@ -25,13 +29,13 @@ end
25
29
 
26
30
  Spec::Rake::SpecTask.new(:spec) do |spec|
27
31
  spec.pattern = "spec/**/*_spec.rb"
28
- spec.spec_opts = ['--options', "spec/spec.opts"]
32
+ spec.spec_opts = ["--options", "spec/spec.opts"]
29
33
  end
30
34
 
31
35
  Spec::Rake::SpecTask.new(:rcov) do |spec|
32
36
  spec.libs << "lib" << "spec"
33
37
  spec.pattern = "spec/**/*_spec.rb"
34
- spec.spec_opts = ['--options', "spec/spec.opts"]
38
+ spec.spec_opts = ["--options", "spec/spec.opts"]
35
39
  spec.rcov = true
36
40
  end
37
41
 
@@ -48,4 +52,5 @@ Rake::RDocTask.new do |rdoc|
48
52
  rdoc.rdoc_files.include("lib/**/*.rb")
49
53
  end
50
54
 
51
- task :default => ["rcov", "metrics:all"]
55
+ task :default => ["spec"]
56
+ task :metrics => ["rcov", "metrics:all"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.0
1
+ 0.9.1
@@ -91,6 +91,21 @@ module Mongoid # :nodoc:
91
91
  add_association(Associations::HasOne, Associations::Options.new(options.merge(:name => name)))
92
92
  end
93
93
 
94
+ # Returns the macro associated with the supplied association name. This
95
+ # will return has_one, has_many, belongs_to or nil.
96
+ #
97
+ # Options:
98
+ #
99
+ # name: The association name.
100
+ #
101
+ # Example:
102
+ #
103
+ # <tt>Person.reflect_on_association(:addresses)</tt>
104
+ def reflect_on_association(name)
105
+ association = associations[name]
106
+ association ? association.macro : nil
107
+ end
108
+
94
109
  private
95
110
  # Adds the association to the associations hash with the type as the key,
96
111
  # then adds the accessors for the association.
@@ -22,6 +22,11 @@ module Mongoid #:nodoc:
22
22
  end
23
23
 
24
24
  class << self
25
+ # Returns the macro used to create the association.
26
+ def macro
27
+ :belongs_to
28
+ end
29
+
25
30
  # Perform an update of the relationship of the parent and child. This
26
31
  # is initialized by setting a parent object as the association on the
27
32
  # +Document+. Will properly set a has_one or a has_many.
@@ -82,6 +82,11 @@ module Mongoid #:nodoc:
82
82
  end
83
83
 
84
84
  class << self
85
+ # Returns the macro used to create the association.
86
+ def macro
87
+ :has_many
88
+ end
89
+
85
90
  # Perform an update of the relationship of the parent and child. This
86
91
  # is initialized by setting the has_many to the supplied +Enumerable+
87
92
  # and setting up the parentization.
@@ -35,6 +35,11 @@ module Mongoid #:nodoc:
35
35
  end
36
36
 
37
37
  class << self
38
+ # Returns the macro used to create the association.
39
+ def macro
40
+ :has_one
41
+ end
42
+
38
43
  # Perform an update of the relationship of the parent and child. This
39
44
  # will assimilate the child +Document+ into the parent's object graph.
40
45
  #
@@ -31,7 +31,7 @@ module Mongoid #:nodoc:
31
31
  when Criteria
32
32
  self.selector == other.selector && self.options == other.options
33
33
  when Enumerable
34
- execute
34
+ @collection ||= execute
35
35
  return (@collection == other)
36
36
  else
37
37
  return false
@@ -81,9 +81,7 @@ module Mongoid #:nodoc:
81
81
  #
82
82
  # Returns: <tt>Integer</tt>
83
83
  def count
84
- return @count if @count
85
- @klass = klass if klass
86
- return @klass.collection.find(@selector, @options.dup).count
84
+ @count ||= @klass.collection.find(@selector, @options.dup).count
87
85
  end
88
86
 
89
87
  # Iterate over each +Document+ in the results. This can take an optional
@@ -261,13 +259,8 @@ module Mongoid #:nodoc:
261
259
  #
262
260
  # <tt>criteria.merge({ :conditions => { :title => "Sir" } })</tt>
263
261
  def merge(other)
264
- case other
265
- when Hash
266
- merge(self.class.translate(@klass, other))
267
- else
268
- @selector.update(other.selector)
269
- @options.update(other.options)
270
- end
262
+ @selector.update(other.selector)
263
+ @options.update(other.options)
271
264
  end
272
265
 
273
266
  # Used for chaining +Criteria+ scopes together in the for of class methods
@@ -469,9 +462,9 @@ module Mongoid #:nodoc:
469
462
  attributes = @klass.collection.find(@selector, @options.dup)
470
463
  if attributes
471
464
  @count = attributes.count
472
- @collection = attributes.collect { |doc| @klass.instantiate(doc) }
465
+ attributes.collect { |doc| @klass.instantiate(doc) }
473
466
  else
474
- @collection = []
467
+ []
475
468
  end
476
469
  end
477
470
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid}
8
- s.version = "0.9.0"
8
+ s.version = "0.9.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Durran Jordan"]
@@ -167,12 +167,16 @@ Gem::Specification.new do |s|
167
167
  s.add_runtime_dependency(%q<activesupport>, ["= 2.3.4"])
168
168
  s.add_runtime_dependency(%q<mongo>, ["= 0.17.1"])
169
169
  s.add_runtime_dependency(%q<mongo_ext>, ["= 0.17.1"])
170
+ s.add_development_dependency(%q<rspec>, ["= 1.2.9"])
171
+ s.add_development_dependency(%q<mocha>, ["= 0.9.8"])
170
172
  else
171
173
  s.add_dependency(%q<durran-validatable>, ["= 1.8.2"])
172
174
  s.add_dependency(%q<leshill-will_paginate>, ["= 2.3.11"])
173
175
  s.add_dependency(%q<activesupport>, ["= 2.3.4"])
174
176
  s.add_dependency(%q<mongo>, ["= 0.17.1"])
175
177
  s.add_dependency(%q<mongo_ext>, ["= 0.17.1"])
178
+ s.add_dependency(%q<rspec>, ["= 1.2.9"])
179
+ s.add_dependency(%q<mocha>, ["= 0.9.8"])
176
180
  end
177
181
  else
178
182
  s.add_dependency(%q<durran-validatable>, ["= 1.8.2"])
@@ -180,6 +184,8 @@ Gem::Specification.new do |s|
180
184
  s.add_dependency(%q<activesupport>, ["= 2.3.4"])
181
185
  s.add_dependency(%q<mongo>, ["= 0.17.1"])
182
186
  s.add_dependency(%q<mongo_ext>, ["= 0.17.1"])
187
+ s.add_dependency(%q<rspec>, ["= 1.2.9"])
188
+ s.add_dependency(%q<mocha>, ["= 0.9.8"])
183
189
  end
184
190
  end
185
191
 
@@ -50,7 +50,15 @@ describe Mongoid::Associations::BelongsTo do
50
50
 
51
51
  end
52
52
 
53
- describe "#update" do
53
+ describe ".macro" do
54
+
55
+ it "returns :belongs_to" do
56
+ Mongoid::Associations::BelongsTo.macro.should == :belongs_to
57
+ end
58
+
59
+ end
60
+
61
+ describe ".update" do
54
62
 
55
63
  context "when child is a has one" do
56
64
 
@@ -116,21 +116,6 @@ describe Mongoid::Associations::HasMany do
116
116
 
117
117
  end
118
118
 
119
- describe "#push" do
120
-
121
- before do
122
- @association = Mongoid::Associations::HasMany.new(@document, Mongoid::Associations::Options.new(:name => :addresses))
123
- @address = Address.new
124
- end
125
-
126
- it "adds the parent document before appending to the array" do
127
- @association.push @address
128
- @association.length.should == 3
129
- @address.parent.should == @document
130
- end
131
-
132
- end
133
-
134
119
  describe "#find" do
135
120
 
136
121
  before do
@@ -207,6 +192,14 @@ describe Mongoid::Associations::HasMany do
207
192
 
208
193
  end
209
194
 
195
+ describe ".macro" do
196
+
197
+ it "returns :has_many" do
198
+ Mongoid::Associations::HasMany.macro.should == :has_many
199
+ end
200
+
201
+ end
202
+
210
203
  describe "#push" do
211
204
 
212
205
  before do
@@ -214,6 +207,13 @@ describe Mongoid::Associations::HasMany do
214
207
  @document,
215
208
  Mongoid::Associations::Options.new(:name => :addresses)
216
209
  )
210
+ @address = Address.new
211
+ end
212
+
213
+ it "adds the parent document before appending to the array" do
214
+ @association.push @address
215
+ @association.length.should == 3
216
+ @address.parent.should == @document
217
217
  end
218
218
 
219
219
  it "appends the document to the end of the array" do
@@ -223,7 +223,7 @@ describe Mongoid::Associations::HasMany do
223
223
 
224
224
  end
225
225
 
226
- describe "#update" do
226
+ describe ".update" do
227
227
 
228
228
  before do
229
229
  @address = Address.new(:street => "Madison Ave")
@@ -77,7 +77,15 @@ describe Mongoid::Associations::HasOne do
77
77
 
78
78
  end
79
79
 
80
- describe "#update" do
80
+ describe ".macro" do
81
+
82
+ it "returns :has_many" do
83
+ Mongoid::Associations::HasOne.macro.should == :has_one
84
+ end
85
+
86
+ end
87
+
88
+ describe ".update" do
81
89
 
82
90
  before do
83
91
  @name = Name.new(:first_name => "Donald")
@@ -232,4 +232,12 @@ describe Mongoid::Associations do
232
232
 
233
233
  end
234
234
 
235
+ describe ".reflect_on_association" do
236
+
237
+ it "returns the association class for the name" do
238
+ Person.reflect_on_association(:addresses).should == :has_many
239
+ end
240
+
241
+ end
242
+
235
243
  end
@@ -430,45 +430,6 @@ describe Mongoid::Criteria do
430
430
 
431
431
  end
432
432
 
433
- context "with a hash" do
434
-
435
- context "when hash has values" do
436
-
437
- before do
438
- @hash = { :conditions => { :name => "Rebecca" }, :sort => [[:name, :desc]] }
439
- @selector = { :title => "Sir", :age => 30, :name => "Rebecca" }
440
- @options = { :skip => 40, :limit => 20, :sort => [[:name, :desc]] }
441
- @criteria.merge(@hash)
442
- end
443
-
444
- it "merges the conditions with the selector" do
445
- @criteria.selector.should == @selector
446
- end
447
-
448
- it "merges all valid other values into the options" do
449
- @criteria.options.should == @options
450
- end
451
-
452
- end
453
-
454
- context "when hash is empty" do
455
-
456
- before do
457
- @hash = {}
458
- @selector = { :title => "Sir", :age => 30 }
459
- @options = { :skip => 40, :limit => 20 }
460
- end
461
-
462
- it "merges nothing" do
463
- @criteria.merge(@hash)
464
- @criteria.selector.should == @selector
465
- @criteria.options.should == @options
466
- end
467
-
468
- end
469
-
470
- end
471
-
472
433
  end
473
434
 
474
435
  describe "#method_missing" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Durran Jordan
@@ -62,6 +62,26 @@ dependencies:
62
62
  - !ruby/object:Gem::Version
63
63
  version: 0.17.1
64
64
  version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: rspec
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "="
72
+ - !ruby/object:Gem::Version
73
+ version: 1.2.9
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: mocha
77
+ type: :development
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.9.8
84
+ version:
65
85
  description:
66
86
  email: durran@gmail.com
67
87
  executables: []