Sha256: aaa44a0684be45ee4458a1d86d4d1caf01a84cff717563d985194aabe10aa184

Contents?: true

Size: 1.38 KB

Versions: 2

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

module Dolly
  module PropertyManager
    def build_property(attributes)
      assign_identity_properties(attributes)
      assign_rev_properties(attributes)

      lambda do |property|
        name = property.key
        next unless doc[name].nil?

        write_attribute(name, attributes[name])
      end
    end

    def update_attribute
      lambda do |(key, value)|
        raise InvalidProperty, "Invalid property: #{key}" unless valid_property?(key)

        write_attribute(key, value)
      end
    end

    def write_attribute(key, value)
      casted_value = set_property_value(key, value)
      instance_variable_set(:"@#{key}", casted_value)
      update_doc(key)
    end

    def valid_property?(name)
      properties.include?(name.to_sym)
    end

    def update_doc(key, _value = nil)
      doc.regular_writer(key.to_s, instance_variable_get(:"@#{key}"))
    end

    def properties
      self.class.properties
    end

    def set_property_value(key, value)
      properties[key].cast_value(value)
    end

    def assign_identity_properties(opts = {})
      id_presence = opts[:id] || opts[:_id] || opts['id'] || opts['_id']
      self.id = id_presence if id_presence
    end

    def assign_rev_properties(opts = {})
      rev_presence = opts[:rev] || opts [:_rev] || opts['rev'] || opts['_rev']
      self.rev = rev_presence if rev_presence
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dolly-3.1.4 lib/dolly/property_manager.rb
dolly-3.1.3 lib/dolly/property_manager.rb