diff --git a/README.md b/README.md index 273f92d..18b756a 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,6 @@ See `kitchen_sink.sh` examples. - [ ] Stop using old nested blob bundles. Start using "flat" blobs. - [ ] Ability to unblock someone. - [ ] Ability to delete a key from a draft. - - [ ] Update Dev docs in protocol spec to reflect changes to `lipmaa` header. - [ ] 100% class / module documentation - [ ] 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. @@ -57,7 +56,6 @@ See `kitchen_sink.sh` examples. # "Nice to Have" - - [ ] Support partial verification via `lipmaa` property. - [ ] 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. - [ ] Add a schema for `$peer_status`. Eg: `block`, `unblock`, `follow`, `unfollow`. diff --git a/lib/pigeon.rb b/lib/pigeon.rb index 9ac25a6..f7bc01a 100644 --- a/lib/pigeon.rb +++ b/lib/pigeon.rb @@ -17,7 +17,6 @@ module Pigeon "author <%= author %>", "depth <%= depth %>", "kind <%= kind %>", - "lipmaa <%= lipmaa %>", "prev <%= prev %>", "\n", ].join("\n") @@ -91,40 +90,6 @@ module Pigeon "X" => 0b11101, "Y" => 0b11110, "Z" => 0b11111, }.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 def self.b32_encode(string) string @@ -176,12 +141,6 @@ module Pigeon draft.author = author draft.depth = depth 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 draft.signature = author.sign(unsigned) @@ -214,13 +173,6 @@ module Pigeon count = db.get_message_count_for(author.multihash) expected_prev = db.get_message_by_depth(author.multihash, count - 1) || Pigeon::NOTHING 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) tpl = msg.template.render_without_signature Helpers.verify_string(author, signature, tpl) diff --git a/lib/pigeon/database.rb b/lib/pigeon/database.rb index 633575f..c540cf5 100644 --- a/lib/pigeon/database.rb +++ b/lib/pigeon/database.rb @@ -67,14 +67,12 @@ module Pigeon body:, depth:, kind:, - lipmaa:, prev:, signature:) msg = Message.new(author: RemoteIdentity.new(author), kind: kind, body: body, prev: prev, - lipmaa: lipmaa, signature: signature, depth: depth) _save_message(msg) diff --git a/lib/pigeon/draft.rb b/lib/pigeon/draft.rb index 8a00982..de38f71 100644 --- a/lib/pigeon/draft.rb +++ b/lib/pigeon/draft.rb @@ -2,7 +2,7 @@ require "digest" module Pigeon class Draft - attr_accessor :signature, :prev, :lipmaa, :kind, :depth, + attr_accessor :signature, :prev, :kind, :depth, :body, :author def initialize(kind:, body: {}) @@ -12,7 +12,6 @@ module Pigeon @depth = -1 @body = {} @author = Pigeon::NOTHING - @lipmaa = Pigeon::NOTHING body.to_a.map { |(k, v)| self[k] = v } end diff --git a/lib/pigeon/draft_serializer.rb b/lib/pigeon/draft_serializer.rb index d185460..041879d 100644 --- a/lib/pigeon/draft_serializer.rb +++ b/lib/pigeon/draft_serializer.rb @@ -11,7 +11,6 @@ module Pigeon depth = DRAFT_PLACEHOLDER prev = DRAFT_PLACEHOLDER signature = DRAFT_PLACEHOLDER - lipmaa = DRAFT_PLACEHOLDER ERB.new([HEADER_TPL, BODY_TPL].join("")).result(binding) end end diff --git a/lib/pigeon/lexer.rb b/lib/pigeon/lexer.rb index a48a4bc..7bbc69b 100644 --- a/lib/pigeon/lexer.rb +++ b/lib/pigeon/lexer.rb @@ -76,7 +76,6 @@ module Pigeon SEPERATOR = /\n/ AUTHOR = /author #{FEED_VALUE}\n/ DEPTH = /depth #{NUMERIC}\n/ - LIPMAA = /lipmaa (#{MESG_VALUE}|#{NULL_VALUE})\n/ PREV = /prev (#{MESG_VALUE}|#{NULL_VALUE})\n/ KIND = /kind #{ALPHANUMERICISH}\n/ BODY_ENTRY = /#{ALPHANUMERICISH}:#{ANY_VALUE}\n/ @@ -106,8 +105,7 @@ module Pigeon AUTHOR: [:FOOTER_SEPERATOR, :START], DEPTH: [:AUTHOR], KIND: [:DEPTH], - LIPMAA: [:KIND], - PREV: [:LIPMAA], + PREV: [:KIND], HEADER_SEPERATOR: [:PREV], } @@ -136,13 +134,6 @@ module Pigeon return 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) prev = scanner.matched.chomp.gsub("prev ", "") @tokens << [:PREV, prev, scanner.pos] diff --git a/lib/pigeon/message.rb b/lib/pigeon/message.rb index 19aa224..8042e32 100644 --- a/lib/pigeon/message.rb +++ b/lib/pigeon/message.rb @@ -2,7 +2,7 @@ require "digest" module Pigeon class Message - attr_reader :author, :kind, :body, :signature, :depth, :lipmaa, :prev + attr_reader :author, :kind, :body, :signature, :depth, :prev def render template.render.chomp @@ -20,7 +20,6 @@ module Pigeon body:, depth:, prev:, - lipmaa:, signature:) raise MISSING_BODY if body.empty? @@ -29,7 +28,6 @@ module Pigeon @depth = depth @kind = kind @prev = prev || Pigeon::NOTHING - @lipmaa = lipmaa @signature = signature end diff --git a/lib/pigeon/message_serializer.rb b/lib/pigeon/message_serializer.rb index 82f2ee1..8964358 100644 --- a/lib/pigeon/message_serializer.rb +++ b/lib/pigeon/message_serializer.rb @@ -26,7 +26,6 @@ module Pigeon depth = message.depth kind = message.kind prev = message.prev || NOTHING - lipmaa = message.lipmaa || NOTHING signature = message.signature ERB.new(template).result(binding) diff --git a/lib/pigeon/parser.rb b/lib/pigeon/parser.rb index 819f9f4..f53c9fc 100644 --- a/lib/pigeon/parser.rb +++ b/lib/pigeon/parser.rb @@ -22,7 +22,6 @@ module Pigeon when :KIND then set(:kind, token[1]) when :DEPTH then set(:depth, token[1]) when :PREV then set(:prev, token[1]) - when :LIPMAA then set(:lipmaa, token[1]) when :HEADER_END then set(:body, {}) when :BODY_ENTRY then set(token[1], token[2], @scratchpad[:body]) when :BODY_END then nil diff --git a/ruby_tutorial.md b/ruby_tutorial.md index 788ce1b..a0b527d 100644 --- a/ruby_tutorial.md +++ b/ruby_tutorial.md @@ -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."}) => #"\"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`: @@ -97,7 +97,7 @@ The command above creates a new draft entry of kind `garden_entry` with one key/ db.get_draft # => #"\"Hello, world!\""}, @depth=-1, -# @kind="example123", @lipmaa="NONE", @prev="NONE", +# @kind="example123", @prev="NONE", # @signature="NONE"> ``` @@ -123,7 +123,6 @@ puts human_readable_string # => author DRAFT # depth DRAFT # kind garden_diary -# lipmaa DRAFT # prev DRAFT # # greeting:"Hello, world!" @@ -133,7 +132,7 @@ puts human_readable_string Some interesting things about the draft we just rendered: * 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`: @@ -156,7 +155,6 @@ my_message = db.publish_draft @body={"greeting"=>"\"Hello, world!\"", "current_mood"=>"\"Feeling great\""}, @depth=0, @kind="garden_diary", - @lipmaa="NONE", @prev="NONE", @signature="QNY...208"> ``` @@ -168,7 +166,6 @@ puts my_message.render # author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG # depth 0 # kind garden_diary -# lipmaa NONE # prev NONE # # 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\""}, # @depth=1, # @kind="garden_entry", -# @lipmaa="NONE", # @prev="TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0", # @signature="95E...J3G"> @@ -203,7 +199,6 @@ puts message.render # author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG # depth 1 # kind garden_entry -# lipmaa NONE # prev TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0 # # 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\""}, # @depth=1, # @kind="garden_entry", -# @lipmaa="NONE", # @prev="TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0", # @signature="95E...J3G"> @@ -239,7 +233,6 @@ puts old_message.render # author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG # depth 1 # kind garden_entry -# lipmaa NONE # prev TEXT.NPNQZAP9CB79GP8J0SN52F38EBJ9WV370HX6MVZD3XB804TVQQB0 # message_text:"The basil is just OK" @@ -367,7 +360,6 @@ puts msg.render # author USER.6DQ4RRNBKJ2T4EY5E1GZYYX6X6SZXV1W0GNH1HA4KGKA5KZ2Y2DG # depth 2 # kind photo -# lipmaa NONE # prev TEXT.444CC4NFHGQDQEZ6B6HSEPNZAZ80RSQF8TCAX8QR9NBR5T0XX92G # # my_cat_picture:FILE.FV0FJ0YZADY7C5JTTFYPKDBHTZJ5JVVP5TCKP0605WWXYJG4VMRG diff --git a/spec/fixtures/has_blobs/messages.pgn b/spec/fixtures/has_blobs/messages.pgn index fdf1205..de4acb6 100644 --- a/spec/fixtures/has_blobs/messages.pgn +++ b/spec/fixtures/has_blobs/messages.pgn @@ -1,29 +1,26 @@ -author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG +author USER.59X51RSZQZR15BX86VDWG37AAMVP43PTBWD1WS66FQFCDPHAQDZ0 depth 0 kind example -lipmaa NONE prev NONE file_name:FILE.FV0FJ0YZADY7C5JTTFYPKDBHTZJ5JVVP5TCKP0605WWXYJG4VMRG -signature ZYSCKNFP8TW9DME9P9DK4Z4RV09APVEE762HK628K18NMS4DX084XKED71TCRXJNZBWY3TWDYVK1W3K496QF7Y55SCKEWP1D0SP5R30 +signature N33N7D8KFFVVPHTDE17JS7708YPAVF2F0F0AZS1FFW3D15ZH1K3HEFNQJK7KT7NMSAF8PDC1YDD5M57NPG2PTEEYPBKC1G3HFHN3J08 -author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG +author USER.59X51RSZQZR15BX86VDWG37AAMVP43PTBWD1WS66FQFCDPHAQDZ0 depth 1 kind example -lipmaa NONE -prev TEXT.RGKRHC0APNN9FCJTVBN1NR1ZYQ9ZY34PYYASSMJ6016S30ZTWHR0 +prev TEXT.S5G187G11N2T76E2TSPS40K5QEY6S9ZC68TKEVH7JBPN27VDTKY0 file_name:FILE.YPF11E5N9JFVB6KB1N1WDVVT9DXMCHE0XJWBZHT2CQ29S5SEPCSG -signature GAZGWG8PWZSP4VSSNYD8J873CQ6KDM93SBMA9VGGC1YW66FER96HEGZQ4CJBH51YN22WMGYADNY2SCWS0JY6YPX4APFDQ60X751JJ1R +signature 53454CZKNSBK4D8NZCKWRWWE37DVANJWCS891XGRR2M8M4AJP2XNTC86MQAWAMYX3W517KWW6JD9MX3FMXNNBQ1TJS5HSK9CTW9G018 -author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG +author USER.59X51RSZQZR15BX86VDWG37AAMVP43PTBWD1WS66FQFCDPHAQDZ0 depth 2 kind example -lipmaa NONE -prev TEXT.Z3QS1HPX756E22XWKXAXH7NTSTJGY0AHEM9KQNATTC6HHCACZGN0 +prev TEXT.5BBGSKGBHKYE6R0SJSZAGNEQA8PGJ5CMTQD1XGKKP2CHYPZR8G90 file_name:FILE.622PRNJ7C0S05XR2AHDPKWMG051B1QW5SXMN2RQHF2AND6J8VGPG -signature W94BVC4ED00Z4TJC0T3BEVC63RJYJC1J4DDS13BJTTGGXK40JSX276B9MV3GPS5JJHZW92YKAZNZ1Q4DCG0K58SCD9ZD0TVZVX7100G +signature JVN1YPVA637NF6GGPCX8GXT5FXTZPA1YM68ZWQQNXYD36CX0PSDBHXQMY7PMJYMCPFYW5BR56P2GVETM8AVYSKAFSYPVM3F7KVDW020 diff --git a/spec/fixtures/normal/CHHA15QG.blb b/spec/fixtures/normal/CHHA15QG.blb new file mode 100644 index 0000000..268e046 Binary files /dev/null and b/spec/fixtures/normal/CHHA15QG.blb differ diff --git a/spec/fixtures/normal/messages.pgn b/spec/fixtures/normal/messages.pgn index 830f2b9..03b5347 100644 --- a/spec/fixtures/normal/messages.pgn +++ b/spec/fixtures/normal/messages.pgn @@ -1,29 +1,35 @@ -author USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG +author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0 depth 0 -kind unit_test1 -lipmaa NONE +kind nonsense prev NONE +example:"Just block me" + +signature 0N0B419YSCHYM82YWGBB6VF0MHHCS0ACGBKD8MYMTGS59XC1T60W2JHKHEW9ZQJW53KTJMVB3MGV3JTFKZWQH9QMAAWG3DE6AQ6SJ30 + +author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0 +depth 1 +kind unit_test1 +prev TEXT.839FP9NB9E1KFG17SZF49X57B9AYNNX1HQ8DGVE940BPWCRXS82G + foo:"bar" -signature HAM8XEPCAB81P0A5DQKZ3DQG19Q06KR1G4RZ28CX4EXYCZA1A1MPVBQG540EZQSWHS46W523GJK4K3EWM4C0NWSM7NNG99AMJ70VC1G +signature 7YC6P4AJMPV3JH57JV0AHDP0ZV59WZYKHF49DEM2CJP5ZQCVR4XN6RMS18SBE5S2YXAFG05FA8S3B2YC35CH464822ZQXTCMN2F9G3R -author USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG -depth 1 +author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0 +depth 2 kind unit_test2 -lipmaa NONE -prev TEXT.DHSWRP0B9241KZ680WJAHVCVR4C79SH5NN3JCE3HFG9DB51WXC2G +prev TEXT.XHHQMFDK1DQSVXQ0XJQDSZQWXF8BNQ1QNRZW4K9V34264MF3WSFG bar:"baz" -signature S0CSCTVWQ8R827XP4RNW7MQSQ5AT4EPG0AWF259R4ZWR3C83AZYPARXQXZ9Q32GPKEEWTC9RAKC00A0RTHZCETR712D8T7WVV9RBE18 +signature 5YBYC1RSB27WZ00H567RP1YAYBW30PAVHG3ZG55VY2R137YMPZZ0ZMD4T7MJ8RYCMTT72AN4WCN7QAS1NPAPQE134TE8CX7PH2TFM2R -author USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG -depth 2 +author USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0 +depth 3 kind unit_test3 -lipmaa NONE -prev TEXT.8DPH5WX4DWWQ7DF9DBKYMT69Y44XNHHM8W8MV5BNQ7RYRM3W4NSG +prev TEXT.DG0BZ241KY8E60C1F88MTZNEDDBQFZS4EMCNR23VD6Y6RZGNEXSG cats:"meow" -signature G9NC8H0SJGZ6KKQFM6V9VCGVK5FS0MM6B6G1RHJ09EM1ACVQSJPMHBB8YJYPZWXX2EDRD4MMKYEZ6725RAAXYY42KXZC9PPRVVGKR3G +signature QWHA8KHSVFBC0X84VH2F2BS3CSCY58ER4ETXH1WB8SEEMDBS0TBAQHA2HNK1W7VDATBVZHB7EHWNYEN86HYBKK7BBMNSSMR45CEG838 diff --git a/spec/fixtures/x/messages.pgn b/spec/fixtures/x/messages.pgn index 476c061..2929d80 100644 --- a/spec/fixtures/x/messages.pgn +++ b/spec/fixtures/x/messages.pgn @@ -1,9 +1,8 @@ -author USER.FFQE19PEB55S1JMT5CVWZXK6V9D6E54GG8SK31QRXBDGF2AGHW50 +author USER.YJTH2BBAAAXK2RYKWRXYE0E0ANME1YPZPD8TV5VCS40X3D75AJ3G depth 0 kind nonsense -lipmaa NONE prev NONE example:"Just block me" -signature ZCP05Q1N8147YT47M5TY84D3K5MW3AB428CQDA5DK57D0J8PH5V7WWZDG2YYET04YCTM9KN2V847Q5SNS6J04HPNP8RW9B9D0EVX610 +signature 3WD5EJCMZZ27JJ8EQZ3M5XNK3QZ40A5T894Q27ZVMBT4T65KVZWK5PC74F54DX5EB3D3EFYQJQ5C1D9X2J22QKAJHTSG3B7SC932W28 diff --git a/spec/pigeon/bundle_spec.rb b/spec/pigeon/bundle_spec.rb index 8c71506..c16351f 100644 --- a/spec/pigeon/bundle_spec.rb +++ b/spec/pigeon/bundle_spec.rb @@ -40,7 +40,8 @@ RSpec.describe Pigeon::Message do it "does not ingest messages from blocked peers" do db.reset_database - antagonist = "USER.FFQE19PEB55S1JMT5CVWZXK6V9D6E54GG8SK31QRXBDGF2AGHW50" + expect(db.all_messages.count).to eq(0) + antagonist = "USER.YJTH2BBAAAXK2RYKWRXYE0E0ANME1YPZPD8TV5VCS40X3D75AJ3G" db.block_peer(antagonist) db.import_bundle(BLOCKED_PEER_FIXTURE_PATH) expect(db.all_messages.count).to eq(0) diff --git a/spec/pigeon/draft_spec.rb b/spec/pigeon/draft_spec.rb index 2faa83a..79518ed 100644 --- a/spec/pigeon/draft_spec.rb +++ b/spec/pigeon/draft_spec.rb @@ -20,7 +20,6 @@ RSpec.describe Pigeon::Draft do "author DRAFT", "depth DRAFT", "kind unit_test", - "lipmaa DRAFT", "prev DRAFT", "\na:\"bar\"", "b:FILE.CHHABX8Q9D9Q0BY2BBZ6FA7SMAFNE9GGMSDTZVZZC9TK2N9F15QG", diff --git a/spec/pigeon/helpers_spec.rb b/spec/pigeon/helpers_spec.rb index d814600..7457648 100644 --- a/spec/pigeon/helpers_spec.rb +++ b/spec/pigeon/helpers_spec.rb @@ -1,22 +1,4 @@ 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 10.times do raw_bytes = SecureRandom.random_bytes(32) diff --git a/spec/pigeon/lexer_spec.rb b/spec/pigeon/lexer_spec.rb index 808dcb1..5103102 100644 --- a/spec/pigeon/lexer_spec.rb +++ b/spec/pigeon/lexer_spec.rb @@ -2,43 +2,48 @@ require "spec_helper" RSpec.describe Pigeon::Lexer do EXPECTED_TOKENS1 = [ - [:AUTHOR, "USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG", 65], + [:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 65], [:DEPTH, 0, 73], - [:KIND, "unit_test1", 89], - [:LIPMAA, "NONE", 101], - [:PREV, "NONE", 111], - [:HEADER_END, 112], - [:BODY_ENTRY, "foo", "\"bar\"", 122], + [:KIND, "nonsense", 87], + [:PREV, "NONE", 97], + [:HEADER_END, 98], + [:BODY_ENTRY, "example", "\"Just block me\"", 122], [:BODY_END, 123], - [:SIGNATURE, "HAM8XEPCAB81P0A5DQKZ3DQG19Q06KR1G4RZ28CX4EXYCZA1A1MPVBQG540EZQSWHS46W523GJK4K3EWM4C0NWSM7NNG99AMJ70VC1G", 237], + [:SIGNATURE, "0N0B419YSCHYM82YWGBB6VF0MHHCS0ACGBKD8MYMTGS59XC1T60W2JHKHEW9ZQJW53KTJMVB3MGV3JTFKZWQH9QMAAWG3DE6AQ6SJ30", 237], [:MESSAGE_DELIM, 238], - [:AUTHOR, "USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG", 303], + [:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 303], [:DEPTH, 1, 311], - [:KIND, "unit_test2", 327], - [:LIPMAA, "NONE", 339], - [:PREV, "TEXT.DHSWRP0B9241KZ680WJAHVCVR4C79SH5NN3JCE3HFG9DB51WXC2G", 402], - [:HEADER_END, 403], - [:BODY_ENTRY, "bar", "\"baz\"", 413], - [:BODY_END, 414], - [:SIGNATURE, "S0CSCTVWQ8R827XP4RNW7MQSQ5AT4EPG0AWF259R4ZWR3C83AZYPARXQXZ9Q32GPKEEWTC9RAKC00A0RTHZCETR712D8T7WVV9RBE18", 528], - [:MESSAGE_DELIM, 529], - [:AUTHOR, "USER.Q62ZN46TV1HHYBBD7EFSKWTJQ32PGMYKYXM0GVVM121F8R21RAWG", 594], - [:DEPTH, 2, 602], - [:KIND, "unit_test3", 618], - [:LIPMAA, "NONE", 630], - [:PREV, "TEXT.8DPH5WX4DWWQ7DF9DBKYMT69Y44XNHHM8W8MV5BNQ7RYRM3W4NSG", 693], - [:HEADER_END, 694], - [:BODY_ENTRY, "cats", "\"meow\"", 706], - [:BODY_END, 707], - [:SIGNATURE, "G9NC8H0SJGZ6KKQFM6V9VCGVK5FS0MM6B6G1RHJ09EM1ACVQSJPMHBB8YJYPZWXX2EDRD4MMKYEZ6725RAAXYY42KXZC9PPRVVGKR3G", 821], - [:MESSAGE_DELIM, 821], - ].freeze + [:KIND, "unit_test1", 327], + [:PREV, "TEXT.839FP9NB9E1KFG17SZF49X57B9AYNNX1HQ8DGVE940BPWCRXS82G", 390], + [:HEADER_END, 391], + [:BODY_ENTRY, "foo", "\"bar\"", 401], + [:BODY_END, 402], + [:SIGNATURE, "7YC6P4AJMPV3JH57JV0AHDP0ZV59WZYKHF49DEM2CJP5ZQCVR4XN6RMS18SBE5S2YXAFG05FA8S3B2YC35CH464822ZQXTCMN2F9G3R", 516], + [:MESSAGE_DELIM, 517], + [:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 582], + [:DEPTH, 2, 590], + [:KIND, "unit_test2", 606], + [:PREV, "TEXT.XHHQMFDK1DQSVXQ0XJQDSZQWXF8BNQ1QNRZW4K9V34264MF3WSFG", 669], + [:HEADER_END, 670], + [:BODY_ENTRY, "bar", "\"baz\"", 680], + [:BODY_END, 681], + [:SIGNATURE, "5YBYC1RSB27WZ00H567RP1YAYBW30PAVHG3ZG55VY2R137YMPZZ0ZMD4T7MJ8RYCMTT72AN4WCN7QAS1NPAPQE134TE8CX7PH2TFM2R", 795], + [:MESSAGE_DELIM, 796], + [:AUTHOR, "USER.3VX92CSQKDK854SYDMESAP6SQKKDMB5Q6XP6HVNETYS064BA0WP0", 861], + [:DEPTH, 3, 869], + [: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 = [ "author @VG44QCHKA38E7754RQ5DAFBMMD2CCZQRZ8BR2J4MRHHGVTHGW670", "depth 0", "kind unit_test", - "lipmaa NONE", "prev NONE", "", "foo:\"bar\"", diff --git a/spec/pigeon/message_spec.rb b/spec/pigeon/message_spec.rb index 055f079..8350b0b 100644 --- a/spec/pigeon/message_spec.rb +++ b/spec/pigeon/message_spec.rb @@ -48,7 +48,6 @@ RSpec.describe Pigeon::Message do "author __AUTHOR__", "depth 0", "kind unit_test", - "lipmaa NONE", "prev NONE", "", "a:\"bar\"", @@ -135,7 +134,6 @@ RSpec.describe Pigeon::Message do [:KIND, "invalid"], [:PREV, "NONE"], [:DEPTH, 10], - [:LIPMAA, "TEXT.4PE7S4XCCAYPQ42S98K730CEW6ME5HRWJKHHEGYVYPFHSJWXEY1G"], [:HEADER_END], [:BODY_ENTRY, "duplicate", "This key is a duplicate."], [:SIGNATURE, "DN7yPTE-m433ND3jBL4oM23XGxBKafjq0Dp9ArBQa_TIGU7DmCxTumieuPBN-NKxlx_0N7-c5zjLb5XXVHYPCQ=="], diff --git a/spec/pigeon/parser_spec.rb b/spec/pigeon/parser_spec.rb index 534a49d..c11403e 100644 --- a/spec/pigeon/parser_spec.rb +++ b/spec/pigeon/parser_spec.rb @@ -14,7 +14,6 @@ RSpec.describe Pigeon::Lexer do [:KIND, "invalid"], [:PREV, "NONE"], [:DEPTH, 0], - [:LIPMAA, Pigeon::Helpers.lipmaa(0)], [:HEADER_END], [:BODY_ENTRY, "duplicate", "Pigeon does not allow duplicate keys."], [:BODY_ENTRY, "duplicate", "This key is a duplicate."], @@ -24,14 +23,22 @@ RSpec.describe Pigeon::Lexer do it "parses tokens" do 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.last).to be_kind_of(Pigeon::Message) end it "ingests and reconstructs a bundle" do 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]) re_bundled = messages.map(&:render).join("\n\n") + "\n" expect(re_bundled).to eq(example_bundle) diff --git a/spec/pigeon/template_spec.rb b/spec/pigeon/template_spec.rb index bf900b5..32fd44a 100644 --- a/spec/pigeon/template_spec.rb +++ b/spec/pigeon/template_spec.rb @@ -1,13 +1,12 @@ require "spec_helper" 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) TOP_HALF = [ "author FAKE_AUTHOR", "\ndepth 23", "\nkind FAKE_KIND", - "\nlipmaa 22", "\nprev NONE", "\n\nfoo:\"bar\"\n\n", ].join("") @@ -28,7 +27,6 @@ RSpec.describe Pigeon::MessageSerializer do depth: 23, prev: nil, signature: "XYZ", - lipmaa: 22, }.values message = MessageShim.new(*params) template = Pigeon::MessageSerializer.new(message)