lib/map.rb in map-2.9.1 vs lib/map.rb in map-3.0.0

- old
+ new

@@ -1,7 +1,7 @@ class Map < Hash - Version = '2.9.1' unless defined?(Version) + Version = '3.0.0' unless defined?(Version) Load = Kernel.method(:load) unless defined?(Load) class << Map def version Map::Version @@ -61,32 +61,44 @@ type_names = map_like.map do |ancestor| name = ancestor.name.to_s.strip next if name.empty? name.downcase.gsub(/::/, '_') end.compact - type_names.map{|type_name| "to_#{ type_name }"} + list = type_names.map{|type_name| "to_#{ type_name }"} + list.each{|method| define_conversion_method!(method)} + list ) end - def add_conversion_method!(method) + def define_conversion_method!(method) method = method.to_s.strip raise ArguementError if method.empty? module_eval(<<-__, __FILE__, __LINE__) unless public_method_defined?(#{ method.inspect }) def #{ method } self end + true + else + false end - unless conversion_methods.include?(#{ method.inspect }) - conversion_methods.unshift(#{ method.inspect }) - end __ end - def inherited(other) - other.module_eval(&Dynamic) - super + def add_conversion_method!(method) + if define_conversion_method!(method) + method = method.to_s.strip + raise ArguementError if method.empty? + module_eval(<<-__, __FILE__, __LINE__) + unless conversion_methods.include?(#{ method.inspect }) + conversion_methods.unshift(#{ method.inspect }) + end + __ + true + else + false + end end # iterate over arguments in pairs smartly. # def each_pair(*args, &block) @@ -155,19 +167,9 @@ def match(haystack, needle) intersection(haystack, needle) == needle end end - - unless defined?(Dynamic) - Dynamic = lambda do - conversion_methods.reverse_each do |method| - add_conversion_method!(method) - end - end - module_eval(&Dynamic) - end - # instance constructor # def keys @keys ||= []