Sha256: f1f62e746f0f61e524d377e3abd88cd546f6d43029eda26d13e972b691c4c822
Contents?: true
Size: 1.08 KB
Versions: 34
Compression:
Stored size: 1.08 KB
Contents
# Hash.to_snake_keys class Hash # Recursively converts CamelCase and camelBack JSON-style hash keys to # Rubyish snake_case, suitable for use during instantiation of Ruby # model attributes. # def to_snake_keys(value = self) case value when Array value.map { |v| to_snake_keys(v) } when Hash snake_hash(value) else value end end private def snake_hash(value) Hash[value.map { |k, v| [underscore_key(k).to_sym, to_snake_keys(v)] }] end def underscore_key(k) if k.is_a? Symbol underscore(k.to_s).to_sym elsif k.is_a? String underscore(k) else k # Plissken can't snakify anything except strings and symbols end end def underscore(string) @__memoize_underscore ||= {} return @__memoize_underscore[string] if @__memoize_underscore[string] @__memoize_underscore[string] = string.gsub(/::/, '/') .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .tr('-', '_') .downcase @__memoize_underscore[string] end end
Version data entries
34 entries across 34 versions & 2 rubygems