tracker_api 1.5.0 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1eb5cedffd5fd67d20ef0ef73aae1775305c1993
4
- data.tar.gz: f503a4be4a33340868c1a02b6a444c37a134374c
3
+ metadata.gz: e1327b2ce56382d6c500c41a4a322f4942edccc9
4
+ data.tar.gz: 10a428b5e8ec43c8a6f9bc918b3a81d0f2668989
5
5
  SHA512:
6
- metadata.gz: 9c26d72568ec086cc0c8b8c7310b1a498c0bf7257b9a1c3be768a4071c14c1cfe6ccbf23be62fb74c696e8007f54951617dbbe4ece7b4146a1a1c8cbeadb0cc8
7
- data.tar.gz: 5cc327d730ccde318b0540642dc25ff79f65497ebdf0ce2c5d9a6dff6164b06ae45912614dfcc2ca584ca54130243c363bc122b3408a7e680d0ae78d1071eb33
6
+ metadata.gz: 041259026948978b9c7a08618175c5f31c73e7d6920ef3c8cbb427889893c4254fe97b1fa77c7cbc7207f26e621eed41363da1826abf92c5078c512bdabcc5cb
7
+ data.tar.gz: e7e5b60e8674f2cf63ba31634b55eabad4b3f334f8d8a503048ec87def0f3a3beef6104363e8ab2fca935fa81fa432b8e2841d44b54849c5e80200735611d5c8
data/.gitignore CHANGED
@@ -4,6 +4,8 @@
4
4
  .config
5
5
  .yardoc
6
6
  .idea
7
+ .vscode
8
+ bin
7
9
  .DS_Store
8
10
  Gemfile.lock
9
11
  InstalledFiles
data/README.md CHANGED
@@ -50,6 +50,7 @@ project.create_story(name: 'Destroy death star') # Crea
50
50
 
51
51
  story = project.story(847762630) # Find a story with the given ID
52
52
  story.activity # Get a list of all the activity performed on this story
53
+ story.transitions # Get a list of all the story transitions on this story
53
54
 
54
55
  story.name = 'Save the Ewoks' # Update a single story attribute
55
56
  story.attributes = { name: 'Save the Ewoks', description: '...' } # Update multiple story attributes
@@ -103,8 +104,13 @@ This will cause coercion and dirty tracking to be bypassed and the new label wil
103
104
  story = project.story(847762630)
104
105
 
105
106
  label = TrackerApi::Resources::Label.new(name: 'Special Snowflake')
107
+ # BAD
106
108
  story.labels << label
107
109
  story.save
110
+
111
+ # GOOD
112
+ story.labels = story.labels.dup.push(label)
113
+ story.save
108
114
  ```
109
115
 
110
116
  ## TODO
@@ -53,6 +53,7 @@ module TrackerApi
53
53
  autoload :Comment, 'tracker_api/endpoints/comment'
54
54
  autoload :Webhook, 'tracker_api/endpoints/webhook'
55
55
  autoload :Webhooks, 'tracker_api/endpoints/webhooks'
56
+ autoload :StoryTransitions, 'tracker_api/endpoints/story_transitions'
56
57
  end
57
58
 
58
59
  module Resources
@@ -79,5 +80,6 @@ module TrackerApi
79
80
  autoload :TimeZone, 'tracker_api/resources/time_zone'
80
81
  autoload :Comment, 'tracker_api/resources/comment'
81
82
  autoload :Webhook, 'tracker_api/resources/webhook'
83
+ autoload :StoryTransition, 'tracker_api/resources/story_transition'
82
84
  end
83
85
  end
@@ -8,7 +8,9 @@ module TrackerApi
8
8
  end
9
9
 
10
10
  def get(project_id, params={})
11
- data = client.paginate("/projects/#{project_id}/stories", params: params)
11
+ url = params[:ids] ? "/projects/#{project_id}/stories/bulk" : "/projects/#{project_id}/stories"
12
+ data = client.paginate(url, params: params)
13
+
12
14
  raise Errors::UnexpectedData, 'Array of stories expected' unless data.is_a? Array
13
15
 
14
16
  data.map do |story|
@@ -9,7 +9,7 @@ module TrackerApi
9
9
 
10
10
  def get(project_id, story_id, params={})
11
11
  data = client.paginate("/projects/#{project_id}/stories/#{story_id}/owners", params: params)
12
- raise Errors::UnexpectedData, 'Array of comments expected' unless data.is_a? Array
12
+ raise Errors::UnexpectedData, 'Array of story owners expected' unless data.is_a? Array
13
13
 
14
14
  data.map do |owner|
15
15
  Resources::Person.new({ story_id: story_id }.merge(owner))
@@ -0,0 +1,20 @@
1
+ module TrackerApi
2
+ module Endpoints
3
+ class StoryTransitions
4
+ attr_accessor :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def get(project_id, story_id, params={})
11
+ data = client.paginate("/projects/#{project_id}/stories/#{story_id}/transitions", params: params)
12
+ raise Errors::UnexpectedData, 'Array of story transitions expected' unless data.is_a? Array
13
+
14
+ data.map do |transition|
15
+ Resources::StoryTransition.new(transition)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -10,6 +10,7 @@ module TrackerApi
10
10
  attribute :epic_id, Integer
11
11
  attribute :text, String
12
12
  attribute :person_id, Integer
13
+ attribute :person, Person
13
14
  attribute :created_at, DateTime
14
15
  attribute :updated_at, DateTime
15
16
  attribute :file_attachment_ids, [Integer]
@@ -34,6 +34,7 @@ module TrackerApi
34
34
  attribute :story_type, String # (feature, bug, chore, release)
35
35
  attribute :task_ids, [Integer]
36
36
  attribute :tasks, [Task]
37
+ attribute :transitions, [StoryTransition]
37
38
  attribute :updated_at, DateTime
38
39
  attribute :url, String
39
40
 
@@ -74,7 +75,22 @@ module TrackerApi
74
75
  end
75
76
 
76
77
  # Use attribute writer to get coercion and dirty tracking.
77
- self.labels = (labels ? labels.dup : []).push(new_label)
78
+ self.labels = (labels ? labels.dup : []).push(new_label).uniq
79
+ end
80
+
81
+ # Adds a new owner to the story.
82
+ #
83
+ # @param [Person|Fixnum] owner
84
+ def add_owner(owner)
85
+ owner_id = if owner.kind_of?(Fixnum)
86
+ owner_id = owner
87
+ else
88
+ raise ArgumentError, 'Valid Person expected.' unless owner.instance_of?(Resources::Person)
89
+ owner_id = owner.id
90
+ end
91
+
92
+ # Use attribute writer to get coercion and dirty tracking.
93
+ self.owner_ids = (owner_ids ? owner_ids.dup : []).push(owner_id).uniq
78
94
  end
79
95
 
80
96
  # Provides a list of all the activity performed on the story.
@@ -121,6 +137,18 @@ module TrackerApi
121
137
  end
122
138
  end
123
139
 
140
+ # Provides a list of all the transitions of the story.
141
+ #
142
+ # @param [Hash] params
143
+ # @return [Array[StoryTransition]]
144
+ def transitions(params = {})
145
+ if params.blank? && @transitions.present?
146
+ @transitions
147
+ else
148
+ @transitions = Endpoints::StoryTransitions.new(client).get(project_id, id, params)
149
+ end
150
+ end
151
+
124
152
  # @param [Hash] params attributes to create the task with
125
153
  # @return [Task] newly created Task
126
154
  def create_task(params)
@@ -0,0 +1,10 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class StoryTransition
4
+ include Shared::Base
5
+
6
+ attribute :state, String
7
+ attribute :occurred_at, DateTime
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module TrackerApi
2
- VERSION = '1.5.0'
2
+ VERSION = '1.6.0'
3
3
  end
@@ -25,8 +25,8 @@ VCR.configure do |c|
25
25
  end
26
26
 
27
27
  # These API Tokens are for a user with just one Public Sample Project
28
- PT_USER_1 = { username: 'trackerapi1', password: 'trackerapi1', token: 'd55c3bc1f74346b843ca84ba340b29bf', project_id: 1027488, workspace_id: 375106 }
29
- PT_USER_2 = { username: 'trackerapi2', password: 'trackerapi2', token: 'ab4c5895f57995bb7547986eacf91160', project_ids: [1027488, 1027492], workspace_id: 581707 }
28
+ PT_USER_1 = { username: 'trackerapi1', password: 'trackerapi1', token: 'd55c3bc1f74346b843ca84ba340b29bf', project_id: 1027488, workspace_id: 375106, id: 1266314 }
29
+ PT_USER_2 = { username: 'trackerapi2', password: 'trackerapi2', token: 'ab4c5895f57995bb7547986eacf91160', project_ids: [1027488, 1027492], workspace_id: 581707, id: 1266316 }
30
30
  PT_USER_3 = { username: 'trackerapi3', password: 'trackerapi3', token: '77f9b9a466c436e6456939208c84c973', project_id: 1027494 }
31
31
  PT_USERS = [PT_USER_1, PT_USER_2, PT_USER_3]
32
32
 
@@ -1,9 +1,12 @@
1
1
  require_relative 'minitest_helper'
2
2
 
3
3
  describe TrackerApi::Resources::Story 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] }
4
+ let(:pt_user_1) { PT_USER_1 }
5
+ let(:pt_user_1_id) { pt_user_1[:id] }
6
+ let(:pt_user_2) { PT_USER_2 }
7
+ let(:pt_user_2_id) { pt_user_2[:id] }
8
+ let(:client) { TrackerApi::Client.new token: pt_user_1[:token] }
9
+ let(:project_id) { pt_user_1[:project_id] }
7
10
  let(:project) { VCR.use_cassette('get project') { client.project(project_id) } }
8
11
  let(:story_id) { '66728004' }
9
12
  let(:another_story_id) { '66728000' }
@@ -116,19 +119,70 @@ describe TrackerApi::Resources::Story do
116
119
  end
117
120
  end
118
121
 
119
- describe "updating owners" do
120
- it do
121
- owner_ids = [VCR.use_cassette("get me", record: :new_episodes) { client.me.id }]
122
+ describe '.owner_ids' do
123
+ it 'gets owner_ids for this story' do
124
+ VCR.use_cassette('get story', record: :new_episodes) do
125
+ story = project.story(story_id)
126
+ owner_ids = story.owner_ids
122
127
 
123
- refute_equal story.owner_ids, owner_ids
128
+ owner_ids.wont_be_empty
129
+ owner_ids.first.must_be_instance_of Fixnum
130
+ end
131
+ end
124
132
 
125
- story.owner_ids = owner_ids
133
+ it 'update owners for a story' do
134
+ VCR.use_cassette('get story', record: :new_episodes) do
135
+ story = project.story(story_id)
126
136
 
127
- VCR.use_cassette("save story with owner_ids changed", record: :new_episodes) do
128
- story.save
137
+ # save with one owner
138
+ one_owner = [pt_user_1_id]
139
+ story.owner_ids = one_owner
140
+ VCR.use_cassette('save story with one owner') { story.save }
141
+
142
+ story.owner_ids.wont_be_empty
143
+ story.owner_ids.must_equal one_owner
144
+
145
+ # save with two owners
146
+ two_owners = [pt_user_1_id, pt_user_2_id]
147
+ story.owner_ids = two_owners
148
+ VCR.use_cassette('save story with two owners') { story.save }
149
+
150
+ story.owner_ids.wont_be_empty
151
+ story.owner_ids.must_equal two_owners
129
152
  end
153
+ end
154
+ end
155
+
156
+ describe '.add_owner' do
157
+ it 'add owner to a story' do
158
+ VCR.use_cassette('get story', record: :new_episodes) do
159
+ story = project.story(story_id)
160
+
161
+ # clear current owners
162
+ story.owner_ids = []
163
+
164
+ story.add_owner(TrackerApi::Resources::Person.new(id: 123))
165
+
166
+ story.owner_ids.wont_be_empty
167
+ story.owner_ids.must_equal [123]
168
+ end
169
+ end
170
+
171
+ it 'add owners by id to a story' do
172
+ VCR.use_cassette('get story', record: :new_episodes) do
173
+ story = project.story(story_id)
174
+
175
+ # clear current owners
176
+ story.owner_ids = []
130
177
 
131
- story.owner_ids.must_equal owner_ids
178
+ story.add_owner(123)
179
+ story.add_owner(456)
180
+ # test dups are not added
181
+ story.add_owner(123)
182
+
183
+ story.owner_ids.wont_be_empty
184
+ story.owner_ids.must_equal [123, 456]
185
+ end
132
186
  end
133
187
  end
134
188
 
@@ -200,18 +254,6 @@ describe TrackerApi::Resources::Story do
200
254
  end
201
255
  end
202
256
 
203
- describe '.owners' do
204
- it 'gets all owners of this story' do
205
- VCR.use_cassette('get story owners', record: :new_episodes) do
206
- owners = story.owners
207
-
208
- owners.wont_be_empty
209
- owner = owners.first
210
- owner.must_be_instance_of TrackerApi::Resources::Person
211
- end
212
- end
213
- end
214
-
215
257
  describe '.comments' do
216
258
  it 'gets all comments of story with just project_id and story_id' do
217
259
  VCR.use_cassette('get story comments', record: :new_episodes) do
@@ -225,4 +267,18 @@ describe TrackerApi::Resources::Story do
225
267
  end
226
268
  end
227
269
  end
270
+
271
+ describe '.transitions' do
272
+ it 'gets all story transitions with just project_id and story_id' do
273
+ VCR.use_cassette('get story transitions', record: :new_episodes) do
274
+ story = TrackerApi::Resources::Story.new( client: client,
275
+ project_id: project_id,
276
+ id: another_story_id)
277
+
278
+ transitions = story.transitions
279
+ transition = transitions.first
280
+ transition.must_be_instance_of TrackerApi::Resources::StoryTransition
281
+ end
282
+ end
283
+ end
228
284
  end
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728000/transitions","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.3.1 (x86_64-darwin15; ruby) TrackerApi/1.5.0 Faraday/0.9.2"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Access-Control-Allow-Credentials":["false"],"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"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, private, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Tue, 03 Jan 2017 23:50:01 GMT"],"Etag":["\"967a44e1aeaba9aa5d3432b3ac55f0f6\""],"Server":["nginx + Phusion Passenger"],"Status":["200 OK"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],"X-Powered-By":["Phusion Passenger Enterprise"],"X-Rack-Cache":["miss"],"X-Request-Id":["875c2082f7e398467f4ae81092835c33"],"X-Runtime":["0.034241"],"X-Tracker-Client-Pinger-Interval":["20"],"X-Tracker-Pagination-Limit":["100"],"X-Tracker-Pagination-Offset":["0"],"X-Tracker-Pagination-Returned":["2"],"X-Tracker-Pagination-Total":["2"],"X-Tracker-Project-Version":["158"],"X-Ua-Compatible":["IE=Edge,chrome=1"],"X-Vcap-Request-Id":["18224844-f694-42c2-4596-825cb100f788"],"Content-Length":["347"],"Connection":["keep-alive"]},"body":{"encoding":"ASCII-8BIT","string":"[{\"kind\":\"story_transition\",\"state\":\"accepted\",\"story_id\":66728000,\"project_id\":1027488,\"project_version\":157,\"occurred_at\":\"2017-01-03T23:44:24Z\",\"performed_by_id\":1266314},{\"kind\":\"story_transition\",\"state\":\"rejected\",\"story_id\":66728000,\"project_id\":1027488,\"project_version\":158,\"occurred_at\":\"2017-01-03T23:49:51Z\",\"performed_by_id\":1266314}]"},"http_version":null},"recorded_at":"Tue, 03 Jan 2017 23:50:01 GMT"}],"recorded_with":"VCR 2.9.3"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"put","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728004","body":{"encoding":"UTF-8","string":"{\"owner_ids\":[1266314]}"},"headers":{"User-Agent":["Ruby/2.3.1 (x86_64-darwin15; ruby) TrackerApi/1.5.0 Faraday/0.9.2"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"],"Content-Type":["application/json"]}},"response":{"status":{"code":200,"message":null},"headers":{"Access-Control-Allow-Credentials":["false"],"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"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, private, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Thu, 05 Jan 2017 00:38:24 GMT"],"Etag":["\"5cd25879d7debd9d20fb03038596c268\""],"Server":["nginx + Phusion Passenger"],"Status":["200 OK"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],"X-Powered-By":["Phusion Passenger Enterprise"],"X-Rack-Cache":["invalidate, pass"],"X-Request-Id":["282573a485764039cd40cf2887216752"],"X-Runtime":["0.172276"],"X-Tracker-Client-Pinger-Interval":["20"],"X-Tracker-Project-Version":["160"],"X-Ua-Compatible":["IE=Edge,chrome=1"],"X-Vcap-Request-Id":["3e5db7e3-0bc7-4a46-4da7-758e70c07e0f"],"Content-Length":["845"],"Connection":["keep-alive"]},"body":{"encoding":"ASCII-8BIT","string":"{\"kind\":\"story\",\"id\":66728004,\"project_id\":1027488,\"name\":\"Some product photos not scaled properly when browsing products+++++++\",\"description\":\"++++++++\",\"story_type\":\"bug\",\"current_state\":\"started\",\"requested_by_id\":1266314,\"owned_by_id\":1266314,\"owner_ids\":[1266314],\"labels\":[{\"kind\":\"label\",\"id\":11049868,\"project_id\":1027488,\"name\":\"label1\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":11049870,\"project_id\":1027488,\"name\":\"label2\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":14060665,\"project_id\":1027488,\"name\":\"super-special-label\",\"created_at\":\"2016-02-12T23:45:13Z\",\"updated_at\":\"2016-02-12T23:45:13Z\"}],\"created_at\":\"2014-02-17T00:00:00Z\",\"updated_at\":\"2017-01-05T00:38:23Z\",\"url\":\"https://www.pivotaltracker.com/story/show/66728004\"}"},"http_version":null},"recorded_at":"Thu, 05 Jan 2017 00:38:24 GMT"}],"recorded_with":"VCR 2.9.3"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"put","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728004","body":{"encoding":"UTF-8","string":"{\"owner_ids\":[1266314,1266316]}"},"headers":{"User-Agent":["Ruby/2.3.1 (x86_64-darwin15; ruby) TrackerApi/1.5.0 Faraday/0.9.2"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"],"Content-Type":["application/json"]}},"response":{"status":{"code":200,"message":null},"headers":{"Access-Control-Allow-Credentials":["false"],"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"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, private, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Thu, 05 Jan 2017 00:40:49 GMT"],"Etag":["\"bffad4c85bc89fedfcbd56b6e5a4b70c\""],"Server":["nginx + Phusion Passenger"],"Status":["200 OK"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],"X-Powered-By":["Phusion Passenger Enterprise"],"X-Rack-Cache":["invalidate, pass"],"X-Request-Id":["4271c9b8ccb5d2cfaf0d86036cddd7ba"],"X-Runtime":["0.284607"],"X-Tracker-Client-Pinger-Interval":["20"],"X-Tracker-Project-Version":["162"],"X-Ua-Compatible":["IE=Edge,chrome=1"],"X-Vcap-Request-Id":["80702f75-b222-471c-6e28-490a427614da"],"Content-Length":["853"],"Connection":["keep-alive"]},"body":{"encoding":"ASCII-8BIT","string":"{\"kind\":\"story\",\"id\":66728004,\"project_id\":1027488,\"name\":\"Some product photos not scaled properly when browsing products+++++++\",\"description\":\"++++++++\",\"story_type\":\"bug\",\"current_state\":\"started\",\"requested_by_id\":1266314,\"owned_by_id\":1266314,\"owner_ids\":[1266314,1266316],\"labels\":[{\"kind\":\"label\",\"id\":11049868,\"project_id\":1027488,\"name\":\"label1\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":11049870,\"project_id\":1027488,\"name\":\"label2\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":14060665,\"project_id\":1027488,\"name\":\"super-special-label\",\"created_at\":\"2016-02-12T23:45:13Z\",\"updated_at\":\"2016-02-12T23:45:13Z\"}],\"created_at\":\"2014-02-17T00:00:00Z\",\"updated_at\":\"2017-01-05T00:40:49Z\",\"url\":\"https://www.pivotaltracker.com/story/show/66728004\"}"},"http_version":null},"recorded_at":"Thu, 05 Jan 2017 00:40:49 GMT"}],"recorded_with":"VCR 2.9.3"}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tracker_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Forest Carlisle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-17 00:00:00.000000000 Z
11
+ date: 2017-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -238,6 +238,7 @@ files:
238
238
  - lib/tracker_api/endpoints/stories.rb
239
239
  - lib/tracker_api/endpoints/story.rb
240
240
  - lib/tracker_api/endpoints/story_owners.rb
241
+ - lib/tracker_api/endpoints/story_transitions.rb
241
242
  - lib/tracker_api/endpoints/task.rb
242
243
  - lib/tracker_api/endpoints/tasks.rb
243
244
  - lib/tracker_api/endpoints/webhook.rb
@@ -262,6 +263,7 @@ files:
262
263
  - lib/tracker_api/resources/project_membership.rb
263
264
  - lib/tracker_api/resources/shared/base.rb
264
265
  - lib/tracker_api/resources/story.rb
266
+ - lib/tracker_api/resources/story_transition.rb
265
267
  - lib/tracker_api/resources/task.rb
266
268
  - lib/tracker_api/resources/time_zone.rb
267
269
  - lib/tracker_api/resources/webhook.rb
@@ -307,6 +309,7 @@ files:
307
309
  - test/vcr/cassettes/get_story_comments.json
308
310
  - test/vcr/cassettes/get_story_no_existing_labels.json
309
311
  - test/vcr/cassettes/get_story_owners.json
312
+ - test/vcr/cassettes/get_story_transitions.json
310
313
  - test/vcr/cassettes/get_story_with_owners.json
311
314
  - test/vcr/cassettes/get_story_with_tasks.json
312
315
  - test/vcr/cassettes/get_tasks.json
@@ -321,8 +324,8 @@ files:
321
324
  - test/vcr/cassettes/save_story.json
322
325
  - test/vcr/cassettes/save_story_with_multiple_changes.json
323
326
  - test/vcr/cassettes/save_story_with_new_label.json
324
- - test/vcr/cassettes/save_story_with_owner_ids_cchanged.json
325
- - test/vcr/cassettes/save_story_with_owner_ids_changed.json
327
+ - test/vcr/cassettes/save_story_with_one_owner.json
328
+ - test/vcr/cassettes/save_story_with_two_owners.json
326
329
  - test/vcr/cassettes/save_task.json
327
330
  - test/vcr/cassettes/update_story_to_create_activity.json
328
331
  - test/workspace_test.rb
@@ -389,6 +392,7 @@ test_files:
389
392
  - test/vcr/cassettes/get_story_comments.json
390
393
  - test/vcr/cassettes/get_story_no_existing_labels.json
391
394
  - test/vcr/cassettes/get_story_owners.json
395
+ - test/vcr/cassettes/get_story_transitions.json
392
396
  - test/vcr/cassettes/get_story_with_owners.json
393
397
  - test/vcr/cassettes/get_story_with_tasks.json
394
398
  - test/vcr/cassettes/get_tasks.json
@@ -403,8 +407,8 @@ test_files:
403
407
  - test/vcr/cassettes/save_story.json
404
408
  - test/vcr/cassettes/save_story_with_multiple_changes.json
405
409
  - test/vcr/cassettes/save_story_with_new_label.json
406
- - test/vcr/cassettes/save_story_with_owner_ids_cchanged.json
407
- - test/vcr/cassettes/save_story_with_owner_ids_changed.json
410
+ - test/vcr/cassettes/save_story_with_one_owner.json
411
+ - test/vcr/cassettes/save_story_with_two_owners.json
408
412
  - test/vcr/cassettes/save_task.json
409
413
  - test/vcr/cassettes/update_story_to_create_activity.json
410
414
  - test/workspace_test.rb
@@ -1 +0,0 @@
1
- {"http_interactions":[{"request":{"method":"put","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728004","body":{"encoding":"UTF-8","string":"{\"owner_ids\":[1266314]}"},"headers":{"User-Agent":["Ruby/2.2.3 (x86_64-darwin14; ruby) TrackerApi/1.2.1 Faraday/0.9.2"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"],"Content-Type":["application/json"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"Cache-Control":["max-age=0, private, must-revalidate"],"Date":["Mon, 22 Aug 2016 19:28:22 GMT"],"X-Tracker-Project-Version":["152"],"X-Request-Id":["77303ab723a87b976a490f14fa0df75b"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"5f849ac18b519908e49abff0fed7de64\""],"X-Runtime":["0.180859"],"X-Rack-Cache":["invalidate, pass"],"X-Powered-By":["Phusion Passenger Enterprise"],"Server":["nginx + Phusion Passenger"],"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\":\"story\",\"id\":66728004,\"project_id\":1027488,\"name\":\"Some product photos not scaled properly when browsing products+++++++\",\"description\":\"++++++++\",\"story_type\":\"bug\",\"current_state\":\"started\",\"requested_by_id\":1266314,\"owned_by_id\":1266314,\"owner_ids\":[1266314],\"labels\":[{\"kind\":\"label\",\"id\":11049868,\"project_id\":1027488,\"name\":\"label1\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":11049870,\"project_id\":1027488,\"name\":\"label2\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":14060665,\"project_id\":1027488,\"name\":\"super-special-label\",\"created_at\":\"2016-02-12T23:45:13Z\",\"updated_at\":\"2016-02-12T23:45:13Z\"}],\"created_at\":\"2014-02-17T00:00:00Z\",\"updated_at\":\"2016-08-22T19:26:26Z\",\"url\":\"https://www.pivotaltracker.com/story/show/66728004\"}"},"http_version":null},"recorded_at":"Mon, 22 Aug 2016 19:28:22 GMT"}],"recorded_with":"VCR 3.0.3"}
@@ -1 +0,0 @@
1
- {"http_interactions":[{"request":{"method":"put","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728004","body":{"encoding":"UTF-8","string":"{\"owner_ids\":[1266314]}"},"headers":{"User-Agent":["Ruby/2.2.3 (x86_64-darwin14; ruby) TrackerApi/1.2.1 Faraday/0.9.2"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"],"Content-Type":["application/json"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"Cache-Control":["max-age=0, private, must-revalidate"],"Date":["Mon, 22 Aug 2016 19:28:50 GMT"],"X-Tracker-Project-Version":["152"],"X-Request-Id":["d53a51da01146e594f7ffc392bca580b"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"5f849ac18b519908e49abff0fed7de64\""],"X-Runtime":["0.168668"],"X-Rack-Cache":["invalidate, pass"],"X-Powered-By":["Phusion Passenger Enterprise"],"Server":["nginx + Phusion Passenger"],"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\":\"story\",\"id\":66728004,\"project_id\":1027488,\"name\":\"Some product photos not scaled properly when browsing products+++++++\",\"description\":\"++++++++\",\"story_type\":\"bug\",\"current_state\":\"started\",\"requested_by_id\":1266314,\"owned_by_id\":1266314,\"owner_ids\":[1266314],\"labels\":[{\"kind\":\"label\",\"id\":11049868,\"project_id\":1027488,\"name\":\"label1\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":11049870,\"project_id\":1027488,\"name\":\"label2\",\"created_at\":\"2015-03-07T12:51:39Z\",\"updated_at\":\"2015-03-07T12:51:39Z\"},{\"kind\":\"label\",\"id\":14060665,\"project_id\":1027488,\"name\":\"super-special-label\",\"created_at\":\"2016-02-12T23:45:13Z\",\"updated_at\":\"2016-02-12T23:45:13Z\"}],\"created_at\":\"2014-02-17T00:00:00Z\",\"updated_at\":\"2016-08-22T19:26:26Z\",\"url\":\"https://www.pivotaltracker.com/story/show/66728004\"}"},"http_version":null},"recorded_at":"Mon, 22 Aug 2016 19:28:50 GMT"}],"recorded_with":"VCR 3.0.3"}