Sha256: 04534748d464024ba967dd32ba269716b3b231c24bc92d4c3032f54d3d942f30

Contents?: true

Size: 1.61 KB

Versions: 9

Compression:

Stored size: 1.61 KB

Contents

module ActiveData
  module Model
    module Attributes
      class Represents < Attribute
        delegate :reader, :reader_before_type_cast, :writer, to: :reflection

        def write(value)
          return if readonly?
          pollute do
            reset
            reference.send(writer, value)
          end
        end

        def reset
          super
          remove_variable(:cached_value, :cached_value_before_type_cast)
        end

        def read
          reset if cached_value != read_value
          variable_cache(:value) do
            normalize(enumerize(defaultize(cached_value, read_before_type_cast)))
          end
        end

        def read_before_type_cast
          reset if cached_value_before_type_cast != read_value_before_type_cast
          variable_cache(:value_before_type_cast) do
            defaultize(cached_value_before_type_cast)
          end
        end

      private

        def reference
          owner.send(reflection.reference)
        end

        def read_value
          ref = reference
          ref.public_send(reader) if ref
        end

        def cached_value
          variable_cache(:cached_value) { read_value }
        end

        def read_value_before_type_cast
          ref = reference
          return unless ref
          if ref.respond_to?(reader_before_type_cast)
            ref.public_send(reader_before_type_cast)
          else
            ref.public_send(reader)
          end
        end

        def cached_value_before_type_cast
          variable_cache(:cached_value_before_type_cast) { read_value_before_type_cast }
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
active_data-1.2.0 lib/active_data/model/attributes/represents.rb
active_data-1.1.7 lib/active_data/model/attributes/represents.rb
active_data-1.1.6 lib/active_data/model/attributes/represents.rb
active_data-1.1.5 lib/active_data/model/attributes/represents.rb
active_data-1.1.4 lib/active_data/model/attributes/represents.rb
active_data-1.1.3 lib/active_data/model/attributes/represents.rb
active_data-1.1.2 lib/active_data/model/attributes/represents.rb
active_data-1.1.1 lib/active_data/model/attributes/represents.rb
active_data-1.1.0 lib/active_data/model/attributes/represents.rb