Class: Textus::Surface::Projector

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/surface/projector.rb

Instance Method Summary collapse

Constructor Details

#initialize(view_key: :default, binder_method: :inputs_from_wire) ⇒ Projector

Returns a new instance of Projector.



4
5
6
7
# File 'lib/textus/surface/projector.rb', line 4

def initialize(view_key: :default, binder_method: :inputs_from_wire)
  @view_key = view_key
  @binder_method = binder_method
end

Instance Method Details

#dispatch(verb_name, inputs:, store:, role:, session: nil) ⇒ Object



19
20
21
22
23
24
# File 'lib/textus/surface/projector.rb', line 19

def dispatch(verb_name, inputs:, store:, role:, session: nil)
  klass = Textus::Action::VERBS.fetch(verb_name.to_sym)
  spec = klass.contract
  bound = Textus::Gate::Binder.public_send(@binder_method, spec, inputs)
  store.gate.dispatch(spec:, inputs: bound, role:, session:, surface: @view_key)
end

#names(action_verbs = Textus::Action::VERBS) ⇒ Object



15
16
17
# File 'lib/textus/surface/projector.rb', line 15

def names(action_verbs = Textus::Action::VERBS)
  verbs(action_verbs).keys.map(&:to_s)
end

#verbs(action_verbs = Textus::Action::VERBS) ⇒ Object



9
10
11
12
13
# File 'lib/textus/surface/projector.rb', line 9

def verbs(action_verbs = Textus::Action::VERBS)
  action_verbs.select do |_verb, klass|
    klass.respond_to?(:contract?) && klass.contract?
  end
end