module Redmine::Acts::Journalized::ClassMethods

Public Instance Methods

acts_as_journalized(options = {}) click to toggle source
# File lib/acts_as_journalized/acts_as_journalized.rb, line 11
def acts_as_journalized(options = {})
  cattr_accessor :journalized_options, :journalized_attribute_names

  options.assert_valid_keys(
      :excepted_attributes,
      :name,
      :scope,
      :find_options
  )

  excepted_attributes =
      options.delete(:excepted_attributes) || %w(id updated_at updated_on)

  self.journalized_attribute_names = column_names - excepted_attributes

  self.journalized_options =
      {
          name: 'journals',
          scope: -> { all },
          find_options: {}
      }.merge(options)

  find_options =
      {
          class_name: 'Journal',
          as: :journalized,
          dependent: :destroy
      }.merge(journalized_options[:find_options])

  send :include, Redmine::Acts::Journalized::Callbacks

  has_many journalized_options[:name].to_sym,
           journalized_options[:scope],
           find_options

  after_create :create_journal_on_create
  after_update :create_journal_on_update
end