Sha256: 10d658a278219ffd142adda69eaf48d508584949c0262dcf3afd69e5c36bbfbd

Contents?: true

Size: 913 Bytes

Versions: 1

Compression:

Stored size: 913 Bytes

Contents

class AngryMob
  class Node < Struct.new(:name,:attributes,:resource_locator)
    include Log

    def initialize(name, attributes)
      self.name = name
      self.attributes = AngryHash[attributes]
    end

    def merge_defaults!(attrs)
      puts "merging defaults"
      attributes.reverse_deep_merge!(attrs)
    end

    def setup_finished!
      self.resource_locator ||= AngryMob::Target::DefaultResourceLocator.new
    end

    def consolidate!
      node = self
      __consolidate_hash(attributes,{})
    end


    def __consolidate_hash(hash,seen)

      return if seen.key?(hash)
      seen[hash] = true

      hash.each do |key,value|
        case value
        when Hash
          __consolidate_hash(value,seen)
        when Proc
          hash[key] = value[self]
        end
      end
    end

    def method_missing(method,*args,&block)
      attributes.__send__(method,*args)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
angry_mob-0.1.0 lib/angry_mob/node.rb