Class: LcpRuby::Export::FieldTreeBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/export/field_tree_builder.rb

Overview

Builds a permission-aware field tree for the export field picker. Traverses belongs_to/has_one associations recursively with cycle detection.

Constant Summary collapse

EXCLUDED_TYPES =
%w[attachment rich_text].freeze
DEFAULT_MAX_DEPTH =
3

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_definition, evaluator, presenter, current_user, max_depth) ⇒ FieldTreeBuilder

Returns a new instance of FieldTreeBuilder.



19
20
21
22
23
24
25
# File 'lib/lcp_ruby/export/field_tree_builder.rb', line 19

def initialize(model_definition, evaluator, presenter, current_user, max_depth)
  @model_definition = model_definition
  @evaluator = evaluator
  @presenter = presenter
  @current_user = current_user
  @max_depth = max_depth
end

Class Method Details

.build(model_definition:, evaluator:, presenter: nil, current_user: nil, max_depth: DEFAULT_MAX_DEPTH) ⇒ Array<Hash>

Returns field tree nodes.

Parameters:

Returns:

  • (Array<Hash>)

    field tree nodes



15
16
17
# File 'lib/lcp_ruby/export/field_tree_builder.rb', line 15

def self.build(model_definition:, evaluator:, presenter: nil, current_user: nil, max_depth: DEFAULT_MAX_DEPTH)
  new(model_definition, evaluator, presenter, current_user, max_depth).build
end

Instance Method Details

#buildObject



27
28
29
# File 'lib/lcp_ruby/export/field_tree_builder.rb', line 27

def build
  build_tree(@model_definition, @evaluator, depth: 0, visited: Set.new([ @model_definition.name ]))
end