Created
October 15, 2015 06:43
-
-
Save alainravet/f55f0b594b2f0c0be019 to your computer and use it in GitHub Desktop.
how to diff 2 hashes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Hash | |
def diff(other) | |
(self.keys + other.keys).uniq.inject({}) do |memo, key| | |
unless self[key] == other[key] | |
if self[key].kind_of?(Hash) && other[key].kind_of?(Hash) | |
memo[key] = self[key].diff(other[key]) | |
else | |
memo[key] = [self[key], other[key]] | |
end | |
end | |
memo | |
end | |
end | |
end | |
a = {"pk"=>"ACE02010-CYYYO", "_id"=>"tui:property:ACE02010-CYYYO", "gid"=>"tui:property:ACE02010-CYYYO", "published"=>false, "hidden"=>false, "meta"=>{"external_source"=>"tui", "external_id"=>"ACE02010-CYYYO", "type"=>"property", "warnings"=>[], "errors"=>[], "valid"=>false, "extra"=>{}, "created_at"=>1223157600.0, "updated_at"=>1223157600.0, "downloaded_at"=>1223157600.0, "api_version"=>"1.0.0"}, "info"=>{"capacity"=>4, "size"=>45, "size_unit"=>"square_meter", "type"=>"apartment", "beds"=>nil, "themes"=>[], "name"=>nil, "stars"=>nil, "extra"=>{"cleaning_fee"=>15.0}}, "facilities"=>["dishwasher", "internet", "family_friendly", "indoor_fireplace", "washer_dryer"], "photos"=>[{"order"=>"0", "url"=>"http://www.tui-ferienhaus.de/bilder/objects/e/ace/ace01001/600/ace01001_02.jpg"}, {"order"=>"1", "url"=>"http://www.tui-ferienhaus.de/bilder/objects/e/ace/ace01001/600/ace01001_05.jpg"}], "location"=>{"address"=>{"city"=>"Costa Teguise", "country"=>"Spain", "country_code"=>"ES", "street"=>nil, "post_code"=>nil}, "geodata"=>{"lat"=>"28.993314", "lng"=>"-13.50121"}, "floor"=>nil, "country"=>"Spain", "country_code"=>"ES", "region"=>nil, "subregion"=>nil, "place"=>nil}, "rooms"=>{"bathrooms"=>{}, "bedrooms"=>{}, "totals"=>{}, "info"=>[]}, "policies"=>[], "localisation"=>{"cs"=>{"description"=>nil, "extra"=>{}}, "da"=>{"description"=>nil, "extra"=>{}}, "de"=>{"description"=>"(de)Apartments Santa Rosa, Costa Teguise - (de)two-room apartment/type 1<br>(de)Malerisch angelegter Ferienpark mit einem großen See.<br>(de)town center 200 m, shopping 50 m, shopping mall 300 m.<br>(de)The photos show examples of houses and accommodation.German-speaking personnel.<br>(de)2-room apt.. living room, (2 sleeping facilities). bedroom, (2 single beds).<br>(de)apartments, rustically and comfortably furnished. on ground floor or upstairs. kitchenette.<br>Hausregeln:<br>Eine Kaution in Hoehe von EUR 500,- ist vor Ort in bar zu hinterlegen.<br>Zusätzliche Kosten:<br>- Endreinigung: 15.00/pro Person/Aufenthalt", "extra"=>{}, "title"=>"(de)Apartments Santa Rosa, Costa Teguise"}, "en"=>{"description"=>"Apartments Santa Rosa, Costa Teguise - two-room apartment/type 1<br>town center 200 m, shopping 50 m, shopping mall 300 m.<br>The photos show examples of houses and accommodation.German-speaking personnel.<br>2-room apt.. living room, (2 sleeping facilities). bedroom, (2 single beds).<br>apartments, rustically and comfortably furnished. on ground floor or upstairs. kitchenette.<br>House rules:<br>A deposit of EUR 5000 is required.<br>We kindly ask you to communicate your flight details specifying outbound and return flight.<br>deposit: 500,00 € (cash)", "extra"=>{}, "title"=>"Apartments Santa Rosa, Costa Teguise"}, "es"=>{"description"=>nil, "extra"=>{}}, "fi"=>{"description"=>nil, "extra"=>{}}, "fr"=>{"description"=>nil, "extra"=>{}}, "hr"=>{"description"=>nil, "extra"=>{}}, "hu"=>{"description"=>nil, "extra"=>{}}, "it"=>{"description"=>nil, "extra"=>{}}, "nl"=>{"description"=>nil, "extra"=>{}}, "no"=>{"description"=>nil, "extra"=>{}}, "pl"=>{"description"=>nil, "extra"=>{}}, "pt"=>{"description"=>nil, "extra"=>{}}, "ru"=>{"description"=>nil, "extra"=>{}}, "sv"=>{"description"=>nil, "extra"=>{}}, "tr"=>{"description"=>nil, "extra"=>{}}}} | |
b = {"_id"=>"tui:property:ACE02010-CYYYO", "gid"=>"tui:property:ACE02010-CYYYO", "published"=>false, "hidden"=>false, "meta"=>{"external_source"=>"tui", "external_id"=>"ACE02010-CYYYO", "type"=>"property", "api_version"=>"1.0.0", "created_at"=>1223157600.0, "updated_at"=>1223157600.0, "downloaded_at"=>1223157600.0, "extra"=>{}, "warnings"=>[], "errors"=>[], "valid"=>false}, "info"=>{"type"=>"apartment", "capacity"=>4, "beds"=>nil, "themes"=>[], "size"=>45, "size_unit"=>"square_meter", "name"=>nil, "stars"=>nil}, "facilities"=>["dishwasher", "internet", "family_friendly", "indoor_fireplace", "washer_dryer"], "photos"=>[{"order"=>"0", "url"=>"http://www.tui-ferienhaus.de/bilder/objects/e/ace/ace01001/600/ace01001_02.jpg"}, {"order"=>"1", "url"=>"http://www.tui-ferienhaus.de/bilder/objects/e/ace/ace01001/600/ace01001_05.jpg"}], "location"=>{"geodata"=>{"lat"=>"28.993314", "lng"=>"-13.50121"}, "floor"=>nil, "address"=>{"street"=>nil, "city"=>"Costa Teguise", "country"=>"Spain", "post_code"=>nil, "country_code"=>"ES"}, "country"=>"Spain", "country_code"=>"ES", "region"=>nil, "subregion"=>nil, "place"=>nil}, "rooms"=>{"totals"=>{}, "bedrooms"=>{}, "bathrooms"=>{}, "info"=>[]}, "policies"=>[], "localisation"=>{"cs"=>{"description"=>nil, "extra"=>{}}, "da"=>{"description"=>nil, "extra"=>{}}, "de"=>{"description"=>"(de)Apartments Santa Rosa, Costa Teguise - (de)two-room apartment/type 1<br>(de)Malerisch angelegter Ferienpark mit einem großen See.<br>(de)town center 200 m, shopping 50 m, shopping mall 300 m.<br>(de)The photos show examples of houses and accommodation.German-speaking personnel.<br>(de)2-room apt.. living room, (2 sleeping facilities). bedroom, (2 single beds).<br>(de)apartments, rustically and comfortably furnished. on ground floor or upstairs. kitchenette.<br>Hausregeln:<br>Eine Kaution in Hoehe von EUR 500,- ist vor Ort in bar zu hinterlegen.<br>Zusätzliche Kosten:<br>- Endreinigung: 15.00/pro Person/Aufenthalt", "extra"=>{}, "title"=>"(de)Apartments Santa Rosa, Costa Teguise"}, "en"=>{"description"=>"Apartments Santa Rosa, Costa Teguise - two-room apartment/type 1<br>town center 200 m, shopping 50 m, shopping mall 300 m.<br>The photos show examples of houses and accommodation.German-speaking personnel.<br>2-room apt.. living room, (2 sleeping facilities). bedroom, (2 single beds).<br>apartments, rustically and comfortably furnished. on ground floor or upstairs. kitchenette.<br>House rules:<br>A deposit of EUR 5000 is required.<br>We kindly ask you to communicate your flight details specifying outbound and return flight.<br>deposit: 500,00 € (cash)", "extra"=>{}, "title"=>"Apartments Santa Rosa, Costa Teguise"}, "es"=>{"description"=>nil, "extra"=>{}}, "fi"=>{"description"=>nil, "extra"=>{}}, "fr"=>{"description"=>nil, "extra"=>{}}, "hr"=>{"description"=>nil, "extra"=>{}}, "hu"=>{"description"=>nil, "extra"=>{}}, "it"=>{"description"=>nil, "extra"=>{}}, "nl"=>{"description"=>nil, "extra"=>{}}, "no"=>{"description"=>nil, "extra"=>{}}, "pl"=>{"description"=>nil, "extra"=>{}}, "pt"=>{"description"=>nil, "extra"=>{}}, "ru"=>{"description"=>nil, "extra"=>{}}, "sv"=>{"description"=>nil, "extra"=>{}}, "tr"=>{"description"=>nil, "extra"=>{}}}, "pk"=>"ACE02010-CYYYO", "extra"=>{"cleaning_fee"=>15.0}} | |
puts a.diff(b) | |
puts b.diff(a) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment