mongoid 0.11.3 → 0.11.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/HISTORY +8 -0
- data/VERSION +1 -1
- data/lib/mongoid/associations/has_one.rb +18 -3
- data/lib/mongoid/attributes.rb +1 -1
- data/mongoid.gemspec +1 -1
- data/spec/unit/mongoid/associations/has_one_spec.rb +36 -14
- data/spec/unit/mongoid/attributes_spec.rb +11 -1
- data/spec/unit/mongoid/document_spec.rb +2 -2
- metadata +1 -1
    
        data/HISTORY
    CHANGED
    
    | @@ -1,3 +1,11 @@ | |
| 1 | 
            +
            === 0.11.4
         | 
| 2 | 
            +
            - Fixed issue with dynamic fields: checking whether
         | 
| 3 | 
            +
              the document responded to the attribute's method
         | 
| 4 | 
            +
              should have checked the setter and not the getter
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            - Fixed has_one associations not being able to be
         | 
| 7 | 
            +
              set to nil.
         | 
| 8 | 
            +
             | 
| 1 9 | 
             
            === 0.11.3
         | 
| 2 10 | 
             
            - Fixed issue with Document#save! not calling before
         | 
| 3 11 | 
             
              and after create callbacks if document is new
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.11. | 
| 1 | 
            +
            0.11.4
         | 
| @@ -36,13 +36,14 @@ module Mongoid #:nodoc: | |
| 36 36 | 
             
                    unless attributes.nil?
         | 
| 37 37 | 
             
                      klass = attributes[:_type] ? attributes[:_type].constantize : nil
         | 
| 38 38 | 
             
                      @document = attributes.assimilate(@parent, @options, klass)
         | 
| 39 | 
            +
                    else
         | 
| 40 | 
            +
                      @document = nil
         | 
| 39 41 | 
             
                    end
         | 
| 40 42 | 
             
                  end
         | 
| 41 43 |  | 
| 42 44 | 
             
                  # Delegate all missing methods over to the +Document+.
         | 
| 43 45 | 
             
                  def method_missing(name, *args, &block)
         | 
| 44 | 
            -
                    @document | 
| 45 | 
            -
                    @document.send(name, *args, &block)
         | 
| 46 | 
            +
                    @document.send(name, *args, &block) unless @document.nil?
         | 
| 46 47 | 
             
                  end
         | 
| 47 48 |  | 
| 48 49 | 
             
                  # Used for setting the association via a nested attributes setter on the
         | 
| @@ -51,6 +52,16 @@ module Mongoid #:nodoc: | |
| 51 52 | 
             
                    build(attributes)
         | 
| 52 53 | 
             
                  end
         | 
| 53 54 |  | 
| 55 | 
            +
                  # This should delegate to the document.
         | 
| 56 | 
            +
                  def nil?
         | 
| 57 | 
            +
                    @document.nil?
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  # This will get deprecated
         | 
| 61 | 
            +
                  def to_a
         | 
| 62 | 
            +
                    [@document]
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 54 65 | 
             
                  # Need to override here for when the underlying document is nil.
         | 
| 55 66 | 
             
                  def valid?
         | 
| 56 67 | 
             
                    @document ? @document.valid? : false
         | 
| @@ -87,7 +98,11 @@ module Mongoid #:nodoc: | |
| 87 98 | 
             
                    #
         | 
| 88 99 | 
             
                    # <tt>HasOne.update({:first_name => "Hank"}, person, options)</tt>
         | 
| 89 100 | 
             
                    def update(child, parent, options)
         | 
| 90 | 
            -
                      child. | 
| 101 | 
            +
                      if child.nil?
         | 
| 102 | 
            +
                        return parent.attributes[options.name] = nil
         | 
| 103 | 
            +
                      else
         | 
| 104 | 
            +
                        return child.assimilate(parent, options)
         | 
| 105 | 
            +
                      end
         | 
| 91 106 | 
             
                    end
         | 
| 92 107 | 
             
                  end
         | 
| 93 108 |  | 
    
        data/lib/mongoid/attributes.rb
    CHANGED
    
    | @@ -14,7 +14,7 @@ module Mongoid #:nodoc: | |
| 14 14 | 
             
                  # put into the document's attributes.
         | 
| 15 15 | 
             
                  def process(attrs = {})
         | 
| 16 16 | 
             
                    attrs.each_pair do |key, value|
         | 
| 17 | 
            -
                      unless respond_to?(key)
         | 
| 17 | 
            +
                      unless respond_to?("#{key}=")
         | 
| 18 18 | 
             
                        self.class.field key, :type => value.class if Mongoid.allow_dynamic_fields
         | 
| 19 19 | 
             
                      end
         | 
| 20 20 | 
             
                      send("#{key}=", value) unless value.blank?
         | 
    
        data/mongoid.gemspec
    CHANGED
    
    
| @@ -210,23 +210,45 @@ describe Mongoid::Associations::HasOne do | |
| 210 210 |  | 
| 211 211 | 
             
              describe ".update" do
         | 
| 212 212 |  | 
| 213 | 
            -
                 | 
| 214 | 
            -
             | 
| 215 | 
            -
                   | 
| 216 | 
            -
             | 
| 217 | 
            -
                    @ | 
| 218 | 
            -
                     | 
| 219 | 
            -
             | 
| 220 | 
            -
             | 
| 221 | 
            -
             | 
| 213 | 
            +
                context "when setting to a non-nil value" do
         | 
| 214 | 
            +
             | 
| 215 | 
            +
                  before do
         | 
| 216 | 
            +
                    @name = Name.new(:first_name => "Donald")
         | 
| 217 | 
            +
                    @person = Person.new(:title => "Sir")
         | 
| 218 | 
            +
                    Mongoid::Associations::HasOne.update(
         | 
| 219 | 
            +
                      @name,
         | 
| 220 | 
            +
                      @person,
         | 
| 221 | 
            +
                      Mongoid::Associations::Options.new(:name => :name)
         | 
| 222 | 
            +
                    )
         | 
| 223 | 
            +
                  end
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                  it "parentizes the child document" do
         | 
| 226 | 
            +
                    @name._parent.should == @person
         | 
| 227 | 
            +
                  end
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                  it "sets the attributes of the child on the parent" do
         | 
| 230 | 
            +
                    @person.attributes[:name].should ==
         | 
| 231 | 
            +
                      { "_id" => "donald", "first_name" => "Donald", "_type" => "Name" }
         | 
| 232 | 
            +
                  end
         | 
| 222 233 |  | 
| 223 | 
            -
                it "parentizes the child document" do
         | 
| 224 | 
            -
                  @name._parent.should == @person
         | 
| 225 234 | 
             
                end
         | 
| 226 235 |  | 
| 227 | 
            -
                 | 
| 228 | 
            -
             | 
| 229 | 
            -
             | 
| 236 | 
            +
                context "when setting the object to nil" do
         | 
| 237 | 
            +
             | 
| 238 | 
            +
                  before do
         | 
| 239 | 
            +
                    @name = Name.new(:first_name => "Donald")
         | 
| 240 | 
            +
                    @person = Person.new(:title => "Sir")
         | 
| 241 | 
            +
                    Mongoid::Associations::HasOne.update(
         | 
| 242 | 
            +
                      nil,
         | 
| 243 | 
            +
                      @person,
         | 
| 244 | 
            +
                      Mongoid::Associations::Options.new(:name => :name)
         | 
| 245 | 
            +
                    )
         | 
| 246 | 
            +
                  end
         | 
| 247 | 
            +
             | 
| 248 | 
            +
                  it "clears out the association" do
         | 
| 249 | 
            +
                    @person.name.should be_nil
         | 
| 250 | 
            +
                  end
         | 
| 251 | 
            +
             | 
| 230 252 | 
             
                end
         | 
| 231 253 |  | 
| 232 254 | 
             
              end
         | 
| @@ -96,7 +96,8 @@ describe Mongoid::Attributes do | |
| 96 96 | 
             
                  before do
         | 
| 97 97 | 
             
                    @attributes = {
         | 
| 98 98 | 
             
                      :nofieldstring => "Testing",
         | 
| 99 | 
            -
                      :nofieldint => 5
         | 
| 99 | 
            +
                      :nofieldint => 5,
         | 
| 100 | 
            +
                      :employer => Employer.new
         | 
| 100 101 | 
             
                    }
         | 
| 101 102 | 
             
                  end
         | 
| 102 103 |  | 
| @@ -127,6 +128,15 @@ describe Mongoid::Attributes do | |
| 127 128 |  | 
| 128 129 | 
             
                    end
         | 
| 129 130 |  | 
| 131 | 
            +
                    context "when a method has been defined for the attribute" do
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                      it "does not create the field" do
         | 
| 134 | 
            +
                        @person.fields.keys.should_not include("employer")
         | 
| 135 | 
            +
                        @person.fields.keys.should_not include("employer=")
         | 
| 136 | 
            +
                      end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                    end
         | 
| 139 | 
            +
             | 
| 130 140 | 
             
                  end
         | 
| 131 141 |  | 
| 132 142 | 
             
                  context "when not allowing dynamic fields" do
         | 
| @@ -954,11 +954,11 @@ describe Mongoid::Document do | |
| 954 954 |  | 
| 955 955 | 
             
                      context "when the associated is nil" do
         | 
| 956 956 |  | 
| 957 | 
            -
                        it "returns  | 
| 957 | 
            +
                        it "returns true" do
         | 
| 958 958 | 
             
                          Person.class_eval do
         | 
| 959 959 | 
             
                            validates_associated :name
         | 
| 960 960 | 
             
                          end
         | 
| 961 | 
            -
                          @person.valid?.should  | 
| 961 | 
            +
                          @person.valid?.should be_true
         | 
| 962 962 | 
             
                        end
         | 
| 963 963 |  | 
| 964 964 | 
             
                      end
         |