Sha256: e01cdc59f9a1854e85b121f0f7cd040effe5f7f8ae622b2d3522fce72332f22e
Contents?: true
Size: 1.04 KB
Versions: 1
Compression:
Stored size: 1.04 KB
Contents
# # A hash modifier that creates method readers from key names. # NOTE: reader methods are created recursively. # The method names are the same as the key names, # except that the values are snake-cased, for example: # - QTime -> q_time # - debugQuery -> debug_query # class RSolr::Ext::HashMethodizer class << self def snake_case(v) v = v.to_s return v.downcase if v =~ /^[A-Z]+$/ v.gsub(/([A-Z]+)(?=[A-Z][a-z]?)|\B[A-Z]/, '_\&') =~ /_*(.*)/ return $+.downcase end def methodize!(h) h.keys.each do |k| meth = snake_case(k) h.instance_variable_set("@#{k}", h[k]) h.instance_eval <<-RUBY def #{meth} val = @#{k} if val.respond_to?(:each_pair) RSolr::Ext::HashMethodizer.methodize!(val) elsif val.is_a?(Array) val.each do |item| RSolr::Ext::HashMethodizer.methodize!(item) if item.respond_to?(:each_pair) end end val end RUBY end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mwmitchell-rsolr-ext-0.5.3 | lib/rsolr-ext/hash_methodizer.rb |