cbor-diag 0.5.20 → 0.6.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 +4 -4
 - data/bin/cbor2json.rb +5 -1
 - data/bin/json2cbor.rb +5 -1
 - data/cbor-diag.gemspec +1 -1
 - data/lib/cbor-transform-j.rb +68 -0
 - data/lib/cbor-transform.rb +72 -0
 - metadata +5 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9df17c4bf389a5b7b62a40e0dbe1fb86f8c10df05d0110cf0c6af8ddf83350ce
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8f853c4e98726ef055378775e21ae90f7192cc9568f77ec782f8d9744324169c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: bbec8c671dc5c080c7abe04f7f2ccd41a611d22f806190a7b41486906bcbe27bcb034fe92271533f4d17ca66732977c8a39ad7f7d5261139bb11f88a577b8d0f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 83229ae2d83a31294d5ec93fd760e1d8d6056ad1226e5febb1090eab6a7afc16d6bd9511b04943c3ea776640dcdd61a27b86e6682970ba3182af66fb3a4387ee
         
     | 
    
        data/bin/cbor2json.rb
    CHANGED
    
    | 
         @@ -6,7 +6,7 @@ require 'cbor-deterministic' 
     | 
|
| 
       6 
6 
     | 
    
         
             
            require 'cbor-canonical'
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            options = ''
         
     | 
| 
       9 
     | 
    
         
            -
            while /\A-([ 
     | 
| 
      
 9 
     | 
    
         
            +
            while /\A-([cdpqj]+)\z/ === ARGV[0]
         
     | 
| 
       10 
10 
     | 
    
         
             
              options << $1
         
     | 
| 
       11 
11 
     | 
    
         
             
              ARGV.shift
         
     | 
| 
       12 
12 
     | 
    
         
             
            end
         
     | 
| 
         @@ -18,4 +18,8 @@ o = o.to_packed_cbor if /p/ === options 
     | 
|
| 
       18 
18 
     | 
    
         
             
            o = o.to_unpacked_cbor if /q/ === options
         
     | 
| 
       19 
19 
     | 
    
         
             
            o = o.cbor_pre_canonicalize if /c/ === options
         
     | 
| 
       20 
20 
     | 
    
         
             
            o = o.cbor_prepare_deterministic if /d/ === options
         
     | 
| 
      
 21 
     | 
    
         
            +
            if /j/ === options
         
     | 
| 
      
 22 
     | 
    
         
            +
              require 'cbor-transform-j'
         
     | 
| 
      
 23 
     | 
    
         
            +
              o = CBOR::Transform_j.new.transform(o)
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
       21 
25 
     | 
    
         
             
            puts JSON.pretty_generate(o)
         
     | 
    
        data/bin/json2cbor.rb
    CHANGED
    
    | 
         @@ -6,7 +6,7 @@ require 'cbor-deterministic' 
     | 
|
| 
       6 
6 
     | 
    
         
             
            require 'cbor-canonical'
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            options = ''
         
     | 
| 
       9 
     | 
    
         
            -
            while /\A-([ 
     | 
| 
      
 9 
     | 
    
         
            +
            while /\A-([cdpqvj]+)\z/ === ARGV[0]
         
     | 
| 
       10 
10 
     | 
    
         
             
              options << $1
         
     | 
| 
       11 
11 
     | 
    
         
             
              ARGV.shift
         
     | 
| 
       12 
12 
     | 
    
         
             
            end
         
     | 
| 
         @@ -14,6 +14,10 @@ end 
     | 
|
| 
       14 
14 
     | 
    
         
             
            $stdout.binmode
         
     | 
| 
       15 
15 
     | 
    
         
             
            i = ARGF.read
         
     | 
| 
       16 
16 
     | 
    
         
             
            o = JSON.load(i)
         
     | 
| 
      
 17 
     | 
    
         
            +
            if /j/ === options
         
     | 
| 
      
 18 
     | 
    
         
            +
              require 'cbor-transform-j'
         
     | 
| 
      
 19 
     | 
    
         
            +
              o = CBOR::Transform_jr.new.transform(o)
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
       17 
21 
     | 
    
         
             
            o = o.to_packed_cbor if /p/ === options
         
     | 
| 
       18 
22 
     | 
    
         
             
            o = o.to_unpacked_cbor if /q/ === options
         
     | 
| 
       19 
23 
     | 
    
         
             
            o = o.cbor_pre_canonicalize if /c/ === options
         
     | 
    
        data/cbor-diag.gemspec
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       2 
2 
     | 
    
         
             
              s.name = "cbor-diag"
         
     | 
| 
       3 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
      
 3 
     | 
    
         
            +
              s.version = "0.6.1"
         
     | 
| 
       4 
4 
     | 
    
         
             
              s.summary = "CBOR (Concise Binary Object Representation) diagnostic notation"
         
     | 
| 
       5 
5 
     | 
    
         
             
              s.description = %q{cbor-diag implements diagnostic notation for CBOR, RFC 8949 and RFC 8742}
         
     | 
| 
       6 
6 
     | 
    
         
             
              s.author = "Carsten Bormann"
         
     | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'cbor-transform'
         
     | 
| 
      
 2 
     | 
    
         
            +
            unless defined?(JSON)
         
     | 
| 
      
 3 
     | 
    
         
            +
              require 'json'
         
     | 
| 
      
 4 
     | 
    
         
            +
            end
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'base64'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            class CBOR::Transform_j < CBOR::Transform
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              # CBOR::Transform_j.new(1).transform [1, "a", "b".b, CBOR::Simple.new(2), CBOR::Tagged.new(1, 2), {"a"=> 1, 2=> 3}]
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def transform_simple(obj)
         
     | 
| 
      
 12 
     | 
    
         
            +
                {'@@!s': obj.value}
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def transform_bytes(obj)
         
     | 
| 
      
 16 
     | 
    
         
            +
                {'@@!b': ::Base64.urlsafe_encode64(obj, padding: false)}
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def transform_hash(obj)
         
     | 
| 
      
 20 
     | 
    
         
            +
                Hash[obj.map {|k, v| [ (
         
     | 
| 
      
 21 
     | 
    
         
            +
                                         kt = transform(k)
         
     | 
| 
      
 22 
     | 
    
         
            +
                                         if (String === kt && kt.encoding != Encoding::BINARY)
         
     | 
| 
      
 23 
     | 
    
         
            +
                                           kt
         
     | 
| 
      
 24 
     | 
    
         
            +
                                         else
         
     | 
| 
      
 25 
     | 
    
         
            +
                                           '@@!:' << JSON.generate(kt)
         
     | 
| 
      
 26 
     | 
    
         
            +
                                         end
         
     | 
| 
      
 27 
     | 
    
         
            +
                                       ),
         
     | 
| 
      
 28 
     | 
    
         
            +
                                       transform(v)]}]
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              def transform_tag(obj)
         
     | 
| 
      
 32 
     | 
    
         
            +
                {"@@!t#{obj.tag}": transform(obj.value)}
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            class CBOR::Transform_jr < CBOR::Transform
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              # >> CBOR::Transform_jr.new(1).transform(JSON.parse(JSON.generate(a = CBOR::Transform_j.new(1).transform([1, "a", "b".b, CBOR::Simple.new(2), CBOR::Tagged.new(1, 2), {"a"=> 1, 2=> 3, {3=>4}=>5}]))))
         
     | 
| 
      
 40 
     | 
    
         
            +
              # => [1, "a", "b", #<struct CBOR::Simple value=2>, #<struct CBOR::Tagged tag=1, value=2>, {"a"=>1, 2=>3, {3=>4}=>5}]
         
     | 
| 
      
 41 
     | 
    
         
            +
              # >> a
         
     | 
| 
      
 42 
     | 
    
         
            +
              # => [1, "a", {:"@@!b"=>"Yg"}, {:"@@!s"=>2}, {:"@@!t1"=>2}, {"a"=>1, "@@!:2"=>3, "@@!:{\"@@!:3\":4}"=>5}]
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              def transform_hash(obj)
         
     | 
| 
      
 45 
     | 
    
         
            +
                if obj.size == 1 && obj.keys.first =~ /\A@@!([a-z].*)/
         
     | 
| 
      
 46 
     | 
    
         
            +
                  cookie = $1
         
     | 
| 
      
 47 
     | 
    
         
            +
                  value = obj.values.first
         
     | 
| 
      
 48 
     | 
    
         
            +
                  case cookie
         
     | 
| 
      
 49 
     | 
    
         
            +
                  when "s"
         
     | 
| 
      
 50 
     | 
    
         
            +
                    CBOR::Simple.new(value)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  when "b"
         
     | 
| 
      
 52 
     | 
    
         
            +
                    ::Base64.urlsafe_decode64(value)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  when /\At(\d+)\z/
         
     | 
| 
      
 54 
     | 
    
         
            +
                    CBOR::Tagged.new($1.to_i, value)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  else
         
     | 
| 
      
 56 
     | 
    
         
            +
                    fail ArgumentError.new("Unknown CBOR-JSON encoding @@!#{cookie}")
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                else
         
     | 
| 
      
 59 
     | 
    
         
            +
                  Hash[obj.map {|k, v| [ transform(
         
     | 
| 
      
 60 
     | 
    
         
            +
                                           if k =~ /\A@@!:(.*)\z/
         
     | 
| 
      
 61 
     | 
    
         
            +
                                             JSON.parse($1)
         
     | 
| 
      
 62 
     | 
    
         
            +
                                           else
         
     | 
| 
      
 63 
     | 
    
         
            +
                                             k
         
     | 
| 
      
 64 
     | 
    
         
            +
                                           end), transform(v)]}]
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,72 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CBOR::Transform
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              def transform(obj)
         
     | 
| 
      
 4 
     | 
    
         
            +
                case obj
         
     | 
| 
      
 5 
     | 
    
         
            +
                when NilClass
         
     | 
| 
      
 6 
     | 
    
         
            +
                  transform_nil(obj)
         
     | 
| 
      
 7 
     | 
    
         
            +
                when FalseClass, TrueClass
         
     | 
| 
      
 8 
     | 
    
         
            +
                  transform_bool(obj)
         
     | 
| 
      
 9 
     | 
    
         
            +
                when CBOR::Simple
         
     | 
| 
      
 10 
     | 
    
         
            +
                  transform_simple(obj)
         
     | 
| 
      
 11 
     | 
    
         
            +
                when Float
         
     | 
| 
      
 12 
     | 
    
         
            +
                  transform_float(obj)
         
     | 
| 
      
 13 
     | 
    
         
            +
                when Integer
         
     | 
| 
      
 14 
     | 
    
         
            +
                  transform_integer(obj)
         
     | 
| 
      
 15 
     | 
    
         
            +
                # XXX should probably handle Symbol
         
     | 
| 
      
 16 
     | 
    
         
            +
                when String
         
     | 
| 
      
 17 
     | 
    
         
            +
                  case obj.encoding
         
     | 
| 
      
 18 
     | 
    
         
            +
                  when Encoding::BINARY
         
     | 
| 
      
 19 
     | 
    
         
            +
                    transform_bytes(obj)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  else
         
     | 
| 
      
 21 
     | 
    
         
            +
                    transform_text(obj)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                when Array
         
     | 
| 
      
 24 
     | 
    
         
            +
                  transform_array(obj)
         
     | 
| 
      
 25 
     | 
    
         
            +
                when Hash
         
     | 
| 
      
 26 
     | 
    
         
            +
                  transform_hash(obj)
         
     | 
| 
      
 27 
     | 
    
         
            +
                when CBOR::Tagged
         
     | 
| 
      
 28 
     | 
    
         
            +
                  transform_tag(obj)
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def transform_nil(obj)
         
     | 
| 
      
 33 
     | 
    
         
            +
                obj
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def transform_bool(obj)
         
     | 
| 
      
 37 
     | 
    
         
            +
                obj
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def transform_simple(obj)
         
     | 
| 
      
 41 
     | 
    
         
            +
                obj
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              def transform_float(obj)
         
     | 
| 
      
 45 
     | 
    
         
            +
                obj
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              def transform_integer(obj)
         
     | 
| 
      
 49 
     | 
    
         
            +
                obj
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              def transform_bytes(obj)
         
     | 
| 
      
 53 
     | 
    
         
            +
                obj
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              def transform_text(obj)
         
     | 
| 
      
 57 
     | 
    
         
            +
                obj
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              def transform_array(obj)
         
     | 
| 
      
 61 
     | 
    
         
            +
                obj.map {|x| transform(x)}
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              def transform_hash(obj)
         
     | 
| 
      
 65 
     | 
    
         
            +
                Hash[obj.map {|k, v| [transform(k), transform(v)]}]
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              def transform_tag(obj)
         
     | 
| 
      
 69 
     | 
    
         
            +
                CBOR::Tagged.new(transform(obj.tag), transform(obj.value))
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: cbor-diag
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Carsten Bormann
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-10-08 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -165,6 +165,8 @@ files: 
     | 
|
| 
       165 
165 
     | 
    
         
             
            - lib/cbor-diagnostic.rb
         
     | 
| 
       166 
166 
     | 
    
         
             
            - lib/cbor-pretty.rb
         
     | 
| 
       167 
167 
     | 
    
         
             
            - lib/cbor-pure.rb
         
     | 
| 
      
 168 
     | 
    
         
            +
            - lib/cbor-transform-j.rb
         
     | 
| 
      
 169 
     | 
    
         
            +
            - lib/cbor-transform.rb
         
     | 
| 
       168 
170 
     | 
    
         
             
            - lib/half.rb
         
     | 
| 
       169 
171 
     | 
    
         
             
            homepage: http://cbor.io/
         
     | 
| 
       170 
172 
     | 
    
         
             
            licenses:
         
     | 
| 
         @@ -185,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       185 
187 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       186 
188 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       187 
189 
     | 
    
         
             
            requirements: []
         
     | 
| 
       188 
     | 
    
         
            -
            rubygems_version: 3.2. 
     | 
| 
      
 190 
     | 
    
         
            +
            rubygems_version: 3.2.22
         
     | 
| 
       189 
191 
     | 
    
         
             
            signing_key:
         
     | 
| 
       190 
192 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       191 
193 
     | 
    
         
             
            summary: CBOR (Concise Binary Object Representation) diagnostic notation
         
     |