tracker_api 0.2.9 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/README.md +1 -0
  4. data/lib/core_ext/object/blank.rb +132 -0
  5. data/lib/tracker_api/client.rb +1 -1
  6. data/lib/tracker_api/endpoints/comments.rb +1 -1
  7. data/lib/tracker_api/endpoints/epic.rb +2 -2
  8. data/lib/tracker_api/endpoints/labels.rb +26 -0
  9. data/lib/tracker_api/endpoints/memberships.rb +6 -0
  10. data/lib/tracker_api/endpoints/story.rb +4 -4
  11. data/lib/tracker_api/endpoints/task.rb +16 -0
  12. data/lib/tracker_api/endpoints/tasks.rb +1 -1
  13. data/lib/tracker_api/resources/account.rb +1 -2
  14. data/lib/tracker_api/resources/activity.rb +6 -4
  15. data/lib/tracker_api/resources/base.rb +5 -60
  16. data/lib/tracker_api/resources/change.rb +1 -2
  17. data/lib/tracker_api/resources/comment.rb +1 -2
  18. data/lib/tracker_api/resources/epic.rb +1 -2
  19. data/lib/tracker_api/resources/iteration.rb +2 -0
  20. data/lib/tracker_api/resources/label.rb +8 -2
  21. data/lib/tracker_api/resources/me.rb +1 -2
  22. data/lib/tracker_api/resources/membership_summary.rb +1 -2
  23. data/lib/tracker_api/resources/notification.rb +1 -2
  24. data/lib/tracker_api/resources/person.rb +1 -2
  25. data/lib/tracker_api/resources/primary_resource.rb +1 -2
  26. data/lib/tracker_api/resources/project.rb +45 -8
  27. data/lib/tracker_api/resources/project_membership.rb +1 -2
  28. data/lib/tracker_api/resources/story.rb +36 -10
  29. data/lib/tracker_api/resources/task.rb +1 -2
  30. data/lib/tracker_api/version.rb +1 -1
  31. data/lib/tracker_api.rb +8 -2
  32. data/test/project_test.rb +29 -1
  33. data/test/story_test.rb +56 -1
  34. data/test/vcr/cassettes/client_done_iterations_with_pagination.json +1 -1
  35. data/test/vcr/cassettes/client_get_all_stories_with_pagination.json +1 -1
  36. data/test/vcr/cassettes/client_get_limited_stories_with_no_pagination.json +1 -1
  37. data/test/vcr/cassettes/client_get_single_story_by_story_id.json +1 -1
  38. data/test/vcr/cassettes/create_story.json +1 -1
  39. data/test/vcr/cassettes/create_story_with_lengthy_params.json +1 -1
  40. data/test/vcr/cassettes/create_task.json +1 -0
  41. data/test/vcr/cassettes/get_all_projects.json +1 -1
  42. data/test/vcr/cassettes/get_another_story.json +1 -0
  43. data/test/vcr/cassettes/get_current_iteration.json +1 -1
  44. data/test/vcr/cassettes/get_done_iterations.json +1 -1
  45. data/test/vcr/cassettes/get_epics.json +1 -1
  46. data/test/vcr/cassettes/get_iteration_by_number.json +1 -1
  47. data/test/vcr/cassettes/get_labels.json +1 -0
  48. data/test/vcr/cassettes/get_me.json +1 -46
  49. data/test/vcr/cassettes/get_my_activities.json +1 -1
  50. data/test/vcr/cassettes/get_project.json +1 -1
  51. data/test/vcr/cassettes/get_project_activity.json +1 -1
  52. data/test/vcr/cassettes/get_project_with_epics.json +1 -1
  53. data/test/vcr/cassettes/get_project_with_labels.json +1 -0
  54. data/test/vcr/cassettes/get_story.json +1 -1
  55. data/test/vcr/cassettes/get_story_activity.json +1 -1
  56. data/test/vcr/cassettes/get_story_with_tasks.json +1 -0
  57. data/test/vcr/cassettes/get_tasks.json +1 -1
  58. data/test/vcr/cassettes/get_tasks_for_story.json +1 -0
  59. data/test/vcr/cassettes/get_tasks_when_stories_filtered.json +1 -1
  60. data/test/vcr/cassettes/get_unscheduled_stories.json +1 -1
  61. data/test/vcr/cassettes/get_unscheduled_story.json +1 -1
  62. data/test/vcr/cassettes/save_story.json +1 -1
  63. data/test/vcr/cassettes/save_story_with_multiple_changes.json +1 -1
  64. data/test/vcr/cassettes/save_story_with_new_label.json +1 -0
  65. data/test/vcr/cassettes/update_story_to_create_activity.json +1 -1
  66. data/tracker_api.gemspec +3 -2
  67. metadata +35 -6
  68. 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 TrackerApi::Resources::Base
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[TrackerApi::Resources::Comment]
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[TrackerApi::Resources::Label]
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[TrackerApi::Resources::Person]
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[TrackerApi::Resources::Task]
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, just_changes)
75
-
76
- changes_applied
102
+ Endpoints::Story.new(client).update(self, UpdateRepresenter.new(self))
77
103
  end
78
104
  end
79
105
  end
@@ -1,9 +1,8 @@
1
1
  module TrackerApi
2
2
  module Resources
3
3
  class Task
4
- include Virtus.model
4
+ include Resources::Base
5
5
 
6
- attribute :id, Integer
7
6
  attribute :story_id, Integer
8
7
  attribute :description, String
9
8
  attribute :complete, Boolean
@@ -1,3 +1,3 @@
1
1
  module TrackerApi
2
- VERSION = '0.2.9'
2
+ VERSION = '0.2.10'
3
3
  end
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 'active_support'
8
- require 'active_support/core_ext'
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) }.must_raise(ArgumentError, /> 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
- tasks = project.story(story_id).tasks
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"}