mongoid 0.7.3 → 0.7.4

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.3
1
+ 0.7.4
@@ -27,6 +27,7 @@ gem "will_paginate", "2.3.11"
27
27
 
28
28
  require "delegate"
29
29
  require "observer"
30
+ require "time"
30
31
  require "validatable"
31
32
  require "active_support/callbacks"
32
33
  require "active_support/core_ext"
@@ -38,7 +38,7 @@ module Mongoid #:nodoc:
38
38
  #
39
39
  # Returns the newly created object.
40
40
  def build(attributes)
41
- object = @klass.new(attributes)
41
+ object = @klass.instantiate(attributes)
42
42
  object.parentize(@parent, @association_name)
43
43
  push(object)
44
44
  object
@@ -4,18 +4,10 @@ module Mongoid #:nodoc:
4
4
  # field exists for them on the +Document+.
5
5
  def process(params = nil)
6
6
  @attributes = (params || {}).with_indifferent_access
7
- process_fields
8
7
  process_attributes
9
8
  end
10
9
 
11
10
  protected
12
- def process_fields
13
- fields.values.each do |field|
14
- value = field.set(@attributes[field.name])
15
- @attributes[field.name] = value if value
16
- end
17
- end
18
-
19
11
  def process_attributes
20
12
  @attributes.each_pair do |key, value|
21
13
  send("#{key}=", value)
@@ -50,6 +50,11 @@ module Mongoid #:nodoc:
50
50
  Criteria.translate(*args).count(self)
51
51
  end
52
52
 
53
+ # Returns a hash of all the default values
54
+ def defaults
55
+ @defaults
56
+ end
57
+
53
58
  # return true if the +Document+ is embedded in another +Documnet+.
54
59
  def embedded?
55
60
  @embedded == true
@@ -69,7 +74,9 @@ module Mongoid #:nodoc:
69
74
  # <tt>field :score, :default => 0</tt>
70
75
  def field(name, options = {})
71
76
  @fields ||= {}.with_indifferent_access
77
+ @defaults ||= {}.with_indifferent_access
72
78
  @fields[name.to_s] = Field.new(name.to_s, options)
79
+ @defaults[name.to_s] = options[:default] if options[:default]
73
80
  define_method(name) { read_attribute(name) }
74
81
  define_method("#{name}=") { |value| write_attribute(name, value) }
75
82
  end
@@ -188,7 +195,7 @@ module Mongoid #:nodoc:
188
195
 
189
196
  # Performs equality checking on the attributes.
190
197
  def ==(other)
191
- raise TypeMismatchError unless other.is_a?(Document)
198
+ return false unless other.is_a?(Document)
192
199
  @attributes.except(:modified_at).except(:created_at) ==
193
200
  other.attributes.except(:modified_at).except(:created_at)
194
201
  end
@@ -198,6 +205,11 @@ module Mongoid #:nodoc:
198
205
  self.class.collection
199
206
  end
200
207
 
208
+ # Returns the class defaults
209
+ def defaults
210
+ self.class.defaults
211
+ end
212
+
201
213
  # Return true if the +Document+ is embedded in another +Document+.
202
214
  def embedded?
203
215
  self.class.embedded?
@@ -225,7 +237,7 @@ module Mongoid #:nodoc:
225
237
  # Instantiate a new Document, setting the Document's attributes if given.
226
238
  # If no attributes are provided, they will be initialized with an empty Hash.
227
239
  def initialize(attrs = {})
228
- process(attrs)
240
+ process(defaults.merge(attrs))
229
241
  @new_record = true if id.nil?
230
242
  generate_key
231
243
  end
@@ -3,7 +3,7 @@ module Mongoid #:nodoc:
3
3
  module Date #:nodoc:
4
4
  module Conversions #:nodoc:
5
5
  def set(value)
6
- value.to_time.utc
6
+ value.to_time.utc unless value.blank?
7
7
  end
8
8
  def get(value)
9
9
  value ? value.to_date : value
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid}
8
- s.version = "0.7.3"
8
+ s.version = "0.7.4"
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-11-12}
12
+ s.date = %q{2009-11-14}
13
13
  s.email = %q{durran@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.textile"
@@ -58,6 +58,7 @@ Gem::Specification.new do |s|
58
58
  "lib/mongoid/timestamps.rb",
59
59
  "lib/mongoid/versioning.rb",
60
60
  "mongoid.gemspec",
61
+ "perf/benchmark.rb",
61
62
  "spec/integration/mongoid/document_spec.rb",
62
63
  "spec/spec.opts",
63
64
  "spec/spec_helper.rb",
@@ -163,3 +164,4 @@ Gem::Specification.new do |s|
163
164
  s.add_dependency(%q<mongo_ext>, ["= 0.16"])
164
165
  end
165
166
  end
167
+
@@ -0,0 +1,66 @@
1
+ require "rubygems"
2
+ require "ruby-prof"
3
+ require "mongoid"
4
+
5
+ class Person < Mongoid::Document
6
+ include Mongoid::Timestamps
7
+ include Mongoid::Versioning
8
+ field :birth_date, :type => Date
9
+ has_one :name
10
+ has_many :addresses
11
+ has_many :phones
12
+ end
13
+
14
+ class Name < Mongoid::Document
15
+ include Mongoid::Timestamps
16
+ field :given
17
+ field :family
18
+ field :middle
19
+ belongs_to :person
20
+ end
21
+
22
+ class Address < Mongoid::Document
23
+ include Mongoid::Timestamps
24
+ field :street
25
+ field :city
26
+ field :state
27
+ field :post_code
28
+ field :type
29
+ belongs_to :person
30
+ end
31
+
32
+ class Phone < Mongoid::Document
33
+ include Mongoid::Timestamps
34
+ field :country_code, :type => Integer
35
+ field :number
36
+ field :type
37
+ belongs_to :person
38
+ end
39
+
40
+ Mongoid.connect_to("mongoid_performance")
41
+
42
+ Mongoid.database.collection("people").drop
43
+
44
+ RubyProf.start
45
+
46
+ 1000.times do |n|
47
+ person = Person.new(:birth_date => Date.new(1970, 1, 1))
48
+ name = Name.new(:given => "James", :family => "Kirk", :middle => "Tiberius")
49
+ address = Address.new(
50
+ :street => "1 Starfleet Command Way",
51
+ :city => "San Francisco",
52
+ :state => "CA",
53
+ :post_code => "94133",
54
+ :type => "Work"
55
+ )
56
+ phone = Phone.new(:country_code => 1, :number => "415-555-1212", :type => "Mobile")
57
+ person.name = name
58
+ person.addresses << address
59
+ person.phones << phone
60
+ person.save
61
+ puts "Saved person #{n}"
62
+ end
63
+
64
+ result = RubyProf.stop
65
+ printer = RubyProf::FlatPrinter.new(result)
66
+ printer.print(STDOUT, 0)
@@ -27,6 +27,7 @@ class Person < Mongoid::Document
27
27
  field :dob, :type => Date
28
28
  field :mixed_drink, :type => MixedDrink
29
29
  field :employer_id
30
+ field :lunch_time, :type => Time
30
31
  has_many :addresses
31
32
  has_many :phone_numbers, :class_name => "Phone"
32
33
  has_one :name
@@ -117,3 +118,8 @@ class Post < Mongoid::Document
117
118
  include Mongoid::Versioning
118
119
  field :title
119
120
  end
121
+
122
+ class Game < Mongoid::Document
123
+ field :high_score, :default => 500
124
+ field :score, :default => 0
125
+ end
@@ -48,8 +48,8 @@ describe Mongoid::Document do
48
48
 
49
49
  context "when other object is not a Document" do
50
50
 
51
- it "raises an exception" do
52
- lambda { Person.new.==("Test") }.should raise_error
51
+ it "returns false" do
52
+ Person.new.==("Test").should be_false
53
53
  end
54
54
 
55
55
  end
@@ -134,6 +134,26 @@ describe Mongoid::Document do
134
134
 
135
135
  end
136
136
 
137
+ describe ".defaults" do
138
+
139
+ it "returns a hash of all the default values" do
140
+ Game.defaults.should == { "high_score" => 500, "score" => 0 }
141
+ end
142
+
143
+ end
144
+
145
+ describe "#defaults" do
146
+
147
+ before do
148
+ @game = Game.new
149
+ end
150
+
151
+ it "returns the class defaults" do
152
+ @game.defaults.should == { "high_score" => 500, "score" => 0 }
153
+ end
154
+
155
+ end
156
+
137
157
  describe ".embedded?" do
138
158
 
139
159
  context "when the document is embedded" do
@@ -14,6 +14,14 @@ describe Mongoid::Extensions::Date::Conversions do
14
14
  Date.set(@time.utc.to_s).should == @time
15
15
  end
16
16
 
17
+ context "when string is empty" do
18
+
19
+ it "returns nil" do
20
+ Date.set("").should == nil
21
+ end
22
+
23
+ end
24
+
17
25
  end
18
26
 
19
27
  context "when time provided" 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.7.3
4
+ version: 0.7.4
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-11-12 00:00:00 -05:00
12
+ date: 2009-11-14 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -114,6 +114,7 @@ files:
114
114
  - lib/mongoid/timestamps.rb
115
115
  - lib/mongoid/versioning.rb
116
116
  - mongoid.gemspec
117
+ - perf/benchmark.rb
117
118
  - spec/integration/mongoid/document_spec.rb
118
119
  - spec/spec.opts
119
120
  - spec/spec_helper.rb