Sha256: f644091353479e2b9b833821e57e09b15df82156485496a232058a7425ac8175

Contents?: true

Size: 1.35 KB

Versions: 9

Compression:

Stored size: 1.35 KB

Contents

require 'active_support/concern'
require 'active_support/core_ext/module/delegation'
require 'active_support/callbacks'
require 'active_model/naming'
require 'active_model/validator'
require 'active_model/callbacks'
require 'active_model/translation'
require 'active_model/errors'
require 'active_model/validations'

module Might
  #
  class PaginationParametersValidator
    # Validates pagination parameters
    # @param [Hash, nil] page
    # @option page [Number, nil] :limit
    # @option page [Number, nil] :offset
    #
    Validator = Struct.new(:page) do
      include ActiveModel::Validations

      validate :page_is_a_hash
      validates :limit, numericality: { greater_than_or_equal_to: 0 }, allow_nil: true
      validates :offset, numericality: { greater_than_or_equal_to: 0 }, allow_nil: true

      def page_is_a_hash
        return if page.is_a?(Hash) || page.nil?
        errors.add(:page, :invalid_page_type)
      end

      def limit
        page[:limit] if page.is_a?(Hash)
      end

      def offset
        page[:offset] if page.is_a?(Hash)
      end
    end

    def initialize(app)
      @app = app
    end

    def call(env)
      params, errors = env

      validator = Validator.new(params[:page]).tap(&:validate)
      messages = validator.errors.full_messages

      app.call([params, errors.concat(messages)])
    end

    attr_reader :app
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
might-0.7.1 lib/might/pagination_parameters_validator.rb
might-0.7.0 lib/might/pagination_parameters_validator.rb
might-0.6.0 lib/might/pagination_parameters_validator.rb
might-0.5.2 lib/might/pagination_parameters_validator.rb
might-0.5.1 lib/might/pagination_parameters_validator.rb
might-0.5.0 lib/might/pagination_parameters_validator.rb
might-0.4.0 lib/might/pagination_parameters_validator.rb
might-0.3.1 lib/might/pagination_parameters_validator.rb
might-0.3.0 lib/might/pagination_parameters_validator.rb