Sha256: bbe2e7183c7bd244cd7b5794819148706eb93821292707aa2532565389756916

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

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

      lambda do |property|
        name = property.key.to_sym
        next unless doc[name].nil?
        write_attribute(name, attributes[name])
      end
    end

    def update_attribute
      lambda do |key, value|
        raise InvalidProperty unless valid_property?(key)
        write_attribute(key, value)
      end
    end

    def write_attribute key, value
      value = set_property_value(key, value)
      instance_variable_set(:"@#{key}", value)
      update_doc(key, value) unless value.nil?
    end

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

    def update_doc(key, value)
      doc[key] = value
    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
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dolly-3.0.1 lib/dolly/property_manager.rb
dolly-3.0.0 lib/dolly/property_manager.rb