class ActionBlocks::SummaryFieldBuilder

Attributes

aggregation[RW]
base_model[RW]
parent_reference[RW]

Public Instance Methods

after_build(parent, *args) click to toggle source
# File lib/action_blocks/builders/model_builder.rb, line 278
def after_build(parent, *args)
  @parent_model.fields.append(self)
end
before_build(parent, *args) click to toggle source

validates :aggregate, inclusion: { in: %i[sum count avg min max string_agg] }

# File lib/action_blocks/builders/model_builder.rb, line 265
def before_build(parent, *args)
  @base_model = parent.base_model # required lookup for match conditions
  @related_model = parent.related_model # required lookup for match conditions
  @related_model_id = parent.related_model_id # required lookup for match conditions

  @field_type = 'summary'
  @field_name = args[0]
  @parent_reference = parent
  @parent_model = @parent_reference.base_model

  @aggregate = args[1]
end
hashify(user) click to toggle source
# File lib/action_blocks/builders/model_builder.rb, line 310
def hashify(user)
  {
    type: :summary,
    id: @id
  }
end
select_requirements(select_as_prefix = nil) click to toggle source

summary_reqs = [{

type: :summary
root_klass: Rate,
select_req: { field_name: :count_of_rates, path: [:id], aggregate: ->(*args) { count(*args) } },
match_reqs: [{
  base_path: [WorkOrder, :rate_sheet_id], # work_order
  predicate: :eq,
  related_path: [:rate_sheet_id]   # rate
}]

}]

# File lib/action_blocks/builders/model_builder.rb, line 292
def select_requirements(select_as_prefix = nil)
  path_and_function = instance_exec(&@aggregate)
  path = path_and_function[:path]
  function = path_and_function[:function]

  {
    type: :summary,
    root_klass: parent_reference.related_model.active_model,
    select_req: {
      field_name: @field_name,
      path: path,
      function: function
    },
    match_reqs: parent_reference.match_reqs,
    filter_reqs: filters.map(&:match_reqs)
  }
end