Sha256: a6e3c07c31bb10077ead63302f77bcec7ff4e787b6d1456799a7d21e6cabebeb

Contents?: true

Size: 1.05 KB

Versions: 2

Compression:

Stored size: 1.05 KB

Contents

module ReportsKits
  class Order
    attr_accessor :relation, :field, :direction

    VALID_RELATIONS = %w(count dimension1 dimension2)
    VALID_FIELDS = [nil, 'label']
    VALID_DIRECTIONS = %w(asc desc)

    def initialize(relation, field, direction)
      self.relation = relation
      self.field = field
      self.direction = direction
    end

    def self.parse(string)
      string ||= ''
      field_expression, direction = string.to_s.split(/\s+/)
      relation, field = (field_expression || '').split('.')

      relation = relation.presence
      field = field.presence
      direction = direction.presence || 'asc'

      relation = relation.to_i if relation =~ /^\d+$/

      raise ArgumentError.new("Invalid relation: #{relation}") unless VALID_RELATIONS.include?(relation) || relation.is_a?(Fixnum)
      raise ArgumentError.new("Invalid field: #{field}") unless VALID_FIELDS.include?(field)
      raise ArgumentError.new("Invalid direction: #{direction}") unless VALID_DIRECTIONS.include?(direction)

      new(relation, field, direction)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
reports_kits-0.7.8 lib/reports_kits/order.rb
reports_kits-0.7.7 lib/reports_kits/order.rb