Sha256: 0795edf887bc73161e8c7eaafb8fe3fbaf37c4906a2bc46b1af2a990ec2c8af0

Contents?: true

Size: 911 Bytes

Versions: 3

Compression:

Stored size: 911 Bytes

Contents

#coding: utf-8

module Wombat
  class PropertyContainer < Hash
    def add_property property
      self[property.name] = property
    end

    def get_property name
      self[name]
    end

    def method_missing method, *args, &block
      self[method.to_s] = Property.new(
        name: method.to_s,
        selector: args.first,
        format: args[1],
        namespaces: args[2],
        callback: block)
    end

    def all_properties
      values.flat_map { |v|
        v.kind_of?(PropertyContainer) \
          ? v.values \
          : v.kind_of?(Property) \
            ? v \
            : nil
      }.compact
    end

    def flatten
      Hash.new.tap do |h|
        keys.map do |k|
          if self[k].kind_of?(PropertyContainer)
            h[k] = self[k].flatten
          elsif self[k].kind_of?(Property)
            h[k] = self[k].result
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wombat-0.1.5 lib/wombat/property_container.rb
wombat-0.1.4 lib/wombat/property_container.rb
wombat-0.1.3 lib/wombat/property_container.rb