Sha256: 8cfe03390e1b3e147bfac7249494542fd8d16dc9d91132b737b79fa073e8ee63
Contents?: true
Size: 1.57 KB
Versions: 1
Compression:
Stored size: 1.57 KB
Contents
require 'active_support/core_ext/hash' require 'active_support/core_ext/string/inflections' module CamelSnakeKeys [Hash,Array].each do |klass| refine klass do def with_camel_keys(indifference=false) CamelSnakeKeys.camel_keys(self, indifference) end def with_snake_keys(indifference=false) CamelSnakeKeys.snake_keys(self, indifference) end end end class << self def if_underscore(v) if v.is_a? Symbol v.to_s.underscore.to_sym elsif v.is_a? String v.underscore else v end end def if_camelize(v) if v.is_a? Symbol v.to_s.camelize(:lower).to_sym elsif v.is_a? String v.camelize(:lower) else v end end def snake_keys(data, indifference=false) if data.kind_of? Array data.map { |v| snake_keys(v) } elsif data.kind_of? Hash hash = Hash[data.sort_by {|k,_v| k =~ /_/ ? 0 : 1 }.map {|k, v| [if_underscore(k), snake_keys(v)] }] hash = hash.with_indifferent_access if indifference data.class == Hash ? hash : data.class.new(hash) else data end end def camel_keys(data, indifference=false) if data.kind_of? Array data.map { |v| camel_keys(v) } elsif data.kind_of? Hash hash = Hash[data.sort_by {|k,_v| k =~ /_/ ? 1 : 0 }.map {|k, v| [if_camelize(k), camel_keys(v)] }] hash = hash.with_indifferent_access if indifference data.class == Hash ? hash : data.class.new(hash) else data end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
camel_snake_keys-0.0.5 | lib/camel_snake_keys.rb |