Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,7 @@ In order to be able to create/update/remove files you need to use Contents API l
contents = Github::Client::Repos::Contents.new oauth_token: '...'
```

Having instantiaed the contents, to create a file do:
Having instantiated the contents, to create a file do:

```ruby
contents.create 'username', 'repo_name', 'full_path_to/file.ext',
Expand Down
3 changes: 3 additions & 0 deletions lib/github_api/client/repos.rb
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ def list(*args)
permit %w[ user org type sort direction since ]
end
params = arguments.params
unless params.symbolize_keys[:per_page]
params.merge!(Pagination.per_page_as_param(current_options[:per_page]))
end

response = if (user_name = params.delete('user') || user)
get_request("/users/#{user_name}/repos", params)
Expand Down
10 changes: 10 additions & 0 deletions lib/github_api/pagination.rb
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,16 @@ def has_next_page?
page_iterator.next?
end

# Handle pagination params when they are not passed directly
#
def self.per_page_as_param(per_page_config)
params = {}
if (per_page_config != Github::Configuration.property_set[:per_page])
params[:per_page] = per_page_config unless per_page_config.nil?
end
params
end

private

# Internally used page iterator
Expand Down
50 changes: 50 additions & 0 deletions spec/integration/arguments_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,54 @@
subject.get user, repo, milestone_id, :auto_pagination => true
end
end

context 'handling per_page as a parameter' do
let(:per_page) { 2 }

before :each do
stub_request(:get, url).
to_return(:status => 200, :body => '', :headers => {})
end

context 'when per_page is passed on Github init' do
let(:token) { [*('a'..'z')].sample(30).join }
let(:instance) { Github.new(oauth_token: token, per_page: per_page) }
let(:response) { instance.repos.list }
let(:url) { "https://api.github.com/user/repos?access_token=#{token}&per_page=#{per_page}" }

it 'passes per_page params to url' do
expect(response.status).to eq 200
end
end

context 'when per_page is passed on Repos initialize only' do
let(:repos) { Github::Client::Repos.new(per_page: per_page) }
let(:response) { repos.list(user: 'fpgentil') }
let(:url) { "https://api.github.com/users/fpgentil/repos?per_page=#{per_page}" }

it 'passes per_page params to url' do
expect(response.status).to eq 200
end
end

context 'when per_page is passed on Repos initialize and list method' do
let(:repos) { Github::Client::Repos.new(per_page: per_page + 5) }
let(:response) { repos.list(user: 'fpgentil', per_page: per_page) }
let(:url) { "https://api.github.com/users/fpgentil/repos?per_page=#{per_page}" }

it 'passes per_page params to url' do
expect(response.status).to eq 200
end
end

context 'when per_page is not passed as params' do
let(:repos) { Github::Client::Repos.new }
let(:response) { repos.list(user: 'fpgentil') }
let(:url) { "https://api.github.com/users/fpgentil/repos" }

it 'does not pass per_page params to url' do
expect(response.status).to eq 200
end
end
end
end