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