Skip to content

Instantly share code, notes, and snippets.

@adamcarlile
Created April 24, 2012 13:48
Show Gist options
  • Save adamcarlile/2479795 to your computer and use it in GitHub Desktop.
Save adamcarlile/2479795 to your computer and use it in GitHub Desktop.
Hash extensions for dealing with Microsoft CamelCase XML returned by their web services eg(http://cloud.tfl.gov.uk/TrackerNet/LineStatus)
require 'active_support/core_ext'
class Hash
def rubyfy_keys!
keys.each do |key|
self[(key.underscore rescue key) || key] = delete(key)
end
self
end
def recursively_rubyfy_keys!
rubyfy_keys!
values.each{|h| h.recursively_rubyfy_keys! if h.is_a?(Hash) }
values.select{|v| v.is_a?(Array) }.flatten.each{|h| h.recursively_rubyfy_keys! if h.is_a?(Hash) }
self
end
def recursively_symbolize_keys!
symbolize_keys!
values.each{|h| h.recursively_symbolize_keys! if h.is_a?(Hash) }
values.select{|v| v.is_a?(Array) }.flatten.each{|h| h.recursively_symbolize_keys! if h.is_a?(Hash) }
self
end
def recursively_rubyfy_and_symbolize_keys!
recursively_rubyfy_keys!
recursively_symbolize_keys!
self
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment