tracker_api 0.1.0

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 (39) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +12 -0
  4. data/CHANGELOG.md +3 -0
  5. data/Gemfile +7 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +57 -0
  8. data/Rakefile +18 -0
  9. data/lib/tracker_api.rb +39 -0
  10. data/lib/tracker_api/client.rb +71 -0
  11. data/lib/tracker_api/endpoints/epic.rb +20 -0
  12. data/lib/tracker_api/endpoints/epics.rb +22 -0
  13. data/lib/tracker_api/endpoints/iterations.rb +22 -0
  14. data/lib/tracker_api/endpoints/project.rb +21 -0
  15. data/lib/tracker_api/endpoints/projects.rb +22 -0
  16. data/lib/tracker_api/endpoints/stories.rb +22 -0
  17. data/lib/tracker_api/endpoints/story.rb +20 -0
  18. data/lib/tracker_api/error.rb +18 -0
  19. data/lib/tracker_api/logger.rb +31 -0
  20. data/lib/tracker_api/resources/account.rb +18 -0
  21. data/lib/tracker_api/resources/epic.rb +19 -0
  22. data/lib/tracker_api/resources/iteration.rb +23 -0
  23. data/lib/tracker_api/resources/label.rb +14 -0
  24. data/lib/tracker_api/resources/project.rb +85 -0
  25. data/lib/tracker_api/resources/story.rb +33 -0
  26. data/lib/tracker_api/resources/time_zone.rb +13 -0
  27. data/lib/tracker_api/version.rb +3 -0
  28. data/test/client_test.rb +61 -0
  29. data/test/minitest_helper.rb +30 -0
  30. data/test/project_test.rb +81 -0
  31. data/test/vcr/cassettes/get_all_projects.json +1 -0
  32. data/test/vcr/cassettes/get_current_iteration.json +1 -0
  33. data/test/vcr/cassettes/get_done_iterations.json +1 -0
  34. data/test/vcr/cassettes/get_epics.json +1 -0
  35. data/test/vcr/cassettes/get_project.json +1 -0
  36. data/test/vcr/cassettes/get_project_with_epics.json +1 -0
  37. data/test/vcr/cassettes/get_unscheduled_stories.json +1 -0
  38. data/tracker_api.gemspec +36 -0
  39. metadata +273 -0
@@ -0,0 +1,31 @@
1
+ module TrackerApi
2
+ class Logger < Faraday::Response::Middleware
3
+ extend Forwardable
4
+
5
+ def initialize(app, logger = nil)
6
+ super(app)
7
+ @logger = logger || ::Logger.new(STDOUT)
8
+ end
9
+
10
+ def_delegators :@logger, :debug, :info, :warn, :error, :fatal
11
+
12
+ def call(env)
13
+ info("#{env[:method]} => #{env[:url].to_s}")
14
+ debug('request') { dump_headers env[:request_headers] }
15
+ debug('request.body') { env[:body] }
16
+ super
17
+ end
18
+
19
+ def on_complete(env)
20
+ info("#{env[:status]} <= #{env[:url].to_s}")
21
+ debug('response') { dump_headers env[:response_headers] }
22
+ debug('response.body') { env[:body] }
23
+ end
24
+
25
+ private
26
+
27
+ def dump_headers(headers)
28
+ headers.map { |k, v| "#{k}: #{v.inspect}" }.join("\n")
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class Account
4
+ include Virtus.model
5
+
6
+ attribute :id, Integer
7
+ attribute :created_at, DateTime
8
+ attribute :status, String
9
+ attribute :kind, String
10
+ attribute :name, String
11
+ attribute :updated_at, DateTime
12
+ attribute :url, String
13
+ attribute :plan, String
14
+ attribute :days_left, Integer
15
+ attribute :over_the_limit, Boolean
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class Epic
4
+ include Virtus.model
5
+
6
+ attribute :client
7
+
8
+ attribute :id, Integer
9
+ attribute :created_at, DateTime
10
+ attribute :description, String
11
+ attribute :kind, String
12
+ attribute :label, TrackerApi::Resources::Label
13
+ attribute :name, String
14
+ attribute :project_id, Integer
15
+ attribute :updated_at, DateTime
16
+ attribute :url, String
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class Iteration
4
+ include Virtus.model
5
+
6
+ attribute :client
7
+
8
+ attribute :created_at, DateTime
9
+ attribute :finish, DateTime
10
+ attribute :id, Integer
11
+ attribute :kind, String
12
+ attribute :length, Integer
13
+ attribute :number, Integer
14
+ attribute :planned, Boolean
15
+ attribute :project_id, Integer
16
+ attribute :start, DateTime
17
+ attribute :stories, [TrackerApi::Resources::Story]
18
+ attribute :story_ids, [Integer]
19
+ attribute :team_strength, Float
20
+ attribute :updated_at, DateTime
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class Label
4
+ include Virtus.model
5
+
6
+ attribute :id, Integer
7
+ attribute :created_at, DateTime
8
+ attribute :kind, String
9
+ attribute :name, String
10
+ attribute :project_id, Integer
11
+ attribute :updated_at, DateTime
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,85 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class Project
4
+ include Virtus.model
5
+
6
+ attribute :client
7
+
8
+ attribute :account, TrackerApi::Resources::Account
9
+ attribute :account_id, Integer
10
+ attribute :atom_enabled, Boolean
11
+ attribute :bugs_and_chores_are_estimatable, Boolean
12
+ attribute :created_at, DateTime
13
+ attribute :current_iteration_number, Integer
14
+ attribute :description, String
15
+ attribute :enable_following, Boolean
16
+ attribute :enable_incoming_emails, Boolean
17
+ attribute :enable_planned_mode, Boolean
18
+ attribute :enable_tasks, Boolean
19
+ attribute :epic_ids, Array[Integer]
20
+ attribute :epics, Array[TrackerApi::Resources::Epic]
21
+ attribute :has_google_domain, Boolean
22
+ attribute :id, Integer
23
+ attribute :initial_velocity, Integer
24
+ attribute :iteration_length, Integer
25
+ attribute :kind, String
26
+ attribute :label_ids, Array[Integer]
27
+ attribute :labels, Array[TrackerApi::Resources::Label]
28
+ attribute :name, String
29
+ attribute :number_of_done_iterations_to_show, Integer
30
+ attribute :point_scale, String
31
+ attribute :point_scale_is_custom, Boolean
32
+ attribute :profile_content, String
33
+ attribute :public, Boolean
34
+ attribute :start_date, DateTime
35
+ attribute :start_time, DateTime
36
+ attribute :time_zone, TrackerApi::Resources::TimeZone
37
+ attribute :updated_at, DateTime
38
+ attribute :velocity_averaged_over, Integer
39
+ attribute :version, Integer
40
+ attribute :week_start_day, String
41
+
42
+ # @return [Array[Epic]] epics associated with this project
43
+ def epics(params={})
44
+ raise ArgumentError, 'Expected @epics to be an Array' unless @epics.is_a? Array
45
+ return @epics unless @epics.empty?
46
+
47
+ @epics = Endpoints::Epics.new(client).get(id, params)
48
+ end
49
+
50
+ # @param [Hash] params
51
+ # @option params [String] :scope ('') Restricts the state of iterations to return.
52
+ # If not specified, it defaults to all iterations including done.
53
+ # Valid enumeration values: done, current, backlog, current_backlog.
54
+ # @option params [Integer] :offset The offset of first iteration to return, relative to the
55
+ # set of iterations specified by 'scope', with zero being the first iteration in the scope.
56
+ # @option params [Integer] :limit The number of iterations to return relative to the offset.
57
+ # @return [Array[Iteration]] iterations associated with this project
58
+ def iterations(params = {})
59
+ Endpoints::Iterations.new(client).get(id, params)
60
+ end
61
+
62
+ # @param [Hash] params
63
+ # @option params [String] :with_label A label name which all returned stories must match.
64
+ # @option params [String] :with_state A story's current_state which all returned stories must match.
65
+ # Valid enumeration values: accepted, delivered, finished, started, rejected, unstarted, unscheduled
66
+ # @option params [String] :filter This parameter supplies a search string;
67
+ # only stories that match the search criteria are returned.
68
+ # Cannot be used together with any other parameters except limit and offset.
69
+ # ex) state:started requester:OWK label:"jedi stuff" keyword
70
+ # @option params [Integer] :offset With the first story in your priority list as 0,
71
+ # the index of the first story you want returned.
72
+ # @option params [Integer] :limit The number of stories you want returned.
73
+ # @return [Array[Story]] iterations associated with this project
74
+ def stories(params = {})
75
+ Endpoints::Stories.new(client).get(id, params)
76
+ end
77
+
78
+ # @param [Fixnum] story_id id of story
79
+ # @return [Story]
80
+ def story(story_id)
81
+ Endpoints::Story.new(client).get(id, story_id)
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,33 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class Story
4
+ include Virtus.model
5
+
6
+ attribute :client
7
+
8
+ attribute :accepted_at, DateTime
9
+ attribute :comment_ids, Array[Integer]
10
+ attribute :created_at, DateTime
11
+ attribute :current_state, String # (accepted, delivered, finished, started, rejected, unstarted, unscheduled)
12
+ attribute :deadline, DateTime
13
+ attribute :description, String
14
+ attribute :estimate, Float
15
+ attribute :external_id, String
16
+ attribute :follower_ids, Array[Integer]
17
+ attribute :id, Integer
18
+ attribute :integration_id, Integer
19
+ attribute :kind, String
20
+ attribute :label_ids, Array[Integer]
21
+ attribute :labels, Array[TrackerApi::Resources::Label]
22
+ attribute :name, String
23
+ attribute :owned_by_id, Integer
24
+ attribute :planned_iteration_number, Integer
25
+ attribute :project_id, Integer
26
+ attribute :requested_by_id, Integer
27
+ attribute :story_type, String # (feature, bug, chore, release)
28
+ attribute :task_ids, Array[Integer]
29
+ attribute :updated_at, DateTime
30
+ attribute :url, String
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,13 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class TimeZone
4
+ include Virtus.value_object
5
+
6
+ values do
7
+ attribute :offset, String
8
+ attribute :olson_name, String
9
+ attribute :kind, String
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module TrackerApi
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,61 @@
1
+ require_relative 'minitest_helper'
2
+
3
+ describe TrackerApi do
4
+ it 'has a version' do
5
+ ::TrackerApi::VERSION.wont_be_nil
6
+ end
7
+ end
8
+
9
+ describe TrackerApi::Client do
10
+ it 'can be configured' do
11
+ client = TrackerApi::Client.new(url: 'http://test.com',
12
+ api_version: '/foo-bar/1',
13
+ token: '12345')
14
+
15
+ client.url.must_equal 'http://test.com'
16
+ client.api_version.must_equal '/foo-bar/1'
17
+ client.token.must_equal '12345'
18
+ end
19
+
20
+ describe '.projects' do
21
+ let(:pt_user) { PT_USER_1 }
22
+ let(:client) { TrackerApi::Client.new token: pt_user[:token] }
23
+
24
+ it 'gets all projects' do
25
+ VCR.use_cassette('get all projects', record: :new_episodes) do
26
+ projects = client.projects(fields: ':default,account,current_velocity,labels(name),epics(:default,label(name))')
27
+
28
+ projects.wont_be_empty
29
+ project = projects.first
30
+ project.must_be_instance_of TrackerApi::Resources::Project
31
+ project.id.must_equal pt_user[:project_id]
32
+
33
+ project.account.must_be_instance_of TrackerApi::Resources::Account
34
+
35
+ project.labels.wont_be_empty
36
+ project.labels.first.must_be_instance_of TrackerApi::Resources::Label
37
+
38
+ project.epics.wont_be_empty
39
+ project.epics.first.must_be_instance_of TrackerApi::Resources::Epic
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '.project' do
45
+ let(:pt_user) { PT_USER_1 }
46
+ let(:client) { TrackerApi::Client.new token: pt_user[:token] }
47
+ let(:project_id) { pt_user[:project_id] }
48
+
49
+ it 'gets a project by id' do
50
+ VCR.use_cassette('get project', record: :new_episodes) do
51
+ project = client.project(project_id)
52
+
53
+ project.must_be_instance_of TrackerApi::Resources::Project
54
+ project.id.must_equal project_id
55
+
56
+ project.account.must_be_nil
57
+ project.account_id.wont_be_nil
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,30 @@
1
+ #Bundler.require(:test)
2
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
+
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+
7
+ require 'minitest/byebug' if ENV['DEBUG']
8
+ require 'minitest/autorun'
9
+ require 'awesome_print'
10
+ require 'multi_json'
11
+ require 'vcr'
12
+
13
+ require 'tracker_api'
14
+ # require File.expand_path('../../lib/tracker_api', __FILE__)
15
+
16
+ Dir[File.expand_path('../{support,shared}/**/*.rb', __FILE__)].each { |f| require f }
17
+
18
+ VCR.configure do |c|
19
+ c.ignore_localhost = true
20
+ c.cassette_library_dir = File.expand_path('../vcr/cassettes', __FILE__).to_s
21
+ c.default_cassette_options = { serialize_with: :json }
22
+ c.hook_into :faraday
23
+ c.allow_http_connections_when_no_cassette = false
24
+ end
25
+
26
+ # These API Tokens are for a user with just one Public Sample Project
27
+ PT_USER_1 = { project_id: 1027488, token: '0de3ac29f13082f0c16ed76f3f3f6895' } # trackher1 user
28
+ PT_USER_2 = { project_id: 1027492, token: '90a51cef4e7c358b36b4e4cdf0f2dd2a' } # trackher2 user
29
+ PT_USER_3 = { project_id: 1027494, token: 'f8aad6b471d1b1eb303d368ef533f622' } # trackher3 user
30
+ PT_USERS = [PT_USER_1, PT_USER_2, PT_USER_3]
@@ -0,0 +1,81 @@
1
+ require_relative 'minitest_helper'
2
+
3
+ describe TrackerApi::Resources::Project do
4
+ let(:pt_user) { PT_USER_1 }
5
+ let(:client) { TrackerApi::Client.new token: pt_user[:token] }
6
+ let(:project_id) { pt_user[:project_id] }
7
+ let(:project) { VCR.use_cassette('get project') { client.project(project_id) } }
8
+
9
+ describe '.epics' do
10
+ it 'gets all epics for this project' do
11
+ VCR.use_cassette('get epics', record: :new_episodes) do
12
+ epics = project.epics
13
+
14
+ epics.wont_be_empty
15
+ epic = epics.first
16
+ epic.must_be_instance_of TrackerApi::Resources::Epic
17
+ end
18
+ end
19
+
20
+ describe 'with eager loading of epics' do
21
+ let(:project_with_epics) do
22
+ VCR.use_cassette('get project with epics') do
23
+ client.project(project_id, fields: ':default,epics(:default,label(name))')
24
+ end
25
+ end
26
+
27
+ # does not raise VCR::Errors::UnhandledHTTPRequestError
28
+ it 'does not make an extra request' do
29
+ epics = project_with_epics.epics
30
+
31
+ epics.wont_be_empty
32
+ epic = epics.first
33
+ epic.must_be_instance_of TrackerApi::Resources::Epic
34
+ end
35
+ end
36
+ end
37
+
38
+ describe '.iterations' do
39
+ it 'can get only done iterations' do
40
+ VCR.use_cassette('get done iterations', record: :new_episodes) do
41
+ offset = -project.number_of_done_iterations_to_show.to_i
42
+ done_iterations = project.iterations(scope: :done, offset: offset)
43
+
44
+ done_iterations.wont_be_empty
45
+ done_iterations.length.must_be :<, project.number_of_done_iterations_to_show
46
+
47
+ iteration = done_iterations.first
48
+ iteration.must_be_instance_of TrackerApi::Resources::Iteration
49
+ end
50
+ end
51
+
52
+ it 'can get current iteration' do
53
+ VCR.use_cassette('get current iteration', record: :new_episodes) do
54
+ iterations = project.iterations(scope: :current)
55
+
56
+ iterations.wont_be_empty
57
+
58
+ current = iterations.first
59
+ current.must_be_instance_of TrackerApi::Resources::Iteration
60
+ current.stories.wont_be_empty
61
+
62
+ story = current.stories.first
63
+ story.must_be_instance_of TrackerApi::Resources::Story
64
+ end
65
+ end
66
+ end
67
+
68
+ describe '.stories' do
69
+ it 'can get unscheduled stories (icebox)' do
70
+ VCR.use_cassette('get unscheduled stories', record: :new_episodes) do
71
+ stories = project.stories(with_state: :unscheduled)
72
+
73
+ stories.wont_be_empty
74
+
75
+ story = stories.first
76
+ story.must_be_instance_of TrackerApi::Resources::Story
77
+ story.current_state.must_equal 'unscheduled'
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects?fields=%3Adefault%2Caccount%2Ccurrent_velocity%2Clabels%28name%29%2Cepics%28%3Adefault%2Clabel%28name%29%29","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.0.1 Faraday/0.8.9"],"X-TrackerToken":["0de3ac29f13082f0c16ed76f3f3f6895"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200"],"x-powered-by":["Phusion Passenger (mod_rails/mod_rack) 3.0.14"],"cache-control":["private, max-age=0, must-revalidate"],"etag":["\"0d122ab3cf93bd85140ffc95b445d705\""],"x-runtime":["120"],"server":["nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)"],"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 \"created_at\": \"2014-03-02T07:11:04Z\",\n \"version\": 1,\n \"current_iteration_number\": 6,\n \"account\": {\n \"days_left\": 39,\n \"id\": 621384,\n \"status\": \"active\",\n \"name\": \"Trackher User1\",\n \"kind\": \"account_summary\"\n },\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"enable_following\": true,\n \"time_zone\": {\n \"offset\": \"-07:00\",\n \"olson_name\": \"America/Los_Angeles\",\n \"kind\": \"time_zone\"\n },\n \"point_scale_is_custom\": false,\n \"account_id\": 621384,\n \"epics\": [\n {\n \"created_at\": \"2014-03-02T07:11:07Z\",\n \"label\": {\n \"id\": 7849080,\n \"name\": \"admin\"\n },\n \"description\": \"Get the Admin users working on the site\",\n \"updated_at\": \"2014-03-02T07:11:07Z\",\n \"url\": \"http://www.pivotaltracker.com/epic/show/1087314\",\n \"project_id\": 1027488,\n \"id\": 1087314,\n \"name\": \"Admin Users\",\n \"kind\": \"epic\"\n },\n {\n \"created_at\": \"2014-03-02T07:11:07Z\",\n \"label\": {\n \"id\": 7849082,\n \"name\": \"shopping\"\n },\n \"description\": \"Allow shoppers to use the site\",\n \"updated_at\": \"2014-03-02T07:11:07Z\",\n \"url\": \"http://www.pivotaltracker.com/epic/show/1087316\",\n \"project_id\": 1027488,\n \"id\": 1087316,\n \"name\": \"Shoppers\",\n \"kind\": \"epic\"\n }\n ],\n \"labels\": [\n {\n \"id\": 7849080,\n \"name\": \"admin\"\n },\n {\n \"id\": 7849106,\n \"name\": \"blog\"\n },\n {\n \"id\": 7849086,\n \"name\": \"cart\"\n },\n {\n \"id\": 7849090,\n \"name\": \"checkout\"\n },\n {\n \"id\": 7849078,\n \"name\": \"deployment\"\n },\n {\n \"id\": 7849100,\n \"name\": \"design\"\n },\n {\n \"id\": 7849112,\n \"name\": \"epic\"\n },\n {\n \"id\": 7849104,\n \"name\": \"featured products\"\n },\n {\n \"id\": 7849110,\n \"name\": \"ie6\"\n },\n {\n \"id\": 7849092,\n \"name\": \"needs discussion\"\n },\n {\n \"id\": 7849094,\n \"name\": \"orders\"\n },\n {\n \"id\": 7849108,\n \"name\": \"reporting\"\n },\n {\n \"id\": 7849088,\n \"name\": \"search\"\n },\n {\n \"id\": 7849098,\n \"name\": \"shopper accounts\"\n },\n {\n \"id\": 7849082,\n \"name\": \"shopping\"\n },\n {\n \"id\": 7849096,\n \"name\": \"signup / signin\"\n },\n {\n \"id\": 7849084,\n \"name\": \"usability\"\n },\n {\n \"id\": 7849102,\n \"name\": \"user generated content\"\n }\n ],\n \"atom_enabled\": false,\n \"has_google_domain\": false,\n \"start_time\": \"2014-02-10T08:00:00Z\",\n \"number_of_done_iterations_to_show\": 12,\n \"week_start_day\": \"Monday\",\n \"id\": 1027488,\n \"enable_tasks\": true,\n \"bugs_and_chores_are_estimatable\": false,\n \"point_scale\": \"0,1,2,3\",\n \"current_velocity\": 1,\n \"public\": false,\n \"enable_incoming_emails\": true,\n \"profile_content\": \"This is a demo project, created by Tracker, with example stories for a simple shopping web site.\",\n \"velocity_averaged_over\": 3,\n \"name\": \"My Sample Project\",\n \"iteration_length\": 1,\n \"kind\": \"project\",\n \"initial_velocity\": 10,\n \"enable_planned_mode\": false\n }\n]"},"http_version":null},"recorded_at":"Sun, 23 Mar 2014 06:28:26 GMT"}],"recorded_with":"VCR 2.8.0"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?scope=current","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.0.1 Faraday/0.8.9"],"X-TrackerToken":["0de3ac29f13082f0c16ed76f3f3f6895"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200"],"x-powered-by":["Phusion Passenger (mod_rails/mod_rack) 3.0.14"],"cache-control":["private, max-age=0, must-revalidate"],"x-tracker-project-version":["1"],"etag":["\"b7929dd9d79159714ee85b3c70fe1d79\""],"x-runtime":["150"],"server":["nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)"],"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 \"finish\": \"2014-03-24T07:00:00Z\",\n \"kind\": \"iteration\",\n \"stories\": [\n {\n \"name\": \"Shopper should be able to view contents of shopping cart\",\n \"story_type\": \"feature\",\n \"requested_by_id\": 1266314,\n \"kind\": \"story\",\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"labels\": [\n {\n \"name\": \"cart\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:05Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 7849086,\n \"project_id\": 1027488\n },\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"id\": 7849082,\n \"project_id\": 1027488\n }\n ],\n \"current_state\": \"delivered\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 66727998,\n \"project_id\": 1027488,\n \"owner_ids\": [\n\n ],\n \"url\": \"http://www.pivotaltracker.com/story/show/66727998\",\n \"estimate\": 2,\n \"description\": \"Cart icon in top right corner, with a number indicating how many items in cart\"\n },\n {\n \"name\": \"Shopper should be able to remove product from shopping cart\",\n \"story_type\": \"feature\",\n \"requested_by_id\": 1266314,\n \"kind\": \"story\",\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"labels\": [\n {\n \"name\": \"cart\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:05Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 7849086,\n \"project_id\": 1027488\n },\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"id\": 7849082,\n \"project_id\": 1027488\n }\n ],\n \"current_state\": \"delivered\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 66728000,\n \"project_id\": 1027488,\n \"owner_ids\": [\n\n ],\n \"url\": \"http://www.pivotaltracker.com/story/show/66728000\",\n \"estimate\": 1\n },\n {\n \"name\": \"Cart manipulation should be AJAXy\",\n \"story_type\": \"feature\",\n \"requested_by_id\": 1266314,\n \"kind\": \"story\",\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"labels\": [\n {\n \"name\": \"cart\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:05Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 7849086,\n \"project_id\": 1027488\n },\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"id\": 7849082,\n \"project_id\": 1027488\n }\n ],\n \"current_state\": \"finished\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 66728002,\n \"project_id\": 1027488,\n \"owner_ids\": [\n\n ],\n \"url\": \"http://www.pivotaltracker.com/story/show/66728002\",\n \"estimate\": 1\n },\n {\n \"name\": \"Some product photos not scaled properly when browsing products\",\n \"story_type\": \"bug\",\n \"requested_by_id\": 1266314,\n \"kind\": \"story\",\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"labels\": [\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"id\": 7849082,\n \"project_id\": 1027488\n }\n ],\n \"current_state\": \"started\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 66728004,\n \"project_id\": 1027488,\n \"owner_ids\": [\n\n ],\n \"url\": \"http://www.pivotaltracker.com/story/show/66728004\"\n }\n ],\n \"start\": \"2014-03-17T07:00:00Z\",\n \"project_id\": 1027488,\n \"team_strength\": 1,\n \"number\": 6\n }\n]"},"http_version":null},"recorded_at":"Sun, 23 Mar 2014 06:28:28 GMT"}],"recorded_with":"VCR 2.8.0"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/iterations?scope=done&offset=-12","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.0.1 Faraday/0.8.9"],"X-TrackerToken":["0de3ac29f13082f0c16ed76f3f3f6895"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200"],"x-powered-by":["Phusion Passenger (mod_rails/mod_rack) 3.0.14"],"x-tracker-project-version":["1"],"cache-control":["private, max-age=0, must-revalidate"],"x-tracker-pagination-offset":["-12"],"etag":["\"5f632dec8cf809f0b82e3f7f5d91a801\""],"x-runtime":["522"],"x-tracker-pagination-returned":["5"],"x-tracker-pagination-limit":["10"],"x-tracker-pagination-total":["5"],"server":["nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)"],"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 \"number\": 1,\n \"kind\": \"iteration\",\n \"finish\": \"2014-02-17T08:00:00Z\",\n \"project_id\": 1027488,\n \"start\": \"2014-02-10T08:00:00Z\",\n \"stories\": [\n {\n \"name\": \"Setup development environment\",\n \"kind\": \"story\",\n \"description\": \"We need 2 machines set up\",\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"id\": 66727974,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"requested_by_id\": 1266314,\n \"labels\": [\n\n ],\n \"story_type\": \"chore\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727974\"\n },\n {\n \"name\": \"Setup demo server\",\n \"kind\": \"story\",\n \"description\": \"Should be accessible from outside the network, with basic auth\",\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"id\": 66727976,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"deployment\",\n \"kind\": \"label\",\n \"id\": 7849078,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"chore\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727976\"\n },\n {\n \"name\": \"Admin should be able to login\",\n \"kind\": \"story\",\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 \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"id\": 66727978,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"estimate\": 2,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"admin\",\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727978\"\n },\n {\n \"name\": \"Admin should be able to create new product\",\n \"kind\": \"story\",\n \"description\": \"Product information includes title, description, price, SKU.\",\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"id\": 66727980,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"estimate\": 1,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"admin\",\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727980\"\n },\n {\n \"name\": \"Admin should be able to upload product photo\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-02-11T00:00:00Z\",\n \"id\": 66727982,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"estimate\": 2,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"admin\",\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727982\"\n }\n ],\n \"team_strength\": 1\n },\n {\n \"number\": 2,\n \"kind\": \"iteration\",\n \"finish\": \"2014-02-24T08:00:00Z\",\n \"project_id\": 1027488,\n \"start\": \"2014-02-17T08:00:00Z\",\n \"stories\": [\n {\n \"name\": \"Admin should be able to upload multiple product photos and mark one as the primary\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"id\": 66727984,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"estimate\": 3,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"admin\",\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727984\"\n },\n {\n \"name\": \"Shopper should see list of products, with primary photo as thumbnail\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"id\": 66727986,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"estimate\": 2,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727986\"\n },\n {\n \"name\": \"Product browsing should be paginated, with 10 products per page\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"id\": 66727988,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"estimate\": 1,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727988\"\n },\n {\n \"name\": \"Make product browsing pagination AJAXy\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"id\": 66727990,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"estimate\": 2,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n },\n {\n \"name\": \"usability\",\n \"kind\": \"label\",\n \"id\": 7849084,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:05Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727990\"\n },\n {\n \"name\": \"Admin should be able to import multiple new products from CSV file\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-02-18T00:00:00Z\",\n \"id\": 66727992,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-10T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"estimate\": 3,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"admin\",\n \"kind\": \"label\",\n \"id\": 7849080,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727992\"\n }\n ],\n \"team_strength\": 1\n },\n {\n \"number\": 3,\n \"kind\": \"iteration\",\n \"finish\": \"2014-03-03T08:00:00Z\",\n \"project_id\": 1027488,\n \"start\": \"2014-02-24T08:00:00Z\",\n \"stories\": [\n {\n \"name\": \"Shopper should be able to click on a product, and see all product details, including photos\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-03-02T00:00:00Z\",\n \"id\": 66727994,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"estimate\": 1,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727994\"\n },\n {\n \"name\": \"Shopper should be able to add product to shopping cart\",\n \"kind\": \"story\",\n \"accepted_at\": \"2014-03-02T07:11:05Z\",\n \"id\": 66727996,\n \"project_id\": 1027488,\n \"current_state\": \"accepted\",\n \"owner_ids\": [\n\n ],\n \"created_at\": \"2014-02-17T00:00:00Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\",\n \"estimate\": 1,\n \"requested_by_id\": 1266314,\n \"labels\": [\n {\n \"name\": \"cart\",\n \"kind\": \"label\",\n \"id\": 7849086,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:05Z\",\n \"updated_at\": \"2014-03-02T07:11:05Z\"\n },\n {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"id\": 7849082,\n \"project_id\": 1027488,\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\"\n }\n ],\n \"story_type\": \"feature\",\n \"url\": \"http://www.pivotaltracker.com/story/show/66727996\"\n }\n ],\n \"team_strength\": 1\n },\n {\n \"number\": 4,\n \"kind\": \"iteration\",\n \"finish\": \"2014-03-10T07:00:00Z\",\n \"project_id\": 1027488,\n \"start\": \"2014-03-03T08:00:00Z\",\n \"stories\": [\n\n ],\n \"team_strength\": 1\n },\n {\n \"number\": 5,\n \"kind\": \"iteration\",\n \"finish\": \"2014-03-17T07:00:00Z\",\n \"project_id\": 1027488,\n \"start\": \"2014-03-10T07:00:00Z\",\n \"stories\": [\n\n ],\n \"team_strength\": 1\n }\n]"},"http_version":null},"recorded_at":"Sun, 23 Mar 2014 06:28:29 GMT"}],"recorded_with":"VCR 2.8.0"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/epics","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.0.1 Faraday/0.8.9"],"X-TrackerToken":["0de3ac29f13082f0c16ed76f3f3f6895"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200"],"x-powered-by":["Phusion Passenger (mod_rails/mod_rack) 3.0.14"],"cache-control":["private, max-age=0, must-revalidate"],"x-tracker-project-version":["1"],"etag":["\"fd893b81ac58cf4eb575d740e8475145\""],"x-runtime":["42"],"server":["nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)"],"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 \"name\": \"Admin Users\",\n \"kind\": \"epic\",\n \"label\": {\n \"name\": \"admin\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"id\": 7849080,\n \"project_id\": 1027488\n },\n \"created_at\": \"2014-03-02T07:11:07Z\",\n \"updated_at\": \"2014-03-02T07:11:07Z\",\n \"id\": 1087314,\n \"url\": \"http://www.pivotaltracker.com/epic/show/1087314\",\n \"project_id\": 1027488,\n \"description\": \"Get the Admin users working on the site\"\n },\n {\n \"name\": \"Shoppers\",\n \"kind\": \"epic\",\n \"label\": {\n \"name\": \"shopping\",\n \"kind\": \"label\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"id\": 7849082,\n \"project_id\": 1027488\n },\n \"created_at\": \"2014-03-02T07:11:07Z\",\n \"updated_at\": \"2014-03-02T07:11:07Z\",\n \"id\": 1087316,\n \"url\": \"http://www.pivotaltracker.com/epic/show/1087316\",\n \"project_id\": 1027488,\n \"description\": \"Allow shoppers to use the site\"\n }\n]"},"http_version":null},"recorded_at":"Sun, 23 Mar 2014 06:28:26 GMT"}],"recorded_with":"VCR 2.8.0"}
@@ -0,0 +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.0.1 Faraday/0.8.9"],"X-TrackerToken":["0de3ac29f13082f0c16ed76f3f3f6895"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200"],"x-powered-by":["Phusion Passenger (mod_rails/mod_rack) 3.0.14"],"cache-control":["private, max-age=0, must-revalidate"],"etag":["\"dbf4aea2a2935eefffe4468d24191436\""],"x-runtime":["36"],"x-tracker-project-version":["1"],"server":["nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)"],"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 \"created_at\": \"2014-03-02T07:11:04Z\",\n \"version\": 1,\n \"current_iteration_number\": 6,\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"enable_following\": true,\n \"time_zone\": {\n \"offset\": \"-07:00\",\n \"olson_name\": \"America/Los_Angeles\",\n \"kind\": \"time_zone\"\n },\n \"point_scale_is_custom\": false,\n \"account_id\": 621384,\n \"atom_enabled\": false,\n \"has_google_domain\": false,\n \"start_time\": \"2014-02-10T08:00:00Z\",\n \"number_of_done_iterations_to_show\": 12,\n \"week_start_day\": \"Monday\",\n \"id\": 1027488,\n \"enable_tasks\": true,\n \"bugs_and_chores_are_estimatable\": false,\n \"point_scale\": \"0,1,2,3\",\n \"public\": false,\n \"enable_incoming_emails\": true,\n \"profile_content\": \"This is a demo project, created by Tracker, with example stories for a simple shopping web site.\",\n \"velocity_averaged_over\": 3,\n \"name\": \"My Sample Project\",\n \"iteration_length\": 1,\n \"kind\": \"project\",\n \"initial_velocity\": 10,\n \"enable_planned_mode\": false\n}"},"http_version":null},"recorded_at":"Sun, 23 Mar 2014 06:28:26 GMT"}],"recorded_with":"VCR 2.8.0"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488?fields=%3Adefault%2Cepics%28%3Adefault%2Clabel%28name%29%29","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.0.0 (x86_64-darwin13.0.2; ruby) TrackerApi/0.0.1 Faraday/0.8.9"],"X-TrackerToken":["0de3ac29f13082f0c16ed76f3f3f6895"]}},"response":{"status":{"code":200,"message":null},"headers":{"content-type":["application/json; charset=utf-8"],"transfer-encoding":["chunked"],"connection":["close"],"status":["200"],"x-powered-by":["Phusion Passenger (mod_rails/mod_rack) 3.0.14"],"x-tracker-project-version":["1"],"cache-control":["private, max-age=0, must-revalidate"],"etag":["\"36004bb89c883ff022386d617b8edc8d\""],"x-runtime":["104"],"server":["nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)"],"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 \"enable_following\": true,\n \"atom_enabled\": false,\n \"public\": false,\n \"version\": 1,\n \"account_id\": 621384,\n \"enable_tasks\": true,\n \"name\": \"My Sample Project\",\n \"kind\": \"project\",\n \"velocity_averaged_over\": 3,\n \"profile_content\": \"This is a demo project, created by Tracker, with example stories for a simple shopping web site.\",\n \"enable_planned_mode\": false,\n \"bugs_and_chores_are_estimatable\": false,\n \"point_scale\": \"0,1,2,3\",\n \"id\": 1027488,\n \"current_iteration_number\": 6,\n \"updated_at\": \"2014-03-02T07:11:04Z\",\n \"created_at\": \"2014-03-02T07:11:04Z\",\n \"enable_incoming_emails\": true,\n \"has_google_domain\": false,\n \"number_of_done_iterations_to_show\": 12,\n \"epics\": [\n {\n \"name\": \"Admin Users\",\n \"kind\": \"epic\",\n \"description\": \"Get the Admin users working on the site\",\n \"project_id\": 1027488,\n \"id\": 1087314,\n \"updated_at\": \"2014-03-02T07:11:07Z\",\n \"created_at\": \"2014-03-02T07:11:07Z\",\n \"url\": \"http://www.pivotaltracker.com/epic/show/1087314\",\n \"label\": {\n \"name\": \"admin\",\n \"id\": 7849080\n }\n },\n {\n \"name\": \"Shoppers\",\n \"kind\": \"epic\",\n \"description\": \"Allow shoppers to use the site\",\n \"project_id\": 1027488,\n \"id\": 1087316,\n \"updated_at\": \"2014-03-02T07:11:07Z\",\n \"created_at\": \"2014-03-02T07:11:07Z\",\n \"url\": \"http://www.pivotaltracker.com/epic/show/1087316\",\n \"label\": {\n \"name\": \"shopping\",\n \"id\": 7849082\n }\n }\n ],\n \"start_time\": \"2014-02-10T08:00:00Z\",\n \"iteration_length\": 1,\n \"initial_velocity\": 10,\n \"point_scale_is_custom\": false,\n \"week_start_day\": \"Monday\",\n \"time_zone\": {\n \"kind\": \"time_zone\",\n \"olson_name\": \"America/Los_Angeles\",\n \"offset\": \"-07:00\"\n }\n}"},"http_version":null},"recorded_at":"Sun, 23 Mar 2014 06:28:27 GMT"}],"recorded_with":"VCR 2.8.0"}