Sha256: 5fdf270e702f714026df4e29251792fb7fa699674135fbe04b09bd0a07f0e395

Contents?: true

Size: 1.18 KB

Versions: 14

Compression:

Stored size: 1.18 KB

Contents

require 'active_support/concern'

module RocketJob
  module Plugins
    # Base class for storing models in MongoDB
    module Document
      extend ActiveSupport::Concern
      include ::Mongoid::Document

      included do
        store_in client: 'rocketjob'
      end

      module ClassMethods
        # Mongoid does not apply ordering, add sort
        def first
          all.sort('_id' => 1).first
        end

        # Mongoid does not apply ordering, add sort
        def last
          all.sort('_id' => -1).first
        end
      end

      private

      # Apply changes to this document returning the updated document from the database.
      # Allows other changes to be made on the server that will be loaded.
      def find_and_update(attrs)
        doc = collection.find(_id: id).find_one_and_update({'$set' => attrs}, return_document: :after)
        raise(::Mongoid::Errors::DocumentNotFound.new(self.class, id)) unless doc

        # Clear out keys that are not returned during the reload from MongoDB
        (fields.keys + embedded_relations.keys - doc.keys).each { |key| send("#{key}=", nil) }
        @attributes = doc
        apply_defaults
        self
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
rocketjob-5.1.1 lib/rocket_job/plugins/document.rb
rocketjob-5.1.0 lib/rocket_job/plugins/document.rb
rocketjob-5.0.0 lib/rocket_job/plugins/document.rb
rocketjob-5.0.0.rc1 lib/rocket_job/plugins/document.rb
rocketjob-5.0.0.beta4 lib/rocket_job/plugins/document.rb
rocketjob-5.0.0.beta3 lib/rocket_job/plugins/document.rb
rocketjob-5.0.0.beta2 lib/rocket_job/plugins/document.rb
rocketjob-5.0.0.beta lib/rocket_job/plugins/document.rb
rocketjob-4.3.0.beta2 lib/rocket_job/plugins/document.rb
rocketjob-4.3.0.beta lib/rocket_job/plugins/document.rb
rocketjob-4.2.0 lib/rocket_job/plugins/document.rb
rocketjob-4.1.1 lib/rocket_job/plugins/document.rb
rocketjob-4.1.0 lib/rocket_job/plugins/document.rb
rocketjob-4.0.0 lib/rocket_job/plugins/document.rb