Sha256: 973279668f6c2b6727e29ec519dfcfa9745365810d04f6afdd2e56c35e1c65e6

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

module Hist
  class Pending < Hist::ApplicationRecord

    self.table_name = "hist_pendings"

    def self.start_pending
      ActiveRecord::Base.transaction do
        yield
        raise ActiveRecord::Rollback, "Don't save pending object changes"
      end
    end

    def self.get_new_raw(klass:, user: nil, extra: nil, only: 'kept')
      if user.nil?
        if extra.nil?
          versions = self.where(model: Hist.model(klass: klass), obj_id: nil).send(only).reverse
        else
          versions = self.where(model: Hist.model(klass: klass), obj_id: nil, extra: extra).send(only).reverse
        end

      else
        if extra.nil?
          # .to_s to support either user object or username
          versions = self.where(model: Hist.model(klass: klass), obj_id: nil, user: user.to_s).send(only).reverse
        else
          # .to_s to support either user object or username
          versions = self.where(model: Hist.model(klass: klass), obj_id: nil, user: user.to_s, extra: extra).send(only).reverse
        end
      end

      versions
    end

    def self.get_new(klass:, user: nil, extra: nil, only: 'kept')
      hash_versions = self.get_new_raw(klass: klass, user: user, extra: extra, only: only)
      versions = hash_versions.map {|v| v.reify }
      versions
    end

    def self.put(obj:, user: nil, extra: nil)
      # Trim old pendings
      # TODO: make this more efficient
      if obj.class.base_class.hist_config.max_pendings >= 0
        versions = self.class.raw_get(obj: obj, only: 'discarded')
        if versions.size >= obj.class.base_class.hist_config.max_pendings
          versions.last.destroy!
        end
      end

      super
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hist-0.2.0 app/models/hist/pending.rb