module Approvable::ActsAsApprovable::ClassMethods

Public Instance Methods

acts_as_approvable(**options) click to toggle source
# File lib/approvable/acts_as_approvable.rb, line 9
def acts_as_approvable **options      
  include Approvable::ActsAsApprovable::LocalInstanceMethods

  has_many :change_requests, as: :approvable, class_name: 'Approvable::ChangeRequest', dependent: :destroy
  has_one :current_change_request, -> {where.not(state: 'approved') }, as: :approvable, class_name: 'Approvable::ChangeRequest', autosave: true
  
  before_save :apply_changes, if: :auto_approve?
  after_save :force_approve!, if: :auto_approve?
  
  cattr_accessor :filter_attrs, :filter_type
  if options[:except]
    self.filter_type = :except
    self.filter_attrs = options[:except]
  elsif options[:only]
    self.filter_type = :only
    self.filter_attrs = options[:only]
  else
    self.filter_type = :except
    self.filter_attrs = []
  end
          
  unless method_defined?(:assign_attributes_without_change_request)
    alias_method_chain :assign_attributes, :change_request
    alias_method :attributes=, :assign_attributes_with_change_request
    
  end
end