mongoid 7.0.0 → 7.0.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mongoid/association/embedded/batchable.rb +4 -4
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +24 -1
- data/lib/mongoid/association/many.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/proxy.rb +1 -1
- data/lib/mongoid/association/touchable.rb +1 -1
- data/lib/mongoid/clients/sessions.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +3 -3
- data/lib/mongoid/contextual/memory.rb +4 -4
- data/lib/mongoid/contextual/mongo.rb +3 -3
- data/lib/mongoid/indexable.rb +4 -4
- data/lib/mongoid/persistable.rb +1 -1
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/tasks/database.rb +2 -2
- data/lib/mongoid/version.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +246 -16
- metadata +2 -2
- metadata.gz.sig +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 24a3c4aba84097db1be0810c29d175dfa6e69f6346efa857ac124aeb77bec1b1
         | 
| 4 | 
            +
              data.tar.gz: b181a4840f966322895bf4dfe0b64cb136513412d8a3ca89b9aa28a342d27054
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 12979183bf4d077b673beb7a57632fc73b7f1672be666401c68969ae675164b0d0641881cdcb8fb43bec283c4b4ca4d946f63a0c988bb58ac4065e677a5278c6
         | 
| 7 | 
            +
              data.tar.gz: 3ae9210672c5c5dc3f8536983e814840fc823668373c9594d9a7cb834b533e945eca850c5840dbf0f90e7f707318c0a16823c0a54599d29b5f3a6308f5bf2dd1
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data.tar.gz.sig
    CHANGED
    
    | Binary file | 
| @@ -39,7 +39,7 @@ module Mongoid | |
| 39 39 | 
             
                      unless docs.empty?
         | 
| 40 40 | 
             
                        collection.find(selector).update_one(
         | 
| 41 41 | 
             
                            positionally(selector, "$unset" => { path => true }),
         | 
| 42 | 
            -
                            session:  | 
| 42 | 
            +
                            session: _session
         | 
| 43 43 | 
             
                        )
         | 
| 44 44 | 
             
                        post_process_batch_remove(docs, :delete)
         | 
| 45 45 | 
             
                      end
         | 
| @@ -60,7 +60,7 @@ module Mongoid | |
| 60 60 | 
             
                      if !docs.empty?
         | 
| 61 61 | 
             
                        collection.find(selector).update_one(
         | 
| 62 62 | 
             
                            positionally(selector, "$pullAll" => { path => removals }),
         | 
| 63 | 
            -
                            session:  | 
| 63 | 
            +
                            session: _session
         | 
| 64 64 | 
             
                        )
         | 
| 65 65 | 
             
                        post_process_batch_remove(docs, method)
         | 
| 66 66 | 
             
                      end
         | 
| @@ -136,7 +136,7 @@ module Mongoid | |
| 136 136 | 
             
                      if insertable?
         | 
| 137 137 | 
             
                        collection.find(selector).update_one(
         | 
| 138 138 | 
             
                            positionally(selector, '$set' => { path => inserts }),
         | 
| 139 | 
            -
                            session:  | 
| 139 | 
            +
                            session: _session
         | 
| 140 140 | 
             
                        )
         | 
| 141 141 | 
             
                        post_process_batch_insert(docs)
         | 
| 142 142 | 
             
                      end
         | 
| @@ -161,7 +161,7 @@ module Mongoid | |
| 161 161 | 
             
                      if insertable?
         | 
| 162 162 | 
             
                        collection.find(selector).update_one(
         | 
| 163 163 | 
             
                            positionally(selector, '$push' => { path => { '$each' => pushes } }),
         | 
| 164 | 
            -
                            session:  | 
| 164 | 
            +
                            session: _session
         | 
| 165 165 | 
             
                        )
         | 
| 166 166 | 
             
                        post_process_batch_insert(docs)
         | 
| 167 167 | 
             
                      end
         | 
| @@ -271,6 +271,29 @@ module Mongoid | |
| 271 271 | 
             
                        end
         | 
| 272 272 | 
             
                      end
         | 
| 273 273 |  | 
| 274 | 
            +
                      # Shift documents off the relation. This can be a single document or
         | 
| 275 | 
            +
                      # multiples, and will automatically persist the changes.
         | 
| 276 | 
            +
                      #
         | 
| 277 | 
            +
                      # @example Shift a single document.
         | 
| 278 | 
            +
                      #   relation.shift
         | 
| 279 | 
            +
                      #
         | 
| 280 | 
            +
                      # @example Shift multiple documents.
         | 
| 281 | 
            +
                      #   relation.shift(3)
         | 
| 282 | 
            +
                      #
         | 
| 283 | 
            +
                      # @param [ Integer ] count The number of documents to shift, or 1 if not
         | 
| 284 | 
            +
                      #   provided.
         | 
| 285 | 
            +
                      #
         | 
| 286 | 
            +
                      # @return [ Document, Array<Document> ] The shifted document(s).
         | 
| 287 | 
            +
                      def shift(count = nil)
         | 
| 288 | 
            +
                        if count
         | 
| 289 | 
            +
                          if _target.size > 0 && docs = _target[0, count]
         | 
| 290 | 
            +
                            docs.each { |doc| delete(doc) }
         | 
| 291 | 
            +
                          end
         | 
| 292 | 
            +
                        else
         | 
| 293 | 
            +
                          delete(_target[0])
         | 
| 294 | 
            +
                        end
         | 
| 295 | 
            +
                      end
         | 
| 296 | 
            +
             | 
| 274 297 | 
             
                      # Substitutes the supplied target documents for the existing documents
         | 
| 275 298 | 
             
                      # in the relation.
         | 
| 276 299 | 
             
                      #
         | 
| @@ -526,4 +549,4 @@ module Mongoid | |
| 526 549 | 
             
                  end
         | 
| 527 550 | 
             
                end
         | 
| 528 551 | 
             
              end
         | 
| 529 | 
            -
            end
         | 
| 552 | 
            +
            end
         | 
| @@ -456,7 +456,7 @@ module Mongoid | |
| 456 456 | 
             
                      # @since 3.0.0
         | 
| 457 457 | 
             
                      def persist_delayed(docs, inserts)
         | 
| 458 458 | 
             
                        unless docs.empty?
         | 
| 459 | 
            -
                          collection.insert_many(inserts, session:  | 
| 459 | 
            +
                          collection.insert_many(inserts, session: _session)
         | 
| 460 460 | 
             
                          docs.each do |doc|
         | 
| 461 461 | 
             
                            doc.new_record = false
         | 
| 462 462 | 
             
                            doc.run_after_callbacks(:create, :save)
         | 
| @@ -32,7 +32,7 @@ module Mongoid | |
| 32 32 | 
             
                      touches = touch_atomic_updates(field)
         | 
| 33 33 | 
             
                      unless touches["$set"].blank?
         | 
| 34 34 | 
             
                        selector = atomic_selector
         | 
| 35 | 
            -
                        _root.collection.find(selector).update_one(positionally(selector, touches), session:  | 
| 35 | 
            +
                        _root.collection.find(selector).update_one(positionally(selector, touches), session: _session)
         | 
| 36 36 | 
             
                      end
         | 
| 37 37 | 
             
                      run_callbacks(:touch)
         | 
| 38 38 | 
             
                      true
         | 
| @@ -23,7 +23,7 @@ module Mongoid | |
| 23 23 | 
             
                    #
         | 
| 24 24 | 
             
                    # @since 3.0.0
         | 
| 25 25 | 
             
                    def aggregates(field)
         | 
| 26 | 
            -
                      result = collection.find.aggregate(pipeline(field), session:  | 
| 26 | 
            +
                      result = collection.find.aggregate(pipeline(field), session: _session).to_a
         | 
| 27 27 | 
             
                      if result.empty?
         | 
| 28 28 | 
             
                        { "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
         | 
| 29 29 | 
             
                      else
         | 
| @@ -166,7 +166,7 @@ module Mongoid | |
| 166 166 | 
             
                    validate_out!
         | 
| 167 167 | 
             
                    cmd = command
         | 
| 168 168 | 
             
                    opts = { read: cmd.delete(:read).options } if cmd[:read]
         | 
| 169 | 
            -
                    @map_reduce.database.command(cmd, (opts || {}).merge(session:  | 
| 169 | 
            +
                    @map_reduce.database.command(cmd, (opts || {}).merge(session: _session)).first
         | 
| 170 170 | 
             
                  end
         | 
| 171 171 | 
             
                  alias :results :raw
         | 
| 172 172 |  | 
| @@ -250,8 +250,8 @@ module Mongoid | |
| 250 250 | 
             
                    raise Errors::NoMapReduceOutput.new({}) unless @map_reduce.out
         | 
| 251 251 | 
             
                  end
         | 
| 252 252 |  | 
| 253 | 
            -
                  def  | 
| 254 | 
            -
                    criteria.send(: | 
| 253 | 
            +
                  def _session
         | 
| 254 | 
            +
                    criteria.send(:_session)
         | 
| 255 255 | 
             
                  end
         | 
| 256 256 | 
             
                end
         | 
| 257 257 | 
             
              end
         | 
| @@ -49,7 +49,7 @@ module Mongoid | |
| 49 49 | 
             
                    unless removed.empty?
         | 
| 50 50 | 
             
                      collection.find(selector).update_one(
         | 
| 51 51 | 
             
                        positionally(selector, "$pullAll" => { path => removed }),
         | 
| 52 | 
            -
                        session:  | 
| 52 | 
            +
                        session: _session
         | 
| 53 53 | 
             
                      )
         | 
| 54 54 | 
             
                    end
         | 
| 55 55 | 
             
                    deleted
         | 
| @@ -320,7 +320,7 @@ module Mongoid | |
| 320 320 | 
             
                      updates["$set"].merge!(doc.atomic_updates["$set"] || {})
         | 
| 321 321 | 
             
                      doc.move_changes
         | 
| 322 322 | 
             
                    end
         | 
| 323 | 
            -
                    collection.find(selector).update_one(updates, session:  | 
| 323 | 
            +
                    collection.find(selector).update_one(updates, session: _session) unless updates["$set"].empty?
         | 
| 324 324 | 
             
                  end
         | 
| 325 325 |  | 
| 326 326 | 
             
                  # Get the limiting value.
         | 
| @@ -464,8 +464,8 @@ module Mongoid | |
| 464 464 |  | 
| 465 465 | 
             
                  private
         | 
| 466 466 |  | 
| 467 | 
            -
                  def  | 
| 468 | 
            -
                    @criteria.send(: | 
| 467 | 
            +
                  def _session
         | 
| 468 | 
            +
                    @criteria.send(:_session)
         | 
| 469 469 | 
             
                  end
         | 
| 470 470 | 
             
                end
         | 
| 471 471 | 
             
              end
         | 
| @@ -341,7 +341,7 @@ module Mongoid | |
| 341 341 | 
             
                    @criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
         | 
| 342 342 | 
             
                    @collection = @klass.collection
         | 
| 343 343 | 
             
                    criteria.send(:merge_type_selection)
         | 
| 344 | 
            -
                    @view = collection.find(criteria.selector, session:  | 
| 344 | 
            +
                    @view = collection.find(criteria.selector, session: _session)
         | 
| 345 345 | 
             
                    apply_options
         | 
| 346 346 | 
             
                  end
         | 
| 347 347 |  | 
| @@ -708,8 +708,8 @@ module Mongoid | |
| 708 708 |  | 
| 709 709 | 
             
                  private
         | 
| 710 710 |  | 
| 711 | 
            -
                  def  | 
| 712 | 
            -
                    @criteria.send(: | 
| 711 | 
            +
                  def _session
         | 
| 712 | 
            +
                    @criteria.send(:_session)
         | 
| 713 713 | 
             
                  end
         | 
| 714 714 |  | 
| 715 715 | 
             
                  def acknowledged_write?
         | 
    
        data/lib/mongoid/indexable.rb
    CHANGED
    
    | @@ -35,10 +35,10 @@ module Mongoid | |
| 35 35 | 
             
                      key, options = spec.key, default_options.merge(spec.options)
         | 
| 36 36 | 
             
                      if database = options[:database]
         | 
| 37 37 | 
             
                        with(database: database) do |klass|
         | 
| 38 | 
            -
                          klass.collection.indexes(session:  | 
| 38 | 
            +
                          klass.collection.indexes(session: _session).create_one(key, options.except(:database))
         | 
| 39 39 | 
             
                        end
         | 
| 40 40 | 
             
                      else
         | 
| 41 | 
            -
                        collection.indexes(session:  | 
| 41 | 
            +
                        collection.indexes(session: _session).create_one(key, options)
         | 
| 42 42 | 
             
                      end
         | 
| 43 43 | 
             
                    end and true
         | 
| 44 44 | 
             
                  end
         | 
| @@ -56,9 +56,9 @@ module Mongoid | |
| 56 56 | 
             
                    indexed_database_names.each do |database|
         | 
| 57 57 | 
             
                      with(database: database) do |klass|
         | 
| 58 58 | 
             
                        begin
         | 
| 59 | 
            -
                          klass.collection.indexes(session:  | 
| 59 | 
            +
                          klass.collection.indexes(session: _session).each do |spec|
         | 
| 60 60 | 
             
                            unless spec["name"] == "_id_"
         | 
| 61 | 
            -
                              klass.collection.indexes(session:  | 
| 61 | 
            +
                              klass.collection.indexes(session: _session).drop_one(spec["key"])
         | 
| 62 62 | 
             
                              logger.info(
         | 
| 63 63 | 
             
                                "MONGOID: Removed index '#{spec["name"]}' on collection " +
         | 
| 64 64 | 
             
                                "'#{klass.collection.name}' in database '#{database}'."
         | 
    
        data/lib/mongoid/persistable.rb
    CHANGED
    
    | @@ -203,7 +203,7 @@ module Mongoid | |
| 203 203 | 
             
                def persist_atomic_operations(operations)
         | 
| 204 204 | 
             
                  if persisted? && operations && !operations.empty?
         | 
| 205 205 | 
             
                    selector = atomic_selector
         | 
| 206 | 
            -
                    _root.collection.find(selector).update_one(positionally(selector, operations), session:  | 
| 206 | 
            +
                    _root.collection.find(selector).update_one(positionally(selector, operations), session: _session)
         | 
| 207 207 | 
             
                  end
         | 
| 208 208 | 
             
                end
         | 
| 209 209 | 
             
              end
         | 
| @@ -63,7 +63,7 @@ module Mongoid | |
| 63 63 | 
             
                      selector = _parent.atomic_selector
         | 
| 64 64 | 
             
                      _root.collection.find(selector).update_one(
         | 
| 65 65 | 
             
                          positionally(selector, atomic_inserts),
         | 
| 66 | 
            -
                          session:  | 
| 66 | 
            +
                          session: _session)
         | 
| 67 67 | 
             
                    end
         | 
| 68 68 | 
             
                  end
         | 
| 69 69 |  | 
| @@ -78,7 +78,7 @@ module Mongoid | |
| 78 78 | 
             
                  #
         | 
| 79 79 | 
             
                  # @since 4.0.0
         | 
| 80 80 | 
             
                  def insert_as_root
         | 
| 81 | 
            -
                    collection.insert_one(as_attributes, session:  | 
| 81 | 
            +
                    collection.insert_one(as_attributes, session: _session)
         | 
| 82 82 | 
             
                  end
         | 
| 83 83 |  | 
| 84 84 | 
             
                  # Post process an insert, which sets the new record attribute to false
         | 
| @@ -66,7 +66,7 @@ module Mongoid | |
| 66 66 | 
             
                      selector = _parent.atomic_selector
         | 
| 67 67 | 
             
                      _root.collection.find(selector).update_one(
         | 
| 68 68 | 
             
                          positionally(selector, atomic_deletes),
         | 
| 69 | 
            -
                          session:  | 
| 69 | 
            +
                          session: _session)
         | 
| 70 70 | 
             
                    end
         | 
| 71 71 | 
             
                    true
         | 
| 72 72 | 
             
                  end
         | 
| @@ -82,7 +82,7 @@ module Mongoid | |
| 82 82 | 
             
                  #
         | 
| 83 83 | 
             
                  # @since 4.0.0
         | 
| 84 84 | 
             
                  def delete_as_root
         | 
| 85 | 
            -
                    collection.find(atomic_selector).delete_one(session:  | 
| 85 | 
            +
                    collection.find(atomic_selector).delete_one(session: _session)
         | 
| 86 86 | 
             
                    true
         | 
| 87 87 | 
             
                  end
         | 
| 88 88 |  | 
| @@ -134,9 +134,9 @@ module Mongoid | |
| 134 134 | 
             
                      unless updates.empty?
         | 
| 135 135 | 
             
                        coll = collection(_root)
         | 
| 136 136 | 
             
                        selector = atomic_selector
         | 
| 137 | 
            -
                        coll.find(selector).update_one(positionally(selector, updates), session:  | 
| 137 | 
            +
                        coll.find(selector).update_one(positionally(selector, updates), session: _session)
         | 
| 138 138 | 
             
                        conflicts.each_pair do |key, value|
         | 
| 139 | 
            -
                          coll.find(selector).update_one(positionally(selector, { key => value }), session:  | 
| 139 | 
            +
                          coll.find(selector).update_one(positionally(selector, { key => value }), session: _session)
         | 
| 140 140 | 
             
                        end
         | 
| 141 141 | 
             
                      end
         | 
| 142 142 | 
             
                    end
         | 
    
        data/lib/mongoid/reloadable.rb
    CHANGED
    
    | @@ -58,7 +58,7 @@ module Mongoid | |
| 58 58 | 
             
                #
         | 
| 59 59 | 
             
                # @since 2.3.2
         | 
| 60 60 | 
             
                def reload_root_document
         | 
| 61 | 
            -
                  {}.merge(collection.find({ _id: _id }, session:  | 
| 61 | 
            +
                  {}.merge(collection.find({ _id: _id }, session: _session).read(mode: :primary).first || {})
         | 
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
| 64 64 | 
             
                # Reload the embedded document.
         | 
| @@ -44,7 +44,7 @@ module Mongoid | |
| 44 44 | 
             
                    models.each do |model|
         | 
| 45 45 | 
             
                      unless model.embedded?
         | 
| 46 46 | 
             
                        begin
         | 
| 47 | 
            -
                          model.collection.indexes(session: model.send(: | 
| 47 | 
            +
                          model.collection.indexes(session: model.send(:_session)).each do |index|
         | 
| 48 48 | 
             
                            # ignore default index
         | 
| 49 49 | 
             
                            unless index['name'] == '_id_'
         | 
| 50 50 | 
             
                              key = index['key'].symbolize_keys
         | 
| @@ -77,7 +77,7 @@ module Mongoid | |
| 77 77 | 
             
                      indexes.each do |index|
         | 
| 78 78 | 
             
                        key = index['key'].symbolize_keys
         | 
| 79 79 | 
             
                        collection = model.collection
         | 
| 80 | 
            -
                        collection.indexes(session: model.send(: | 
| 80 | 
            +
                        collection.indexes(session: model.send(:_session)).drop_one(key)
         | 
| 81 81 | 
             
                        logger.info(
         | 
| 82 82 | 
             
                          "MONGOID: Removed index '#{index['name']}' on collection " +
         | 
| 83 83 | 
             
                          "'#{collection.name}' in database '#{collection.database.name}'."
         | 
    
        data/lib/mongoid/version.rb
    CHANGED
    
    
| @@ -2544,6 +2544,25 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do | |
| 2544 2544 | 
             
                    person.addresses.create(street: "hermannstr")
         | 
| 2545 2545 | 
             
                  end
         | 
| 2546 2546 |  | 
| 2547 | 
            +
                  context "when the number is zero" do
         | 
| 2548 | 
            +
             | 
| 2549 | 
            +
                    let!(:popped) do
         | 
| 2550 | 
            +
                      person.addresses.pop(0)
         | 
| 2551 | 
            +
                    end
         | 
| 2552 | 
            +
             | 
| 2553 | 
            +
                    it "returns an empty array" do
         | 
| 2554 | 
            +
                      expect(popped).to eq([])
         | 
| 2555 | 
            +
                    end
         | 
| 2556 | 
            +
             | 
| 2557 | 
            +
                    it "does not remove the document from the relation" do
         | 
| 2558 | 
            +
                      expect(person.addresses).to eq([ address_one, address_two ])
         | 
| 2559 | 
            +
                    end
         | 
| 2560 | 
            +
             | 
| 2561 | 
            +
                    it "does not persist the pop" do
         | 
| 2562 | 
            +
                      expect(person.reload.addresses).to eq([ address_one, address_two ])
         | 
| 2563 | 
            +
                    end
         | 
| 2564 | 
            +
                  end
         | 
| 2565 | 
            +
             | 
| 2547 2566 | 
             
                  context "when the number is not larger than the relation" do
         | 
| 2548 2567 |  | 
| 2549 2568 | 
             
                    let!(:popped) do
         | 
| @@ -2601,6 +2620,125 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do | |
| 2601 2620 | 
             
                end
         | 
| 2602 2621 | 
             
              end
         | 
| 2603 2622 |  | 
| 2623 | 
            +
              describe "#shift" do
         | 
| 2624 | 
            +
             | 
| 2625 | 
            +
                let(:person) do
         | 
| 2626 | 
            +
                  Person.create
         | 
| 2627 | 
            +
                end
         | 
| 2628 | 
            +
             | 
| 2629 | 
            +
                context "when no argument is provided" do
         | 
| 2630 | 
            +
             | 
| 2631 | 
            +
                  let!(:address_one) do
         | 
| 2632 | 
            +
                    person.addresses.create(street: "sonnenallee")
         | 
| 2633 | 
            +
                  end
         | 
| 2634 | 
            +
             | 
| 2635 | 
            +
                  let!(:address_two) do
         | 
| 2636 | 
            +
                    person.addresses.create(street: "hermannstr")
         | 
| 2637 | 
            +
                  end
         | 
| 2638 | 
            +
             | 
| 2639 | 
            +
                  let!(:shifted) do
         | 
| 2640 | 
            +
                    person.addresses.shift
         | 
| 2641 | 
            +
                  end
         | 
| 2642 | 
            +
             | 
| 2643 | 
            +
                  it "returns the shifted document" do
         | 
| 2644 | 
            +
                    expect(shifted).to eq(address_one)
         | 
| 2645 | 
            +
                  end
         | 
| 2646 | 
            +
             | 
| 2647 | 
            +
                  it "removes the document from the relation" do
         | 
| 2648 | 
            +
                    expect(person.addresses).to eq([ address_two ])
         | 
| 2649 | 
            +
                  end
         | 
| 2650 | 
            +
             | 
| 2651 | 
            +
                  it "persists the shift" do
         | 
| 2652 | 
            +
                    expect(person.reload.addresses).to eq([ address_two ])
         | 
| 2653 | 
            +
                  end
         | 
| 2654 | 
            +
                end
         | 
| 2655 | 
            +
             | 
| 2656 | 
            +
                context "when an integer is provided" do
         | 
| 2657 | 
            +
             | 
| 2658 | 
            +
                  let!(:address_one) do
         | 
| 2659 | 
            +
                    person.addresses.create(street: "sonnenallee")
         | 
| 2660 | 
            +
                  end
         | 
| 2661 | 
            +
             | 
| 2662 | 
            +
                  let!(:address_two) do
         | 
| 2663 | 
            +
                    person.addresses.create(street: "hermannstr")
         | 
| 2664 | 
            +
                  end
         | 
| 2665 | 
            +
             | 
| 2666 | 
            +
                  context "when the number is zero" do
         | 
| 2667 | 
            +
             | 
| 2668 | 
            +
                    let!(:shifted) do
         | 
| 2669 | 
            +
                      person.addresses.shift(0)
         | 
| 2670 | 
            +
                    end
         | 
| 2671 | 
            +
             | 
| 2672 | 
            +
                    it "returns an empty array" do
         | 
| 2673 | 
            +
                      expect(shifted).to eq([])
         | 
| 2674 | 
            +
                    end
         | 
| 2675 | 
            +
             | 
| 2676 | 
            +
                    it "does not remove the document from the relation" do
         | 
| 2677 | 
            +
                      expect(person.addresses).to eq([ address_one, address_two ])
         | 
| 2678 | 
            +
                    end
         | 
| 2679 | 
            +
             | 
| 2680 | 
            +
                    it "does not persist the shift" do
         | 
| 2681 | 
            +
                      expect(person.reload.addresses).to eq([ address_one, address_two ])
         | 
| 2682 | 
            +
                    end
         | 
| 2683 | 
            +
                  end
         | 
| 2684 | 
            +
             | 
| 2685 | 
            +
                  context "when the number is not larger than the relation" do
         | 
| 2686 | 
            +
             | 
| 2687 | 
            +
                    let!(:shifted) do
         | 
| 2688 | 
            +
                      person.addresses.shift(2)
         | 
| 2689 | 
            +
                    end
         | 
| 2690 | 
            +
             | 
| 2691 | 
            +
                    it "returns the shifted documents" do
         | 
| 2692 | 
            +
                      expect(shifted).to eq([ address_one, address_two ])
         | 
| 2693 | 
            +
                    end
         | 
| 2694 | 
            +
             | 
| 2695 | 
            +
                    it "removes the document from the relation" do
         | 
| 2696 | 
            +
                      expect(person.addresses).to be_empty
         | 
| 2697 | 
            +
                    end
         | 
| 2698 | 
            +
             | 
| 2699 | 
            +
                    it "persists the shift" do
         | 
| 2700 | 
            +
                      expect(person.reload.addresses).to be_empty
         | 
| 2701 | 
            +
                    end
         | 
| 2702 | 
            +
                  end
         | 
| 2703 | 
            +
             | 
| 2704 | 
            +
                  context "when the number is larger than the relation" do
         | 
| 2705 | 
            +
             | 
| 2706 | 
            +
                    let!(:shifted) do
         | 
| 2707 | 
            +
                      person.addresses.shift(4)
         | 
| 2708 | 
            +
                    end
         | 
| 2709 | 
            +
             | 
| 2710 | 
            +
                    it "returns the shifted documents" do
         | 
| 2711 | 
            +
                      expect(shifted).to eq([ address_one, address_two ])
         | 
| 2712 | 
            +
                    end
         | 
| 2713 | 
            +
             | 
| 2714 | 
            +
                    it "removes the document from the relation" do
         | 
| 2715 | 
            +
                      expect(person.addresses).to be_empty
         | 
| 2716 | 
            +
                    end
         | 
| 2717 | 
            +
             | 
| 2718 | 
            +
                    it "persists the shift" do
         | 
| 2719 | 
            +
                      expect(person.reload.addresses).to be_empty
         | 
| 2720 | 
            +
                    end
         | 
| 2721 | 
            +
                  end
         | 
| 2722 | 
            +
                end
         | 
| 2723 | 
            +
             | 
| 2724 | 
            +
                context "when the relation is empty" do
         | 
| 2725 | 
            +
             | 
| 2726 | 
            +
                  context "when providing no number" do
         | 
| 2727 | 
            +
             | 
| 2728 | 
            +
                    it "returns nil" do
         | 
| 2729 | 
            +
                      expect(person.addresses.shift).to be_nil
         | 
| 2730 | 
            +
                    end
         | 
| 2731 | 
            +
                  end
         | 
| 2732 | 
            +
             | 
| 2733 | 
            +
                  context "when providing a number" do
         | 
| 2734 | 
            +
             | 
| 2735 | 
            +
                    it "returns nil" do
         | 
| 2736 | 
            +
                      expect(person.addresses.shift(2)).to be_nil
         | 
| 2737 | 
            +
                    end
         | 
| 2738 | 
            +
                  end
         | 
| 2739 | 
            +
                end
         | 
| 2740 | 
            +
              end
         | 
| 2741 | 
            +
             | 
| 2604 2742 | 
             
              describe "#scoped" do
         | 
| 2605 2743 |  | 
| 2606 2744 | 
             
                let(:person) do
         | 
| @@ -3788,7 +3926,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do | |
| 3788 3926 | 
             
                end
         | 
| 3789 3927 | 
             
              end
         | 
| 3790 3928 |  | 
| 3791 | 
            -
              context "#delete or #clear with before_remove callback" do
         | 
| 3929 | 
            +
              context "#delete, or #clear, or #pop, or #shift with before_remove callback" do
         | 
| 3792 3930 |  | 
| 3793 3931 | 
             
                let(:artist) do
         | 
| 3794 3932 | 
             
                  Artist.new
         | 
| @@ -3834,35 +3972,81 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do | |
| 3834 3972 | 
             
                    end
         | 
| 3835 3973 | 
             
                  end
         | 
| 3836 3974 |  | 
| 3837 | 
            -
                   | 
| 3975 | 
            +
                  describe "#pop" do
         | 
| 3838 3976 |  | 
| 3839 3977 | 
             
                    before do
         | 
| 3840 | 
            -
                       | 
| 3978 | 
            +
                      artist.songs.pop
         | 
| 3841 3979 | 
             
                    end
         | 
| 3842 3980 |  | 
| 3843 | 
            -
                     | 
| 3981 | 
            +
                    it "executes the callback" do
         | 
| 3982 | 
            +
                      artist.songs.pop
         | 
| 3983 | 
            +
                      expect(artist.before_remove_embedded_called).to be true
         | 
| 3984 | 
            +
                    end
         | 
| 3985 | 
            +
                  end
         | 
| 3844 3986 |  | 
| 3845 | 
            -
             | 
| 3846 | 
            -
             | 
| 3847 | 
            -
             | 
| 3848 | 
            -
                       | 
| 3987 | 
            +
                  describe "#shift" do
         | 
| 3988 | 
            +
             | 
| 3989 | 
            +
                    before do
         | 
| 3990 | 
            +
                      artist.songs.shift
         | 
| 3849 3991 | 
             
                    end
         | 
| 3850 3992 |  | 
| 3851 | 
            -
                     | 
| 3993 | 
            +
                    it "executes the callback" do
         | 
| 3994 | 
            +
                      artist.songs.shift
         | 
| 3995 | 
            +
                      expect(artist.before_remove_embedded_called).to be true
         | 
| 3996 | 
            +
                    end
         | 
| 3997 | 
            +
                  end
         | 
| 3998 | 
            +
                end
         | 
| 3852 3999 |  | 
| 3853 | 
            -
             | 
| 3854 | 
            -
                        begin; artist.songs.clear; rescue; end
         | 
| 3855 | 
            -
                      end
         | 
| 4000 | 
            +
                context "when errors are raised" do
         | 
| 3856 4001 |  | 
| 3857 | 
            -
             | 
| 3858 | 
            -
             | 
| 3859 | 
            -
             | 
| 4002 | 
            +
                  before do
         | 
| 4003 | 
            +
                    expect(artist).to receive(:before_remove_song).and_raise
         | 
| 4004 | 
            +
                  end
         | 
| 4005 | 
            +
             | 
| 4006 | 
            +
                  describe "#delete" do
         | 
| 4007 | 
            +
             | 
| 4008 | 
            +
                    it "does not remove the document from the relation" do
         | 
| 4009 | 
            +
                      begin; artist.songs.delete(song); rescue; end
         | 
| 4010 | 
            +
                      expect(artist.songs).to eq([ song ])
         | 
| 4011 | 
            +
                    end
         | 
| 4012 | 
            +
                  end
         | 
| 4013 | 
            +
             | 
| 4014 | 
            +
                  describe "#clear" do
         | 
| 4015 | 
            +
             | 
| 4016 | 
            +
                    before do
         | 
| 4017 | 
            +
                      begin; artist.songs.clear; rescue; end
         | 
| 4018 | 
            +
                    end
         | 
| 4019 | 
            +
             | 
| 4020 | 
            +
                    it "removes the documents from the relation" do
         | 
| 4021 | 
            +
                      expect(artist.songs).to eq([ song ])
         | 
| 4022 | 
            +
                    end
         | 
| 4023 | 
            +
                  end
         | 
| 4024 | 
            +
             | 
| 4025 | 
            +
                  describe "#pop" do
         | 
| 4026 | 
            +
             | 
| 4027 | 
            +
                    before do
         | 
| 4028 | 
            +
                      begin; artist.songs.pop; rescue; end
         | 
| 4029 | 
            +
                    end
         | 
| 4030 | 
            +
             | 
| 4031 | 
            +
                    it "should remove from collection" do
         | 
| 4032 | 
            +
                      expect(artist.songs).to eq([ song ])
         | 
| 4033 | 
            +
                    end
         | 
| 4034 | 
            +
                  end
         | 
| 4035 | 
            +
             | 
| 4036 | 
            +
                  describe "#shift" do
         | 
| 4037 | 
            +
             | 
| 4038 | 
            +
                    before do
         | 
| 4039 | 
            +
                      begin; artist.songs.shift; rescue; end
         | 
| 4040 | 
            +
                    end
         | 
| 4041 | 
            +
             | 
| 4042 | 
            +
                    it "should remove from collection" do
         | 
| 4043 | 
            +
                      expect(artist.songs).to eq([ song ])
         | 
| 3860 4044 | 
             
                    end
         | 
| 3861 4045 | 
             
                  end
         | 
| 3862 4046 | 
             
                end
         | 
| 3863 4047 | 
             
              end
         | 
| 3864 4048 |  | 
| 3865 | 
            -
              context "#delete or #clear with after_remove callback" do
         | 
| 4049 | 
            +
              context "#delete, or #clear, or #pop, or #shift with after_remove callback" do
         | 
| 3866 4050 |  | 
| 3867 4051 | 
             
                let(:artist) do
         | 
| 3868 4052 | 
             
                  Artist.new
         | 
| @@ -3899,6 +4083,30 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do | |
| 3899 4083 | 
             
                      expect(artist.after_remove_embedded_called).to be true
         | 
| 3900 4084 | 
             
                    end
         | 
| 3901 4085 | 
             
                  end
         | 
| 4086 | 
            +
             | 
| 4087 | 
            +
                  describe "#pop" do
         | 
| 4088 | 
            +
             | 
| 4089 | 
            +
                    before do
         | 
| 4090 | 
            +
                      artist.labels.pop
         | 
| 4091 | 
            +
                    end
         | 
| 4092 | 
            +
             | 
| 4093 | 
            +
                    it "executes the callback" do
         | 
| 4094 | 
            +
                      artist.labels.pop
         | 
| 4095 | 
            +
                      expect(artist.after_remove_embedded_called).to be true
         | 
| 4096 | 
            +
                    end
         | 
| 4097 | 
            +
                  end
         | 
| 4098 | 
            +
             | 
| 4099 | 
            +
                  describe "#shift" do
         | 
| 4100 | 
            +
             | 
| 4101 | 
            +
                    before do
         | 
| 4102 | 
            +
                      artist.labels.shift
         | 
| 4103 | 
            +
                    end
         | 
| 4104 | 
            +
             | 
| 4105 | 
            +
                    it "executes the callback" do
         | 
| 4106 | 
            +
                      artist.labels.shift
         | 
| 4107 | 
            +
                      expect(artist.after_remove_embedded_called).to be true
         | 
| 4108 | 
            +
                    end
         | 
| 4109 | 
            +
                  end
         | 
| 3902 4110 | 
             
                end
         | 
| 3903 4111 |  | 
| 3904 4112 | 
             
                context "when errors are raised" do
         | 
| @@ -3928,6 +4136,28 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do | |
| 3928 4136 | 
             
                      expect(artist.labels).to be_empty
         | 
| 3929 4137 | 
             
                    end
         | 
| 3930 4138 | 
             
                  end
         | 
| 4139 | 
            +
             | 
| 4140 | 
            +
                  describe "#pop" do
         | 
| 4141 | 
            +
             | 
| 4142 | 
            +
                    before do
         | 
| 4143 | 
            +
                      begin; artist.labels.pop; rescue; end
         | 
| 4144 | 
            +
                    end
         | 
| 4145 | 
            +
             | 
| 4146 | 
            +
                    it "should remove from collection" do
         | 
| 4147 | 
            +
                      expect(artist.labels).to be_empty
         | 
| 4148 | 
            +
                    end
         | 
| 4149 | 
            +
                  end
         | 
| 4150 | 
            +
             | 
| 4151 | 
            +
                  describe "#shift" do
         | 
| 4152 | 
            +
             | 
| 4153 | 
            +
                    before do
         | 
| 4154 | 
            +
                      begin; artist.labels.shift; rescue; end
         | 
| 4155 | 
            +
                    end
         | 
| 4156 | 
            +
             | 
| 4157 | 
            +
                    it "should remove from collection" do
         | 
| 4158 | 
            +
                      expect(artist.labels).to be_empty
         | 
| 4159 | 
            +
                    end
         | 
| 4160 | 
            +
                  end
         | 
| 3931 4161 | 
             
                end
         | 
| 3932 4162 | 
             
              end
         | 
| 3933 4163 |  | 
    
        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: 7.0. | 
| 4 | 
            +
              version: 7.0.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Durran Jordan
         | 
| @@ -30,7 +30,7 @@ cert_chain: | |
| 30 30 | 
             
              fxN/GvhskJEgmdQToxEBRLOu5/udtPpVe/hb3gk5hzsxcWuKN/VTi4SbtFQdz9cq
         | 
| 31 31 | 
             
              fqd6ctFDOqcJmOYdlSRgb9g8zm4BiNgFWPBSk8NsP7c=
         | 
| 32 32 | 
             
              -----END CERTIFICATE-----
         | 
| 33 | 
            -
            date: 2018- | 
| 33 | 
            +
            date: 2018-05-04 00:00:00.000000000 Z
         | 
| 34 34 | 
             
            dependencies:
         | 
| 35 35 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 36 36 | 
             
              name: activemodel
         | 
    
        metadata.gz.sig
    CHANGED
    
    | Binary file |