Sha256: cf3eb012dff96dcb00104ca95b9f05f6351c2890156f40d4953498ac3e9eae2a

Contents?: true

Size: 893 Bytes

Versions: 8

Compression:

Stored size: 893 Bytes

Contents

# class to handle/manage and keep track of list of links in this doc

module PMP
  class Links < HashWithIndifferentAccess

    include Utils

    attr_accessor :parent

    def initialize(parent)
      super()
      self.parent = parent
    end

    def []=(k, link)
      super
      set_parent(link)
      add_link_name(k)
    end

    def add_link_name(name)
      name = name.to_sym
      unless parent.respond_to?(name)
        parent.define_singleton_method(name) { self.links[name] }
        parent.define_singleton_method("#{name}=") { |x|  puts "setter: #{self.inspect}";  self.links[name] = x }
      end
    end

    def set_parent(link)
      if link.respond_to?(:parent)
        link.parent = self.parent
      elsif link.is_a?(Hash)
        link.values.each{|l| set_parent(l)}
      elsif link.is_a?(Enumerable)
        link.each{|l| set_parent(l)}
      end
    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
pmp-0.3.2 lib/pmp/links.rb
pmp-0.3.1 lib/pmp/links.rb
pmp-0.3.0 lib/pmp/links.rb
pmp-0.2.4 lib/pmp/links.rb
pmp-0.2.3 lib/pmp/links.rb
pmp-0.2.2 lib/pmp/links.rb
pmp-0.2.1 lib/pmp/links.rb
pmp-0.2.0 lib/pmp/links.rb