github_api 0.4.0 → 0.4.1
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.
- data/features/pagination.feature +6 -0
- data/lib/github_api/api.rb +1 -0
- data/lib/github_api/api/actions.rb +38 -0
- data/lib/github_api/paged_request.rb +10 -4
- data/lib/github_api/version.rb +1 -1
- data/spec/github/api_spec.rb +42 -13
- data/spec/github/paged_request_spec.rb +3 -3
- data/spec/support/file_ops.rb +14 -0
- metadata +4 -3
- data/lib/github_api/api/utils.rb +0 -9
data/features/pagination.feature
CHANGED
@@ -2,3 +2,9 @@ Feature: Githu API pagination
|
|
2
2
|
In order to paginate number of received records
|
3
3
|
As a user
|
4
4
|
I want to be able to view them in butches
|
5
|
+
|
6
|
+
Scenario: Re
|
7
|
+
Given I have "Github::Repos" instance
|
8
|
+
And I am looking for "repos" with the following params:
|
9
|
+
| page | per_page |
|
10
|
+
And I make request within a cassette named "repos"
|
data/lib/github_api/api.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class API
|
5
|
+
|
6
|
+
# Returns all API public methods for a given class.
|
7
|
+
def self.inherited(klass)
|
8
|
+
klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
9
|
+
def self.actions
|
10
|
+
self.new.api_methods_in(#{klass})
|
11
|
+
end
|
12
|
+
def actions
|
13
|
+
api_methods_in(#{klass})
|
14
|
+
end
|
15
|
+
RUBY_EVAL
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def api_methods_in(klass)
|
20
|
+
puts "---"
|
21
|
+
(klass.send(:instance_methods, false) - ['actions']).sort.each do |rest_met|
|
22
|
+
puts "|--> #{rest_met}"
|
23
|
+
end
|
24
|
+
klass.included_modules.each do |mod|
|
25
|
+
if mod.to_s =~ /#{klass}/
|
26
|
+
puts "| \\ #{mod.to_s}"
|
27
|
+
mod.instance_methods(false).each do |met|
|
28
|
+
puts "| |--> #{met}"
|
29
|
+
end
|
30
|
+
puts "| /"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
puts "---"
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
end # API
|
38
|
+
end # Github
|
@@ -4,9 +4,11 @@ module Github
|
|
4
4
|
|
5
5
|
extend self
|
6
6
|
|
7
|
-
FIRST_PAGE = 1
|
7
|
+
FIRST_PAGE = 1 # Default request page if none provided
|
8
8
|
|
9
|
-
PER_PAGE
|
9
|
+
PER_PAGE = 30 # Default number of items as specified by API
|
10
|
+
|
11
|
+
NOT_FOUND = -1 # Either page or per_page parameter not present
|
10
12
|
|
11
13
|
class << self
|
12
14
|
attr_accessor :page, :per_page
|
@@ -21,8 +23,12 @@ module Github
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def page_request(path, params={})
|
24
|
-
params[PARAM_PER_PAGE]
|
25
|
-
|
26
|
+
if params[PARAM_PER_PAGE] == NOT_FOUND
|
27
|
+
params[PARAM_PER_PAGE] = default_page_size
|
28
|
+
end
|
29
|
+
if !params[PARAM_PAGE] || params[PARAM_PAGE] == NOT_FOUND
|
30
|
+
params[PARAM_PAGE] = default_page
|
31
|
+
end
|
26
32
|
|
27
33
|
Github::PagedRequest.page = params[PARAM_PAGE]
|
28
34
|
Github::PagedRequest.per_page = params[PARAM_PER_PAGE]
|
data/lib/github_api/version.rb
CHANGED
data/spec/github/api_spec.rb
CHANGED
@@ -3,23 +3,52 @@ require 'spec_helper'
|
|
3
3
|
describe Github::API do
|
4
4
|
|
5
5
|
let(:api) { Github::API.new }
|
6
|
+
let(:repos) { Github::Repos }
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
it { described_class.included_modules.should include Github::Authorization }
|
9
|
+
it { described_class.included_modules.should include Github::MimeType }
|
10
|
+
it { described_class.included_modules.should include Github::Connection }
|
11
|
+
it { described_class.included_modules.should include Github::Request }
|
12
|
+
|
13
|
+
context 'actions' do
|
14
|
+
it { described_class.new.should respond_to :api_methods_in }
|
15
|
+
|
16
|
+
it 'dynamically adds actions inspection to classes inheriting from api' do
|
17
|
+
repos.should respond_to :actions
|
18
|
+
repos.new.should respond_to :actions
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'ensures output contains api methods' do
|
22
|
+
methods = [ 'method_a', 'method_b']
|
23
|
+
repos.stub(:instance_methods).and_return methods
|
24
|
+
output = capture(:stdout) {
|
25
|
+
api.api_methods_in(repos)
|
26
|
+
}
|
27
|
+
output.should =~ /.*method_a.*/
|
28
|
+
output.should =~ /.*method_b.*/
|
29
|
+
end
|
9
30
|
end
|
10
31
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
32
|
+
context '_normalize_params_keys' do
|
33
|
+
before do
|
34
|
+
@params = { 'a' => { :b => { 'c' => 1 }, 'd' => [ 'a', { :e => 2 }] } }
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should stringify all the keys inside nested hash" do
|
38
|
+
actual = api.send(:_normalize_params_keys, @params)
|
39
|
+
expected = { 'a' => { 'b'=> { 'c' => 1 }, 'd' => [ 'a', { 'e'=> 2 }] } }
|
40
|
+
actual.should be_eql expected
|
41
|
+
end
|
15
42
|
end
|
16
43
|
|
17
|
-
|
18
|
-
valid
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
44
|
+
context '_filter_params_key' do
|
45
|
+
it "should remove non valid param keys" do
|
46
|
+
valid = ['a', 'b', 'e']
|
47
|
+
hash = {'a' => 1, 'b' => 3, 'c' => 2, 'd'=> 4, 'e' => 5 }
|
48
|
+
actual = api.send(:_filter_params_keys, valid, hash)
|
49
|
+
expected = {'a' => 1, 'b' => 3, 'e' => 5 }
|
50
|
+
actual.should be_eql expected
|
51
|
+
end
|
23
52
|
end
|
24
53
|
|
25
|
-
end
|
54
|
+
end # Github::API
|
@@ -15,15 +15,15 @@ describe Github::PagedRequest do
|
|
15
15
|
it 'sets default per_page when only custom page passed' do
|
16
16
|
Github.stub_chain(:api_client, :per_page).and_return nil
|
17
17
|
Github.stub_chain(:api_client, :get).and_return nil
|
18
|
-
Github::PagedRequest.page_request path, {'page' => 3}
|
18
|
+
Github::PagedRequest.page_request path, {'page' => 3, 'per_page' => -1}
|
19
19
|
Github::PagedRequest.page.should eq 3
|
20
|
-
Github::PagedRequest.per_page.should eq
|
20
|
+
Github::PagedRequest.per_page.should eq 30
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'sets default page when only custom per_page passed' do
|
24
24
|
Github.stub_chain(:api_client, :page).and_return nil
|
25
25
|
Github.stub_chain(:api_client, :get).and_return nil
|
26
|
-
Github::PagedRequest.page_request path, {'per_page' => 33}
|
26
|
+
Github::PagedRequest.page_request path, {'per_page' => 33, 'page' => -1}
|
27
27
|
Github::PagedRequest.page.should eq 1
|
28
28
|
Github::PagedRequest.per_page.should eq 33
|
29
29
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
# Allow to capture stdout, stderr inside string for comparisons
|
4
|
+
def capture(*streams)
|
5
|
+
streams.map! { |stream| stream.to_s }
|
6
|
+
begin
|
7
|
+
result = StringIO.new
|
8
|
+
streams.each { |stream| eval "$#{stream} = result" }
|
9
|
+
yield
|
10
|
+
ensure
|
11
|
+
streams.each { |stream| eval("$#{stream} = #{stream.upcase}")}
|
12
|
+
end
|
13
|
+
result.string
|
14
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: github_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.4.
|
5
|
+
version: 0.4.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Piotr Murach
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-01-
|
13
|
+
date: 2012-01-18 00:00:00 +00:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -189,7 +189,7 @@ files:
|
|
189
189
|
- features/step_definitions/github_api_steps.rb
|
190
190
|
- features/support/env.rb
|
191
191
|
- features/support/vcr.rb
|
192
|
-
- lib/github_api/api/
|
192
|
+
- lib/github_api/api/actions.rb
|
193
193
|
- lib/github_api/api.rb
|
194
194
|
- lib/github_api/authorization.rb
|
195
195
|
- lib/github_api/authorizations.rb
|
@@ -346,6 +346,7 @@ files:
|
|
346
346
|
- spec/README.rdoc
|
347
347
|
- spec/spec_helper.rb
|
348
348
|
- spec/support/base.rb
|
349
|
+
- spec/support/file_ops.rb
|
349
350
|
- spec/support/github_api_shared_examples.rb
|
350
351
|
- README.md
|
351
352
|
- LICENSE.txt
|