From e8205b505bdf6978696905b5e66ac7dc33c389fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohnic=CC=81?= Date: Tue, 2 Aug 2011 18:34:28 +0200 Subject: [PATCH] Sinatra has taken the stage --- lib/will_paginate.rb | 4 +++ lib/will_paginate/view_helpers/sinatra.rb | 41 +++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 lib/will_paginate/view_helpers/sinatra.rb diff --git a/lib/will_paginate.rb b/lib/will_paginate.rb index 9b033e044..889718e76 100644 --- a/lib/will_paginate.rb +++ b/lib/will_paginate.rb @@ -17,3 +17,7 @@ module WillPaginate end end end + +if defined?(Sinatra) and Sinatra.respond_to? :register + require 'will_paginate/view_helpers/sinatra' +end diff --git a/lib/will_paginate/view_helpers/sinatra.rb b/lib/will_paginate/view_helpers/sinatra.rb new file mode 100644 index 000000000..2ba17f89e --- /dev/null +++ b/lib/will_paginate/view_helpers/sinatra.rb @@ -0,0 +1,41 @@ +require 'sinatra/base' +require 'will_paginate/view_helpers' +require 'will_paginate/view_helpers/link_renderer' + +module WillPaginate + module Sinatra + module Helpers + include ViewHelpers + + def will_paginate(collection, options = {}) #:nodoc: + options = options.merge(:renderer => LinkRenderer) unless options[:renderer] + super(collection, options) + end + end + + class LinkRenderer < ViewHelpers::LinkRenderer + protected + + def url(page) + str = File.join(request.script_name.to_s, request.path_info) + params = request.GET.merge(param_name.to_s => page.to_s) + params.update @options[:params] if @options[:params] + str << '?' << build_query(params) + end + + def request + @template.request + end + + def build_query(params) + Rack::Utils.build_nested_query params + end + end + + def self.registered(app) + app.helpers Helpers + end + + ::Sinatra.register self + end +end