Class: LcpRuby::VirtualColumns::Collector

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/virtual_columns/collector.rb

Overview

Scans presenter metadata to determine which virtual columns to include.

Class Method Summary collapse

Class Method Details

.collect(presenter_def:, model_def:, context: :index, sort_field: nil) ⇒ Set<String>

Collect virtual column names needed for a given context.

Parameters:

Returns:

  • (Set<String>)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/lcp_ruby/virtual_columns/collector.rb', line 12

def self.collect(presenter_def:, model_def:, context: :index, sort_field: nil)
  all_vc_names = model_def.virtual_column_names.to_set
  return Set.new if all_vc_names.empty?

  vc_names = Set.new

  # 1. auto_include: true virtual columns (always included)
  model_def.virtual_columns.each do |name, vc_def|
    vc_names << name if vc_def.auto_include
  end

  case context
  when :index
    collect_index(presenter_def, model_def, all_vc_names, vc_names)
  when :show
    collect_show(presenter_def, model_def, all_vc_names, vc_names)
  when :edit
    collect_edit(presenter_def, model_def, all_vc_names, vc_names)
  end

  # Runtime sort param — include VC if sorting by it
  if sort_field.present?
    field = sort_field.to_s
    vc_names << field if all_vc_names.include?(field)
  end

  # Filter to only existing VC names
  vc_names & all_vc_names
end