tracker_api 0.2.5 → 0.2.6

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: f4d013c6228760ae953b8a63e8eb9bfb46491e82
4
- data.tar.gz: c103f57b86db7418f2d2390ec1dc81ffbfcdacf6
3
+ metadata.gz: b9b4b422159e2a7ed286a626f35cc996a8dcb218
4
+ data.tar.gz: fa36b559c306a27b509d2314d52b9a795c6d69f3
5
5
  SHA512:
6
- metadata.gz: 59f28333799be92a3e38edb8bdd5bd4f1cd113c781a21f653ab34673eadd3f1a325f55b09d6a3d9286a483b826ef2d8e1c833cae9e3b1adfb1dd7ba0a9a42565
7
- data.tar.gz: 31d1d0096e0b79af497df676d0ae19d24fac653d7b529f8bd8a5505b8e02f49cdf503bb7eaa214709ab4b530f6c2eef3ca02dcd655d1ecac7071bb2e57d82382
6
+ metadata.gz: 620622ef5cc89906fb1d025d83c2507f9ae92f965501f8acf756fe8780ba30e37fa589c2c777e9cbfcd8c143419915537ec7c64ea195a9a190e3155916747cce
7
+ data.tar.gz: e8af9bb5b17c3863ebe7e5f1e2e6c5656a238ad6702fbd5c8c96a07a92390ed493ccf862d209be87f89f72a72c500dedaeeee3c752651d346276649377838862
data/README.md CHANGED
@@ -44,6 +44,7 @@ project.stories # Get
44
44
  project.stories(with_state: :unscheduled, limit: 10) # Get 10 unscheduled stories for a project
45
45
  project.stories(filter: 'requester:OWK label:"jedi stuff"') # Get all stories that match the given filters
46
46
  project.story(847762630) # Find a story with the given ID
47
+ project.create_story(name: 'Destroy death star') # Create a story with the name 'Destroy death star'
47
48
 
48
49
  epics = project.epics # Get all epics for a project
49
50
  epic = epics.first
@@ -54,6 +54,15 @@ module TrackerApi
54
54
  request(:get, parse_query_and_convenience_headers(path, options))
55
55
  end
56
56
 
57
+ # Make a HTTP POST request
58
+ #
59
+ # @param path [String] The path, relative to api endpoint
60
+ # @param options [Hash] Query and header params for request
61
+ # @return [Faraday::Response]
62
+ def post(path, options = {})
63
+ request(:post, parse_query_and_convenience_headers(path, options))
64
+ end
65
+
57
66
  # Make one or more HTTP GET requests, optionally fetching
58
67
  # the next page of results from information passed back in headers
59
68
  # based on value in {#auto_paginate}.
@@ -67,11 +76,12 @@ module TrackerApi
67
76
  # @return [Array]
68
77
  def paginate(path, options = {}, &block)
69
78
  opts = parse_query_and_convenience_headers path, options.dup
79
+ auto_paginate = opts[:params].delete(:auto_paginate) { |k| @auto_paginate }
70
80
  @last_response = request :get, opts
71
81
  data = @last_response.body
72
82
  raise TrackerApi::Errors::UnexpectedData, 'Array expected' unless data.is_a? Array
73
83
 
74
- if @auto_paginate
84
+ if auto_paginate
75
85
  pager = Pagination.new @last_response.headers
76
86
 
77
87
  while pager.more?
@@ -10,7 +10,7 @@ module TrackerApi
10
10
  def get(project_id, id)
11
11
  data = client.get("/projects/#{project_id}/epics/#{id}").body
12
12
 
13
- Resources::Epic.new({ client: client }.merge(data))
13
+ Resources::Epic.new({ client: client, project_id: project_id }.merge(data))
14
14
  end
15
15
  end
16
16
  end
@@ -11,7 +11,9 @@ module TrackerApi
11
11
  data = client.paginate("/projects/#{project_id}/epics", params: params)
12
12
  raise TrackerApi::Errors::UnexpectedData, 'Array of epics expected' unless data.is_a? Array
13
13
 
14
- data.map { |epic| Resources::Epic.new({ client: client }.merge(epic)) }
14
+ data.map do |epic|
15
+ Resources::Epic.new({ client: client, project_id: project_id }.merge(epic))
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -11,7 +11,9 @@ module TrackerApi
11
11
  data = client.paginate("/projects/#{project_id}/iterations", params: params)
12
12
  raise TrackerApi::Errors::UnexpectedData, 'Array of iterations expected' unless data.is_a? Array
13
13
 
14
- data.map { |iteration| Resources::Iteration.new({ client: client }.merge(iteration)) }
14
+ data.map do |iteration|
15
+ Resources::Iteration.new({ client: client, project_id: project_id }.merge(iteration))
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -11,7 +11,9 @@ module TrackerApi
11
11
  data = client.paginate("/projects/#{project_id}/memberships", params: params)
12
12
  raise TrackerApi::Errors::UnexpectedData, 'Array of memberships expected' unless data.is_a? Array
13
13
 
14
- data.map { |membership| Resources::ProjectMembership.new({ client: client }.merge(membership)) }
14
+ data.map do |membership|
15
+ Resources::ProjectMembership.new({ client: client, project_id: project_id }.merge(membership))
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -11,7 +11,9 @@ module TrackerApi
11
11
  data = client.paginate("/projects/#{project_id}/stories", params: params)
12
12
  raise TrackerApi::Errors::UnexpectedData, 'Array of stories expected' unless data.is_a? Array
13
13
 
14
- data.map { |story| Resources::Story.new({ client: client }.merge(story)) }
14
+ data.map do |story|
15
+ Resources::Story.new({ client: client, project_id: project_id }.merge(story))
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -10,7 +10,7 @@ module TrackerApi
10
10
  def get(project_id, id)
11
11
  data = client.get("/projects/#{project_id}/stories/#{id}").body
12
12
 
13
- Resources::Story.new({ client: client }.merge(data))
13
+ Resources::Story.new({ client: client, project_id: project_id }.merge(data))
14
14
  end
15
15
 
16
16
  def get_story(story_id)
@@ -18,6 +18,12 @@ module TrackerApi
18
18
 
19
19
  Resources::Story.new({ client: client }.merge(data))
20
20
  end
21
+
22
+ def create(project_id, params={})
23
+ data = client.post("/projects/#{project_id}/stories", params: params).body
24
+
25
+ Resources::Story.new({ client: client }.merge(data))
26
+ end
21
27
  end
22
28
  end
23
29
  end
@@ -11,7 +11,9 @@ module TrackerApi
11
11
  data = client.paginate("/projects/#{project_id}/stories/#{story_id}/tasks", params: params)
12
12
  raise TrackerApi::Errors::UnexpectedData, 'Array of tasks expected' unless data.is_a? Array
13
13
 
14
- data.map { |task| Resources::Task.new({ client: client }.merge(task)) }
14
+ data.map do |task|
15
+ Resources::Task.new({ client: client, project_id: project_id }.merge(task))
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -90,6 +90,12 @@ module TrackerApi
90
90
  def story(story_id)
91
91
  Endpoints::Story.new(client).get(id, story_id)
92
92
  end
93
+
94
+ # @param [Hash] hash of attributes to create the story
95
+ # @return [Story] Story with given id
96
+ def create_story(params)
97
+ Endpoints::Story.new(client).create(id, params)
98
+ end
93
99
  end
94
100
  end
95
101
  end
@@ -1,3 +1,3 @@
1
1
  module TrackerApi
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
data/test/client_test.rb CHANGED
@@ -101,6 +101,17 @@ describe TrackerApi::Client do
101
101
  end
102
102
  end
103
103
 
104
+ it 'allows auto pagination to be turned off when just a subset of a list is desired' do
105
+ VCR.use_cassette('client: get limited stories with no pagination', record: :new_episodes) do
106
+ project = client.project(project_id)
107
+
108
+ # force no pagination
109
+ stories = project.stories(limit: 7, auto_paginate: false)
110
+ stories.wont_be_empty
111
+ stories.length.must_equal 7
112
+ end
113
+ end
114
+
104
115
  it 'can handle negative offsets' do
105
116
  VCR.use_cassette('client: done iterations with pagination', record: :new_episodes) do
106
117
  project = client.project(project_id)
@@ -19,7 +19,7 @@ VCR.configure do |c|
19
19
  c.ignore_localhost = true
20
20
  c.cassette_library_dir = File.expand_path('../vcr/cassettes', __FILE__).to_s
21
21
  c.default_cassette_options = { serialize_with: :json }
22
- c.hook_into :faraday
22
+ c.hook_into :excon
23
23
  c.allow_http_connections_when_no_cassette = false
24
24
  end
25
25
 
data/test/project_test.rb CHANGED
@@ -77,5 +77,16 @@ describe TrackerApi::Resources::Project do
77
77
  story.current_state.must_equal 'unscheduled'
78
78
  end
79
79
  end
80
+
81
+ it 'can create story' do
82
+ VCR.use_cassette('create story') do
83
+ story = project.create_story(name: 'Test story')
84
+
85
+ story.must_be_instance_of TrackerApi::Resources::Story
86
+ story.id.wont_be_nil
87
+ story.id.must_be :>, 0
88
+ story.name.must_equal 'Test story'
89
+ end
90
+ end
80
91
  end
81
92
  end
data/test/story_test.rb CHANGED
@@ -7,7 +7,7 @@ describe TrackerApi::Resources::Story do
7
7
  let(:project) { VCR.use_cassette('get project') { client.project(project_id) } }
8
8
 
9
9
  describe '.tasks' do
10
- it "gets all tasks for this story" do
10
+ it 'gets all tasks for this story' do
11
11
  VCR.use_cassette('get tasks', record: :new_episodes) do
12
12
  tasks = project.story('66728004').tasks
13
13
 
@@ -16,5 +16,18 @@ describe TrackerApi::Resources::Story do
16
16
  task.must_be_instance_of TrackerApi::Resources::Task
17
17
  end
18
18
  end
19
+
20
+ it 'gets all tasks even when the project_id is excluded from the story fields' do
21
+ VCR.use_cassette('get tasks when stories filtered', record: :new_episodes) do
22
+ stories = project.stories(with_state: 'unstarted', fields: 'name,story_type')
23
+ stories.each do |story|
24
+ tasks = story.tasks
25
+ unless tasks.empty?
26
+ task = tasks.first
27
+ task.must_be_instance_of TrackerApi::Resources::Task
28
+ end
29
+ end
30
+ end
31
+ end
19
32
  end
20
33
  end
data/tracker_api.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'minitest'
24
24
  spec.add_development_dependency 'awesome_print'
25
25
  spec.add_development_dependency 'vcr'
26
+ spec.add_development_dependency 'excon'
26
27
  spec.add_development_dependency 'multi_json'
27
28
  # spec.add_development_dependency 'byebug'
28
29
  # spec.add_development_dependency 'pry-byebug'
@@ -30,7 +31,7 @@ Gem::Specification.new do |spec|
30
31
 
31
32
  spec.add_dependency 'addressable'
32
33
  spec.add_dependency 'virtus'
33
- spec.add_dependency 'faraday', '~> 0.8.0'
34
+ spec.add_dependency 'faraday', '~> 0.9.0'
34
35
  spec.add_dependency 'faraday_middleware'
35
36
  # spec.add_dependency 'excon'
36
37
  end
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: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Forest Carlisle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-10 00:00:00.000000000 Z
11
+ date: 2014-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: excon
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: multi_json
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +142,14 @@ dependencies:
128
142
  requirements:
129
143
  - - ~>
130
144
  - !ruby/object:Gem::Version
131
- version: 0.8.0
145
+ version: 0.9.0
132
146
  type: :runtime
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - ~>
137
151
  - !ruby/object:Gem::Version
138
- version: 0.8.0
152
+ version: 0.9.0
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: faraday_middleware
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -228,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
242
  version: '0'
229
243
  requirements: []
230
244
  rubyforge_project:
231
- rubygems_version: 2.2.2
245
+ rubygems_version: 2.0.14
232
246
  signing_key:
233
247
  specification_version: 4
234
248
  summary: API client for the Pivotal Tracker v5 API