Add link_to_previous_page helper for sinatra

This commit is contained in:
Ayaka Ikezawa 2014-02-02 15:46:08 +09:00
parent cd90846134
commit a70e2499d3
2 changed files with 65 additions and 0 deletions

View File

@ -93,6 +93,18 @@ module Kaminari::Helpers
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.
#

View File

@ -12,6 +12,17 @@ if defined? Sinatra
</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>
@ -125,6 +136,48 @@ EOT
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