Sha256: 7a8ac713292e404bc07a7c77eff4d5eebea552e6ff7fe84fd9a4c991f22b370c
Contents?: true
Size: 1.51 KB
Versions: 1
Compression:
Stored size: 1.51 KB
Contents
# require_relative 'validator' require 'might/paginator' module Might # Pagination middleware # class PaginationMiddleware # @param app [#call, Proc] # @param max_per_page [Integer] # @param per_page [Integer] # def initialize(app, max_per_page: false, per_page: 50) @app = app @max_per_page = max_per_page @per_page = per_page end # @param [Array(ActiveRecord::Relation, Hash)] env # First argument is a ActiveRecord relation which must be paginated # Second argument is a request parameters provided by user # def call(env) scope, params = env # validate_parameters!(params) paginated_scope = Paginator.new(pagination_options(params)).paginate(scope) app.call([paginated_scope, params]) end private attr_reader :app # def validate_parameters!(params) # validator = Validator.new(params[:page]) # fail(PaginationValidationFailed, validator.errors) unless validator.valid? # end # @param [Hash] params # @option params [Hash] (nil) :limit # @option params [Hash] (nil) :offset # def pagination_options(params) options = default_pagination_options.merge(Hash(params[:page])) max_per_page = @max_per_page if max_per_page && options[:limit] > max_per_page options.merge(limit: max_per_page) else options end end def default_pagination_options { limit: @per_page, offset: 0 }.with_indifferent_access end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
might-0.3.0 | lib/might/pagination_middleware.rb |