Sha256: efc5661ec2bb036436c63ba0dbc05ade34f5c0f8a6dea3a8f4f2f1f63305264b

Contents?: true

Size: 945 Bytes

Versions: 6

Compression:

Stored size: 945 Bytes

Contents

class Disposable::Twin
  module Property
    # Twin that uses a hash to populate.
    #
    #   Twin.new(id: 1)
    module Struct
      def read_value_for(dfn, options)
        name = dfn[:name]
        # TODO: test sym vs. str.
        return unless key_value = model.to_h.find { |k, _| k.to_sym == name.to_sym }
        key_value.last
      end

      def sync_hash_representer # TODO: make this without representable, please.
        Sync.hash_representer(self.class) do |dfn|
          dfn.merge!(
            prepare:       lambda { |options| options[:input] },
            serialize: lambda { |options| options[:input].sync! },
            representable: true
          ) if dfn[:nested]
        end
      end

      def sync(options={})
        sync_hash_representer.new(self).to_hash
      end
      alias_method :sync!, :sync

      # So far, hashes can't be persisted separately.
      def save!
      end
    end
  end # Property
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
disposable-0.6.3 lib/disposable/twin/property/struct.rb
disposable-0.6.2 lib/disposable/twin/property/struct.rb
disposable-0.6.1 lib/disposable/twin/property/struct.rb
disposable-0.6.0 lib/disposable/twin/property/struct.rb
disposable-0.5.0 lib/disposable/twin/property/struct.rb
disposable-0.4.7 lib/disposable/twin/property/struct.rb