Module: Weft::DSL::Inclusions::ClassMethods

Defined in:
lib/weft/dsl/inclusions.rb

Constant Summary collapse

WHEN_VALUES =

Contexts a when: filter may name. Only :transferred ships today; the vocabulary grows deliberately.

%i[transferred].freeze

Instance Method Summary collapse

Instance Method Details

#includes(component_class, on: nil, **options, &block) ⇒ Object

Declare that another component should be OOB-swapped alongside this component's responses.

includes OrderHeader                          # every response
includes OrderHeader, on: :advance            # own action(s) only
includes OrderHeader, on: %i[advance retreat]
includes OrderHeader, when: :transferred      # transfer arrivals only
includes OrderHeader, on: :save, when: :transferred   # union: either
includes OrderHeader do |params|              # companion delta
{ order_id: params.order_id, compact: true }
end

Unfiltered inclusions ride every response this component renders in: its own actions, SSE pushes, and transfer arrivals. Filters enumerate contexts — on: names this component's OWN actions (never a transferring component's), when: :transferred fires when this component renders as a transfer target; declaring both is a union. The block's return is a DELTA overlaid on the request for this companion alone; blockless is exactly an empty delta.

(when rides **options because it's a Ruby reserved word — call sites are unaffected, only this signature is.)

Raises:

  • (ArgumentError)


43
44
45
46
47
48
49
50
51
52
53
# File 'lib/weft/dsl/inclusions.rb', line 43

def includes(component_class, on: nil, **options, &block)
  when_filter = options.delete(:when)
  raise ArgumentError, "unknown keywords: #{options.keys.inspect}" unless options.empty?

  site = caller_locations(1, 1).first
  own_inclusions << { component_class: component_class,
                      on: on.nil? ? nil : Array(on),
                      when: validated_when(when_filter),
                      block: block,
                      source_location: [site.path, site.lineno] }
end

#inclusionsObject

All declared inclusions (own + inherited).



56
57
58
59
60
61
62
# File 'lib/weft/dsl/inclusions.rb', line 56

def inclusions
  if superclass.respond_to?(:inclusions)
    superclass.inclusions + own_inclusions
  else
    own_inclusions.dup
  end
end