Class: ReportsKit::Order

Inherits:
Object
  • Object
show all
Defined in:
lib/reports_kit/order.rb

Constant Summary collapse

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relation, field, direction) ⇒ Order

Returns a new instance of Order.



9
10
11
12
13
# File 'lib/reports_kit/order.rb', line 9

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

Instance Attribute Details

#directionObject

Returns the value of attribute direction.



3
4
5
# File 'lib/reports_kit/order.rb', line 3

def direction
  @direction
end

#fieldObject

Returns the value of attribute field.



3
4
5
# File 'lib/reports_kit/order.rb', line 3

def field
  @field
end

#relationObject

Returns the value of attribute relation.



3
4
5
# File 'lib/reports_kit/order.rb', line 3

def relation
  @relation
end

Class Method Details

.parse(string) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/reports_kit/order.rb', line 15

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