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 +4 -4
- data/README.md +5 -0
- data/lib/tracker_api.rb +4 -0
- data/lib/tracker_api/client.rb +9 -0
- data/lib/tracker_api/endpoints/comment.rb +27 -0
- data/lib/tracker_api/endpoints/comments.rb +4 -2
- data/lib/tracker_api/endpoints/webhook.rb +45 -0
- data/lib/tracker_api/endpoints/webhooks.rb +20 -0
- data/lib/tracker_api/resources/comment.rb +16 -0
- data/lib/tracker_api/resources/project.rb +36 -0
- data/lib/tracker_api/resources/story.rb +6 -0
- data/lib/tracker_api/resources/webhook.rb +37 -0
- data/lib/tracker_api/version.rb +1 -1
- data/test/comment_test.rb +35 -0
- data/test/vcr/cassettes/create_comment.json +1 -0
- data/test/vcr/cassettes/get_comments.json +1 -0
- data/test/vcr/cassettes/save_comment.json +1 -0
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1eb5cedffd5fd67d20ef0ef73aae1775305c1993
|
4
|
+
data.tar.gz: f503a4be4a33340868c1a02b6a444c37a134374c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/tracker_api/client.rb
CHANGED
@@ -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({
|
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
|
data/lib/tracker_api/version.rb
CHANGED
@@ -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
|
+
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-
|
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
|