mongoid 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -52,36 +52,55 @@ Example of a simple domain model:
52
52
  end
53
53
  </pre>
54
54
 
55
- Create a new Document:
55
+ Mongoid suuports all the basic ActiveRecord creation and persistence methods.
56
+
57
+ Creation:
56
58
 
57
59
  <pre>
58
60
  Person.create(:title => "Esquire")
61
+ Person.create!(:title => "Sir", :name => { :first_name => "Elton", :last_name => "John" })
59
62
  </pre>
60
63
 
61
- Save a Document:
64
+ Save:
62
65
 
63
66
  <pre>
64
67
  person.save
68
+ person.save!
65
69
  </pre>
66
70
 
67
- Delete a Document:
71
+ Updating:
68
72
 
69
73
  <pre>
70
- person.destroy
74
+ person.update_attributes(:title => "Sir")
75
+ person.update_attributes!(:name => { :first_name => "Emmanuel", :last_name => "Zorg" })
71
76
  </pre>
72
77
 
73
- Update a Document:
78
+ Deleting:
74
79
 
75
80
  <pre>
76
- person.update_attributes(:title => "Sir")
81
+ person.destroy
82
+ Person.destroy_all(:title => "Sir")
83
+ person.delete
84
+ Person.delete_all(:title => "Sir")
77
85
  </pre>
78
86
 
79
- Search for a Document in the database:
87
+ Retrieval of Documents from the database can be done in the traditional ActiveRecord
88
+ manner or done using the Mongoid criteria DSL.
89
+
90
+ Old School:
80
91
 
81
92
  <pre>
82
- Person.find(:all, :conditions => {:title => "Esquire"})
93
+ Person.find(:all, :conditions => { :title => "Esquire" })
94
+ Person.find(:first, :conditions => { :title => "Esquire" })
95
+ Person.first(:conditions => { :title => "Sir" })
96
+ Person.all(:conditions => { :title => "Sir" })
97
+ </pre>
83
98
 
84
- Person.find(:first, :conditions => {:title => "Esquire"})
99
+ New School:
100
+
101
+ <pre>
102
+ Criteria.new.select(:title => "Sir").only(:first_name, :last_name).skip(10).limit(10).execute
103
+ Criteria.translate(:conditions => { :title => "Sir" }).execute
85
104
  </pre>
86
105
 
87
106
  Paginate Document search results:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.4.3
@@ -40,13 +40,16 @@ module Mongoid #:nodoc:
40
40
  # Defines all the fields that are accessable on the Document
41
41
  # For each field that is defined, a getter and setter will be
42
42
  # added as an instance method to the Document.
43
- def fields(*names)
44
- @fields ||= []
45
- names.flatten.each do |name|
46
- @fields << name
47
- define_method(name) { read_attribute(name) }
48
- define_method("#{name}=") { |value| write_attribute(name, value) }
49
- end
43
+ def field(name, options = {})
44
+ @fields ||= {}
45
+ @fields[name] = Field.new(name, options)
46
+ define_method(name) { read_attribute(name) }
47
+ define_method("#{name}=") { |value| write_attribute(name, value) }
48
+ end
49
+
50
+ # Returns all the fields for the Document as a +Hash+ with names as keys.
51
+ def fields
52
+ @fields
50
53
  end
51
54
 
52
55
  # Find all Documents in several ways.
@@ -90,7 +93,8 @@ module Mongoid #:nodoc:
90
93
  # Adds timestamps on the Document in the form of the fields 'created_on'
91
94
  # and 'last_modified'
92
95
  def has_timestamps
93
- fields :created_at, :last_modified
96
+ field :created_at
97
+ field :last_modified
94
98
  class_eval do
95
99
  before_create \
96
100
  :update_created_at,
@@ -128,6 +132,11 @@ module Mongoid #:nodoc:
128
132
  self.class.collection
129
133
  end
130
134
 
135
+ # Get the fields for the Document class.
136
+ def fields
137
+ self.class.fields
138
+ end
139
+
131
140
  # Get the Mongo::ObjectID associated with this object.
132
141
  # This is in essence the primary key.
133
142
  def id
@@ -170,7 +179,8 @@ module Mongoid #:nodoc:
170
179
 
171
180
  # Read from the attributes hash.
172
181
  def read_attribute(name)
173
- @attributes[name.to_sym]
182
+ symbol = name.to_sym
183
+ fields[symbol].value(@attributes[symbol])
174
184
  end
175
185
 
176
186
  # Update the created_at field on the Document to the current time. This is
@@ -21,5 +21,11 @@ module Mongoid #:nodoc:
21
21
  @default = options[:default]
22
22
  end
23
23
 
24
+ # Gets the value for the supplied object. If the object is nil, then the
25
+ # default value will be returned.
26
+ def value(object)
27
+ object ? object : default
28
+ end
29
+
24
30
  end
25
31
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid}
8
- s.version = "0.4.2"
8
+ s.version = "0.4.3"
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"]
12
- s.date = %q{2009-10-11}
12
+ s.date = %q{2009-10-17}
13
13
  s.email = %q{durran@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.textile"
@@ -16,27 +16,24 @@ Spec::Runner.configure do |config|
16
16
  end
17
17
 
18
18
  class Person < Mongoid::Document
19
- fields \
20
- :title,
21
- :terms,
22
- :age
19
+ field :title
20
+ field :terms
21
+ field :age
23
22
  has_many :addresses
24
23
  has_one :name
25
24
  end
26
25
 
27
26
  class Address < Mongoid::Document
28
- fields \
29
- :street,
30
- :city,
31
- :state,
32
- :post_code
27
+ field :street
28
+ field :city
29
+ field :state
30
+ field :post_code
33
31
  belongs_to :person
34
32
  end
35
33
 
36
34
  class Name < Mongoid::Document
37
- fields \
38
- :first_name,
39
- :last_name
35
+ field :first_name
36
+ field :last_name
40
37
  belongs_to :person
41
38
  end
42
39
 
@@ -29,6 +29,35 @@ describe Mongoid::Document do
29
29
 
30
30
  end
31
31
 
32
+ describe "#all" do
33
+
34
+ before do
35
+ @cursor = mock
36
+ @people = []
37
+ end
38
+
39
+ context "when a selector is provided" do
40
+
41
+ it "finds from the collection and instantiate objects for each returned" do
42
+ @collection.expects(:find).with({ :test => "Test" }, {}).returns(@cursor)
43
+ @cursor.expects(:collect).returns(@people)
44
+ Person.all(:conditions => {:test => "Test"})
45
+ end
46
+
47
+ end
48
+
49
+ context "when a selector is not provided" do
50
+
51
+ it "finds from the collection and instantiate objects for each returned" do
52
+ @collection.expects(:find).with(nil, {}).returns(@cursor)
53
+ @cursor.expects(:collect).returns(@people)
54
+ Person.all
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
32
61
  describe "#belongs_to" do
33
62
 
34
63
  it "creates a reader for the association" do
@@ -55,21 +84,25 @@ describe Mongoid::Document do
55
84
 
56
85
  end
57
86
 
58
- describe "#fields" do
87
+ describe "#field" do
59
88
 
60
- before do
61
- Person.fields([:testing])
62
- end
89
+ context "with no options" do
63
90
 
64
- it "adds a reader for the fields defined" do
65
- @person = Person.new(:testing => "Test")
66
- @person.testing.should == "Test"
67
- end
91
+ before do
92
+ Person.field(:testing)
93
+ end
94
+
95
+ it "adds a reader for the fields defined" do
96
+ @person = Person.new(:testing => "Test")
97
+ @person.testing.should == "Test"
98
+ end
99
+
100
+ it "adds a writer for the fields defined" do
101
+ @person = Person.new(:testing => "Test")
102
+ @person.testing = "Testy"
103
+ @person.testing.should == "Testy"
104
+ end
68
105
 
69
- it "adds a writer for the fields defined" do
70
- @person = Person.new(:testing => "Test")
71
- @person.testing = "Testy"
72
- @person.testing.should == "Testy"
73
106
  end
74
107
 
75
108
  end
@@ -162,35 +195,6 @@ describe Mongoid::Document do
162
195
 
163
196
  end
164
197
 
165
- describe "#all" do
166
-
167
- before do
168
- @cursor = mock
169
- @people = []
170
- end
171
-
172
- context "when a selector is provided" do
173
-
174
- it "finds from the collection and instantiate objects for each returned" do
175
- @collection.expects(:find).with({ :test => "Test" }, {}).returns(@cursor)
176
- @cursor.expects(:collect).returns(@people)
177
- Person.all(:conditions => {:test => "Test"})
178
- end
179
-
180
- end
181
-
182
- context "when a selector is not provided" do
183
-
184
- it "finds from the collection and instantiate objects for each returned" do
185
- @collection.expects(:find).with(nil, {}).returns(@cursor)
186
- @cursor.expects(:collect).returns(@people)
187
- Person.all
188
- end
189
-
190
- end
191
-
192
- end
193
-
194
198
  describe "#group_by" do
195
199
 
196
200
  before do
@@ -286,7 +290,9 @@ describe Mongoid::Document do
286
290
  end
287
291
 
288
292
  it "adds created_on and last_modified to the document" do
289
- Tester.instance_variable_get(:@fields).should include(:created_at, :last_modified)
293
+ fields = Tester.instance_variable_get(:@fields)
294
+ fields[:created_at].should_not be_nil
295
+ fields[:last_modified].should_not be_nil
290
296
  end
291
297
 
292
298
  end
@@ -430,6 +436,23 @@ describe Mongoid::Document do
430
436
 
431
437
  end
432
438
 
439
+ describe "#read_attribute" do
440
+
441
+ context "when attribute does not exist" do
442
+
443
+ before do
444
+ Person.field :weight, :default => 100
445
+ @person = Person.new
446
+ end
447
+
448
+ it "returns the default value" do
449
+ @person.weight.should == 100
450
+ end
451
+
452
+ end
453
+
454
+ end
455
+
433
456
  describe "#to_param" do
434
457
 
435
458
  it "returns the id" do
@@ -26,4 +26,28 @@ describe Mongoid::Field do
26
26
 
27
27
  end
28
28
 
29
+ describe "#value" do
30
+
31
+ before do
32
+ @field = Mongoid::Field.new(:score, :default => 10)
33
+ end
34
+
35
+ context "nil is provided" do
36
+
37
+ it "returns the default value" do
38
+ @field.value(nil).should == 10
39
+ end
40
+
41
+ end
42
+
43
+ context "value is provided" do
44
+
45
+ it "returns the value" do
46
+ @field.value(30).should == 30
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
29
53
  end
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.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Durran Jordan
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-11 00:00:00 -04:00
12
+ date: 2009-10-17 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency