Module: Trackzor::ClassMethods

Defined in:
lib/trackzor.rb

Instance Method Summary collapse

Instance Method Details

#trackzored(options = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
48
49
50
51
52
# File 'lib/trackzor.rb', line 7

def trackzored(options = {})
  class_inheritable_reader :trackzor_exempt_columns
  class_inheritable_reader :trackzor_maintained_columns
  class_inheritable_reader :trackzored_columns

  if options[:only]
    except = self.column_names - options[:only].flatten.map(&:to_s)
  else
    except = [self.primary_key, inheritance_column, 'lock_version', 'created_at', 'updated_at']
    except |= Array(options[:except]).collect(&:to_s) if options[:except]
  end
  write_inheritable_attribute :trackzor_exempt_columns, except

  the_trackzored_columns = []
  the_trackzor_maintained_columns = []

  # create ATTR_source associations
  (self.column_names - self.trackzor_exempt_columns).each do |column|
    has_updated_by_col = self.column_names.include?("#{column}_updated_by")
    has_updated_at_col = self.column_names.include?("#{column}_updated_at")

    if has_updated_by_col || has_updated_at_col
      the_trackzored_columns << column
      
      if has_updated_by_col
        belongs_to "#{column}_source".to_sym, :class_name => 'User', :foreign_key => "#{column}_updated_by"
        the_trackzor_maintained_columns << "#{column}_updated_by"
      end

      if has_updated_at_col
        the_trackzor_maintained_columns << "#{column}_updated_at"
      end
    end
  end
  write_inheritable_attribute :trackzored_columns, the_trackzored_columns
  write_inheritable_attribute :trackzor_maintained_columns, the_trackzor_maintained_columns

  if self.respond_to?(:non_audited_columns)
    nac = self.non_audited_columns + the_trackzor_maintained_columns
    write_inheritable_attribute :non_audited_columns, nac
  end

  validate :trackzor_assign_and_validate

  include Trackzor::InstanceMethods
end