gerry 0.1.1 → 0.1.2

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: 54504c142edb7bfbe2b9bcc7ad1c4e0d8e288ec0
4
- data.tar.gz: 52bb964e310b1d57507e2443d6eb5170939ba2f7
3
+ metadata.gz: 50cbfe20d0fa8c4f9a179cb5e74fc4ed0bdf346c
4
+ data.tar.gz: e865e925bda4a23be8df637f48278174fd3ae048
5
5
  SHA512:
6
- metadata.gz: a9edca037aead6cf979a3f331de2a7122fba12de1fd171517bbf439912223cf4c375bfe3d510ed9724acb5820745a15de91900ffba09130f7d6c02fd827e0cea
7
- data.tar.gz: 01c5ca61b668906666d7599184aefeebfc7779192f172ecddd47eb51f5f08631a55831ca01264f84fbfc848fee2d68468469e172ac431f4bab581bb80c1dea62
6
+ metadata.gz: a0f656b7564de7d4f0a68bbd3a90323f3392e1fca2724d22ba7847a3063f81337531194eb5129b269f47a126efbef728673d1a25dc77cff79923b5ffcceb5760
7
+ data.tar.gz: 9cd7d00b43322b5dbc68fe116d80e16a5d26d594be79778b4cebee17bb813e7dacd40dcdb1bcdbe484a73d1b92e0f0d9bfcd8d2710e684cebb1315f8fd86548e
@@ -1,17 +1,26 @@
1
1
  module Gerry
2
2
  class Client
3
3
  module Accounts
4
+ # Get the account info for the specified account ID.
5
+ #
6
+ # @param [String] account_id the account.
7
+ # @return [Hash] the account info.
8
+ def account_info(account_id)
9
+ url = "/accounts/#{account_id}"
10
+ get(url)
11
+ end
12
+
4
13
  # Get the global capabilities that are enabled for the calling user.
5
14
  #
6
15
  # @param [Array] options the query parameters.
7
16
  # @return [Hash] the account capabilities.
8
17
  def account_capabilities(options = [])
9
18
  url = '/accounts/self/capabilities'
10
-
19
+
11
20
  if options.empty?
12
21
  return get(url)
13
22
  end
14
-
23
+
15
24
  options = map_options(options)
16
25
  get("#{url}?#{options}")
17
26
  end
@@ -26,4 +35,4 @@ module Gerry
26
35
  end
27
36
  end
28
37
  end
29
- end
38
+ end
@@ -1,3 +1,5 @@
1
+ require 'cgi'
2
+
1
3
  module Gerry
2
4
  class Client
3
5
  module Changes
@@ -6,14 +8,30 @@ module Gerry
6
8
  # @param [Array] options the query parameters.
7
9
  # @return [Hash] the changes.
8
10
  def changes(options = [])
9
- url = '/changes/'
11
+ endpoint = '/changes/'
12
+ url = endpoint
10
13
 
11
- if options.empty?
12
- return get(url)
14
+ if !options.empty?
15
+ url += '?' + map_options(options)
13
16
  end
14
17
 
15
- options = map_options(options)
16
- get("#{url}?#{options}")
18
+ response = get(url)
19
+ return response unless response.last.delete('_more_changes')
20
+
21
+ # Get the original start parameter, if any, else start from 0.
22
+ query = URI.parse(url).query
23
+ query = query ? CGI.parse(query) : { 'S' => ['0'] }
24
+ start = query['S'].join.to_i
25
+
26
+ # Keep getting data until there are no more changes.
27
+ loop do
28
+ # Replace the start parameter, using the original start as an offset.
29
+ query['S'] = ["#{start + response.size}"]
30
+ url = endpoint + '?' + map_options(query)
31
+
32
+ response.concat(get(url))
33
+ return response unless response.last.delete('_more_changes')
34
+ end
17
35
  end
18
36
  end
19
37
  end
@@ -1,14 +1,16 @@
1
- require 'cgi'
2
-
3
1
  module Gerry
4
2
  class Client
5
3
  module Request
6
4
  # Get the mapped options.
7
5
  #
8
- # @param [Array] options the query parameters.
6
+ # @param [Array] or [Hash] options the query parameters.
9
7
  # @return [String] the mapped options.
10
8
  def map_options(options)
11
- options.map{|v| "#{v}"}.join('&')
9
+ if options.is_a?(Array)
10
+ options.map { |v| "#{v}" }.join('&')
11
+ elsif options.is_a?(Hash)
12
+ options.map { |k,v| "#{k}=#{v.join(',')}" }.join('&')
13
+ end
12
14
  end
13
15
 
14
16
  private
@@ -16,33 +18,13 @@ module Gerry
16
18
  end
17
19
 
18
20
  def get(url)
19
- orig_url = url
20
-
21
- # Get the original start parameter, if any.
22
- query = URI.parse(orig_url).query
23
- start = query ? CGI.parse(query)['S'].join.to_i : 0
24
-
25
- # Keep requesting data until there are no more changes.
26
- all_results = []
27
- loop do
28
- response = if @username && @password
29
- auth = { username: @username, password: @password }
30
- self.class.get("/a#{url}", digest_auth: auth)
31
- else
32
- self.class.get(url)
33
- end
34
-
35
- result = parse(response)
36
- return result unless result.is_a?(Array) && result.last.is_a?(Hash)
37
-
38
- all_results.concat(result)
39
- return all_results unless result.last.delete('_more_changes')
40
-
41
- # Append the start parameter to the URL, overriding any previous start parameter.
42
- url = orig_url + "#{query ? '&' : '?'}S=#{start + all_results.size}"
21
+ response = if @username && @password
22
+ auth = { username: @username, password: @password }
23
+ self.class.get("/a#{url}", digest_auth: auth)
24
+ else
25
+ self.class.get(url)
43
26
  end
44
-
45
- all_results
27
+ parse(response)
46
28
  end
47
29
 
48
30
  def put(url, body)
data/lib/gerry/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Gerry
2
2
 
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
 
5
5
  end
data/spec/changes_spec.rb CHANGED
@@ -20,6 +20,7 @@ describe '.changes' do
20
20
  it 'should fetch all changes in batches' do
21
21
  stub_batch_0 = stub_get('/changes/', 'changes_batch_0.json')
22
22
  stub_batch_1 = stub_get('/changes/?S=1', 'changes_batch_1.json')
23
+ stub_batch_2 = stub_get('/changes/?S=2', 'changes_batch_2.json')
23
24
 
24
25
  client = MockGerry.new
25
26
  changes = client.changes
@@ -29,10 +30,15 @@ describe '.changes' do
29
30
 
30
31
  expect(changes[0]['project']).to eq('awesome')
31
32
  expect(changes[0]['branch']).to eq('master')
33
+ expect(changes[0]['owner']['name']).to eq('The Duke')
32
34
 
33
35
  expect(changes[1]['project']).to eq('clean')
34
36
  expect(changes[1]['subject']).to eq('Refactor code')
35
37
  expect(changes[1]['owner']['name']).to eq('Batman')
38
+
39
+ expect(changes[2]['project']).to eq('X')
40
+ expect(changes[2]['subject']).to eq('Remove unused imports')
41
+ expect(changes[2]['owner']['name']).to eq('Bill')
36
42
  end
37
43
 
38
44
  it 'should fetch all open changes' do
@@ -12,6 +12,7 @@
12
12
  "_number": 42,
13
13
  "owner": {
14
14
  "name": "Batman"
15
- }
15
+ },
16
+ "_more_changes": true
16
17
  }
17
18
  ]
@@ -0,0 +1,17 @@
1
+ )]}'
2
+ [
3
+ {
4
+ "project": "X",
5
+ "branch": "default",
6
+ "id": "Ieb185f4da8725ae35e9f940e614c6eaa7b88eff5",
7
+ "subject": "Remove unused imports",
8
+ "status": "NEW",
9
+ "created": "2016-01-11 15:51:30.605000000",
10
+ "updated": "2016-02-12 00:45:26.431000000",
11
+ "_sortkey": "002e4203000187d5",
12
+ "_number": 4711,
13
+ "owner": {
14
+ "name": "Bill"
15
+ }
16
+ }
17
+ ]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gerry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabian Mettler
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-01-12 00:00:00.000000000 Z
14
+ date: 2016-01-13 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: httparty
@@ -152,6 +152,7 @@ files:
152
152
  - spec/fixtures/changes.json
153
153
  - spec/fixtures/changes_batch_0.json
154
154
  - spec/fixtures/changes_batch_1.json
155
+ - spec/fixtures/changes_batch_2.json
155
156
  - spec/fixtures/group_members.json
156
157
  - spec/fixtures/groups.json
157
158
  - spec/fixtures/open_changes.json
@@ -195,6 +196,7 @@ test_files:
195
196
  - spec/fixtures/changes.json
196
197
  - spec/fixtures/changes_batch_0.json
197
198
  - spec/fixtures/changes_batch_1.json
199
+ - spec/fixtures/changes_batch_2.json
198
200
  - spec/fixtures/group_members.json
199
201
  - spec/fixtures/groups.json
200
202
  - spec/fixtures/open_changes.json