require 'rubygems'
require 'bundler/setup'
Bundler.require :default
require 'your_model.rb'
class Application < Sinatra::Base
get '/' do
@articles = Article.order("created_at desc").
paginate :page => params[:page], :per_page => 10
haml :articles
end
helpers do
def to_params(params_hash)
new_params = ''
stack = []
params_hash.each do |k, v|
unless k == "page"
if v.is_a?(Hash)
stack << [k,v]
else
new_params << "#{k}=#{v}&"
end
end
end
stack.each do |parent, hash|
hash.each do |k, v|
unless k == "page"
if v.is_a?(Hash)
stack << ["#{parent}[#{k}]", v]
else
new_params << "#{parent}[#{k}]=#{v}&"
end
end
end
end
new_params.chop!
"&" + new_params unless new_params.empty?
end
def paginate(resources)
parameters = to_params(params.clone)
if !resources.next_page.nil? and !resources.previous_page.nil?
html = %^<a href="#{request.path_info}?page=#{resources.previous_page}#{parameters}">« Prev</a> ^
html += "#{params[:page]} of #{resources.total_pages} "
html += %^<a href="#{request.path_info}?page=#{resources.next_page}#{parameters}">Next »</a>^
elsif !resources.next_page.nil? and resources.previous_page.nil?
html = %^<a href="#{request.path_info}?page=#{resources.next_page}#{parameters}">Next »</a>^
elsif resources.next_page.nil? and !resources.previous_page.nil?
html = %^<a href="#{request.path_info}?page=#{resources.previous_page}#{parameters}">« Prev</a> ^
html += "#{params[:page]} of #{resources.total_pages}"
end
html
end
end
end