Class: Repor::Dimensions::CategoryDimension

Inherits:
BaseDimension show all
Defined in:
lib/repor/dimensions/category_dimension.rb

Instance Attribute Summary

Attributes inherited from BaseDimension

#name, #opts, #report

Instance Method Summary collapse

Methods inherited from BaseDimension

#expression, #extract_sql_value, #filter_values, #filtering?, #grouping?, #initialize, #null_order, #nulls_last?, #order, #order_expression, #params, #relate, #sort_desc?, #sort_order

Constructor Details

This class inherits a constructor from Repor::Dimensions::BaseDimension

Instance Method Details

#all_valuesObject



24
25
26
27
28
# File 'lib/repor/dimensions/category_dimension.rb', line 24

def all_values
  relate(report.base_relation).
    pluck("DISTINCT #{expression}").
    map(&method(:sanitize_sql_value))
end

#filter(relation) ⇒ Object



4
5
6
7
8
9
# File 'lib/repor/dimensions/category_dimension.rb', line 4

def filter(relation)
  values = filter_values
  query = "#{expression} IN (?)"
  query = "#{expression} IS NULL OR #{query}" if values.include?(nil)
  relation.where(query, values.compact)
end

#group(relation) ⇒ Object



11
12
13
# File 'lib/repor/dimensions/category_dimension.rb', line 11

def group(relation)
  order relation.select("#{expression} AS #{sql_value_name}").group(sql_value_name)
end

#group_valuesObject



15
16
17
18
19
20
21
22
# File 'lib/repor/dimensions/category_dimension.rb', line 15

def group_values
  if filtering?
    filter_values
  else
    i = report.groupers.index(self)
    report.raw_data.map { |x, _y| x[i] }.uniq
  end
end