Template renderer

This commit is contained in:
Netscape Navigator 2019-10-19 13:14:09 -05:00
parent b439746cf5
commit 729ca8145f
8 changed files with 61 additions and 8 deletions

1
dist/pigeon.rb vendored
View File

@ -9,6 +9,7 @@ require "pry"
require_relative File.join("pigeon", "config.rb")
require_relative File.join("pigeon", "key_pair.rb")
require_relative File.join("pigeon", "storage.rb")
require_relative File.join("pigeon", "template.rb")
require_relative File.join("pigeon", "message.rb")
module Pigeon

View File

@ -1,35 +1,40 @@
module Pigeon
class Message
NAME_OF_DRAFT = "HEAD"
NAME_OF_DRAFT = "HEAD.draft"
attr_reader :author,
:kind,
:previous,
:prev,
:body,
:sequence, # Maybe not?
:depth,
:timestamp, # Maybe not?
:signature # Maybe not?
def initialize(author:,
kind:,
previous: nil,
prev: nil,
body: [],
timestamp: Time.now.to_i)
@author = author
@kind = kind
@previous = previous
@prev = prev
@body = body
@timestamp = timestamp
end
def self.create(kind:, previous: nil, body: [])
def self.create(kind:, prev: nil, body: {})
# instantiate
msg = self.new(author: KeyPair.current.public_key,
kind: kind,
previous: previous,
prev: prev,
body: body)
# Save to disk as HEAD
Pigeon::Storage.current.set_config(NAME_OF_DRAFT, Marshal.dump(msg))
msg
end
def serialize
Template.new(self).render
end
end
end

32
dist/pigeon/template.rb vendored Normal file
View File

@ -0,0 +1,32 @@
require "erb"
module Pigeon
# Wrapper around a message to perform string templating.
# Renders a string that is a Pigeon-compliant message.
class Template
TPL_DIR = "views"
HEADER_TPL = File.read(File.join(TPL_DIR, "1_header.erb"))
BODY_TPL = File.read(File.join(TPL_DIR, "2_body.erb"))
FOOTER_TPL = File.read(File.join(TPL_DIR, "3_footer.erb"))
COMPLETE_TPL = [HEADER_TPL, BODY_TPL, FOOTER_TPL].join("")
attr_reader :message
def initialize(message)
@message = message
end
def render
author = message.author
body = message.body
kind = message.kind
depth = message.depth || "DRAFT"
prev = message.prev || "DRAFT"
signature = message.signature || "DRAFT"
ERB.new(COMPLETE_TPL).result(binding)
end
end
end

View File

@ -76,7 +76,7 @@ module Pigeon
desc "create", "Begin a new Pigeon message"
def create(kind)
puts Pigeon::Message.create(kind: kind)
puts Pigeon::Message.create(kind: kind).serialize
end
end

3
scratchpad.md Normal file
View File

@ -0,0 +1,3 @@
WE need to know:
* What's the current `sequence` number?

4
views/1_header.erb Normal file
View File

@ -0,0 +1,4 @@
author <%= author %>
depth <%= depth %>
kind <%= kind %>
prev <%= prev %>

3
views/2_body.erb Normal file
View File

@ -0,0 +1,3 @@
<% body.to_a.each do |k, v| %>
<%= k %>:<%= v %>
<% end %>

5
views/3_footer.erb Normal file
View File

@ -0,0 +1,5 @@
<% if signature %>
signature <%= signature %>
<% else %>
signature UNSIGNED
<% end %>