tracker_api 1.4.1 → 1.5.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: 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