Class: Ask::Actions::Backend

Inherits:
Object
  • Object
show all
Defined in:
lib/ask/actions/backend.rb

Overview

Dispatches named actions to their classes.

Resolution order:

1. Explicitly registered actions (Ask::Actions.register)
2. Convention: "chats.create" resolves to Chats::Create

Convention resolution works with Zeitwerk — app/actions/chats/create.rb is autoloaded as Chats::Create with no configuration.

Defined Under Namespace

Classes: UnknownAction

Constant Summary collapse

CONVENTION =
/\A[a-z0-9_.]+\z/

Class Method Summary collapse

Class Method Details

.availableObject



39
40
41
# File 'lib/ask/actions/backend.rb', line 39

def available
  registered.keys
end

.dispatch(action:, context:, params: {}) ⇒ Object



43
44
45
# File 'lib/ask/actions/backend.rb', line 43

def dispatch(action:, context:, params: {})
  resolve(action).call(context: context, params: params)
end

.register(action, klass) ⇒ Object



27
28
29
# File 'lib/ask/actions/backend.rb', line 27

def register(action, klass)
  registered[action.to_s] = klass
end

.registeredObject



31
32
33
# File 'lib/ask/actions/backend.rb', line 31

def registered
  @registered ||= {}
end

.reset!Object



35
36
37
# File 'lib/ask/actions/backend.rb', line 35

def reset!
  @registered = {}
end

.resolve(action) ⇒ Object



47
48
49
50
# File 'lib/ask/actions/backend.rb', line 47

def resolve(action)
  name = action.to_s
  registered[name] || resolve_by_convention(name) || unknown_action!(name)
end