2019-10-21 02:11:16 +00:00
|
|
|
require "digest"
|
|
|
|
|
2019-09-23 01:07:14 +00:00
|
|
|
module Pigeon
|
|
|
|
class Message
|
2020-04-11 14:53:22 +00:00
|
|
|
attr_reader :author, :kind, :body, :signature, :depth, :lipmaa, :prev
|
2020-03-27 12:48:17 +00:00
|
|
|
|
2019-12-05 03:56:47 +00:00
|
|
|
def render
|
2020-03-13 12:48:37 +00:00
|
|
|
template.render.chomp
|
2019-10-19 18:14:09 +00:00
|
|
|
end
|
|
|
|
|
2020-03-09 13:56:45 +00:00
|
|
|
def multihash
|
2020-04-25 15:11:25 +00:00
|
|
|
tpl = render
|
2020-04-07 13:58:53 +00:00
|
|
|
digest = Digest::SHA256.digest(tpl)
|
|
|
|
sha256 = Helpers.b32_encode(digest)
|
2020-03-09 13:56:45 +00:00
|
|
|
"#{MESSAGE_SIGIL}#{sha256}#{BLOB_FOOTER}"
|
|
|
|
end
|
|
|
|
|
2020-04-12 14:03:44 +00:00
|
|
|
def initialize(author:,
|
|
|
|
kind:,
|
|
|
|
body:,
|
|
|
|
depth:,
|
|
|
|
prev:,
|
|
|
|
lipmaa:,
|
2020-04-18 14:37:43 +00:00
|
|
|
signature:)
|
2020-03-15 17:50:57 +00:00
|
|
|
raise MISSING_BODY if body.empty?
|
2020-04-25 15:11:25 +00:00
|
|
|
|
2020-03-06 14:42:19 +00:00
|
|
|
@author = author
|
|
|
|
@body = body
|
2020-03-29 00:43:59 +00:00
|
|
|
@depth = depth
|
2020-03-31 12:09:42 +00:00
|
|
|
@kind = kind
|
2020-04-12 14:03:44 +00:00
|
|
|
@prev = prev || Pigeon::NOTHING
|
|
|
|
@lipmaa = lipmaa
|
2020-03-31 12:09:42 +00:00
|
|
|
@signature = signature
|
2019-12-30 02:16:42 +00:00
|
|
|
end
|
|
|
|
|
2020-03-31 12:09:42 +00:00
|
|
|
def template
|
|
|
|
MessageSerializer.new(self)
|
2019-10-22 01:35:48 +00:00
|
|
|
end
|
2020-04-21 12:31:34 +00:00
|
|
|
|
|
|
|
def collect_blobs
|
|
|
|
([kind] + body.keys + body.values)
|
|
|
|
.select { |x| x.match? Lexer::BLOB_VALUE }
|
|
|
|
.uniq
|
|
|
|
end
|
2019-09-23 01:07:14 +00:00
|
|
|
end
|
|
|
|
end
|