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