Module: LcpRuby::GroupedQuery::Builder

Defined in:
lib/lcp_ruby/grouped_query/builder.rb

Constant Summary collapse

VALID_AGGREGATES =
%w[count sum avg min max].freeze
VALID_HAVING_OPERATORS =
%w[eq neq gt gte lt lte].freeze

Class Method Summary collapse

Class Method Details

.apply(scope, presenter_def, model_def) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/lcp_ruby/grouped_query/builder.rb', line 8

def apply(scope, presenter_def, model_def)
  group_by = normalize_group_by(presenter_def.group_by_config)
  columns = presenter_def.table_columns

  conn = scope.connection

  scope = apply_joins(scope, group_by, model_def)

  select_parts = build_select_parts(columns, group_by, model_def, conn)
  scope = scope.select(select_parts.join(", "))

  group_exprs = build_group_expressions(group_by, model_def, conn)
  scope = scope.group(group_exprs.join(", "))

  scope = apply_having(scope, presenter_def.having_conditions, columns, model_def, conn)

  scope
end