Sha256: 1c56c2f8ede12b4314c4ac6ec91982d99ec9257cf8d620550fd1633583b4481b

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

require 'active_support/core_ext/module/delegation'

module Might
  # User provided filtering on particular parameter
  #
  class SortParameter
    DIRECTIONS = %w(asc desc).freeze
    REVERSED_DIRECTIONS = {
      'asc' => 'desc',
      'desc' => 'asc',
    }.freeze

    attr_reader :direction

    # @return [ParameterDefinition]
    #
    attr_reader :definition

    # @param ['asc', desc'] direction
    # @param [SortParameterDefinition]
    #
    def initialize(direction, definition)
      @direction = direction.to_s
      fail ArgumentError unless DIRECTIONS.include?(@direction)
      @definition = definition
      @validator = definition.validator
    end

    attr_reader :validator
    delegate :name, to: :definition
    delegate :valid?, to: :validator
    delegate :invalid?, to: :validator

    def errors
      validator.errors.full_messages
    end

    def ==(other)
      is_a?(other.class) &&
        direction == other.direction &&
        definition == other.definition
    end

    # @return ['asc', desc']
    #
    def direction
      if definition.reverse_direction?
        REVERSED_DIRECTIONS[@direction]
      else
        @direction
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
might-0.7.1 lib/might/sort_parameter.rb
might-0.7.0 lib/might/sort_parameter.rb