Class: Hist::Pending

Inherits:
ApplicationRecord show all
Defined in:
app/models/hist/pending.rb

Class Method Summary collapse

Methods inherited from ApplicationRecord

decode, encode, fix_save_associations, get, include_keys, only_hash_diffs, raw_get, #reify, remove_key, to_json, to_yaml, #without_persisting

Class Method Details

.get_new(klass:, user: nil, extra: nil, only: 'kept') ⇒ Object



34
35
36
37
38
# File 'app/models/hist/pending.rb', line 34

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

.get_new_raw(klass:, user: nil, extra: nil, only: 'kept') ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/models/hist/pending.rb', line 13

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

.put(obj:, user: nil, extra: nil) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/models/hist/pending.rb', line 40

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

.start_pendingObject



6
7
8
9
10
11
# File 'app/models/hist/pending.rb', line 6

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