class ActiveReporter::Dimension::Bin::Table
Public Class Methods
new(values)
click to toggle source
Calls superclass method
# File lib/active_reporter/dimension/bin/table.rb, line 5 def initialize(values) super(values.compact) end
Public Instance Methods
any_contain(expr)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/active_reporter/dimension/bin/table.rb, line 13 def group(relation, expr, value_name) name = "#{value_name}_bin_table" bin_join = <<~SQL INNER JOIN ( #{rows.join(" UNION\n ")} ) AS #{name} ON ( CASE WHEN #{name}.min IS NULL AND #{name}.max IS NULL THEN (#{expr} IS NULL) WHEN #{name}.min IS NULL THEN (#{expr} < #{name}.max) WHEN #{name}.max IS NULL THEN (#{expr} >= #{name}.min) ELSE ((#{expr} >= #{name}.min) AND (#{expr} < #{name}.max)) END ) SQL selection = "#{name}.bin_text AS #{value_name}" relation.joins(bin_join).select(selection).group(value_name) end
rows()
click to toggle source
# File lib/active_reporter/dimension/bin/table.rb, line 33 def rows map(&:row_sql) end