Sha256: 166b2d147755ef511ce892fbfa37ad8adee30d14a2f099edf30baea81610f46e

Contents?: true

Size: 903 Bytes

Versions: 1

Compression:

Stored size: 903 Bytes

Contents

module ActiveData
  module Model
    module Attributes
      class ReferenceOne < Base
        def write value
          pollute do
            previous = type_casted_value
            result = write_value value
            if (!value.nil? && type_casted_value.nil?) || type_casted_value != previous
              association.reset
            end
            result
          end
        end

        def read
          if association.target
            association.identify
          else
            type_casted_value
          end
        end

        def read_before_type_cast
          @value_cache
        end

      private

        def type_casted_value
          variable_cache(:value) do
            typecast(read_before_type_cast)
          end
        end

        def association
          @association ||= owner.association(reflection.association)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_data-1.0.0 lib/active_data/model/attributes/reference_one.rb