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
|