Skip to content

Commit

Permalink
Add link_to_previous_page helper for sinatra
Browse files Browse the repository at this point in the history
  • Loading branch information
ikeay committed Feb 2, 2014
1 parent cd90846 commit a70e249
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
12 changes: 12 additions & 0 deletions lib/kaminari/helpers/sinatra_helpers.rb
Expand Up @@ -93,6 +93,18 @@ def paginate(scope, options = {}, &block)
paginator.to_s
end

def link_to_previous_page(scope, name, options = {})
params = options.delete(:params) || (Rack::Utils.parse_query(env['QUERY_STRING']).symbolize_keys rescue {})
param_name = options.delete(:param_name) || Kaminari.config.param_name
placeholder = options.delete(:placeholder)
query = params.merge(param_name => (scope.current_page - 1))
unless scope.first_page?
link_to name, env['PATH_INFO'] + (query.empty? ? '' : "?#{query.to_query}"), options.reverse_merge(:rel => 'previous')
else
placeholder
end
end

# A simple "Twitter like" pagination link that creates a link to the next page.
# Works on Sinatra.
#
Expand Down
53 changes: 53 additions & 0 deletions spec/helpers/sinatra_helpers_spec.rb
Expand Up @@ -12,6 +12,17 @@
</div>
EOT

ERB_TEMPLATE_FOR_PREVIOUS_PAGE = <<EOT
<div>
<ul>
<% @users.each do |user| %>
<li class="user_info"><%= user.id %></li>
<% end %>
</ul>
<%= link_to_previous_page(@users, "Previous!", {:id => 'previous_page_link'}.merge(@options || {})) %>
</div>
EOT

ERB_TEMPLATE_FOR_NEXT_PAGE = <<EOT
<div>
<ul>
Expand Down Expand Up @@ -125,6 +136,48 @@
end
end

describe '#link_to_previous_page' do
before do
mock_app do
register Kaminari::Helpers::SinatraHelpers
get '/users' do
@page = params[:page] || 2
@users = User.page(@page)
erb ERB_TEMPLATE_FOR_PREVIOUS_PAGE
end

get '/users_placeholder' do
@page = params[:page] || 2
@options = {:placeholder => %{<span id='no_previous_page'>No Previous Page</span>}}
@users = User.page(@page)
erb ERB_TEMPLATE_FOR_PREVIOUS_PAGE
end
end
end

context 'having more page' do
it 'should have a more page link' do
get '/users'
last_document.search('a#previous_page_link').should be_present
last_document.search('a#previous_page_link').text.should match(/Previous!/)
end
end

context 'the first page' do
it 'should not have a more page link' do
get '/users?page=1'
last_document.search('a#previous_page_link').should be_empty
end

it 'should have a no more page notation using placeholder' do
get '/users_placeholder?page=1'
last_document.search('a#previous_page_link').should be_empty
last_document.search('span#no_previous_page').should be_present
last_document.search('span#no_previous_page').text.should match(/No Previous Page/)
end
end
end

describe '#link_to_next_page' do
before do
mock_app do
Expand Down

0 comments on commit a70e249

Please sign in to comment.