Skip to content

Instantly share code, notes, and snippets.

@michaelminter
Created May 12, 2014 21:25
Show Gist options
  • Save michaelminter/48e18415adc6293216db to your computer and use it in GitHub Desktop.
Save michaelminter/48e18415adc6293216db to your computer and use it in GitHub Desktop.
def parse_diff(changes)
# [["~", "name", "original name", "updated name"]] => {:name => ['original_name', 'updated_name', 'Modify']}
parsed_diff = {}
changes.each do |change|
unless change[1].match(/updated_at/) || change[1].match(/.id/) || change[1].match(/.created_at/)
if change[1].match(/line_items/) || change[1].match(/site_lists/) || change[1].match(/zip_code_lists/)
change[1].gsub!(/\d+/, Random.rand(1000).to_s)
end
type = if change[0] == "+"
"Add"
elsif change[0] == "-"
"Remove"
else
"Modify"
end
parsed_diff[change[1]] = [change[2], change[3], type]
end
end
styled_parsed_diff = "<ul>"
parsed_diff.each do |key, value|
nested_items = ""
if value.first.is_a?(Hash)
nested_items << "<ul>#{value.last} #{key.titleize} <li>"
value.first.each do |k, v|
unless !v.present? || k.match(/created_at/) || k.match(/id/) || k.match(/updated_at/)
nested_items << "#{k} : #{v}; "
end
end
nested_items << "</li></ul>"
else
nested_items << "<li>#{value.last} #{key.titleize}: #{value.first} - #{value[1]} </li>"
end
styled_parsed_diff << nested_items
end
styled_parsed_diff << "</ul>"
styled_parsed_diff
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment