tracker_api 0.2.9 → 0.2.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +1 -0
- data/lib/core_ext/object/blank.rb +132 -0
- data/lib/tracker_api/client.rb +1 -1
- data/lib/tracker_api/endpoints/comments.rb +1 -1
- data/lib/tracker_api/endpoints/epic.rb +2 -2
- data/lib/tracker_api/endpoints/labels.rb +26 -0
- data/lib/tracker_api/endpoints/memberships.rb +6 -0
- data/lib/tracker_api/endpoints/story.rb +4 -4
- data/lib/tracker_api/endpoints/task.rb +16 -0
- data/lib/tracker_api/endpoints/tasks.rb +1 -1
- data/lib/tracker_api/resources/account.rb +1 -2
- data/lib/tracker_api/resources/activity.rb +6 -4
- data/lib/tracker_api/resources/base.rb +5 -60
- data/lib/tracker_api/resources/change.rb +1 -2
- data/lib/tracker_api/resources/comment.rb +1 -2
- data/lib/tracker_api/resources/epic.rb +1 -2
- data/lib/tracker_api/resources/iteration.rb +2 -0
- data/lib/tracker_api/resources/label.rb +8 -2
- data/lib/tracker_api/resources/me.rb +1 -2
- data/lib/tracker_api/resources/membership_summary.rb +1 -2
- data/lib/tracker_api/resources/notification.rb +1 -2
- data/lib/tracker_api/resources/person.rb +1 -2
- data/lib/tracker_api/resources/primary_resource.rb +1 -2
- data/lib/tracker_api/resources/project.rb +45 -8
- data/lib/tracker_api/resources/project_membership.rb +1 -2
- data/lib/tracker_api/resources/story.rb +36 -10
- data/lib/tracker_api/resources/task.rb +1 -2
- data/lib/tracker_api/version.rb +1 -1
- data/lib/tracker_api.rb +8 -2
- data/test/project_test.rb +29 -1
- data/test/story_test.rb +56 -1
- data/test/vcr/cassettes/client_done_iterations_with_pagination.json +1 -1
- data/test/vcr/cassettes/client_get_all_stories_with_pagination.json +1 -1
- data/test/vcr/cassettes/client_get_limited_stories_with_no_pagination.json +1 -1
- data/test/vcr/cassettes/client_get_single_story_by_story_id.json +1 -1
- data/test/vcr/cassettes/create_story.json +1 -1
- data/test/vcr/cassettes/create_story_with_lengthy_params.json +1 -1
- data/test/vcr/cassettes/create_task.json +1 -0
- data/test/vcr/cassettes/get_all_projects.json +1 -1
- data/test/vcr/cassettes/get_another_story.json +1 -0
- data/test/vcr/cassettes/get_current_iteration.json +1 -1
- data/test/vcr/cassettes/get_done_iterations.json +1 -1
- data/test/vcr/cassettes/get_epics.json +1 -1
- data/test/vcr/cassettes/get_iteration_by_number.json +1 -1
- data/test/vcr/cassettes/get_labels.json +1 -0
- data/test/vcr/cassettes/get_me.json +1 -46
- data/test/vcr/cassettes/get_my_activities.json +1 -1
- data/test/vcr/cassettes/get_project.json +1 -1
- data/test/vcr/cassettes/get_project_activity.json +1 -1
- data/test/vcr/cassettes/get_project_with_epics.json +1 -1
- data/test/vcr/cassettes/get_project_with_labels.json +1 -0
- data/test/vcr/cassettes/get_story.json +1 -1
- data/test/vcr/cassettes/get_story_activity.json +1 -1
- data/test/vcr/cassettes/get_story_with_tasks.json +1 -0
- data/test/vcr/cassettes/get_tasks.json +1 -1
- data/test/vcr/cassettes/get_tasks_for_story.json +1 -0
- data/test/vcr/cassettes/get_tasks_when_stories_filtered.json +1 -1
- data/test/vcr/cassettes/get_unscheduled_stories.json +1 -1
- data/test/vcr/cassettes/get_unscheduled_story.json +1 -1
- data/test/vcr/cassettes/save_story.json +1 -1
- data/test/vcr/cassettes/save_story_with_multiple_changes.json +1 -1
- data/test/vcr/cassettes/save_story_with_new_label.json +1 -0
- data/test/vcr/cassettes/update_story_to_create_activity.json +1 -1
- data/tracker_api.gemspec +3 -2
- metadata +35 -6
- data/test/vcr/cassettes/get_activity.json +0 -148
@@ -1,13 +1,13 @@
|
|
1
1
|
module TrackerApi
|
2
2
|
module Resources
|
3
3
|
class Story
|
4
|
-
include
|
4
|
+
include Resources::Base
|
5
5
|
|
6
6
|
attribute :client
|
7
7
|
|
8
8
|
attribute :accepted_at, DateTime
|
9
9
|
attribute :comment_ids, Array[Integer]
|
10
|
-
attribute :comments, Array[
|
10
|
+
attribute :comments, Array[Resources::Comment]
|
11
11
|
attribute :created_at, DateTime
|
12
12
|
attribute :current_state, String # (accepted, delivered, finished, started, rejected, planned, unstarted, unscheduled)
|
13
13
|
attribute :deadline, DateTime
|
@@ -18,20 +18,40 @@ module TrackerApi
|
|
18
18
|
attribute :integration_id, Integer
|
19
19
|
attribute :kind, String
|
20
20
|
attribute :label_ids, Array[Integer]
|
21
|
-
attribute :labels, Array[
|
21
|
+
attribute :labels, Array[Resources::Label]
|
22
22
|
attribute :name, String
|
23
23
|
attribute :owned_by_id, Integer # deprecated!
|
24
24
|
attribute :owner_ids, Array[Integer]
|
25
|
-
attribute :owners, Array[
|
25
|
+
attribute :owners, Array[Resources::Person]
|
26
26
|
attribute :planned_iteration_number, Integer
|
27
27
|
attribute :project_id, Integer
|
28
|
+
attribute :requested_by, Person
|
28
29
|
attribute :requested_by_id, Integer
|
29
30
|
attribute :story_type, String # (feature, bug, chore, release)
|
30
31
|
attribute :task_ids, Array[Integer]
|
31
|
-
attribute :tasks, Array[
|
32
|
+
attribute :tasks, Array[Resources::Task]
|
32
33
|
attribute :updated_at, DateTime
|
33
34
|
attribute :url, String
|
34
35
|
|
36
|
+
|
37
|
+
class UpdateRepresenter < Representable::Decorator
|
38
|
+
include Representable::JSON
|
39
|
+
|
40
|
+
property :follower_ids
|
41
|
+
property :name
|
42
|
+
property :description
|
43
|
+
property :story_type
|
44
|
+
property :current_state
|
45
|
+
property :estimate
|
46
|
+
property :accepted_at
|
47
|
+
property :deadline
|
48
|
+
property :requested_by_id
|
49
|
+
property :owner_ids
|
50
|
+
collection :labels, class: Resources::Label, decorator: Resources::Label::UpdateRepresenter, render_empty: true
|
51
|
+
property :integration_id
|
52
|
+
property :external_id
|
53
|
+
end
|
54
|
+
|
35
55
|
# @return [String] Comma separated list of labels.
|
36
56
|
def label_list
|
37
57
|
@label_list ||= labels.collect(&:name).join(',')
|
@@ -50,30 +70,36 @@ module TrackerApi
|
|
50
70
|
# @param [Hash] params
|
51
71
|
# @return [Array[Comment]]
|
52
72
|
def comments(params = {})
|
53
|
-
if @comments.any?
|
73
|
+
if @comments && @comments.any?
|
54
74
|
@comments
|
55
75
|
else
|
56
76
|
@comments = Endpoints::Comments.new(client).get(project_id, id, params)
|
57
77
|
end
|
58
78
|
end
|
59
79
|
|
80
|
+
# Provides a list of all the tasks on the story.
|
81
|
+
#
|
60
82
|
# @param [Hash] params
|
61
83
|
# @return [Array[Task]]
|
62
84
|
def tasks(params = {})
|
63
|
-
if @tasks.any?
|
85
|
+
if @tasks && @tasks.any?
|
64
86
|
@tasks
|
65
87
|
else
|
66
88
|
@tasks = Endpoints::Tasks.new(client).get(project_id, id, params)
|
67
89
|
end
|
68
90
|
end
|
69
91
|
|
92
|
+
# @param [Hash] params attributes to create the task with
|
93
|
+
# @return [Task] newly created Task
|
94
|
+
def create_task(params)
|
95
|
+
Endpoints::Task.new(client).create(project_id, id, params)
|
96
|
+
end
|
97
|
+
|
70
98
|
# Save changes to an existing Story.
|
71
99
|
def save
|
72
100
|
raise ArgumentError, 'Can not update a story with an unknown project_id.' if project_id.nil?
|
73
101
|
|
74
|
-
Endpoints::Story.new(client).update(self,
|
75
|
-
|
76
|
-
changes_applied
|
102
|
+
Endpoints::Story.new(client).update(self, UpdateRepresenter.new(self))
|
77
103
|
end
|
78
104
|
end
|
79
105
|
end
|
data/lib/tracker_api/version.rb
CHANGED
data/lib/tracker_api.rb
CHANGED
@@ -4,14 +4,18 @@ require 'tracker_api/version'
|
|
4
4
|
require 'virtus'
|
5
5
|
require 'faraday'
|
6
6
|
require 'faraday_middleware'
|
7
|
-
require '
|
8
|
-
require '
|
7
|
+
require 'core_ext/object/blank'
|
8
|
+
require 'equalizer'
|
9
|
+
require 'representable/json'
|
10
|
+
require 'oj'
|
9
11
|
|
10
12
|
# stdlib
|
11
13
|
require 'addressable/uri'
|
12
14
|
require 'forwardable'
|
13
15
|
require 'logger'
|
14
16
|
|
17
|
+
Oj.default_options = {:mode => :compat }
|
18
|
+
|
15
19
|
module TrackerApi
|
16
20
|
autoload :Error, 'tracker_api/error'
|
17
21
|
autoload :Client, 'tracker_api/client'
|
@@ -26,6 +30,7 @@ module TrackerApi
|
|
26
30
|
autoload :Epic, 'tracker_api/endpoints/epic'
|
27
31
|
autoload :Epics, 'tracker_api/endpoints/epics'
|
28
32
|
autoload :Iterations, 'tracker_api/endpoints/iterations'
|
33
|
+
autoload :Labels, 'tracker_api/endpoints/labels'
|
29
34
|
autoload :Me, 'tracker_api/endpoints/me'
|
30
35
|
autoload :Memberships, 'tracker_api/endpoints/memberships'
|
31
36
|
autoload :Notifications, 'tracker_api/endpoints/notifications'
|
@@ -33,6 +38,7 @@ module TrackerApi
|
|
33
38
|
autoload :Projects, 'tracker_api/endpoints/projects'
|
34
39
|
autoload :Stories, 'tracker_api/endpoints/stories'
|
35
40
|
autoload :Story, 'tracker_api/endpoints/story'
|
41
|
+
autoload :Task, 'tracker_api/endpoints/task'
|
36
42
|
autoload :Tasks, 'tracker_api/endpoints/tasks'
|
37
43
|
autoload :Comments, 'tracker_api/endpoints/comments'
|
38
44
|
end
|
data/test/project_test.rb
CHANGED
@@ -35,6 +35,34 @@ describe TrackerApi::Resources::Project do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
describe '.labels' do
|
39
|
+
describe 'with eager loading' do
|
40
|
+
let(:project_with_labels) do
|
41
|
+
VCR.use_cassette('get project with labels') do
|
42
|
+
client.project(project_id, fields: ':default,labels')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'gets all labels for this project' do
|
47
|
+
labels = project_with_labels.labels
|
48
|
+
|
49
|
+
labels.wont_be_empty
|
50
|
+
label = labels.first
|
51
|
+
label.must_be_instance_of TrackerApi::Resources::Label
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'gets all labels for this project' do
|
56
|
+
VCR.use_cassette('get labels', record: :new_episodes) do
|
57
|
+
labels = project.labels
|
58
|
+
|
59
|
+
labels.wont_be_empty
|
60
|
+
label = labels.first
|
61
|
+
label.must_be_instance_of TrackerApi::Resources::Label
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
38
66
|
describe '.iterations' do
|
39
67
|
it 'can get only done iterations' do
|
40
68
|
VCR.use_cassette('get done iterations', record: :new_episodes) do
|
@@ -86,7 +114,7 @@ describe TrackerApi::Resources::Project do
|
|
86
114
|
|
87
115
|
it 'requires an iteration number > 0' do
|
88
116
|
VCR.use_cassette('get iteration by number', record: :new_episodes) do
|
89
|
-
-> { project.iterations(number: 0)
|
117
|
+
-> { project.iterations(number: 0) }.must_raise(ArgumentError, /> 0/)
|
90
118
|
-> { project.iterations(number: -1) }.must_raise(ArgumentError, /> 0/)
|
91
119
|
end
|
92
120
|
end
|
data/test/story_test.rb
CHANGED
@@ -6,6 +6,7 @@ describe TrackerApi::Resources::Story do
|
|
6
6
|
let(:project_id) { pt_user[:project_id] }
|
7
7
|
let(:project) { VCR.use_cassette('get project') { client.project(project_id) } }
|
8
8
|
let(:story_id) { '66728004' }
|
9
|
+
let(:another_story_id) { '66728000' }
|
9
10
|
let(:story) { VCR.use_cassette('get story') { project.story(story_id) } }
|
10
11
|
|
11
12
|
|
@@ -34,10 +35,53 @@ describe TrackerApi::Resources::Story do
|
|
34
35
|
story.description.must_equal new_desc
|
35
36
|
end
|
36
37
|
|
38
|
+
it 'can add new labels to an existing story' do
|
39
|
+
new_label_name = 'super-special-label'
|
40
|
+
|
41
|
+
story.labels.map(&:name).wont_include new_label_name
|
42
|
+
|
43
|
+
new_label = TrackerApi::Resources::Label.new(name: new_label_name)
|
44
|
+
story.labels << new_label
|
45
|
+
|
46
|
+
VCR.use_cassette('save story with new label', record: :new_episodes) do
|
47
|
+
story.save
|
48
|
+
end
|
49
|
+
|
50
|
+
story.labels.wont_be_empty
|
51
|
+
story.labels.map(&:name).must_include new_label_name
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'objects are equal based on id' do
|
55
|
+
story_a = story
|
56
|
+
story_b = VCR.use_cassette('get story') { project.story(story_id) }
|
57
|
+
story_c = VCR.use_cassette('get another story') { project.story(another_story_id) }
|
58
|
+
|
59
|
+
story_a.must_equal story_b
|
60
|
+
story_a.hash.must_equal story_b.hash
|
61
|
+
story_a.eql?(story_b).must_equal true
|
62
|
+
story_a.equal?(story_b).must_equal false
|
63
|
+
|
64
|
+
story_a.wont_equal story_c
|
65
|
+
story_a.hash.wont_equal story_c.hash
|
66
|
+
story_a.eql?(story_c).must_equal false
|
67
|
+
story_a.equal?(story_c).must_equal false
|
68
|
+
end
|
69
|
+
|
37
70
|
describe '.tasks' do
|
71
|
+
it 'gets all tasks for this story with eager loading' do
|
72
|
+
VCR.use_cassette('get story with tasks', record: :new_episodes) do
|
73
|
+
tasks = project.story(story_id, fields: ':default,tasks').tasks
|
74
|
+
|
75
|
+
tasks.wont_be_empty
|
76
|
+
task = tasks.first
|
77
|
+
task.must_be_instance_of TrackerApi::Resources::Task
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
38
81
|
it 'gets all tasks for this story' do
|
39
82
|
VCR.use_cassette('get tasks', record: :new_episodes) do
|
40
|
-
|
83
|
+
story = project.story(story_id)
|
84
|
+
tasks = VCR.use_cassette('get tasks for story') { story.tasks }
|
41
85
|
|
42
86
|
tasks.wont_be_empty
|
43
87
|
task = tasks.first
|
@@ -57,6 +101,17 @@ describe TrackerApi::Resources::Story do
|
|
57
101
|
end
|
58
102
|
end
|
59
103
|
end
|
104
|
+
|
105
|
+
it 'can create task' do
|
106
|
+
VCR.use_cassette('create task') do
|
107
|
+
task = project.story(story_id).create_task(description: 'Test task')
|
108
|
+
|
109
|
+
task.must_be_instance_of TrackerApi::Resources::Task
|
110
|
+
task.id.wont_be_nil
|
111
|
+
task.id.must_be :>, 0
|
112
|
+
task.description.must_equal 'Test task'
|
113
|
+
end
|
114
|
+
end
|
60
115
|
end
|
61
116
|
|
62
117
|
describe '.activity' do
|
@@ -1 +1 @@
|
|
1
|
-
{"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.2.1 Faraday/0.8.9"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200 OK"],"x-tracker-project-version":["3"],"x-ua-compatible":["IE=Edge,chrome=1"],"cache-control":["max-age=0, private, must-revalidate"],"x-request-id":["fea1c6d82465ee66e556be01724ff161"],"x-runtime":["0.065154"],"date":["Wed, 07 May 2014 04:50:06 GMT"],"x-rack-cache":["miss"],"x-powered-by":["Phusion Passenger 4.0.41"],"server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"access-control-allow-origin":["*"],"access-control-allow-credentials":["false"],"access-control-allow-methods":["GET, POST, PUT, DELETE, OPTIONS"],"access-control-allow-headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"]},"body":{"encoding":"UTF-8","string":"{\n \"id\": 1027488,\n \"kind\": \"project\",\n \"name\": \"My Sample Project\",\n \"version\": 3,\n \"iteration_length\": 1,\n \"week_start_day\": \"Monday\",\n \"point_scale\": \"0,1,2,3\",\n \"point_scale_is_custom\": false,\n \"bugs_and_chores_are_estimatable\": false,\n \"enable_planned_mode\": false,\n \"enable_tasks\": true,\n \"time_zone\": {\n \"kind\": \"time_zone\",\n \"olson_name\": \"America/Los_Angeles\",\n \"offset\": \"-07:00\"\n },\n \"velocity_averaged_over\": 3,\n \"number_of_done_iterations_to_show\": 12,\n \"has_google_domain\": false,\n \"profile_content\": \"This is a demo project, created by Tracker, with example stories for a simple shopping web site.\",\n \"enable_incoming_emails\": true,\n \"initial_velocity\": 10,\n \"public\": false,\n \"atom_enabled\": false,\n \"start_time\": \"2014-02-10T08:00:00Z\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"account_id\": 621384,\n \"current_iteration_number\": 13,\n \"enable_following\": true\n}"},"http_version":null},"recorded_at":"Wed, 07 May 2014 04:50:06 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?scope=done&offset=-12&limit=5","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.2.1 Faraday/0.8.9"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200 OK"],"x-tracker-project-version":["3"],"x-tracker-pagination-total":["12"],"x-tracker-pagination-offset":["-12"],"x-tracker-pagination-limit":["5"],"x-tracker-pagination-returned":["5"],"x-ua-compatible":["IE=Edge,chrome=1"],"cache-control":["max-age=0, private, must-revalidate"],"x-request-id":["2af256a26bcee7412d3de3ec23167684"],"x-runtime":["0.258338"],"date":["Wed, 07 May 2014 04:48:53 GMT"],"x-rack-cache":["miss"],"x-powered-by":["Phusion Passenger 4.0.41"],"server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"access-control-allow-origin":["*"],"access-control-allow-credentials":["false"],"access-control-allow-methods":["GET, POST, PUT, DELETE, OPTIONS"],"access-control-allow-headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"]},"body":{"encoding":"UTF-8","string":"[\n {\n \"kind\": \"iteration\",\n \"number\": 1,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n {\n \"kind\": \"story\",\n \"id\": 66727974,\n \"project_id\": 1027488,\n \"name\": \"Setup development environment\",\n \"description\": \"We need 2 machines set up\",\n \"story_type\": \"chore\",\n \"current_state\": \"accepted\",\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727974\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727976,\n \"project_id\": 1027488,\n \"name\": \"Setup demo server\",\n \"description\": \"Should be accessible from outside the network, with basic auth\",\n \"story_type\": \"chore\",\n \"current_state\": \"accepted\",\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849078,\n \"project_id\": 1027488,\n \"name\": \"deployment\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727976\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727978,\n \"project_id\": 1027488,\n \"name\": \"Admin should be able to login\",\n \"description\": \"Admin should be a special user type. We can create the first admin user directly in the DB, but let's encrypt the password.\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 2,\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"name\": \"admin\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727978\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727980,\n \"project_id\": 1027488,\n \"name\": \"Admin should be able to create new product\",\n \"description\": \"Product information includes title, description, price, SKU.\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 1,\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"name\": \"admin\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727980\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727982,\n \"project_id\": 1027488,\n \"name\": \"Admin should be able to upload product photo\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 2,\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"name\": \"admin\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727982\"\n }\n ],\n \"start\": \"2014-02-10T08:00:00Z\",\n \"finish\": \"2014-02-17T08:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 2,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n {\n \"kind\": \"story\",\n \"id\": 66727984,\n \"project_id\": 1027488,\n \"name\": \"Admin should be able to upload multiple product photos and mark one as the primary\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 3,\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"name\": \"admin\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727984\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727986,\n \"project_id\": 1027488,\n \"name\": \"Shopper should see list of products, with primary photo as thumbnail\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 2,\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"name\": \"shopping\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727986\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727988,\n \"project_id\": 1027488,\n \"name\": \"Product browsing should be paginated, with 10 products per page\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 1,\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"name\": \"shopping\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727988\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727990,\n \"project_id\": 1027488,\n \"name\": \"Make product browsing pagination AJAXy\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 2,\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"name\": \"shopping\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n },\n {\n \"kind\": \"label\",\n \"id\": 7849084,\n \"project_id\": 1027488,\n \"name\": \"usability\",\n \"created_at\": \"2014-03-02T07:11:05Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727990\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727992,\n \"project_id\": 1027488,\n \"name\": \"Admin should be able to import multiple new products from CSV file\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 3,\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"name\": \"admin\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727992\"\n }\n ],\n \"start\": \"2014-02-17T08:00:00Z\",\n \"finish\": \"2014-02-24T08:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 3,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n {\n \"kind\": \"story\",\n \"id\": 66727994,\n \"project_id\": 1027488,\n \"name\": \"Shopper should be able to click on a product, and see all product details, including photos\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 1,\n \"accepted_at\": \"2014-03-02T00:00:00Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"name\": \"shopping\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727994\"\n },\n {\n \"kind\": \"story\",\n \"id\": 66727996,\n \"project_id\": 1027488,\n \"name\": \"Shopper should be able to add product to shopping cart\",\n \"story_type\": \"feature\",\n \"current_state\": \"accepted\",\n \"estimate\": 1,\n \"accepted_at\": \"2014-03-02T07:11:05Z\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n {\n \"kind\": \"label\",\n \"id\": 7849086,\n \"project_id\": 1027488,\n \"name\": \"cart\",\n \"created_at\": \"2014-03-02T07:11:05Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\"\n },\n {\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"name\": \"shopping\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727996\"\n }\n ],\n \"start\": \"2014-02-24T08:00:00Z\",\n \"finish\": \"2014-03-03T08:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 4,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-03-03T08:00:00Z\",\n \"finish\": \"2014-03-10T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 5,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-03-10T07:00:00Z\",\n \"finish\": \"2014-03-17T07:00:00Z\"\n }\n]"},"http_version":null},"recorded_at":"Wed, 07 May 2014 04:50:06 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?scope=done&offset=-7&limit=5","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.2.1 Faraday/0.8.9"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200 OK"],"x-tracker-project-version":["3"],"x-tracker-pagination-total":["12"],"x-tracker-pagination-offset":["-7"],"x-tracker-pagination-limit":["5"],"x-tracker-pagination-returned":["5"],"x-ua-compatible":["IE=Edge,chrome=1"],"cache-control":["max-age=0, private, must-revalidate"],"x-request-id":["2e91547e50e9b86e52da6fd56876b1d4"],"x-runtime":["0.154181"],"date":["Wed, 07 May 2014 04:48:53 GMT"],"x-rack-cache":["miss"],"x-powered-by":["Phusion Passenger 4.0.41"],"server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"access-control-allow-origin":["*"],"access-control-allow-credentials":["false"],"access-control-allow-methods":["GET, POST, PUT, DELETE, OPTIONS"],"access-control-allow-headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"]},"body":{"encoding":"UTF-8","string":"[\n {\n \"kind\": \"iteration\",\n \"number\": 6,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-03-17T07:00:00Z\",\n \"finish\": \"2014-03-24T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 7,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-03-24T07:00:00Z\",\n \"finish\": \"2014-03-31T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 8,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-03-31T07:00:00Z\",\n \"finish\": \"2014-04-07T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 9,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-04-07T07:00:00Z\",\n \"finish\": \"2014-04-14T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 10,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-04-14T07:00:00Z\",\n \"finish\": \"2014-04-21T07:00:00Z\"\n }\n]"},"http_version":null},"recorded_at":"Wed, 07 May 2014 04:50:07 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?scope=done&offset=-2&limit=5","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.2.1 Faraday/0.8.9"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200 OK"],"x-tracker-project-version":["3"],"x-tracker-pagination-total":["12"],"x-tracker-pagination-offset":["-2"],"x-tracker-pagination-limit":["5"],"x-tracker-pagination-returned":["2"],"x-ua-compatible":["IE=Edge,chrome=1"],"cache-control":["max-age=0, private, must-revalidate"],"x-request-id":["3ba332b4d55c2aa937ea538fbd8a9171"],"x-runtime":["0.126451"],"date":["Wed, 07 May 2014 04:50:07 GMT"],"x-rack-cache":["miss"],"x-powered-by":["Phusion Passenger 4.0.41"],"server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"access-control-allow-origin":["*"],"access-control-allow-credentials":["false"],"access-control-allow-methods":["GET, POST, PUT, DELETE, OPTIONS"],"access-control-allow-headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"]},"body":{"encoding":"UTF-8","string":"[\n {\n \"kind\": \"iteration\",\n \"number\": 11,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-04-21T07:00:00Z\",\n \"finish\": \"2014-04-28T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 12,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-04-28T07:00:00Z\",\n \"finish\": \"2014-05-05T07:00:00Z\"\n }\n]"},"http_version":null},"recorded_at":"Wed, 07 May 2014 04:50:07 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?limit=5&offset=-12&scope=done","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.4 (x86_64-darwin14.0; ruby) TrackerApi/0.2.6 Faraday/0.9.0"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["25"],"X-Tracker-Pagination-Total":["40"],"X-Tracker-Pagination-Offset":["-12"],"X-Tracker-Pagination-Limit":["5"],"X-Tracker-Pagination-Returned":["5"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"d45246fca9ea2bbd4df46ee61af141d2\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["8829ce4a3d9ce39db64aeed5f69c6c2b"],"X-Runtime":["0.218563"],"Date":["Mon, 17 Nov 2014 19:02:40 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["12"]},"body":{"encoding":"UTF-8","string":"[\n {\n \"kind\": \"iteration\",\n \"number\": 29,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-08-25T07:00:00Z\",\n \"finish\": \"2014-09-01T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 30,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-09-01T07:00:00Z\",\n \"finish\": \"2014-09-08T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 31,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-09-08T07:00:00Z\",\n \"finish\": \"2014-09-15T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 32,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-09-15T07:00:00Z\",\n \"finish\": \"2014-09-22T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 33,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-09-22T07:00:00Z\",\n \"finish\": \"2014-09-29T07:00:00Z\"\n }\n]"},"http_version":null},"recorded_at":"Mon, 17 Nov 2014 19:02:40 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?limit=5&offset=-7&scope=done","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.4 (x86_64-darwin14.0; ruby) TrackerApi/0.2.6 Faraday/0.9.0"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["25"],"X-Tracker-Pagination-Total":["40"],"X-Tracker-Pagination-Offset":["-7"],"X-Tracker-Pagination-Limit":["5"],"X-Tracker-Pagination-Returned":["5"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"3187e9f0eac3eb32bd330e7f9647baef\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["b8da8b3435bb60f89b4f6b1ef9b7c6f1"],"X-Runtime":["0.156633"],"Date":["Mon, 17 Nov 2014 19:02:40 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["12"]},"body":{"encoding":"UTF-8","string":"[\n {\n \"kind\": \"iteration\",\n \"number\": 34,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-09-29T07:00:00Z\",\n \"finish\": \"2014-10-06T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 35,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-10-06T07:00:00Z\",\n \"finish\": \"2014-10-13T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 36,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-10-13T07:00:00Z\",\n \"finish\": \"2014-10-20T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 37,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-10-20T07:00:00Z\",\n \"finish\": \"2014-10-27T07:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 38,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-10-27T07:00:00Z\",\n \"finish\": \"2014-11-03T08:00:00Z\"\n }\n]"},"http_version":null},"recorded_at":"Mon, 17 Nov 2014 19:02:40 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?limit=5&offset=-2&scope=done","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.4 (x86_64-darwin14.0; ruby) TrackerApi/0.2.6 Faraday/0.9.0"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["25"],"X-Tracker-Pagination-Total":["40"],"X-Tracker-Pagination-Offset":["-2"],"X-Tracker-Pagination-Limit":["5"],"X-Tracker-Pagination-Returned":["2"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"03e2871bc22bb1cb39066ebb5b505b3c\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["b2d1eee3045a011bb4a2d5f544f4a277"],"X-Runtime":["0.218874"],"Date":["Mon, 17 Nov 2014 19:02:41 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["12"]},"body":{"encoding":"UTF-8","string":"[\n {\n \"kind\": \"iteration\",\n \"number\": 39,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-11-03T08:00:00Z\",\n \"finish\": \"2014-11-10T08:00:00Z\"\n },\n {\n \"kind\": \"iteration\",\n \"number\": 40,\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"stories\": [\n\n ],\n \"start\": \"2014-11-10T08:00:00Z\",\n \"finish\": \"2014-11-17T08:00:00Z\"\n }\n]"},"http_version":null},"recorded_at":"Mon, 17 Nov 2014 19:02:41 GMT"}],"recorded_with":"VCR 2.9.3"}
|
1
|
+
{"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.5 (x86_64-darwin14.0; ruby) TrackerApi/0.2.9 Faraday/0.9.1"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["65"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"d68ec2d38a9a18645ab9524b715d7cbc\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["7edfa5d7e97312fd83d249936afab63c"],"X-Runtime":["0.041782"],"Date":["Wed, 24 Jun 2015 21:05:44 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["12"]},"body":{"encoding":"UTF-8","string":"{\"id\":1027488,\"kind\":\"project\",\"name\":\"My Sample Project\",\"version\":65,\"iteration_length\":1,\"week_start_day\":\"Monday\",\"point_scale\":\"0,1,2,3\",\"point_scale_is_custom\":false,\"bugs_and_chores_are_estimatable\":false,\"automatic_planning\":true,\"enable_tasks\":true,\"time_zone\":{\"kind\":\"time_zone\",\"olson_name\":\"America/Los_Angeles\",\"offset\":\"-07:00\"},\"velocity_averaged_over\":3,\"number_of_done_iterations_to_show\":12,\"has_google_domain\":false,\"profile_content\":\"This is a demo project, created by Tracker, with example stories for a simple shopping web site.\",\"enable_incoming_emails\":true,\"initial_velocity\":10,\"public\":false,\"atom_enabled\":false,\"project_type\":\"demo\",\"start_time\":\"2014-02-10T08:00:00Z\",\"created_at\":\"2014-03-02T07:11:04Z\",\"updated_at\":\"2014-03-02T07:11:04Z\",\"account_id\":621384,\"current_iteration_number\":72,\"enable_following\":true}"},"http_version":null},"recorded_at":"Wed, 24 Jun 2015 21:05:53 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?limit=5&offset=-12&scope=done","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.5 (x86_64-darwin14.0; ruby) TrackerApi/0.2.9 Faraday/0.9.1"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["65"],"X-Tracker-Pagination-Total":["71"],"X-Tracker-Pagination-Offset":["-12"],"X-Tracker-Pagination-Limit":["5"],"X-Tracker-Pagination-Returned":["5"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"a405058648c69e8dca1eee9d910db156\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["a33ce508c69a70c84d64a81d30d9aea6"],"X-Runtime":["0.120395"],"Date":["Wed, 24 Jun 2015 21:05:44 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["12"]},"body":{"encoding":"UTF-8","string":"[{\"kind\":\"iteration\",\"number\":60,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-03-30T07:00:00Z\",\"finish\":\"2015-04-06T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":61,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-04-06T07:00:00Z\",\"finish\":\"2015-04-13T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":62,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-04-13T07:00:00Z\",\"finish\":\"2015-04-20T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":63,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-04-20T07:00:00Z\",\"finish\":\"2015-04-27T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":64,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-04-27T07:00:00Z\",\"finish\":\"2015-05-04T07:00:00Z\"}]"},"http_version":null},"recorded_at":"Wed, 24 Jun 2015 21:05:54 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?limit=5&offset=-7&scope=done","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.5 (x86_64-darwin14.0; ruby) TrackerApi/0.2.9 Faraday/0.9.1"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["65"],"X-Tracker-Pagination-Total":["71"],"X-Tracker-Pagination-Offset":["-7"],"X-Tracker-Pagination-Limit":["5"],"X-Tracker-Pagination-Returned":["5"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"cf5318db65ebe2e02b1d0404de0fac71\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["8e46019d24c44904f0e4268073dd4937"],"X-Runtime":["0.103841"],"Date":["Wed, 24 Jun 2015 21:05:45 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["12"]},"body":{"encoding":"UTF-8","string":"[{\"kind\":\"iteration\",\"number\":65,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-05-04T07:00:00Z\",\"finish\":\"2015-05-11T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":66,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-05-11T07:00:00Z\",\"finish\":\"2015-05-18T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":67,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-05-18T07:00:00Z\",\"finish\":\"2015-05-25T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":68,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-05-25T07:00:00Z\",\"finish\":\"2015-06-01T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":69,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-06-01T07:00:00Z\",\"finish\":\"2015-06-08T07:00:00Z\"}]"},"http_version":null},"recorded_at":"Wed, 24 Jun 2015 21:05:54 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?limit=5&offset=-2&scope=done","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.5 (x86_64-darwin14.0; ruby) TrackerApi/0.2.9 Faraday/0.9.1"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["65"],"X-Tracker-Pagination-Total":["71"],"X-Tracker-Pagination-Offset":["-2"],"X-Tracker-Pagination-Limit":["5"],"X-Tracker-Pagination-Returned":["2"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"191d708afd98790f96ff56664d04b59e\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["849e5c50272bc695131507ab2e65dca6"],"X-Runtime":["0.098432"],"Date":["Wed, 24 Jun 2015 21:05:45 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["12"]},"body":{"encoding":"UTF-8","string":"[{\"kind\":\"iteration\",\"number\":70,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-06-08T07:00:00Z\",\"finish\":\"2015-06-15T07:00:00Z\"},{\"kind\":\"iteration\",\"number\":71,\"project_id\":1027488,\"team_strength\":1,\"stories\":[],\"start\":\"2015-06-15T07:00:00Z\",\"finish\":\"2015-06-22T07:00:00Z\"}]"},"http_version":null},"recorded_at":"Wed, 24 Jun 2015 21:05:54 GMT"}],"recorded_with":"VCR 2.9.3"}
|