Module: Quo::Composing

Defined in:
lib/quo/composing.rb,
lib/quo/composing/base_strategy.rb,
lib/quo/composing/class_strategy.rb,
lib/quo/composing/query_classes_strategy.rb,
lib/quo/composing/class_strategy_registry.rb,
sig/generated/quo/composing.rbs,
sig/generated/quo/composing/base_strategy.rbs,
sig/generated/quo/composing/class_strategy.rbs,
sig/generated/quo/composing/query_classes_strategy.rbs,
sig/generated/quo/composing/class_strategy_registry.rbs

Defined Under Namespace

Classes: BaseStrategy, ClassStrategy, ClassStrategyRegistry, QueryClassesStrategy

Constant Summary collapse

CLASS_STRATEGY_REGISTRY =

Returns:

  • (Object)
ClassStrategyRegistry.new

Class Method Summary collapse

Class Method Details

.composer(chosen_superclass, left_query_class, right_query_class, joins: nil, left_spec: nil, right_spec: nil) ⇒ Class & Quo::ComposedQuery

Parameters:

Returns:



19
20
21
22
# File 'lib/quo/composing.rb', line 19

def composer(chosen_superclass, left_query_class, right_query_class, joins: nil, left_spec: nil, right_spec: nil)
  strategy = CLASS_STRATEGY_REGISTRY.find_strategy(left_query_class, right_query_class)
  strategy.compose(chosen_superclass, left_query_class, right_query_class, joins: joins, left_spec: left_spec, right_spec: right_spec)
end

.merge_instances(left_instance, right_instance, joins: nil) ⇒ Quo::Query

Parameters:

  • left_instance (Quo::Query)
  • right_instance (Quo::Query, ActiveRecord::Relation, Object & Enumerable[untyped])
  • joins: (Symbol, Hash[Symbol, untyped], Array[Symbol | Hash[Symbol, untyped]], nil) (defaults to: nil)

Returns:



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/quo/composing.rb', line 28

def merge_instances(left_instance, right_instance, joins: nil)
  page, page_size = inherited_pagination(left_instance, right_instance)
  transformer = inherited_transformer(left_instance, right_instance)

  opts = {left: left_instance, right: right_instance, merge_joins: joins}
  opts[:page] = page if page
  opts[:page_size] = page_size if page_size

  composed = if relation_backed?(left_instance) || relation_backed?(right_instance)
    Quo::ComposedRelationBackedQuery.new(**opts)
  else
    Quo::ComposedCollectionBackedQuery.new(**opts)
  end

  composed.transform(&transformer) if transformer
  composed
end