Module: Hashlink

Defined in:
lib/hashlink/version.rb,
lib/hashlink/hashlink.rb

Constant Summary collapse

VERSION =
'0.0.2'.freeze

Class Method Summary collapse

Class Method Details

.encode(data: '', urls: [], codecs: ['mh-sha2-256', 'mb-base58btc'], meta: {}) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/hashlink/hashlink.rb', line 8

def self.encode(
  data: '', urls: [], codecs: ['mh-sha2-256', 'mb-base58btc'], meta: {}
)
  if data.empty? && urls.empty?
    raise 'Either `data` or `urls` must be provided.'
  end
  unless urls.empty?
    urls.each do |url|
      raise "URL #{url} must be a string." unless url.is_a? String
    end
    meta['url'] = urls
  end

  result = data
  codecs_dup = codecs.dup
  until codecs_dup.empty?
    codec = codecs_dup.shift.split('-')
    codec_encoder = codec.shift
    codec = codec.join('-')

    if codec_encoder == 'mh'
      result = Multihashes.encode(
        Digest::SHA256.digest(result), codec
      ).unpack('C*')
    elsif codec_encoder == 'mb'
      result = Multibases.pack(codec, result).to_s
    end
  end

  "hl:#{result}"
end