M dhall.gemspec => dhall.gemspec +1 -0
@@ 25,6 25,7 @@ Gem::Specification.new do |spec|
spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
spec.require_paths = ["lib"]
+ spec.add_dependency "base32", "~> 0.3.2"
spec.add_dependency "cbor", "~> 0.5.9.3"
spec.add_dependency "citrus", "~> 3.0"
spec.add_dependency "lazy_object", "~> 0.0.3"
M lib/dhall/ast.rb => lib/dhall/ast.rb +5 -0
@@ 1,5 1,6 @@
# frozen_string_literal: true
+require "base32"
require "lazy_object"
require "multihashes"
require "uri"
@@ 1290,6 1291,10 @@ module Dhall
digest.unpack("H*").first.encode(Encoding::UTF_8)
end
+ def ipfs
+ "/ipfs/b#{Base32.encode("\x01\x55" + as_json).downcase.sub(/=*$/, "")}"
+ end
+
def check(expr)
expr = expr.normalize
return expr if expr.cache_key == to_s
M test/test_resolve.rb => test/test_resolve.rb +11 -0
@@ 254,6 254,17 @@ class TestResolve < Minitest::Test
assert_equal Dhall::Variable["_"], subject(expr)
end
+ def test_integrity_check_ipfs
+ check = Dhall::Import::IntegrityCheck.new(
+ code: 0x12,
+ digest: Dhall::Variable["_"].digest.digest
+ )
+ assert_equal(
+ "/ipfs/bafkreidogqfzz75tpkmjzjke425xqcrmpcib2p5tg44hnbirumdbpl5adu",
+ check.ipfs
+ )
+ end
+
def test_cache
req = stub_request(:get, "http://example.com/thing.dhall")
.to_return(status: 200, body: "\x00".b)