Sha256: 00555db6b316fd29c9950d18eb9fac45b9f47e2a8ee38486c84f0934de45a985

Contents?: true

Size: 1.17 KB

Versions: 7

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

7 entries across 7 versions & 1 rubygems

Version Path
might-0.6.0 lib/might/sort_parameter.rb
might-0.5.2 lib/might/sort_parameter.rb
might-0.5.1 lib/might/sort_parameter.rb
might-0.5.0 lib/might/sort_parameter.rb
might-0.4.0 lib/might/sort_parameter.rb
might-0.3.1 lib/might/sort_parameter.rb
might-0.3.0 lib/might/sort_parameter.rb