Module: LcpRuby::Presenter::IncludesResolver

Defined in:
lib/lcp_ruby/presenter/includes_resolver.rb,
lib/lcp_ruby/presenter/includes_resolver/loading_strategy.rb,
lib/lcp_ruby/presenter/includes_resolver/strategy_resolver.rb,
lib/lcp_ruby/presenter/includes_resolver/dependency_collector.rb,
lib/lcp_ruby/presenter/includes_resolver/association_dependency.rb

Overview

Resolves which associations to eager-load for a given presenter context.

Auto-detects dependencies from presenter metadata (FK columns, association_list, nested_fields) and supports manual overrides via includes/eager_load keys in presenter YAML/DSL config.

Usage:

strategy = IncludesResolver.resolve(
  presenter_def: presenter,
  model_def: model,
  context: :index,
  sort_field: params[:sort],
  search_fields: ["company.name"]
)
scope = strategy.apply(scope)

Defined Under Namespace

Classes: AssociationDependency, DependencyCollector, LoadingStrategy, StrategyResolver

Class Method Summary collapse

Class Method Details

.resolve(presenter_def:, model_def:, context:, sort_field: nil, search_fields: nil) ⇒ LoadingStrategy

Parameters:

  • presenter_def (PresenterDefinition)
  • model_def (ModelDefinition)
  • context (:index, :show, :form)
  • sort_field (String, nil) (defaults to: nil)

    current sort field (may be dot-notation)

  • search_fields (Array<String>, nil) (defaults to: nil)

    searchable fields (may include dot-notation)

Returns:



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/lcp_ruby/presenter/includes_resolver.rb', line 25

def self.resolve(presenter_def:, model_def:, context:, sort_field: nil, search_fields: nil)
  collector = DependencyCollector.new
  collector.from_presenter(presenter_def, model_def, context)
  collector.from_sort(sort_field, model_def) if sort_field
  collector.from_search(search_fields, model_def) if search_fields&.any?

  config = case context
  when :index then presenter_def.index_config
  when :show  then presenter_def.show_config
  when :form  then presenter_def.form_config
  end
  collector.from_manual(config) if config

  StrategyResolver.resolve(collector.dependencies, model_def)
end