Class: Textus::Gate

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/gate.rb,
lib/textus/gate/auth.rb

Defined Under Namespace

Classes: Auth

Constant Summary collapse

VERB_COMMAND =
{
  get: Textus::Command::Get,
  put: Textus::Command::Put,
  propose: Textus::Command::Propose,
  key_delete: Textus::Command::KeyDelete,
  key_mv: Textus::Command::KeyMv,
  accept: Textus::Command::Accept,
  reject: Textus::Command::Reject,
  enqueue: Textus::Command::Enqueue,
  list: Textus::Command::List,
  where: Textus::Command::Where,
  uid: Textus::Command::Uid,
  blame: Textus::Command::Blame,
  audit: Textus::Command::Audit,
  deps: Textus::Command::Deps,
  rdeps: Textus::Command::Rdeps,
  pulse: Textus::Command::Pulse,
  rule_explain: Textus::Command::RuleExplain,
  rule_list: Textus::Command::RuleList,
  rule_lint: Textus::Command::RuleLint,
  published: Textus::Command::Published,
  schema_show: Textus::Command::SchemaShow,
  doctor: Textus::Command::Doctor,
  boot: Textus::Command::Boot,
  jobs: Textus::Command::Jobs,
  data_mv: Textus::Command::DataMv,
  key_mv_prefix: Textus::Command::KeyMvPrefix,
  key_delete_prefix: Textus::Command::KeyDeletePrefix,
  drain: Textus::Command::Drain,
}.freeze
ROUTES =
{
  Command::Get => [Textus::Action::Get],
  Command::Put => [Textus::Action::Put],
  Command::Propose => [Textus::Action::Propose],
  Command::KeyDelete => [Textus::Action::KeyDelete],
  Command::KeyMv => [Textus::Action::KeyMv],
  Command::Accept => [Textus::Action::Accept],
  Command::Reject => [Textus::Action::Reject],
  Command::Enqueue => [Textus::Action::Enqueue],
  Command::List => [Textus::Action::List],
  Command::Where => [Textus::Action::Where],
  Command::Uid => [Textus::Action::Uid],
  Command::Blame => [Textus::Action::Blame],
  Command::Audit => [Textus::Action::Audit],
  Command::Deps => [Textus::Action::Deps],
  Command::Rdeps => [Textus::Action::Rdeps],
  Command::Pulse => [Textus::Action::Pulse],
  Command::RuleExplain => [Textus::Action::RuleExplain],
  Command::RuleList => [Textus::Action::RuleList],
  Command::RuleLint => [Textus::Action::RuleLint],
  Command::Published => [Textus::Action::Published],
  Command::SchemaShow => [Textus::Action::SchemaEnvelope],
  Command::Doctor => [Textus::Action::Doctor],
  Command::Boot => [Textus::Action::Boot],
  Command::Jobs => [Textus::Action::Jobs],
  Command::DataMv => [Textus::Action::DataMv],
  Command::KeyMvPrefix => [Textus::Action::KeyMvPrefix],
  Command::KeyDeletePrefix => [Textus::Action::KeyDeletePrefix],
  Command::Drain => [Textus::Action::Drain],
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(container) ⇒ Gate

Returns a new instance of Gate.



67
68
69
# File 'lib/textus/gate.rb', line 67

def initialize(container)
  @container = container
end

Instance Method Details

#dispatch(cmd, correlation_id: nil) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/textus/gate.rb', line 71

def dispatch(cmd, correlation_id: nil)
  cmd = normalize_propose_key(cmd, @container) if cmd.is_a?(Command::Propose)
  action_classes = ROUTES.fetch(cmd.class) do
    raise Textus::UsageError.new("unknown command: #{cmd.class}")
  end

  Gate::Auth.new(@container).check!(cmd)
  call_obj = build_call(cmd, correlation_id: correlation_id)
  results = action_classes.map { |klass| run_action(klass, cmd, @container, call_obj) }
  results.length == 1 ? results.first : results
end