Module: Textus::Proposal

Defined in:
lib/textus/proposal.rb

Class Method Summary collapse

Class Method Details

.accept(store, pending_key, as:) ⇒ Object

Raises:



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/textus/proposal.rb', line 3

def self.accept(store, pending_key, as:)
  raise ProposalError.new("only human role can accept proposals; got '#{as}'") unless as == "human"

  env = store.get(pending_key)
  proposal = env["_meta"]["proposal"] or raise ProposalError.new("entry has no proposal block: #{pending_key}")
  target = proposal["target_key"] or raise ProposalError.new("proposal missing target_key")
  action = proposal["action"] || "put"

  case action
  when "put"
    target_meta = env["_meta"]["frontmatter"] || {}
    target_body = env["body"]
    store.put(target, meta: target_meta, body: target_body, as: "human")
  when "delete"
    store.delete(target, as: "human")
  else
    raise ProposalError.new("unknown action: #{action}")
  end

  store.delete(pending_key, as: "human")
  store.fire_event(:accept, pending_key: pending_key, target_key: target)
  { "protocol" => PROTOCOL, "accepted" => pending_key, "target_key" => target, "action" => action }
end