module SelfUpdatedAt::ClassMethods

Public Instance Methods

self_updated_at(update_column_name, columns: [], methods: []) click to toggle source
# File lib/self_updated_at.rb, line 30
def self_updated_at(update_column_name, columns: [], methods: [])
  before_create do
    current_time = self.class.default_timezone == :utc ? Time.now.utc : Time.now
    write_attribute(update_column_name, current_time) if eval("#{update_column_name}.nil?")
    self
  end
  before_update do
    current_time = self.class.default_timezone == :utc ? Time.now.utc : Time.now
    # for ActiveRecord ~> 5.1
    if Gem::Version.new(ActiveRecord.version) >= Gem::Version.new('5.1')
      columns_changed = columns.any? { |c| will_save_change_to_attribute?(c)  }
    else
      columns_changed = columns.any? { |c| attribute_changed?(c)  }
    end
    if (columns_changed || methods.any? { |m| send(m) })
      write_attribute(update_column_name, current_time)
    end
    self
  end
end