Class: ActiveReporter::Dimension::Bin::Table
- Inherits:
-
Array
- Object
- Array
- ActiveReporter::Dimension::Bin::Table
- Defined in:
- lib/active_reporter/dimension/bin/table.rb
Instance Method Summary collapse
- #any_contain(expr) ⇒ Object
- #filter(relation, expr) ⇒ Object
- #group(relation, expr, value_name) ⇒ Object
-
#initialize(values) ⇒ Table
constructor
A new instance of Table.
- #rows ⇒ Object
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" |
#rows ⇒ Object
33 34 35 |
# File 'lib/active_reporter/dimension/bin/table.rb', line 33 def rows map(&:row_sql) end |