module Intercom::Lib::DynamicAccessors

Public Class Methods

define_accessors(attribute, value, object) click to toggle source
# File lib/intercom/lib/dynamic_accessors.rb, line 7
def define_accessors(attribute, value, object)
  if attribute.to_s.end_with?('_at') && attribute.to_s != 'update_last_request_at'
    define_date_based_accessors(attribute, value, object)
  elsif object.flat_store_attribute?(attribute)
    define_flat_store_based_accessors(attribute, value, object)
  else
    define_standard_accessors(attribute, value, object)
  end
end

Private Class Methods

define_date_based_accessors(attribute, value, object) click to toggle source
# File lib/intercom/lib/dynamic_accessors.rb, line 31
def define_date_based_accessors(attribute, value, object)
  object.instance_eval %Q"
    def #{attribute}=(value)
      mark_field_as_changed!(:#{attribute})
      @#{attribute} = value.nil? ? nil : value.to_i
    end
    def #{attribute}
      @#{attribute}.nil? ? nil : Time.at(@#{attribute})
    end
  "
end
define_flat_store_based_accessors(attribute, value, object) click to toggle source
# File lib/intercom/lib/dynamic_accessors.rb, line 19
def define_flat_store_based_accessors(attribute, value, object)
  object.instance_eval %Q"
    def #{attribute}=(value)
      mark_field_as_changed!(:#{attribute})
      @#{attribute} = Intercom::Lib::FlatStore.new(value)
    end
    def #{attribute}
      @#{attribute}
    end
  "
end
define_standard_accessors(attribute, value, object) click to toggle source
# File lib/intercom/lib/dynamic_accessors.rb, line 43
def define_standard_accessors(attribute, value, object)
    object.instance_eval %Q"
      def #{attribute}=(value)
        mark_field_as_changed!(:#{attribute})
        @#{attribute} = value
      end
      def #{attribute}
        @#{attribute}
      end
    "
end