Class: ActiveReporter::Dimension::Bin::Table

Inherits:
Array
  • Object
show all
Defined in:
lib/active_reporter/dimension/bin/table.rb

Instance Method Summary collapse

Constructor Details

#initialize(values) ⇒ Table

Returns a new instance of Table.



5
6
7
# File 'lib/active_reporter/dimension/bin/table.rb', line 5

def initialize(values)
  super(values.compact)
end

Instance Method Details

#any_contain(expr) ⇒ Object



37
38
39
# File 'lib/active_reporter/dimension/bin/table.rb', line 37

def any_contain(expr)
  map { |bin| bin.contains_sql(expr) }.join(' OR ')
end

#filter(relation, expr) ⇒ Object



9
10
11
# File 'lib/active_reporter/dimension/bin/table.rb', line 9

def filter(relation, expr)
  relation.where(any_contain(expr))
end

#group(relation, expr, value_name) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/active_reporter/dimension/bin/table.rb', line 13

def group(relation, expr, value_name)
  name = "#{value_name}_bin_table"

  bin_join = "    INNER JOIN (\n      \#{rows.join(\" UNION\\n  \")}\n    ) AS \#{name} ON (\n      CASE\n      WHEN \#{name}.min IS NULL AND \#{name}.max IS NULL THEN (\#{expr} IS NULL)\n      WHEN \#{name}.min IS NULL THEN (\#{expr} < \#{name}.max)\n      WHEN \#{name}.max IS NULL THEN (\#{expr} >= \#{name}.min)\n      ELSE ((\#{expr} >= \#{name}.min) AND (\#{expr} < \#{name}.max))\n      END\n    )\n  SQL\n\n  selection = \"\#{name}.bin_text AS \#{value_name}\"\n  relation.joins(bin_join).select(selection).group(value_name)\nend\n"

#rowsObject



33
34
35
# File 'lib/active_reporter/dimension/bin/table.rb', line 33

def rows
  map(&:row_sql)
end