tracker_api 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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"}