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["frontmatter"]["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_fm = env["frontmatter"]["frontmatter"] || {}
target_body = env["body"]
store.put(target, frontmatter: target_fm, 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
|