We have BUNDLE CREATION 🎉 🎉 🎉
This commit is contained in:
parent
34e81f859a
commit
31daf90cdc
|
@ -2,4 +2,5 @@ coverage/
|
|||
.pigeon/
|
||||
*.pigeon
|
||||
doc/
|
||||
*scratchpad*
|
||||
*scratchpad*
|
||||
pigeon.bundle
|
||||
|
|
|
@ -30,7 +30,8 @@ Eg: `pigeon identity show` becomes `./pigeon-cli show`.
|
|||
- [X] pigeon draft append
|
||||
- [X] pigeon draft current
|
||||
- [X] pigeon draft save
|
||||
- [ ] pigeon bundle create
|
||||
- [X] pigeon bundle create
|
||||
- [ ] Use JSON.stringify() for string keys (instead of `inspect`)
|
||||
- [ ] pigeon bundle consume
|
||||
- [ ] pigeon message find
|
||||
- [ ] pigeon message find-all
|
||||
|
|
|
@ -13,6 +13,8 @@ module Pigeon
|
|||
TPL_DIR = "views"
|
||||
|
||||
PIGEON_DB_PATH = File.join("db.pigeon")
|
||||
DEFAULT_BUNDLE_PATH = "./pigeon.bundle"
|
||||
|
||||
# MESSAGE TEMPLATE CONSTANTS:
|
||||
HEADER_TPL = File.read(File.join(TPL_DIR, "1_header.erb")).sub("\n", "")
|
||||
BODY_TPL = File.read(File.join(TPL_DIR, "2_body.erb")).sub("\n", "")
|
||||
|
@ -22,6 +24,7 @@ module Pigeon
|
|||
EMPTY_MESSAGE = "NONE"
|
||||
OUTBOX_PATH = File.join(".pigeon", "user")
|
||||
DRAFT_PLACEHOLDER = "DRAFT"
|
||||
BUNDLE_MESSAGE_SEPARATOR = "\n\n"
|
||||
# /MESSAGE TEMPLATE CONSTANTS
|
||||
|
||||
# Internal namespaces for PStore keys:
|
||||
|
@ -53,3 +56,4 @@ require_relative File.join("pigeon", "draft_serializer.rb")
|
|||
require_relative File.join("pigeon", "message_serializer.rb")
|
||||
require_relative File.join("pigeon", "message.rb")
|
||||
require_relative File.join("pigeon", "draft.rb")
|
||||
require_relative File.join("pigeon", "bundle.rb")
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
module Pigeon
|
||||
class Bundle
|
||||
def self.create(file_path = DEFAULT_BUNDLE_PATH)
|
||||
s = Pigeon::Storage.current
|
||||
last = s.message_count
|
||||
author = Pigeon::KeyPair.current
|
||||
range = (0...last).to_a
|
||||
content = range
|
||||
.map { |depth| s.get_message_by_depth(author, depth) }
|
||||
.map { |multihash| s.find_message(multihash) }
|
||||
.map { |message| message.render }
|
||||
.join(BUNDLE_MESSAGE_SEPARATOR)
|
||||
File.write(file_path, content)
|
||||
end
|
||||
|
||||
def self.ingest(file_path)
|
||||
raise "WIP"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def initialize
|
||||
end
|
||||
end
|
||||
end
|
|
@ -3,7 +3,7 @@ require "pstore"
|
|||
module Pigeon
|
||||
class Storage
|
||||
def self.reset
|
||||
File.delete(PIGEON_DB_PATH) if @current
|
||||
File.delete(PIGEON_DB_PATH) if File.file?(PIGEON_DB_PATH)
|
||||
@current = nil
|
||||
end
|
||||
|
||||
|
@ -31,6 +31,12 @@ module Pigeon
|
|||
end
|
||||
end
|
||||
|
||||
def find_message(multihash)
|
||||
store.transaction(true) do
|
||||
store[MESG_NS].fetch(multihash)
|
||||
end
|
||||
end
|
||||
|
||||
def set_config(key, value)
|
||||
store.transaction do
|
||||
store[CONF_NS][key] = value
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
require "spec_helper"
|
||||
|
||||
RSpec.describe Pigeon::Message do
|
||||
before(:each) do
|
||||
Pigeon::Storage.reset
|
||||
Pigeon::KeyPair.reset
|
||||
end
|
||||
|
||||
def create_message(params)
|
||||
draft = Pigeon::Draft.create(kind: SecureRandom.uuid)
|
||||
params.map { |(k, v)| draft[k] = v }
|
||||
Pigeon::Message.publish(draft)
|
||||
end
|
||||
|
||||
it "creates a bundle" do
|
||||
expected_bundle = (1..10)
|
||||
.to_a
|
||||
.map do |n| { foo: ["bar", 123, SecureRandom.uuid].sample } end
|
||||
.map do |d| create_message(d) end
|
||||
.map(&:render)
|
||||
.join("\n\n")
|
||||
Pigeon::Bundle.create
|
||||
actual_bundle = File.read(Pigeon::DEFAULT_BUNDLE_PATH)
|
||||
expect(expected_bundle).to eq(actual_bundle)
|
||||
end
|
||||
end
|
|
@ -113,7 +113,6 @@ RSpec.describe Pigeon::Message do
|
|||
|
||||
sig1_b64 = Base64.urlsafe_encode64(sig1) + Pigeon::SIG_FOOTER
|
||||
sig2_b64 = Base64.urlsafe_encode64(sig2) + Pigeon::SIG_FOOTER
|
||||
|
||||
expect(message.signature).to eq(sig1_b64)
|
||||
expect(message.signature).to eq(sig2_b64)
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue