tracker_api 1.4.1 → 1.5.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: e04aedc8708304e386bbe7903a4131de2ca092d8
4
- data.tar.gz: 2afa59b30acd497e994dd334275506e5d89e093d
3
+ metadata.gz: 1eb5cedffd5fd67d20ef0ef73aae1775305c1993
4
+ data.tar.gz: f503a4be4a33340868c1a02b6a444c37a134374c
5
5
  SHA512:
6
- metadata.gz: 36f26c84ab4c2dca14d8d5ebc177bf09b317eaf556308495972eec5128287048290abc9ec877c8715bf2990ae261a4ae495c3930ea301cb086bfda7378cbbc97
7
- data.tar.gz: d7f09db0d13b324ba48cb0edcf32aa749288791487b25da7beb18aecc537253e8b383ab73fdf7688eca2cd8680df61862769bf76922081fc1a40e476a03916d6
6
+ metadata.gz: 9c26d72568ec086cc0c8b8c7310b1a498c0bf7257b9a1c3be768a4071c14c1cfe6ccbf23be62fb74c696e8007f54951617dbbe4ece7b4146a1a1c8cbeadb0cc8
7
+ data.tar.gz: 5cc327d730ccde318b0540642dc25ff79f65497ebdf0ce2c5d9a6dff6164b06ae45912614dfcc2ca584ca54130243c363bc122b3408a7e680d0ae78d1071eb33
data/README.md CHANGED
@@ -63,6 +63,11 @@ story = TrackerApi::Resources::Story.new( client: client,
63
63
  id: 847762630) # Use the Story resource to get the story
64
64
  comments = story.comments # comments without first fetching the story
65
65
 
66
+ comment = story.create_comment(text: "Use the force!") # Create a new comment on the story
67
+
68
+ comment.text += " (please be careful)"
69
+ comment.save # Update text of an existing comment
70
+
66
71
  task = story.tasks.first # Get story tasks
67
72
  task.complete = true
68
73
  task.save # Mark a task complete
data/lib/tracker_api.rb CHANGED
@@ -50,6 +50,9 @@ module TrackerApi
50
50
  autoload :Task, 'tracker_api/endpoints/task'
51
51
  autoload :Tasks, 'tracker_api/endpoints/tasks'
52
52
  autoload :Comments, 'tracker_api/endpoints/comments'
53
+ autoload :Comment, 'tracker_api/endpoints/comment'
54
+ autoload :Webhook, 'tracker_api/endpoints/webhook'
55
+ autoload :Webhooks, 'tracker_api/endpoints/webhooks'
53
56
  end
54
57
 
55
58
  module Resources
@@ -75,5 +78,6 @@ module TrackerApi
75
78
  autoload :Task, 'tracker_api/resources/task'
76
79
  autoload :TimeZone, 'tracker_api/resources/time_zone'
77
80
  autoload :Comment, 'tracker_api/resources/comment'
81
+ autoload :Webhook, 'tracker_api/resources/webhook'
78
82
  end
79
83
  end
@@ -75,6 +75,15 @@ module TrackerApi
75
75
  request(:put, parse_query_and_convenience_headers(path, options))
76
76
  end
77
77
 
78
+ # Make a HTTP DELETE request
79
+ #
80
+ # @param path [String] The path, relative to api endpoint
81
+ # @param options [Hash] Query and header params for request
82
+ # @return [Faraday::Response]
83
+ def delete(path, options = {})
84
+ request(:delete, parse_query_and_convenience_headers(path, options))
85
+ end
86
+
78
87
  # Make one or more HTTP GET requests, optionally fetching
79
88
  # the next page of results from information passed back in headers
80
89
  # based on value in {#auto_paginate}.
@@ -0,0 +1,27 @@
1
+ module TrackerApi
2
+ module Endpoints
3
+ class Comment
4
+ attr_accessor :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def create(project_id, story_id, params={})
11
+ data = client.post("/projects/#{project_id}/stories/#{story_id}/comments", params: params).body
12
+ Resources::Comment.new({ client: client, project_id: project_id }.merge(data))
13
+ end
14
+
15
+ def update(comment, params={})
16
+ raise ArgumentError, 'Valid comment required to update.' unless comment.instance_of?(Resources::Comment)
17
+
18
+ data = client.put("/projects/#{comment.project_id}/stories/#{comment.story_id}/comments/#{comment.id}",
19
+ params: params).body
20
+
21
+ comment.attributes = data
22
+ comment.clean!
23
+ comment
24
+ end
25
+ end
26
+ end
27
+ end
@@ -12,9 +12,11 @@ module TrackerApi
12
12
  raise Errors::UnexpectedData, 'Array of comments expected' unless data.is_a? Array
13
13
 
14
14
  data.map do |comment|
15
- Resources::Comment.new({ story_id: story_id }.merge(comment))
15
+ Resources::Comment.new({ client: client,
16
+ project_id: project_id,
17
+ story_id: story_id }.merge(comment))
16
18
  end
17
19
  end
18
20
  end
19
21
  end
20
- end
22
+ end
@@ -0,0 +1,45 @@
1
+ module TrackerApi
2
+ module Endpoints
3
+ class Webhook
4
+ attr_accessor :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def get(project_id, id, params={})
11
+ data = client.get("/projects/#{project_id}/webhooks/#{id}", params: params).body
12
+
13
+ Resources::Webhook.new({ client: client, project_id: project_id }.merge(data))
14
+ end
15
+
16
+ def create(project_id, params={})
17
+ data = client.post("/projects/#{project_id}/webhooks", params: params).body
18
+
19
+ Resources::Webhook.new({ client: client }.merge(data))
20
+ end
21
+
22
+ def update(webhook, params={})
23
+ raise ArgumentError, 'Valid webhook required to update.' unless webhook.instance_of?(Resources::Webhook)
24
+
25
+ data = client.put("/projects/#{webhook.project_id}/webhooks/#{webhook.id}", params: params).body
26
+
27
+ webhook.attributes = data
28
+ webhook.clean!
29
+ webhook
30
+ end
31
+
32
+ def delete(webhook)
33
+ raise ArgumentError, 'Valid webhook required to update.' unless webhook.instance_of?(Resources::Webhook)
34
+
35
+ data = client.delete("/projects/#{webhook.project_id}/webhooks/#{webhook.id}")
36
+ data.status == 204
37
+ end
38
+
39
+ def delete_from_project(project_id, webhook_id)
40
+ data = client.delete("/projects/#{project_id}/webhooks/#{webhook_id}")
41
+ data.status == 204
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,20 @@
1
+ module TrackerApi
2
+ module Endpoints
3
+ class Webhooks
4
+ attr_accessor :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def get(project_id, params={})
11
+ data = client.paginate("/projects/#{project_id}/webhooks", params: params)
12
+ raise Errors::UnexpectedData, 'Array of webhooks expected' unless data.is_a? Array
13
+
14
+ data.map do |webhook|
15
+ Resources::Webhook.new({ client: client, project_id: project_id }.merge(webhook))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,6 +3,9 @@ module TrackerApi
3
3
  class Comment
4
4
  include Shared::Base
5
5
 
6
+ attribute :client
7
+
8
+ attribute :project_id, Integer
6
9
  attribute :story_id, Integer
7
10
  attribute :epic_id, Integer
8
11
  attribute :text, String
@@ -14,6 +17,19 @@ module TrackerApi
14
17
  attribute :commit_identifier, String
15
18
  attribute :commit_type, String
16
19
  attribute :kind, String
20
+
21
+ class UpdateRepresenter < Representable::Decorator
22
+ include Representable::JSON
23
+
24
+ property :id
25
+ property :text
26
+ end
27
+
28
+ def save
29
+ raise ArgumentError, 'Cannot update a comment with an unknown story_id.' if story_id.nil?
30
+
31
+ Endpoints::Comment.new(client).update(self, UpdateRepresenter.new(Comment.new(self.dirty_attributes)))
32
+ end
17
33
  end
18
34
  end
19
35
  end
@@ -38,6 +38,7 @@ module TrackerApi
38
38
  attribute :velocity_averaged_over, Integer
39
39
  attribute :version, Integer
40
40
  attribute :week_start_day, String
41
+ attribute :webhooks, [Webhook]
41
42
 
42
43
  # @return [String] comma separated list of labels
43
44
  def label_list
@@ -73,6 +74,18 @@ module TrackerApi
73
74
  end
74
75
  end
75
76
 
77
+ # Provides a list of all the webhooks in the project.
78
+ #
79
+ # @param [Hash] params
80
+ # @return [Array[Webhook]] epics associated with this project
81
+ def webhooks(params={})
82
+ if @webhooks && @webhooks.present?
83
+ @webhooks
84
+ else
85
+ @webhooks = Endpoints::Webhooks.new(client).get(id, params)
86
+ end
87
+ end
88
+
76
89
  # Provides a list of all the iterations in the project.
77
90
  #
78
91
  # @param [Hash] params
@@ -173,6 +186,29 @@ module TrackerApi
173
186
  def add_membership(params)
174
187
  Endpoints::Memberships.new(client).add(id, params)
175
188
  end
189
+
190
+ # Find a webhook for the project.
191
+ #
192
+ # @param [Fixnum] webhook_id id of webhook to get
193
+ # @return [Webhook] webhook with given id
194
+ def webhook(webhook_id, params={})
195
+ Endpoints::Webhook.new(client).get(id, webhook_id, params)
196
+ end
197
+
198
+ # Create a new webhook for the project.
199
+ #
200
+ # @param [Hash] params attributes to add a webhook; must have webhook_url, webhook_version
201
+ # @return [Webhook] webhook that was added to project
202
+ def add_webhook(params)
203
+ Endpoints::Webhook.new(client).create(id, params)
204
+ end
205
+
206
+ # Delete webhook from the project.
207
+ #
208
+ # @return true of false depends on result of delition
209
+ def delete_webhook(webhook_id)
210
+ Endpoints::Webhook.new(client).delete_from_project(id, webhook_id)
211
+ end
176
212
  end
177
213
  end
178
214
  end
@@ -127,6 +127,12 @@ module TrackerApi
127
127
  Endpoints::Task.new(client).create(project_id, id, params)
128
128
  end
129
129
 
130
+ # @param [Hash] params attributes to create the comment with
131
+ # @return [Comment] newly created Comment
132
+ def create_comment(params)
133
+ Endpoints::Comment.new(client).create(project_id, id, params)
134
+ end
135
+
130
136
  # Save changes to an existing Story.
131
137
  def save
132
138
  raise ArgumentError, 'Can not update a story with an unknown project_id.' if project_id.nil?
@@ -0,0 +1,37 @@
1
+ module TrackerApi
2
+ module Resources
3
+ class Webhook
4
+ include Shared::Base
5
+
6
+ attribute :client
7
+
8
+ attribute :kind, String
9
+ attribute :project_id, Integer
10
+ attribute :webhook_url, String
11
+ attribute :webhook_version, String
12
+ attribute :created_at, DateTime
13
+ attribute :updated_at, DateTime
14
+
15
+ class UpdateRepresenter < Representable::Decorator
16
+ include Representable::JSON
17
+
18
+ property :project_id
19
+ property :webhook_url
20
+ property :webhook_version
21
+ end
22
+
23
+ def delete
24
+ raise ArgumentError, 'Can not delete a webhook with an unknown project_id.' if project_id.nil?
25
+
26
+ Endpoints::Webhook.new(client).delete(self)
27
+ end
28
+
29
+ # Save changes to an existing Webhook.
30
+ def save
31
+ raise ArgumentError, 'Can not update a webhook with an unknown project_id.' if project_id.nil?
32
+
33
+ Endpoints::Webhook.new(client).update(self, UpdateRepresenter.new(Webhook.new(self.dirty_attributes)))
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module TrackerApi
2
- VERSION = '1.4.1'
2
+ VERSION = '1.5.0'
3
3
  end
@@ -0,0 +1,35 @@
1
+ require_relative 'minitest_helper'
2
+
3
+ describe TrackerApi::Resources::Comment 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
+ let(:story_id) { '66728004' }
9
+ let(:story) { VCR.use_cassette('get story') { project.story(story_id) } }
10
+ let(:comments) { VCR.use_cassette('get comments') { story.comments } }
11
+ let(:existing_comment) { comments.first }
12
+
13
+ it 'can create a comment given a story' do
14
+ text = "Test creating a comment"
15
+ comment = nil
16
+ VCR.use_cassette('create comment', record: :new_episodes) do
17
+ comment = story.create_comment(text: text)
18
+ end
19
+
20
+ comment.text.must_equal text
21
+ comment.clean?.must_equal true
22
+ end
23
+
24
+ it 'can update an existing comment' do
25
+ new_text = "#{existing_comment.text}+"
26
+ existing_comment.text = new_text
27
+
28
+ VCR.use_cassette('save comment', record: :new_episodes) do
29
+ existing_comment.save
30
+ end
31
+
32
+ existing_comment.text.must_equal new_text
33
+ existing_comment.clean?.must_equal true
34
+ end
35
+ end
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"post","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728004/comments","body":{"encoding":"UTF-8","string":"{\"text\":\"Test creating a comment\"}"},"headers":{"User-Agent":["Ruby/2.2.3 (x86_64-darwin14; ruby) TrackerApi/1.4.1 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":["Wed, 16 Nov 2016 14:17:47 GMT"],"Etag":["\"05a4afa88e8d89128c99e3803eb746cd\""],"Server":["nginx + Phusion Passenger"],"Status":["200 OK"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Powered-By":["Phusion Passenger"],"X-Rack-Cache":["invalidate, pass"],"X-Request-Id":["c64522554bfcacb90f63fea5c9025473"],"X-Runtime":["0.148598"],"X-Tracker-Client-Pinger-Interval":["20"],"X-Tracker-Project-Version":["155"],"X-Ua-Compatible":["IE=Edge,chrome=1"],"X-Vcap-Request-Id":["27b5c8de-19f9-46c8-42b0-8fd3f82ed5cb"],"Content-Length":["178"],"Connection":["keep-alive"]},"body":{"encoding":"ASCII-8BIT","string":"{\"kind\":\"comment\",\"id\":155658605,\"story_id\":66728004,\"text\":\"Test creating a comment\",\"person_id\":1266314,\"created_at\":\"2016-11-16T14:17:47Z\",\"updated_at\":\"2016-11-16T14:17:47Z\"}"},"http_version":null},"recorded_at":"Wed, 16 Nov 2016 14:17:48 GMT"}],"recorded_with":"VCR 3.0.3"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728004/comments","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.2.3 (x86_64-darwin14; ruby) TrackerApi/1.4.1 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":["Wed, 16 Nov 2016 14:14:33 GMT"],"Etag":["\"0deb8dbe1ce2f0d1f95892eb3114789a\""],"Server":["nginx + Phusion Passenger"],"Status":["200 OK"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Powered-By":["Phusion Passenger"],"X-Rack-Cache":["miss"],"X-Request-Id":["4e0fe5c2f0ad5f4243b5961ebbf3e767"],"X-Runtime":["0.042615"],"X-Tracker-Client-Pinger-Interval":["20"],"X-Tracker-Project-Version":["154"],"X-Ua-Compatible":["IE=Edge,chrome=1"],"X-Vcap-Request-Id":["7b308ac4-1cf5-4318-7843-5dde89abea3d"],"Content-Length":["355"],"Connection":["keep-alive"]},"body":{"encoding":"ASCII-8BIT","string":"[{\"kind\":\"comment\",\"id\":120836920,\"story_id\":66728004,\"text\":\"This is a comment.\",\"person_id\":1266314,\"created_at\":\"2015-12-17T22:13:55Z\",\"updated_at\":\"2015-12-17T22:13:55Z\"},{\"kind\":\"comment\",\"id\":120836938,\"story_id\":66728004,\"text\":\"This is another comment.\",\"person_id\":1266314,\"created_at\":\"2015-12-17T22:14:04Z\",\"updated_at\":\"2015-12-17T22:14:04Z\"}]"},"http_version":null},"recorded_at":"Wed, 16 Nov 2016 14:14:34 GMT"}],"recorded_with":"VCR 3.0.3"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"put","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/66728004/comments/120836920","body":{"encoding":"UTF-8","string":"{\"text\":\"This is a comment.+\"}"},"headers":{"User-Agent":["Ruby/2.2.3 (x86_64-darwin14; ruby) TrackerApi/1.4.1 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":["Wed, 16 Nov 2016 14:20:30 GMT"],"Etag":["\"d4458c709c842d1e8544e2b3397418f9\""],"Server":["nginx + Phusion Passenger"],"Status":["200 OK"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Powered-By":["Phusion Passenger"],"X-Rack-Cache":["invalidate, pass"],"X-Request-Id":["87382a7f1e4c3dd82514cde390832f7f"],"X-Runtime":["0.211884"],"X-Tracker-Client-Pinger-Interval":["20"],"X-Tracker-Project-Version":["156"],"X-Ua-Compatible":["IE=Edge,chrome=1"],"X-Vcap-Request-Id":["3ba8192f-073e-44f9-50b2-74fca707f240"],"Content-Length":["174"],"Connection":["keep-alive"]},"body":{"encoding":"ASCII-8BIT","string":"{\"kind\":\"comment\",\"id\":120836920,\"story_id\":66728004,\"text\":\"This is a comment.+\",\"person_id\":1266314,\"created_at\":\"2015-12-17T22:13:55Z\",\"updated_at\":\"2016-11-16T14:20:30Z\"}"},"http_version":null},"recorded_at":"Wed, 16 Nov 2016 14:20:30 GMT"}],"recorded_with":"VCR 3.0.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.4.1
4
+ version: 1.5.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-10-21 00:00:00.000000000 Z
11
+ date: 2016-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -224,6 +224,7 @@ files:
224
224
  - lib/tracker_api.rb
225
225
  - lib/tracker_api/client.rb
226
226
  - lib/tracker_api/endpoints/activity.rb
227
+ - lib/tracker_api/endpoints/comment.rb
227
228
  - lib/tracker_api/endpoints/comments.rb
228
229
  - lib/tracker_api/endpoints/epic.rb
229
230
  - lib/tracker_api/endpoints/epics.rb
@@ -239,6 +240,8 @@ files:
239
240
  - lib/tracker_api/endpoints/story_owners.rb
240
241
  - lib/tracker_api/endpoints/task.rb
241
242
  - lib/tracker_api/endpoints/tasks.rb
243
+ - lib/tracker_api/endpoints/webhook.rb
244
+ - lib/tracker_api/endpoints/webhooks.rb
242
245
  - lib/tracker_api/endpoints/workspace.rb
243
246
  - lib/tracker_api/endpoints/workspaces.rb
244
247
  - lib/tracker_api/error.rb
@@ -261,12 +264,14 @@ files:
261
264
  - lib/tracker_api/resources/story.rb
262
265
  - lib/tracker_api/resources/task.rb
263
266
  - lib/tracker_api/resources/time_zone.rb
267
+ - lib/tracker_api/resources/webhook.rb
264
268
  - lib/tracker_api/resources/workspace.rb
265
269
  - lib/tracker_api/version.rb
266
270
  - lib/virtus/attribute/nullify_blank.rb
267
271
  - lib/virtus/dirty_attribute.rb
268
272
  - lib/virtus/dirty_attribute/session.rb
269
273
  - test/client_test.rb
274
+ - test/comment_test.rb
270
275
  - test/minitest_helper.rb
271
276
  - test/project_test.rb
272
277
  - test/story_test.rb
@@ -276,6 +281,7 @@ files:
276
281
  - test/vcr/cassettes/client_get_limited_stories_with_no_pagination.json
277
282
  - test/vcr/cassettes/client_get_single_epic_by_epic_id.json
278
283
  - test/vcr/cassettes/client_get_single_story_by_story_id.json
284
+ - test/vcr/cassettes/create_comment.json
279
285
  - test/vcr/cassettes/create_story.json
280
286
  - test/vcr/cassettes/create_story_with_lengthy_params.json
281
287
  - test/vcr/cassettes/create_task.json
@@ -283,6 +289,7 @@ files:
283
289
  - test/vcr/cassettes/get_all_projects.json
284
290
  - test/vcr/cassettes/get_all_workspaces.json
285
291
  - test/vcr/cassettes/get_another_story.json
292
+ - test/vcr/cassettes/get_comments.json
286
293
  - test/vcr/cassettes/get_current_iteration.json
287
294
  - test/vcr/cassettes/get_done_iterations.json
288
295
  - test/vcr/cassettes/get_epics.json
@@ -309,6 +316,7 @@ files:
309
316
  - test/vcr/cassettes/get_unscheduled_story.json
310
317
  - test/vcr/cassettes/get_workspace.json
311
318
  - test/vcr/cassettes/get_workspace_projects.json
319
+ - test/vcr/cassettes/save_comment.json
312
320
  - test/vcr/cassettes/save_previously_no_label_story_with_new_label.json
313
321
  - test/vcr/cassettes/save_story.json
314
322
  - test/vcr/cassettes/save_story_with_multiple_changes.json
@@ -345,6 +353,7 @@ specification_version: 4
345
353
  summary: API client for the Pivotal Tracker v5 API
346
354
  test_files:
347
355
  - test/client_test.rb
356
+ - test/comment_test.rb
348
357
  - test/minitest_helper.rb
349
358
  - test/project_test.rb
350
359
  - test/story_test.rb
@@ -354,6 +363,7 @@ test_files:
354
363
  - test/vcr/cassettes/client_get_limited_stories_with_no_pagination.json
355
364
  - test/vcr/cassettes/client_get_single_epic_by_epic_id.json
356
365
  - test/vcr/cassettes/client_get_single_story_by_story_id.json
366
+ - test/vcr/cassettes/create_comment.json
357
367
  - test/vcr/cassettes/create_story.json
358
368
  - test/vcr/cassettes/create_story_with_lengthy_params.json
359
369
  - test/vcr/cassettes/create_task.json
@@ -361,6 +371,7 @@ test_files:
361
371
  - test/vcr/cassettes/get_all_projects.json
362
372
  - test/vcr/cassettes/get_all_workspaces.json
363
373
  - test/vcr/cassettes/get_another_story.json
374
+ - test/vcr/cassettes/get_comments.json
364
375
  - test/vcr/cassettes/get_current_iteration.json
365
376
  - test/vcr/cassettes/get_done_iterations.json
366
377
  - test/vcr/cassettes/get_epics.json
@@ -387,6 +398,7 @@ test_files:
387
398
  - test/vcr/cassettes/get_unscheduled_story.json
388
399
  - test/vcr/cassettes/get_workspace.json
389
400
  - test/vcr/cassettes/get_workspace_projects.json
401
+ - test/vcr/cassettes/save_comment.json
390
402
  - test/vcr/cassettes/save_previously_no_label_story_with_new_label.json
391
403
  - test/vcr/cassettes/save_story.json
392
404
  - test/vcr/cassettes/save_story_with_multiple_changes.json