Class: Textus::Action::Propose

Inherits:
Base
  • Object
show all
Defined in:
lib/textus/action/propose.rb

Class Method Summary collapse

Methods inherited from Base

inherited, proposal_from

Methods included from Contract::DSL

#arg, #cli, #cli_stdin, #contract, #contract?, #summary, #surfaces, #verb, #view

Class Method Details

.call(container:, call:, key:, meta: nil, body: nil, content: nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/textus/action/propose.rb', line 20

def self.call(container:, call:, key:, meta: nil, body: nil, content: nil)
  zone = container.manifest.policy.propose_lane_for(call.role)
  unless zone
    return Failure(code: :propose_forbidden,
                   message: "role '#{call.role}' has no writable propose_lane",
                   details: { "role" => call.role })
  end

  mentry = container.manifest.resolver.resolve("#{zone}.#{key}").entry
  Success(container.compositor.write(
            "#{zone}.#{key}",
            mentry: mentry,
            payload: Textus::Store::Envelope::Writer::Payload.new(
              meta: meta || {},
              body: body,
              content: content,
            ),
            call: call,
          ))
end