Give up on `lipmaa` (for now)
This commit is contained in:
parent
cba6749e2f
commit
8464c81ecc
|
@ -49,7 +49,6 @@ See `kitchen_sink.sh` examples.
|
||||||
- [ ] Stop using old nested blob bundles. Start using "flat" blobs.
|
- [ ] Stop using old nested blob bundles. Start using "flat" blobs.
|
||||||
- [ ] Ability to unblock someone.
|
- [ ] Ability to unblock someone.
|
||||||
- [ ] Ability to delete a key from a draft.
|
- [ ] Ability to delete a key from a draft.
|
||||||
- [ ] Update Dev docs in protocol spec to reflect changes to `lipmaa` header.
|
|
||||||
- [ ] 100% class / module documentation
|
- [ ] 100% class / module documentation
|
||||||
- [ ] Run a [terminology extraction tool](https://www.visualthesaurus.com/vocabgrabber/#) on the documentation and write a glossary of terms.
|
- [ ] Run a [terminology extraction tool](https://www.visualthesaurus.com/vocabgrabber/#) on the documentation and write a glossary of terms.
|
||||||
- [ ] Ability to list all blocked users.
|
- [ ] Ability to list all blocked users.
|
||||||
|
@ -57,7 +56,6 @@ See `kitchen_sink.sh` examples.
|
||||||
|
|
||||||
# "Nice to Have"
|
# "Nice to Have"
|
||||||
|
|
||||||
- [ ] Support partial verification via `lipmaa` property.
|
|
||||||
- [ ] Add `--since=`/`--until=` args to `bundle create` for sending partial / "slice" bundles.
|
- [ ] Add `--since=`/`--until=` args to `bundle create` for sending partial / "slice" bundles.
|
||||||
- [ ] Interest and Disinterest Signalling for document routing: Create a `$blob_status` message to express `have`, `want` signalling. This can steer bundle creation and an eventual `--for` flag at bundle creation time to customize a bundle to a particular user.
|
- [ ] Interest and Disinterest Signalling for document routing: Create a `$blob_status` message to express `have`, `want` signalling. This can steer bundle creation and an eventual `--for` flag at bundle creation time to customize a bundle to a particular user.
|
||||||
- [ ] Add a schema for `$peer_status`. Eg: `block`, `unblock`, `follow`, `unfollow`.
|
- [ ] Add a schema for `$peer_status`. Eg: `block`, `unblock`, `follow`, `unfollow`.
|
||||||
|
|
|
@ -17,7 +17,6 @@ module Pigeon
|
||||||
"author <%= author %>",
|
"author <%= author %>",
|
||||||
"depth <%= depth %>",
|
"depth <%= depth %>",
|
||||||
"kind <%= kind %>",
|
"kind <%= kind %>",
|
||||||
"lipmaa <%= lipmaa %>",
|
|
||||||
"prev <%= prev %>",
|
"prev <%= prev %>",
|
||||||
"\n",
|
"\n",
|
||||||
].join("\n")
|
].join("\n")
|
||||||
|
@ -91,40 +90,6 @@ module Pigeon
|
||||||
"X" => 0b11101, "Y" => 0b11110, "Z" => 0b11111,
|
"X" => 0b11101, "Y" => 0b11110, "Z" => 0b11111,
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
def self.lipmaa(n)
|
|
||||||
# The original lipmaa function returns -1 for 0
|
|
||||||
# but that does not mesh well with our serialization
|
|
||||||
# scheme. Comments welcome on this one.
|
|
||||||
if n < 1 # Prevent -1, division by zero etc..
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
m, po3, x = 1, 3, n
|
|
||||||
# find k such that (3^k - 1)/2 >= n
|
|
||||||
while (m < n)
|
|
||||||
po3 *= 3
|
|
||||||
m = (po3 - 1) / 2
|
|
||||||
end
|
|
||||||
po3 /= 3
|
|
||||||
# find longest possible backjump
|
|
||||||
if (m != n)
|
|
||||||
while x != 0
|
|
||||||
m = (po3 - 1) / 2
|
|
||||||
po3 /= 3
|
|
||||||
x %= m
|
|
||||||
end
|
|
||||||
if (m != po3)
|
|
||||||
po3 = m
|
|
||||||
end
|
|
||||||
end
|
|
||||||
result = n - po3
|
|
||||||
if result == n - 1
|
|
||||||
return nil
|
|
||||||
else
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# http://www.crockford.com/wrmg/base32.html
|
# http://www.crockford.com/wrmg/base32.html
|
||||||
def self.b32_encode(string)
|
def self.b32_encode(string)
|
||||||
string
|
string
|
||||||
|
@ -176,12 +141,6 @@ module Pigeon
|
||||||
draft.author = author
|
draft.author = author
|
||||||
draft.depth = depth
|
draft.depth = depth
|
||||||
draft.prev = db.get_message_by_depth(mhash, depth - 1)
|
draft.prev = db.get_message_by_depth(mhash, depth - 1)
|
||||||
lpma = Helpers.lipmaa(depth)
|
|
||||||
if lpma && draft.prev
|
|
||||||
draft.lipmaa = db.get_message_by_depth(mhash, lpma)
|
|
||||||
else
|
|
||||||
draft.lipmaa = NOTHING
|
|
||||||
end
|
|
||||||
|
|
||||||
unsigned = template.render_without_signature
|
unsigned = template.render_without_signature
|
||||||
draft.signature = author.sign(unsigned)
|
draft.signature = author.sign(unsigned)
|
||||||
|
@ -214,13 +173,6 @@ module Pigeon
|
||||||
count = db.get_message_count_for(author.multihash)
|
count = db.get_message_count_for(author.multihash)
|
||||||
expected_prev = db.get_message_by_depth(author.multihash, count - 1) || Pigeon::NOTHING
|
expected_prev = db.get_message_by_depth(author.multihash, count - 1) || Pigeon::NOTHING
|
||||||
assert("depth", count, msg.depth)
|
assert("depth", count, msg.depth)
|
||||||
expected_lpma = Helpers.lipmaa(msg.depth)
|
|
||||||
if expected_lpma
|
|
||||||
real = db.get_message_by_depth(author.multihash, expected_lpma)
|
|
||||||
assert("lipmaa", msg.lipmaa, real)
|
|
||||||
else
|
|
||||||
assert("lipmaa", msg.lipmaa, NOTHING)
|
|
||||||
end
|
|
||||||
assert("prev", msg.prev, expected_prev)
|
assert("prev", msg.prev, expected_prev)
|
||||||
tpl = msg.template.render_without_signature
|
tpl = msg.template.render_without_signature
|
||||||
Helpers.verify_string(author, signature, tpl)
|
Helpers.verify_string(author, signature, tpl)
|
||||||
|
|
|
@ -67,14 +67,12 @@ module Pigeon
|
||||||
body:,
|
body:,
|
||||||
depth:,
|
depth:,
|
||||||
kind:,
|
kind:,
|
||||||
lipmaa:,
|
|
||||||
prev:,
|
prev:,
|
||||||
signature:)
|
signature:)
|
||||||
msg = Message.new(author: RemoteIdentity.new(author),
|
msg = Message.new(author: RemoteIdentity.new(author),
|
||||||
kind: kind,
|
kind: kind,
|
||||||
body: body,
|
body: body,
|
||||||
prev: prev,
|
prev: prev,
|
||||||
lipmaa: lipmaa,
|
|
||||||
signature: signature,
|
signature: signature,
|
||||||
depth: depth)
|
depth: depth)
|
||||||
_save_message(msg)
|
_save_message(msg)
|
||||||
|
|
|
@ -2,7 +2,7 @@ require "digest"
|
||||||
|
|
||||||
module Pigeon
|
module Pigeon
|
||||||
class Draft
|
class Draft
|
||||||
attr_accessor :signature, :prev, :lipmaa, :kind, :depth,
|
attr_accessor :signature, :prev, :kind, :depth,
|
||||||
:body, :author
|
:body, :author
|
||||||
|
|
||||||
def initialize(kind:, body: {})
|
def initialize(kind:, body: {})
|
||||||
|
@ -12,7 +12,6 @@ module Pigeon
|
||||||
@depth = -1
|
@depth = -1
|
||||||
@body = {}
|
@body = {}
|
||||||
@author = Pigeon::NOTHING
|
@author = Pigeon::NOTHING
|
||||||
@lipmaa = Pigeon::NOTHING
|
|
||||||
body.to_a.map { |(k, v)| self[k] = v }
|
body.to_a.map { |(k, v)| self[k] = v }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@ module Pigeon
|
||||||
depth = DRAFT_PLACEHOLDER
|
depth = DRAFT_PLACEHOLDER
|
||||||
prev = DRAFT_PLACEHOLDER
|
prev = DRAFT_PLACEHOLDER
|
||||||
signature = DRAFT_PLACEHOLDER
|
signature = DRAFT_PLACEHOLDER
|
||||||
lipmaa = DRAFT_PLACEHOLDER
|
|
||||||
ERB.new([HEADER_TPL, BODY_TPL].join("")).result(binding)
|
ERB.new([HEADER_TPL, BODY_TPL].join("")).result(binding)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -76,7 +76,6 @@ module Pigeon
|
||||||
SEPERATOR = /\n/
|
SEPERATOR = /\n/
|
||||||
AUTHOR = /author #{FEED_VALUE}\n/
|
AUTHOR = /author #{FEED_VALUE}\n/
|
||||||
DEPTH = /depth #{NUMERIC}\n/
|
DEPTH = /depth #{NUMERIC}\n/
|
||||||
LIPMAA = /lipmaa (#{MESG_VALUE}|#{NULL_VALUE})\n/
|
|
||||||
PREV = /prev (#{MESG_VALUE}|#{NULL_VALUE})\n/
|
PREV = /prev (#{MESG_VALUE}|#{NULL_VALUE})\n/
|
||||||
KIND = /kind #{ALPHANUMERICISH}\n/
|
KIND = /kind #{ALPHANUMERICISH}\n/
|
||||||
BODY_ENTRY = /#{ALPHANUMERICISH}:#{ANY_VALUE}\n/
|
BODY_ENTRY = /#{ALPHANUMERICISH}:#{ANY_VALUE}\n/
|
||||||
|
@ -106,8 +105,7 @@ module Pigeon
|
||||||
AUTHOR: [:FOOTER_SEPERATOR, :START],
|
AUTHOR: [:FOOTER_SEPERATOR, :START],
|
||||||
DEPTH: [:AUTHOR],
|
DEPTH: [:AUTHOR],
|
||||||
KIND: [:DEPTH],
|
KIND: [:DEPTH],
|
||||||
LIPMAA: [:KIND],
|
PREV: [:KIND],
|
||||||
PREV: [:LIPMAA],
|
|
||||||
HEADER_SEPERATOR: [:PREV],
|
HEADER_SEPERATOR: [:PREV],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,13 +134,6 @@ module Pigeon
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if scanner.scan(LIPMAA)
|
|
||||||
depth = scanner.matched.chomp.gsub("lipmaa ", "")
|
|
||||||
@tokens << [:LIPMAA, depth, scanner.pos]
|
|
||||||
check_header_order(:LIPMAA)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if scanner.scan(PREV)
|
if scanner.scan(PREV)
|
||||||
prev = scanner.matched.chomp.gsub("prev ", "")
|
prev = scanner.matched.chomp.gsub("prev ", "")
|
||||||
@tokens << [:PREV, prev, scanner.pos]
|
@tokens << [:PREV, prev, scanner.pos]
|
||||||
|
|
|
@ -2,7 +2,7 @@ require "digest"
|
||||||
|
|
||||||
module Pigeon
|
module Pigeon
|
||||||
class Message
|
class Message
|
||||||
attr_reader :author, :kind, :body, :signature, :depth, :lipmaa, :prev
|
attr_reader :author, :kind, :body, :signature, :depth, :prev
|
||||||
|
|
||||||
def render
|
def render
|
||||||
template.render.chomp
|
template.render.chomp
|
||||||
|
@ -20,7 +20,6 @@ module Pigeon
|
||||||
body:,
|
body:,
|
||||||
depth:,
|
depth:,
|
||||||
prev:,
|
prev:,
|
||||||
lipmaa:,
|
|
||||||
signature:)
|
signature:)
|
||||||
raise MISSING_BODY if body.empty?
|
raise MISSING_BODY if body.empty?
|
||||||
|
|
||||||
|
@ -29,7 +28,6 @@ module Pigeon
|
||||||
@depth = depth
|
@depth = depth
|
||||||
@kind = kind
|
@kind = kind
|
||||||
@prev = prev || Pigeon::NOTHING
|
@prev = prev || Pigeon::NOTHING
|
||||||
@lipmaa = lipmaa
|
|
||||||
@signature = signature
|
@signature = signature
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@ module Pigeon
|
||||||
depth = message.depth
|
depth = message.depth
|
||||||
kind = message.kind
|
kind = message.kind
|
||||||
prev = message.prev || NOTHING
|
prev = message.prev || NOTHING
|
||||||
lipmaa = message.lipmaa || NOTHING
|
|
||||||
signature = message.signature
|
signature = message.signature
|
||||||
|
|
||||||
ERB.new(template).result(binding)
|
ERB.new(template).result(binding)
|
||||||
|
|
|
@ -22,7 +22,6 @@ module Pigeon
|
||||||
when :KIND then set(:kind, token[1])
|
when :KIND then set(:kind, token[1])
|
||||||
when :DEPTH then set(:depth, token[1])
|
when :DEPTH then set(:depth, token[1])
|
||||||
when :PREV then set(:prev, token[1])
|
when :PREV then set(:prev, token[1])
|
||||||
when :LIPMAA then set(:lipmaa, token[1])
|
|
||||||
when :HEADER_END then set(:body, {})
|
when :HEADER_END then set(:body, {})
|
||||||
when :BODY_ENTRY then set(token[1], token[2], @scratchpad[:body])
|
when :BODY_ENTRY then set(token[1], token[2], @scratchpad[:body])
|
||||||
when :BODY_END then nil
|
when :BODY_END then nil
|
||||||
|
|
|
@ -88,7 +88,7 @@ We do not have a draft yet. We need to create one:
|
||||||
db.new_draft(kind: "garden_diary", body: {"message_text"=>"Tomato plant looking healthy."})
|
db.new_draft(kind: "garden_diary", body: {"message_text"=>"Tomato plant looking healthy."})
|
||||||
=> #<Pigeon::Draft:0x00005603ed399b48 @author="NONE",
|
=> #<Pigeon::Draft:0x00005603ed399b48 @author="NONE",
|
||||||
# @body={"greeting"=>"\"Hello, world!\""}, @depth=-1, @kind="example123",
|
# @body={"greeting"=>"\"Hello, world!\""}, @depth=-1, @kind="example123",
|
||||||
# @lipmaa="NONE", @prev="NONE", @signature="NONE">
|
# @prev="NONE", @signature="NONE">
|
||||||
```
|
```
|
||||||
|
|
||||||
The command above creates a new draft entry of kind `garden_entry` with one key/value pair in the body. We can view the draft at any time via `#get_draft`:
|
The command above creates a new draft entry of kind `garden_entry` with one key/value pair in the body. We can view the draft at any time via `#get_draft`:
|
||||||
|
@ -97,7 +97,7 @@ The command above creates a new draft entry of kind `garden_entry` with one key/
|
||||||
db.get_draft
|
db.get_draft
|
||||||
# => #<Pigeon::Draft:0x00005603ed81e830 @author="NONE",
|
# => #<Pigeon::Draft:0x00005603ed81e830 @author="NONE",
|
||||||
# @body={"greeting"=>"\"Hello, world!\""}, @depth=-1,
|
# @body={"greeting"=>"\"Hello, world!\""}, @depth=-1,
|
||||||
# @kind="example123", @lipmaa="NONE", @prev="NONE",
|
# @kind="example123", @prev="NONE",
|
||||||
# @signature="NONE">
|
# @signature="NONE">
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -123,7 +123,6 @@ puts human_readable_string
|
||||||
# => author DRAFT
|
# => author DRAFT
|
||||||
# depth DRAFT
|
# depth DRAFT
|
||||||
# kind garden_diary
|
# kind garden_diary
|
||||||
# lipmaa DRAFT
|
|
||||||
# prev DRAFT
|
# prev DRAFT
|
||||||
#
|
#
|
||||||
# greeting:"Hello, world!"
|
# greeting:"Hello, world!"
|
||||||
|
@ -133,7 +132,7 @@ puts human_readable_string
|
||||||
Some interesting things about the draft we just rendered:
|
Some interesting things about the draft we just rendered:
|
||||||
|
|
||||||
* Unlike a message, a draft has no signature (yet).
|
* Unlike a message, a draft has no signature (yet).
|
||||||
* The `author`, `kind`, `prev`, `depth`, `lipmaa` properties are all set to `"DRAFT"`. Real values will be populated when we finally publish the draft.
|
* The `author`, `kind`, `prev`, `depth` properties are all set to `"DRAFT"`. Real values will be populated when we finally publish the draft.
|
||||||
|
|
||||||
If we want to start over, we can delete a draft via `delete_current_draft`:
|
If we want to start over, we can delete a draft via `delete_current_draft`:
|
||||||
|
|
||||||
|
@ -156,7 +155,6 @@ my_message = db.publish_draft
|
||||||
@body={"greeting"=>"\"Hello, world!\"", "current_mood"=>"\"Feeling great\""},
|
@body={"greeting"=>"\"Hello, world!\"", "current_mood"=>"\"Feeling great\""},
|
||||||
@depth=0,
|
@depth=0,
|
||||||
@kind="garden_diary",
|
@kind="garden_diary",
|
||||||
@lipmaa="NONE",
|
|
||||||
@prev="NONE",
|
@prev="NONE",
|
||||||
@signature="QNY...208">
|
@signature="QNY...208">
|
||||||
```
|
```
|
||||||
|
@ -168,7 +166,6 @@ puts my_message.render
|
||||||
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
||||||
# depth 0
|
# depth 0
|
||||||
# kind garden_diary
|
# kind garden_diary
|
||||||
# lipmaa NONE
|
|
||||||
# prev NONE
|
# prev NONE
|
||||||
#
|
#
|
||||||
# greeting:"Hello, world!"
|
# greeting:"Hello, world!"
|
||||||
|
@ -195,7 +192,6 @@ message = db.add_message("garden_entry", {"message_text" => "The basil is just O
|
||||||
# @body={"message_text"=>"\"The basil is just OK\"", "current_mood"=>"\"content\""},
|
# @body={"message_text"=>"\"The basil is just OK\"", "current_mood"=>"\"content\""},
|
||||||
# @depth=1,
|
# @depth=1,
|
||||||
# @kind="garden_entry",
|
# @kind="garden_entry",
|
||||||
# @lipmaa="NONE",
|
|
||||||
# @prev="TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0",
|
# @prev="TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0",
|
||||||
# @signature="95E...J3G">
|
# @signature="95E...J3G">
|
||||||
|
|
||||||
|
@ -203,7 +199,6 @@ puts message.render
|
||||||
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
||||||
# depth 1
|
# depth 1
|
||||||
# kind garden_entry
|
# kind garden_entry
|
||||||
# lipmaa NONE
|
|
||||||
# prev TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0
|
# prev TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0
|
||||||
#
|
#
|
||||||
# message_text:"The basil is just OK"
|
# message_text:"The basil is just OK"
|
||||||
|
@ -231,7 +226,6 @@ old_message = db.read_message("TEXT.444CC4NFHGQDQEZ6B6HSEPNZAZ80RSQF8TCAX8QR9NBR
|
||||||
# @body={"message_text"=>"\"The basil is just OK\"", "current_mood"=>"\"content\""},
|
# @body={"message_text"=>"\"The basil is just OK\"", "current_mood"=>"\"content\""},
|
||||||
# @depth=1,
|
# @depth=1,
|
||||||
# @kind="garden_entry",
|
# @kind="garden_entry",
|
||||||
# @lipmaa="NONE",
|
|
||||||
# @prev="TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0",
|
# @prev="TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0",
|
||||||
# @signature="95E...J3G">
|
# @signature="95E...J3G">
|
||||||
|
|
||||||
|
@ -239,7 +233,6 @@ puts old_message.render
|
||||||
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
||||||
# depth 1
|
# depth 1
|
||||||
# kind garden_entry
|
# kind garden_entry
|
||||||
# lipmaa NONE
|
|
||||||
# prev TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0
|
# prev TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0
|
||||||
|
|
||||||
# message_text:"The basil is just OK"
|
# message_text:"The basil is just OK"
|
||||||
|
@ -367,7 +360,6 @@ puts msg.render
|
||||||
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
# author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG
|
||||||
# depth 2
|
# depth 2
|
||||||
# kind photo
|
# kind photo
|
||||||
# lipmaa NONE
|
|
||||||
# prev TEXT.444CC4NFHGQDQEZ6B6HSEPNZAZ80RSQF8TCAX8QR9NBR5T0XX92G
|
# prev TEXT.444CC4NFHGQDQEZ6B6HSEPNZAZ80RSQF8TCAX8QR9NBR5T0XX92G
|
||||||
#
|
#
|
||||||
# my_cat_picture:FILE.FV0FJ0YZADY7C5JTTFYPKDBHTZJ5JVVP5TCKP0605WWXYJG4VMRG
|
# my_cat_picture:FILE.FV0FJ0YZADY7C5JTTFYPKDBHTZJ5JVVP5TCKP0605WWXYJG4VMRG
|
||||||
|
|
|
@ -1,29 +1,26 @@
|
||||||
author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG
|
author USER.59X51RSZQZR15BX86VDWG37AAMVP43PTBWD1WS66FQFCDPHAQDZ0
|
||||||
depth 0
|
depth 0
|
||||||
kind example
|
kind example
|
||||||
lipmaa NONE
|
|
||||||
prev NONE
|
prev NONE
|
||||||
|
|
||||||
file_name:FILE.FV0FJ0YZADY7C5JTTFYPKDBHTZJ5JVVP5TCKP0605WWXYJG4VMRG
|
file_name:FILE.FV0FJ0YZADY7C5JTTFYPKDBHTZJ5JVVP5TCKP0605WWXYJG4VMRG
|
||||||
|
|
||||||
signature ZYSCKNFP8TW9DME9P9DK4Z4RV09APVEE762HK628K18NMS4DX084XKED71TCRXJNZBWY3TWDYVK1W3K496QF7Y55SCKEWP1D0SP5R30
|
signature N33N7D8KFFVVPHTDE17JS7708YPAVF2F0F0AZS1FFW3D15ZH1K3HEFNQJK7KT7NMSAF8PDC1YDD5M57NPG2PTEEYPBKC1G3HFHN3J08
|
||||||
|
|
||||||
author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG
|
author USER.59X51RSZQZR15BX86VDWG37AAMVP43PTBWD1WS66FQFCDPHAQDZ0
|
||||||
depth 1
|
depth 1
|
||||||
kind example
|
kind example
|
||||||
lipmaa NONE
|
prev TEXT.S5G187G11N2T76E2TSPS40K5QEY6S9ZC68TKEVH7JBPN27VDTKY0
|
||||||
prev TEXT.RGKRHC0APNN9FCJTVBN1NR1ZYQ9ZY34PYYASSMJ6016S30ZTWHR0
|
|
||||||
|
|
||||||
file_name:FILE.YPF11E5N9JFVB6KB1N1WDVVT9DXMCHE0XJWBZHT2CQ29S5SEPCSG
|
file_name:FILE.YPF11E5N9JFVB6KB1N1WDVVT9DXMCHE0XJWBZHT2CQ29S5SEPCSG
|
||||||
|
|
||||||
signature GAZGWG8PWZSP4VSSNYD8J873CQ6KDM93SBMA9VGGC1YW66FER96HEGZQ4CJBH51YN22WMGYADNY2SCWS0JY6YPX4APFDQ60X751JJ1R
|
signature 53454CZKNSBK4D8NZCKWRWWE37DVANJWCS891XGRR2M8M4AJP2XNTC86MQAWAMYX3W517KWW6JD9MX3FMXNNBQ1TJS5HSK9CTW9G018
|
||||||
|
|
||||||
author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG
|
author USER.59X51RSZQZR15BX86VDWG37AAMVP43PTBWD1WS66FQFCDPHAQDZ0
|
||||||
depth 2
|
depth 2
|
||||||
kind example
|
kind example
|
||||||
lipmaa NONE
|
prev TEXT.5BBGSKGBHKYE6R0SJSZAGNEQA8PGJ5CMTQD1XGKKP2CHYPZR8G90
|
||||||
prev TEXT.Z3QS1HPX756E22XWKXAXH7NTSTJGY0AHEM9KQNATTC6HHCACZGN0
|
|
||||||
|
|
||||||
file_name:FILE.622PRNJ7C0S05XR2AHDPKWMG051B1QW5SXMN2RQHF2AND6J8VGPG
|
file_name:FILE.622PRNJ7C0S05XR2AHDPKWMG051B1QW5SXMN2RQHF2AND6J8VGPG
|
||||||
|
|
||||||
signature W94BVC4ED00Z4TJC0T3BEVC63RJYJC1J4DDS13BJTTGGXK40JSX276B9MV3GPS5JJHZW92YKAZNZ1Q4DCG0K58SCD9ZD0TVZVX7100G
|
signature JVN1YPVA637NF6GGPCX8GXT5FXTZPA1YM68ZWQQNXYD36CX0PSDBHXQMY7PMJYMCPFYW5BR56P2GVETM8AVYSKAFSYPVM3F7KVDW020
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 63 KiB |
|
@ -1,29 +1,35 @@
|
||||||
author USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG
|
author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0
|
||||||
depth 0
|
depth 0
|
||||||
kind unit_test1
|
kind nonsense
|
||||||
lipmaa NONE
|
|
||||||
prev NONE
|
prev NONE
|
||||||
|
|
||||||
|
example:"Just block me"
|
||||||
|
|
||||||
|
signature 0N0B419YSCHYM82YWGBB6VF0MHHCS0ACGBKD8MYMTGS59XC1T60W2JHKHEW9ZQJW53KTJMVB3MGV3JTFKZWQH9QMAAWG3DE6AQ6SJ30
|
||||||
|
|
||||||
|
author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0
|
||||||
|
depth 1
|
||||||
|
kind unit_test1
|
||||||
|
prev TEXT.839FP9NB9E1KFG17SZF49X57B9AYNNX1HQ8DGVE940BPWCRXS82G
|
||||||
|
|
||||||
foo:"bar"
|
foo:"bar"
|
||||||
|
|
||||||
signature HAM8XEPCAB81P0A5DQKZ3DQG19Q06KR1G4RZ28CX4EXYCZA1A1MPVBQG540EZQSWHS46W523GJK4K3EWM4C0NWSM7NNG99AMJ70VC1G
|
signature 7YC6P4AJMPV3JH57JV0AHDP0ZV59WZYKHF49DEM2CJP5ZQCVR4XN6RMS18SBE5S2YXAFG05FA8S3B2YC35CH464822ZQXTCMN2F9G3R
|
||||||
|
|
||||||
author USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG
|
author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0
|
||||||
depth 1
|
depth 2
|
||||||
kind unit_test2
|
kind unit_test2
|
||||||
lipmaa NONE
|
prev TEXT.XHHQMFDK1DQSVXQ0XJQDSZQWXF8BNQ1QNRZW4K9V34264MF3WSFG
|
||||||
prev TEXT.DHSWRP0B9241KZ680WJAHVCVR4C79SH5NN3JCE3HFG9DB51WXC2G
|
|
||||||
|
|
||||||
bar:"baz"
|
bar:"baz"
|
||||||
|
|
||||||
signature S0CSCTVWQ8R827XP4RNW7MQSQ5AT4EPG0AWF259R4ZWR3C83AZYPARXQXZ9Q32GPKEEWTC9RAKC00A0RTHZCETR712D8T7WVV9RBE18
|
signature 5YBYC1RSB27WZ00H567RP1YAYBW30PAVHG3ZG55VY2R137YMPZZ0ZMD4T7MJ8RYCMTT72AN4WCN7QAS1NPAPQE134TE8CX7PH2TFM2R
|
||||||
|
|
||||||
author USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG
|
author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0
|
||||||
depth 2
|
depth 3
|
||||||
kind unit_test3
|
kind unit_test3
|
||||||
lipmaa NONE
|
prev TEXT.DG0BZ241KY8E60C1F88MTZNEDDBQFZS4EMCNR23VD6Y6RZGNEXSG
|
||||||
prev TEXT.8DPH5WX4DWWQ7DF9DBKYMT69Y44XNHHM8W8MV5BNQ7RYRM3W4NSG
|
|
||||||
|
|
||||||
cats:"meow"
|
cats:"meow"
|
||||||
|
|
||||||
signature G9NC8H0SJGZ6KKQFM6V9VCGVK5FS0MM6B6G1RHJ09EM1ACVQSJPMHBB8YJYPZWXX2EDRD4MMKYEZ6725RAAXYY42KXZC9PPRVVGKR3G
|
signature QWHA8KHSVFBC0X84VH2F2BS3CSCY58ER4ETXH1WB8SEEMDBS0TBAQHA2HNK1W7VDATBVZHB7EHWNYEN86HYBKK7BBMNSSMR45CEG838
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
author USER.FFQE19PEB55S1JMT5CVWZXK6V9D6E54GG8SK31QRXBDGF2AGHW50
|
author USER.YJTH2BBAAAXK2RYKWRXYE0E0ANME1YPZPD8TV5VCS40X3D75AJ3G
|
||||||
depth 0
|
depth 0
|
||||||
kind nonsense
|
kind nonsense
|
||||||
lipmaa NONE
|
|
||||||
prev NONE
|
prev NONE
|
||||||
|
|
||||||
example:"Just block me"
|
example:"Just block me"
|
||||||
|
|
||||||
signature ZCP05Q1N8147YT47M5TY84D3K5MW3AB428CQDA5DK57D0J8PH5V7WWZDG2YYET04YCTM9KN2V847Q5SNS6J04HPNP8RW9B9D0EVX610
|
signature 3WD5EJCMZZ27JJ8EQZ3M5XNK3QZ40A5T894Q27ZVMBT4T65KVZWK5PC74F54DX5EB3D3EFYQJQ5C1D9X2J22QKAJHTSG3B7SC932W28
|
||||||
|
|
|
@ -40,7 +40,8 @@ RSpec.describe Pigeon::Message do
|
||||||
|
|
||||||
it "does not ingest messages from blocked peers" do
|
it "does not ingest messages from blocked peers" do
|
||||||
db.reset_database
|
db.reset_database
|
||||||
antagonist = "USER.FFQE19PEB55S1JMT5CVWZXK6V9D6E54GG8SK31QRXBDGF2AGHW50"
|
expect(db.all_messages.count).to eq(0)
|
||||||
|
antagonist = "USER.YJTH2BBAAAXK2RYKWRXYE0E0ANME1YPZPD8TV5VCS40X3D75AJ3G"
|
||||||
db.block_peer(antagonist)
|
db.block_peer(antagonist)
|
||||||
db.import_bundle(BLOCKED_PEER_FIXTURE_PATH)
|
db.import_bundle(BLOCKED_PEER_FIXTURE_PATH)
|
||||||
expect(db.all_messages.count).to eq(0)
|
expect(db.all_messages.count).to eq(0)
|
||||||
|
|
|
@ -20,7 +20,6 @@ RSpec.describe Pigeon::Draft do
|
||||||
"author DRAFT",
|
"author DRAFT",
|
||||||
"depth DRAFT",
|
"depth DRAFT",
|
||||||
"kind unit_test",
|
"kind unit_test",
|
||||||
"lipmaa DRAFT",
|
|
||||||
"prev DRAFT",
|
"prev DRAFT",
|
||||||
"\na:\"bar\"",
|
"\na:\"bar\"",
|
||||||
"b:FILE.CHHABX8Q9D9Q0BY2BBZ6FA7SMAFNE9GGMSDTZVZZC9TK2N9F15QG",
|
"b:FILE.CHHABX8Q9D9Q0BY2BBZ6FA7SMAFNE9GGMSDTZVZZC9TK2N9F15QG",
|
||||||
|
|
|
@ -1,22 +1,4 @@
|
||||||
RSpec.describe Pigeon::Helpers do
|
RSpec.describe Pigeon::Helpers do
|
||||||
it "creates lipmalinks" do
|
|
||||||
[
|
|
||||||
[-1, nil],
|
|
||||||
[0, nil],
|
|
||||||
[1, nil],
|
|
||||||
[2, nil],
|
|
||||||
[3, nil],
|
|
||||||
[4, 1],
|
|
||||||
[5, nil],
|
|
||||||
[6, nil],
|
|
||||||
[7, nil],
|
|
||||||
[8, 4],
|
|
||||||
[13, 4],
|
|
||||||
].each do |(input, expected)|
|
|
||||||
expect(Pigeon::Helpers.lipmaa(input)).to eq(expected)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it "handles Crockford Base 32 values" do
|
it "handles Crockford Base 32 values" do
|
||||||
10.times do
|
10.times do
|
||||||
raw_bytes = SecureRandom.random_bytes(32)
|
raw_bytes = SecureRandom.random_bytes(32)
|
||||||
|
|
|
@ -2,43 +2,48 @@ require "spec_helper"
|
||||||
|
|
||||||
RSpec.describe Pigeon::Lexer do
|
RSpec.describe Pigeon::Lexer do
|
||||||
EXPECTED_TOKENS1 = [
|
EXPECTED_TOKENS1 = [
|
||||||
[:AUTHOR, "USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG", 65],
|
[:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 65],
|
||||||
[:DEPTH, 0, 73],
|
[:DEPTH, 0, 73],
|
||||||
[:KIND, "unit_test1", 89],
|
[:KIND, "nonsense", 87],
|
||||||
[:LIPMAA, "NONE", 101],
|
[:PREV, "NONE", 97],
|
||||||
[:PREV, "NONE", 111],
|
[:HEADER_END, 98],
|
||||||
[:HEADER_END, 112],
|
[:BODY_ENTRY, "example", "\"Just block me\"", 122],
|
||||||
[:BODY_ENTRY, "foo", "\"bar\"", 122],
|
|
||||||
[:BODY_END, 123],
|
[:BODY_END, 123],
|
||||||
[:SIGNATURE, "HAM8XEPCAB81P0A5DQKZ3DQG19Q06KR1G4RZ28CX4EXYCZA1A1MPVBQG540EZQSWHS46W523GJK4K3EWM4C0NWSM7NNG99AMJ70VC1G", 237],
|
[:SIGNATURE, "0N0B419YSCHYM82YWGBB6VF0MHHCS0ACGBKD8MYMTGS59XC1T60W2JHKHEW9ZQJW53KTJMVB3MGV3JTFKZWQH9QMAAWG3DE6AQ6SJ30", 237],
|
||||||
[:MESSAGE_DELIM, 238],
|
[:MESSAGE_DELIM, 238],
|
||||||
[:AUTHOR, "USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG", 303],
|
[:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 303],
|
||||||
[:DEPTH, 1, 311],
|
[:DEPTH, 1, 311],
|
||||||
[:KIND, "unit_test2", 327],
|
[:KIND, "unit_test1", 327],
|
||||||
[:LIPMAA, "NONE", 339],
|
[:PREV, "TEXT.839FP9NB9E1KFG17SZF49X57B9AYNNX1HQ8DGVE940BPWCRXS82G", 390],
|
||||||
[:PREV, "TEXT.DHSWRP0B9241KZ680WJAHVCVR4C79SH5NN3JCE3HFG9DB51WXC2G", 402],
|
[:HEADER_END, 391],
|
||||||
[:HEADER_END, 403],
|
[:BODY_ENTRY, "foo", "\"bar\"", 401],
|
||||||
[:BODY_ENTRY, "bar", "\"baz\"", 413],
|
[:BODY_END, 402],
|
||||||
[:BODY_END, 414],
|
[:SIGNATURE, "7YC6P4AJMPV3JH57JV0AHDP0ZV59WZYKHF49DEM2CJP5ZQCVR4XN6RMS18SBE5S2YXAFG05FA8S3B2YC35CH464822ZQXTCMN2F9G3R", 516],
|
||||||
[:SIGNATURE, "S0CSCTVWQ8R827XP4RNW7MQSQ5AT4EPG0AWF259R4ZWR3C83AZYPARXQXZ9Q32GPKEEWTC9RAKC00A0RTHZCETR712D8T7WVV9RBE18", 528],
|
[:MESSAGE_DELIM, 517],
|
||||||
[:MESSAGE_DELIM, 529],
|
[:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 582],
|
||||||
[:AUTHOR, "USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG", 594],
|
[:DEPTH, 2, 590],
|
||||||
[:DEPTH, 2, 602],
|
[:KIND, "unit_test2", 606],
|
||||||
[:KIND, "unit_test3", 618],
|
[:PREV, "TEXT.XHHQMFDK1DQSVXQ0XJQDSZQWXF8BNQ1QNRZW4K9V34264MF3WSFG", 669],
|
||||||
[:LIPMAA, "NONE", 630],
|
[:HEADER_END, 670],
|
||||||
[:PREV, "TEXT.8DPH5WX4DWWQ7DF9DBKYMT69Y44XNHHM8W8MV5BNQ7RYRM3W4NSG", 693],
|
[:BODY_ENTRY, "bar", "\"baz\"", 680],
|
||||||
[:HEADER_END, 694],
|
[:BODY_END, 681],
|
||||||
[:BODY_ENTRY, "cats", "\"meow\"", 706],
|
[:SIGNATURE, "5YBYC1RSB27WZ00H567RP1YAYBW30PAVHG3ZG55VY2R137YMPZZ0ZMD4T7MJ8RYCMTT72AN4WCN7QAS1NPAPQE134TE8CX7PH2TFM2R", 795],
|
||||||
[:BODY_END, 707],
|
[:MESSAGE_DELIM, 796],
|
||||||
[:SIGNATURE, "G9NC8H0SJGZ6KKQFM6V9VCGVK5FS0MM6B6G1RHJ09EM1ACVQSJPMHBB8YJYPZWXX2EDRD4MMKYEZ6725RAAXYY42KXZC9PPRVVGKR3G", 821],
|
[:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 861],
|
||||||
[:MESSAGE_DELIM, 821],
|
[:DEPTH, 3, 869],
|
||||||
].freeze
|
[:KIND, "unit_test3", 885],
|
||||||
|
[:PREV, "TEXT.DG0BZ241KY8E60C1F88MTZNEDDBQFZS4EMCNR23VD6Y6RZGNEXSG", 948],
|
||||||
|
[:HEADER_END, 949],
|
||||||
|
[:BODY_ENTRY, "cats", "\"meow\"", 961],
|
||||||
|
[:BODY_END, 962],
|
||||||
|
[:SIGNATURE, "QWHA8KHSVFBC0X84VH2F2BS3CSCY58ER4ETXH1WB8SEEMDBS0TBAQHA2HNK1W7VDATBVZHB7EHWNYEN86HYBKK7BBMNSSMR45CEG838", 1076],
|
||||||
|
[:MESSAGE_DELIM, 1076],
|
||||||
|
]
|
||||||
|
|
||||||
MESSAGE_LINES = [
|
MESSAGE_LINES = [
|
||||||
"author @VG44QCHKA38E7754RQ5DAFBMMD2CCZQRZ8BR2J4MRHHGVTHGW670",
|
"author @VG44QCHKA38E7754RQ5DAFBMMD2CCZQRZ8BR2J4MRHHGVTHGW670",
|
||||||
"depth 0",
|
"depth 0",
|
||||||
"kind unit_test",
|
"kind unit_test",
|
||||||
"lipmaa NONE",
|
|
||||||
"prev NONE",
|
"prev NONE",
|
||||||
"",
|
"",
|
||||||
"foo:\"bar\"",
|
"foo:\"bar\"",
|
||||||
|
|
|
@ -48,7 +48,6 @@ RSpec.describe Pigeon::Message do
|
||||||
"author __AUTHOR__",
|
"author __AUTHOR__",
|
||||||
"depth 0",
|
"depth 0",
|
||||||
"kind unit_test",
|
"kind unit_test",
|
||||||
"lipmaa NONE",
|
|
||||||
"prev NONE",
|
"prev NONE",
|
||||||
"",
|
"",
|
||||||
"a:\"bar\"",
|
"a:\"bar\"",
|
||||||
|
@ -135,7 +134,6 @@ RSpec.describe Pigeon::Message do
|
||||||
[:KIND, "invalid"],
|
[:KIND, "invalid"],
|
||||||
[:PREV, "NONE"],
|
[:PREV, "NONE"],
|
||||||
[:DEPTH, 10],
|
[:DEPTH, 10],
|
||||||
[:LIPMAA, "TEXT.4PE7S4XCCAYPQ42S98K730CEW6ME5HRWJKHHEGYVYPFHSJWXEY1G"],
|
|
||||||
[:HEADER_END],
|
[:HEADER_END],
|
||||||
[:BODY_ENTRY, "duplicate", "This key is a duplicate."],
|
[:BODY_ENTRY, "duplicate", "This key is a duplicate."],
|
||||||
[:SIGNATURE, "DN7yPTE-m433ND3jBL4oM23XGxBKafjq0Dp9ArBQa_TIGU7DmCxTumieuPBN-NKxlx_0N7-c5zjLb5XXVHYPCQ=="],
|
[:SIGNATURE, "DN7yPTE-m433ND3jBL4oM23XGxBKafjq0Dp9ArBQa_TIGU7DmCxTumieuPBN-NKxlx_0N7-c5zjLb5XXVHYPCQ=="],
|
||||||
|
|
|
@ -14,7 +14,6 @@ RSpec.describe Pigeon::Lexer do
|
||||||
[:KIND, "invalid"],
|
[:KIND, "invalid"],
|
||||||
[:PREV, "NONE"],
|
[:PREV, "NONE"],
|
||||||
[:DEPTH, 0],
|
[:DEPTH, 0],
|
||||||
[:LIPMAA, Pigeon::Helpers.lipmaa(0)],
|
|
||||||
[:HEADER_END],
|
[:HEADER_END],
|
||||||
[:BODY_ENTRY, "duplicate", "Pigeon does not allow duplicate keys."],
|
[:BODY_ENTRY, "duplicate", "Pigeon does not allow duplicate keys."],
|
||||||
[:BODY_ENTRY, "duplicate", "This key is a duplicate."],
|
[:BODY_ENTRY, "duplicate", "This key is a duplicate."],
|
||||||
|
@ -24,14 +23,22 @@ RSpec.describe Pigeon::Lexer do
|
||||||
|
|
||||||
it "parses tokens" do
|
it "parses tokens" do
|
||||||
results = Pigeon::Parser.parse(db, tokens)
|
results = Pigeon::Parser.parse(db, tokens)
|
||||||
expect(results.length).to eq(3)
|
expect(results.length).to eq(4)
|
||||||
|
expected_sigs = [
|
||||||
|
"0N0B419YSCHYM82YWGBB6VF0MHHCS0ACGBKD8MYMTGS59XC1T60W2JHKHEW9ZQJW53KTJMVB3MGV3JTFKZWQH9QMAAWG3DE6AQ6SJ30",
|
||||||
|
"7YC6P4AJMPV3JH57JV0AHDP0ZV59WZYKHF49DEM2CJP5ZQCVR4XN6RMS18SBE5S2YXAFG05FA8S3B2YC35CH464822ZQXTCMN2F9G3R",
|
||||||
|
"5YBYC1RSB27WZ00H567RP1YAYBW30PAVHG3ZG55VY2R137YMPZZ0ZMD4T7MJ8RYCMTT72AN4WCN7QAS1NPAPQE134TE8CX7PH2TFM2R",
|
||||||
|
"QWHA8KHSVFBC0X84VH2F2BS3CSCY58ER4ETXH1WB8SEEMDBS0TBAQHA2HNK1W7VDATBVZHB7EHWNYEN86HYBKK7BBMNSSMR45CEG838",
|
||||||
|
].sort
|
||||||
|
actual_sigs = results.map { |x| x.signature }.sort
|
||||||
|
expect(actual_sigs - expected_sigs).to eq([])
|
||||||
expect(results.first).to be_kind_of(Pigeon::Message)
|
expect(results.first).to be_kind_of(Pigeon::Message)
|
||||||
expect(results.last).to be_kind_of(Pigeon::Message)
|
expect(results.last).to be_kind_of(Pigeon::Message)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ingests and reconstructs a bundle" do
|
it "ingests and reconstructs a bundle" do
|
||||||
messages = db.import_bundle("./spec/fixtures/normal")
|
messages = db.import_bundle("./spec/fixtures/normal")
|
||||||
expect(messages.length).to eq(3)
|
expect(messages.length).to eq(4)
|
||||||
expect(messages.map(&:class).uniq).to eq([Pigeon::Message])
|
expect(messages.map(&:class).uniq).to eq([Pigeon::Message])
|
||||||
re_bundled = messages.map(&:render).join("\n\n") + "\n"
|
re_bundled = messages.map(&:render).join("\n\n") + "\n"
|
||||||
expect(re_bundled).to eq(example_bundle)
|
expect(re_bundled).to eq(example_bundle)
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
require "spec_helper"
|
require "spec_helper"
|
||||||
|
|
||||||
RSpec.describe Pigeon::MessageSerializer do
|
RSpec.describe Pigeon::MessageSerializer do
|
||||||
SHIM_ATTRS = %i[author body kind depth prev signature lipmaa].freeze
|
SHIM_ATTRS = %i[author body kind depth prev signature].freeze
|
||||||
MessageShim = Struct.new(*SHIM_ATTRS)
|
MessageShim = Struct.new(*SHIM_ATTRS)
|
||||||
TOP_HALF = [
|
TOP_HALF = [
|
||||||
"author FAKE_AUTHOR",
|
"author FAKE_AUTHOR",
|
||||||
"\ndepth 23",
|
"\ndepth 23",
|
||||||
"\nkind FAKE_KIND",
|
"\nkind FAKE_KIND",
|
||||||
"\nlipmaa 22",
|
|
||||||
"\nprev NONE",
|
"\nprev NONE",
|
||||||
"\n\nfoo:\"bar\"\n\n",
|
"\n\nfoo:\"bar\"\n\n",
|
||||||
].join("")
|
].join("")
|
||||||
|
@ -28,7 +27,6 @@ RSpec.describe Pigeon::MessageSerializer do
|
||||||
depth: 23,
|
depth: 23,
|
||||||
prev: nil,
|
prev: nil,
|
||||||
signature: "XYZ",
|
signature: "XYZ",
|
||||||
lipmaa: 22,
|
|
||||||
}.values
|
}.values
|
||||||
message = MessageShim.new(*params)
|
message = MessageShim.new(*params)
|
||||||
template = Pigeon::MessageSerializer.new(message)
|
template = Pigeon::MessageSerializer.new(message)
|
||||||
|
|
Loading…
Reference in New Issue