Sha256: 43934dd137d8d03e92e913599db185455d2f94a9bf5c3871c1b28104c2188cde

Contents?: true

Size: 1.63 KB

Versions: 18

Compression:

Stored size: 1.63 KB

Contents

module Intercom
  module Lib
    module DynamicAccessors

      class << self

        def define_accessors(attribute, value, object)
          klass = object.class
          if attribute.to_s.end_with? '_at'
            define_date_based_accessors(attribute, value, klass)
          elsif object.flat_store_attribute?(attribute)
            define_flat_store_based_accessors(attribute, value, klass)
          else
            define_standard_accessors(attribute, value, klass)
          end
        end

        private

        def define_flat_store_based_accessors(attribute, value, klass)
          klass.class_eval %Q"
            def #{attribute}=(value)
              mark_field_as_changed!(:#{attribute})
              @#{attribute} = Intercom::Lib::FlatStore.new(value)
            end
            def #{attribute}
              @#{attribute}
            end
          "
        end

        def define_date_based_accessors(attribute, value, klass)
          klass.class_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

        def define_standard_accessors(attribute, value, klass)
            klass.class_eval %Q"
              def #{attribute}=(value)
                mark_field_as_changed!(:#{attribute})
                @#{attribute} = value
              end
              def #{attribute}
                @#{attribute}
              end
            "
        end

      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
intercom-2.4.0 lib/intercom/lib/dynamic_accessors.rb
intercom-2.3.0 lib/intercom/lib/dynamic_accessors.rb
intercom-2.2.4 lib/intercom/lib/dynamic_accessors.rb
intercom-2.2.3 lib/intercom/lib/dynamic_accessors.rb
intercom-2.2.2 lib/intercom/lib/dynamic_accessors.rb
intercom-2.2.1 lib/intercom/lib/dynamic_accessors.rb
intercom-2.2.0 lib/intercom/lib/dynamic_accessors.rb
intercom-2.1.6 lib/intercom/lib/dynamic_accessors.rb
intercom-2.1.5 lib/intercom/lib/dynamic_accessors.rb
intercom-2.1.4 lib/intercom/lib/dynamic_accessors.rb
intercom-2.1.3 lib/intercom/lib/dynamic_accessors.rb
intercom-2.1.2 lib/intercom/lib/dynamic_accessors.rb
intercom-2.1.1 lib/intercom/lib/dynamic_accessors.rb
intercom-2.1.0 lib/intercom/lib/dynamic_accessors.rb
intercom-2.0.3 lib/intercom/lib/dynamic_accessors.rb
intercom-2.0.2 lib/intercom/lib/dynamic_accessors.rb
intercom-2.0.1 lib/intercom/lib/dynamic_accessors.rb
intercom-2.0.0 lib/intercom/lib/dynamic_accessors.rb