Module: LogChanges::Base

Extended by:
ActiveSupport::Concern
Defined in:
lib/log_changes/base.rb

Instance Method Summary collapse

Instance Method Details

#build_changes_strObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/log_changes/base.rb', line 21

def build_changes_str
  bt_assocs = self.class.reflect_on_all_associations(:belongs_to).map{|a| [a.options[:foreign_key].present? ? a.options[:foreign_key].to_s : "#{a.name}_id".to_s, {name: a.name, class: a.options[:polymorphic].present? ? nil : a.klass}]}.to_h

  @is_new_record = new_record?
  h = {}
  changes.each do |k, vals|
    bt_assoc = bt_assocs[k.to_s]
    if bt_assoc.present?
      h[bt_assoc[:name]] = []
      vals.each do |val|
        if bt_assoc[:class].nil?
          h[bt_assoc[:name]] << val
        else
          v = bt_assoc[:class].find_by_id( val )
          h[bt_assoc[:name]] << "{class: #{bt_assoc[:class].name}, id: #{val}} #{stringify_value(v)}"
        end
      end
    else
      h[k] = vals.map{|v| stringify_value(v)}
    end
  end
  @change_log_str = if new_record?
    h.map{|key_pair| "  #{key_pair[0]}: #{key_pair[1][1]}"}.join("\n")
  else
    h.map{|key_pair| "  #{key_pair[0]}:\n    FROM: #{key_pair[1][0]}\n    TO: #{key_pair[1][1]}"}.join("\n")
  end
end

#log_changesObject

TODO: add created_by, created_at, updated_by, and updated_at



11
12
13
14
15
16
17
18
19
# File 'lib/log_changes/base.rb', line 11

def log_changes
  log_str = (@is_new_record ? 'New' : 'Updated') + " #{self.class.name} {id: #{id}} #{to_s}\n"
  log_str += @change_log_str if @change_log_str
  sr_log(
    self.class.name,
    "#{Time.zone.now.strftime('%-m/%-d/%Y at %-l:%M %p (%Z)')}\n#{log_str}",
    dir: Rails.root.join('log', 'record_changes').to_s
  )
end

#stringify_value(val) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/log_changes/base.rb', line 49

def stringify_value val
  case
    when val.nil?
      'nil'
    when val.is_a?(Time) || val.is_a?(ActiveSupport::TimeWithZone)
      val.strftime('%-m/%-d/%Y at %-l:%M %p (%Z)')
    else
      val.to_s
  end
end