Class: ActiveReporter::Dimension::Enum

Inherits:
Category show all
Defined in:
lib/active_reporter/dimension/enum.rb

Instance Attribute Summary

Attributes inherited from Base

#name, #options, #report

Instance Method Summary collapse

Methods inherited from Category

#group

Methods inherited from Base

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

Constructor Details

This class inherits a constructor from ActiveReporter::Dimension::Base

Instance Method Details

#all_valuesObject



14
15
16
# File 'lib/active_reporter/dimension/enum.rb', line 14

def all_values
  enum_values.keys.tap { |values| values.unshift(nil) unless values.include?(nil) }.uniq
end

#filter(relation) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/active_reporter/dimension/enum.rb', line 18

def filter(relation)
  values = filter_values.map { |value| enum_values[value] }.uniq
  query = case values
  when [] then "1=0"
  when [nil] then "#{expression} IS NULL"
  else
    in_values = "#{expression} IN (?)"
    values.include?(nil) ? "#{expression} IS NULL OR #{in_values}" : in_values
  end
  relation.where(query, values.compact)
end

#group_valuesObject



8
9
10
11
12
# File 'lib/active_reporter/dimension/enum.rb', line 8

def group_values
  return filter_values if filtering?

  all_values & report_values
end