Continue Pigeon::Parser. ::Message.ingest() will be required though. Everything is stubbed out, just need to get tests to pass.
This commit is contained in:
parent
db33acdf36
commit
8d2a721d84
28
dist/pigeon/message.rb
vendored
28
dist/pigeon/message.rb
vendored
|
@ -4,6 +4,7 @@ module Pigeon
|
||||||
class Message
|
class Message
|
||||||
attr_reader :author, :kind, :body, :signature, :depth, :prev
|
attr_reader :author, :kind, :body, :signature, :depth, :prev
|
||||||
|
|
||||||
|
# Author a new message.
|
||||||
def self.publish(draft, author: LocalIdentity.current)
|
def self.publish(draft, author: LocalIdentity.current)
|
||||||
msg = self.new(author: LocalIdentity.current,
|
msg = self.new(author: LocalIdentity.current,
|
||||||
kind: draft.kind,
|
kind: draft.kind,
|
||||||
|
@ -15,6 +16,17 @@ module Pigeon
|
||||||
msg
|
msg
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Store a message that someone (not the LocalIdentity)
|
||||||
|
# has authored.
|
||||||
|
def self.ingest(author:, body:, depth:, kind:, prev:, signature:)
|
||||||
|
message = new(author: author,
|
||||||
|
kind: kind,
|
||||||
|
body: body,
|
||||||
|
signature: signature)
|
||||||
|
message.verify!
|
||||||
|
message.save
|
||||||
|
end
|
||||||
|
|
||||||
def render
|
def render
|
||||||
template.render.chomp
|
template.render.chomp
|
||||||
end
|
end
|
||||||
|
@ -24,11 +36,17 @@ module Pigeon
|
||||||
"#{MESSAGE_SIGIL}#{sha256}#{BLOB_FOOTER}"
|
"#{MESSAGE_SIGIL}#{sha256}#{BLOB_FOOTER}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def verify!
|
||||||
|
verify_depth
|
||||||
|
verify_prev
|
||||||
|
verify_signature
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def template
|
def verify_depth; raise "WIP"; end
|
||||||
@template ||= MessageSerializer.new(self)
|
def verify_prev; raise "WIP"; end
|
||||||
end
|
def verify_signature; raise "WIP"; end
|
||||||
|
|
||||||
def initialize(author:, kind:, body:, signature: nil)
|
def initialize(author:, kind:, body:, signature: nil)
|
||||||
raise MISSING_BODY if body.empty?
|
raise MISSING_BODY if body.empty?
|
||||||
|
@ -44,6 +62,10 @@ module Pigeon
|
||||||
store.save_message(self)
|
store.save_message(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def template
|
||||||
|
@template ||= MessageSerializer.new(self)
|
||||||
|
end
|
||||||
|
|
||||||
def calculate_signature
|
def calculate_signature
|
||||||
@author.sign(template.render_without_signature)
|
@author.sign(template.render_without_signature)
|
||||||
end
|
end
|
||||||
|
|
7
dist/pigeon/parser.rb
vendored
7
dist/pigeon/parser.rb
vendored
|
@ -30,12 +30,9 @@ module Pigeon
|
||||||
private
|
private
|
||||||
|
|
||||||
def finish_this_message!
|
def finish_this_message!
|
||||||
# Step 1: Create a message
|
@scratchpad.freeze
|
||||||
# Step 2: Verify message
|
@results.push(Message.ingest(**@scratchpad))
|
||||||
# Step 3: Push current scratchpad onto `results` array
|
|
||||||
# Step 4: Reset @scratchpad to empty hash.
|
|
||||||
@scratchpad = {}
|
@scratchpad = {}
|
||||||
raise "See steps above."
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def set(key, value, hash = @scratchpad)
|
def set(key, value, hash = @scratchpad)
|
||||||
|
|
3
dist/pigeon/storage.rb
vendored
3
dist/pigeon/storage.rb
vendored
|
@ -12,9 +12,10 @@ module Pigeon
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_message_by_depth(author, depth)
|
def get_message_by_depth(author, depth)
|
||||||
|
raise "Expected string, got #{author.class}" unless author.is_a?(String) # Delete later
|
||||||
store.transaction do
|
store.transaction do
|
||||||
# Map<[author(str), depth(int)], Signature>
|
# Map<[author(str), depth(int)], Signature>
|
||||||
store[DEPTH_INDEX_NS][[author.public_key, depth]]
|
store[DEPTH_INDEX_NS][[author, depth]]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user