Skip to content

Instantly share code, notes, and snippets.

@janjiss
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save janjiss/9039034 to your computer and use it in GitHub Desktop.
Save janjiss/9039034 to your computer and use it in GitHub Desktop.
Example 1, updated
require "json"
require "rspec"
require "date"
json_data = <<-JSON
{"activities": [
{
"captured_at": 1392366463,
"distance": "1.12",
"duration": 12,
"calories": 100
},
{
"captured_at": 1392355727,
"distance": "4.20",
"duration": 80,
"calories": 400
},
{
"captured_at": 1392280163,
"distance": "2.32",
"duration": 20,
"calories": 2200
}
]}
JSON
def miles_to_meters(miles)
(miles.to_f/0.00062137).to_i
end
activity_data = JSON.parse(json_data).fetch('activities')
activity_data.map! do |a|
{
distance: miles_to_meters(a.fetch("distance")),
calories: a.fetch("calories").to_i,
duration: a.fetch("duration").to_i,
date: Time.at(a.fetch("captured_at")).to_date
}
end
groups_of_activities = activity_data.group_by {|a| a[:date]}
summaries = groups_of_activities.map do |date, activity_group|
{
distance: activity_group.map{|a| a[:distance]}.reduce(&:+),
duration: activity_group.map{|a| a[:duration]}.reduce(&:+),
calories: activity_group.map{|a| a[:calories]}.reduce(&:+),
date: date
}
end
summary = summaries.first
describe "Summary" do
it "summarizes distance" do
expect(summary[:distance]).to eq(8561)
expect(summary[:duration]).to eq(92)
expect(summary[:calories]).to eq(500)
expect(summary[:date]).to eq(Date.parse("2014-02-14"))
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment