Sha256: 5eaf1b45e12c52aead0b3de2bff03bc2d5133a5feae1328db471233c5b9aecdc
Contents?: true
Size: 998 Bytes
Versions: 2
Compression:
Stored size: 998 Bytes
Contents
class Map class Struct instance_methods.each { |m| undef_method m unless m =~ /^__/ } attr :map def initialize(map) @map = map end def method_missing(method, *args, &block) method = method.to_s case method when /=$/ key = method.chomp('=') value = args.shift @map[key] = value else key = method raise(IndexError, key) unless @map.has_key?(key) value = @map[key] end value.is_a?(Map) ? value.struct : value end Keys = lambda{|*keys| keys.flatten!; keys.compact!; keys.map!{|key| key.to_s}} delegates = %w( inspect ) delegates.each do |delegate| module_eval <<-__, __FILE__, __LINE__ def #{ delegate }(*args, &block) @map.#{ delegate }(*args, &block) end __ end end def struct @struct ||= Struct.new(map=self) end def Map.struct(*args, &block) new(*args, &block).struct end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
map-1.5.0 | lib/map/struct.rb |
map-1.4.0 | lib/map/struct.rb |