Sha256: 1c954fb938c34312ff5f7e9cbb61bd9e4e8f795609900514915247692d85c4e0

Contents?: true

Size: 841 Bytes

Versions: 2

Compression:

Stored size: 841 Bytes

Contents

require 'dolly/property_set'
require  'dolly/property'

module Dolly
  module Properties
    SPECIAL_KEYS = %i[_id _rev]

    def property *opts, class_name: nil, default: nil
      opts.each do |opt|

        properties << (prop = Property.new(opt, class_name, default))
        send(:attr_reader, opt)

        define_method(:"#{opt}=") { |value| write_attribute(opt, value) }
        define_method(:"#{opt}?") { send(opt) } if prop.boolean?
        define_method(:"[]") {|name| send(name) }
      end
    end

    def properties
      @properties ||= PropertySet.new
    end

    def all_property_keys
      properties.map(&:key) + SPECIAL_KEYS
    end

    def property_keys
      all_property_keys - SPECIAL_KEYS
    end

    def property_clean_doc(doc)
      doc.reject { |key, _value| !property_keys.include?(key) }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dolly-3.1.0 lib/dolly/properties.rb
dolly-3.0.1 lib/dolly/properties.rb