cbor-dcbor 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d2359721ed54d5f9a6c9b53d8680cf34c219c824d255673cca80c7b61b5b98d0
4
+ data.tar.gz: 601670e9fafd93107819446a0802e5ba38eba633f8a0fe8cdbd0e04cabddf9ef
5
+ SHA512:
6
+ metadata.gz: d0c1cb8472c3bea21dd32f036f4155e85793b09c1d775601db22b3d17b8b5739e0d33d85052908f149cd955684629b8011713671aeded763df1c791c66852108
7
+ data.tar.gz: cb4e704864c513c790eabb92acfe0f30fe7b749d1dc0347d4f9d382bf48cd4abb500f806df45b63b3a4452b4d7dfbaeb1bcd931f1556b641516b5d487f1c3d7c
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "cbor-dcbor"
3
+ s.version = "0.0.1"
4
+ s.summary = "CBOR (Concise Binary Object Representation) \"dCBOR\" encoding"
5
+ s.description = %q{cbor-dcbor implements "dCBOR" encoding for CBOR, RFC 8949}
6
+ s.author = "Carsten Bormann"
7
+ s.email = "cabo@tzi.org"
8
+ s.license = "Apache-2.0"
9
+ s.homepage = "http://cbor.io/"
10
+ s.test_files = Dir['test/**/*.rb']
11
+ s.files = Dir['lib/**/*.rb'] + %w(cbor-dcbor.gemspec) + Dir['bin/**/*.rb']
12
+ s.executables = Dir['bin/**/*.rb'].map {|x| File.basename(x)}
13
+ s.required_ruby_version = '>= 1.9.2'
14
+
15
+ s.require_paths = ["lib"]
16
+ end
data/lib/cbor-dcbor.rb ADDED
@@ -0,0 +1,73 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "cbor" unless defined? CBOR
4
+
5
+ module CBOR
6
+ module Dcbor
7
+
8
+ module Object_Dcbor_CBOR
9
+ def cbor_prepare_dcbor
10
+ self
11
+ end
12
+ def to_dcbor
13
+ cbor_prepare_dcbor.to_cbor
14
+ end
15
+ end
16
+ Object.send(:include, Object_Dcbor_CBOR)
17
+
18
+ module Integer_Dcbor_CBOR
19
+ def cbor_prepare_dcbor
20
+ zigzag, tagnum = if self < 0
21
+ [-1-self, 3]
22
+ else
23
+ [self, 2]
24
+ end
25
+ bytes = zigzag.digits(256)
26
+ if bytes.size + 2 < self.to_cbor.size
27
+ CBOR::Tagged.new(tagnum, bytes.pack("C*").reverse!)
28
+ else
29
+ self
30
+ end
31
+ end
32
+ end
33
+ Integer.send(:include, Integer_Dcbor_CBOR)
34
+
35
+ module Float_Dcbor_CBOR
36
+ def cbor_prepare_dcbor
37
+ int = self.to_i
38
+ if int == self && int.to_cbor.size < self.to_cbor.size
39
+ int
40
+ else
41
+ self
42
+ end
43
+ end
44
+ end
45
+ Float.send(:include, Float_Dcbor_CBOR)
46
+
47
+ module Array_Dcbor_CBOR
48
+ def cbor_prepare_dcbor
49
+ map(&:cbor_prepare_dcbor)
50
+ end
51
+ end
52
+ Array.send(:include, Array_Dcbor_CBOR)
53
+
54
+ module Hash_Dcbor_CBOR
55
+ def cbor_prepare_dcbor
56
+ Hash[map {|k, v|
57
+ k = k.cbor_prepare_dcbor
58
+ v = v.cbor_prepare_dcbor
59
+ cc = k.to_cbor # already prepared
60
+ [cc, k, v]}.
61
+ sort.map{|cc, k, v| [k, v]}]
62
+ end
63
+ end
64
+ Hash.send(:include, Hash_Dcbor_CBOR)
65
+
66
+ module Tagged_Dcbor_CBOR
67
+ def cbor_prepare_dcbor
68
+ CBOR::Tagged.new(tag, value.cbor_prepare_dcbor)
69
+ end
70
+ end
71
+ CBOR::Tagged.send(:include, Tagged_Dcbor_CBOR)
72
+ end
73
+ end
@@ -0,0 +1,22 @@
1
+ require 'cbor-dcbor'
2
+
3
+ [[1], [false], [10.3], [10.5], [Float::NAN],
4
+ [{a: 1, b: [1, 2]}],
5
+ [{[] => 1, bb: 2}, {bb: 2, [] => 1}],
6
+ [{b: {mm: 2, m: 3}, "b".b => 1}, {"b".b => 1, b: {m: 3, mm: 2}}],
7
+ [CBOR::Tagged.new(4711, {aa: 1, b: 2}),
8
+ CBOR::Tagged.new(4711, {b: 2, aa: 1})],
9
+ ].each do |ex1, ex2, ex3|
10
+ c1 = ex1.to_cbor
11
+ cc1 = ex1.to_dcbor
12
+ # p cc1
13
+ if ex2.nil?
14
+ raise [:eq1, c1, cc1].inspect unless c1 == cc1
15
+ else
16
+ raise [:ne1, c1, cc1].inspect if c1 == cc1
17
+ c2 = ex2.to_cbor
18
+ raise [:eq2, cc1, c2].inspect unless cc1 == c2
19
+ cc2 = ex2.to_dcbor
20
+ raise [:eq3, cc1, cc2].inspect unless cc1 == cc2
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cbor-dcbor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Carsten Bormann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-05-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: cbor-dcbor implements "dCBOR" encoding for CBOR, RFC 8949
14
+ email: cabo@tzi.org
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - cbor-dcbor.gemspec
20
+ - lib/cbor-dcbor.rb
21
+ - test/test-dcbor.rb
22
+ homepage: http://cbor.io/
23
+ licenses:
24
+ - Apache-2.0
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 1.9.2
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.4.10
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: CBOR (Concise Binary Object Representation) "dCBOR" encoding
45
+ test_files:
46
+ - test/test-dcbor.rb