cddl 0.8.0 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f2111d3dcde0aece7da0e1cf03c4272247aee32
4
- data.tar.gz: b67e1acb473b033a2297c8a14fe94a3729316f06
3
+ metadata.gz: bc5efc3a37bc0a936d6e03eb4f7d689196758914
4
+ data.tar.gz: 2ec4a61c192d6ec61ce94bbbcfa805693ef127fb
5
5
  SHA512:
6
- metadata.gz: 8ee61cf0a7772ee11af3623afc996b991715f594c638b35946ffc56fef1b3e85930c8ea04b8e390e28fe611741674c9a5eeac6a9393c3a492e047428c41c20ef
7
- data.tar.gz: 1008940ffc91f0b2fec830cac7bf34aa32eb3c9fde85f9d2bc6157c3429405bd4f786d29f8793649fd89778fa1bc1f75d0e797568de8536a21346508d781d060
6
+ metadata.gz: e09a9a2e079f8eafa1c879ed3a2d5c30f5c507624dff1222f68bf54ee1e05b8d56e30060ee9e27da2124834158ec7f9d222fe61ebb92a251da1070fd0d966509
7
+ data.tar.gz: 3f045307ce12737a799c238fb3eef169c9481b405d3f009af18aa6819ba12b86317e2473272685c244c278ea48f471b93c972411da7ba7610d8be3da1b36aab3
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.8.0'
3
+ s.version = '0.8.1'
4
4
  s.summary = "CDDL generator and validator."
5
5
  s.description = %{A parser, generator, and validator for CDDL}
6
6
  s.add_dependency('cbor-diag')
@@ -53,7 +53,8 @@ uint = ["0x" / "0b"] "0"
53
53
  / ["0x" / "0b"] DIGIT1 *DIGIT
54
54
 
55
55
  value = number
56
- / string
56
+ / text
57
+ / bytes
57
58
 
58
59
  int = ["-"] uint
59
60
 
@@ -62,10 +63,15 @@ number = int ["." fraction] ["e" exponent ]
62
63
  fraction = 1*DIGIT
63
64
  exponent = int
64
65
 
65
- string = %x22 *SCHAR %x22
66
+ text = %x22 *SCHAR %x22
66
67
  SCHAR = %x20-21 / %x23-7E / SESC
67
68
  SESC = "\" %x20-7E
68
69
 
70
+ bytes = [bsqual] %x27 *BCHAR %x27
71
+ BCHAR = %x20-26 / %x28-7E / SESC / CRLF
72
+ bsqual = %x68 ; "h"
73
+ / %x62.36.34 ; "b64"
74
+
69
75
  id = EALPHA *(*("-" / ".") (EALPHA / DIGIT))
70
76
  ALPHA = %x41-5A / %x61-7A
71
77
  EALPHA = %x41-5A / %x61-7A / "@" / "_" / "$"
@@ -78,3 +84,4 @@ NL = COMMENT / CRLF
78
84
  COMMENT = ";" *(SP / VCHAR) CRLF
79
85
  VCHAR = %x21-7E
80
86
  CRLF = %x0A / %x0D.0A
87
+
@@ -22,8 +22,8 @@ unsigned = uint / biguint
22
22
  decfrac = #6.4([e10: int, m: integer])
23
23
  bigfloat = #6.5([e2: int, m: integer])
24
24
  eb64url = #6.21(any)
25
- eb64legacy = #6.21(any)
26
- eb16 = #6.21(any)
25
+ eb64legacy = #6.22(any)
26
+ eb16 = #6.23(any)
27
27
  encoded-cbor = #6.24(bstr)
28
28
  uri = #6.32(tstr)
29
29
  b64url = #6.33(tstr)
@@ -139,7 +139,7 @@ module CDDL
139
139
  arrayname = cname(arrayname ? arrayname.first : anno)
140
140
  subtree[1..-1].each_with_index do |x, i|
141
141
  if x[0] == :member
142
- if Array === x[3] && x[3][0] == :string
142
+ if Array === x[3] && x[3][0] == :text
143
143
  memname = x[3][1] # preferably use key string
144
144
  elsif memname = x[4].cbor_annotations
145
145
  memname = memname.first # use value annotation otherwise
@@ -348,7 +348,7 @@ module CDDL
348
348
  fail BackTrack.new("Need #{where[1]}..#{where[2]} of these: #{[kr, vr].inspect}") unless where[1] == 0
349
349
  []
350
350
  end
351
- when :string, :int, :float
351
+ when :text, :int, :float
352
352
  where[1]
353
353
  when :range
354
354
  rand(where[1])
@@ -517,7 +517,7 @@ module CDDL
517
517
  end
518
518
  end
519
519
 
520
- VALUE_TYPE = {string: String, int: Integer, float: Float}
520
+ VALUE_TYPE = {text: String, int: Integer, float: Float}
521
521
  SIMPLE_VALUE = {
522
522
  [:prim, 7, 20] => [true, false, :bool],
523
523
  [:prim, 7, 21] => [true, true, :bool],
@@ -642,7 +642,7 @@ module CDDL
642
642
  d_check1 = d_check.dup
643
643
  occ = 0
644
644
  ann2 = []
645
- while occ < e && (ann3 = map_check(d, d_check1, entries))
645
+ while occ < e && (ann3 = map_check(d, d_check1, entries)) && ann3 != []
646
646
  occ += 1
647
647
  ann2.concat(ann3)
648
648
  end
@@ -724,7 +724,7 @@ module CDDL
724
724
  ann
725
725
  else
726
726
  if ENV["CDDL_TRACE"]
727
- puts "MAP RESIDUAL: #{d_check.inspect}"
727
+ puts "MAP RESIDUAL: #{d_check.inspect} for #{where[1..-1]} and #{d.inspect}"
728
728
  end
729
729
  end
730
730
  end
@@ -735,7 +735,7 @@ module CDDL
735
735
  idx, ann = validate_forward(d, 0, where)
736
736
  ann if validate_result(idx == d.size) { "#{validate_diag.inspect} -- cannot complete (#{idx}, #{d.size}) array #{d} for #{where}" }
737
737
  end
738
- when :string, :int, :float
738
+ when :text, :int, :float
739
739
  _, v = extract_value(where)
740
740
  [] if d == v
741
741
  when :range
@@ -947,7 +947,7 @@ module CDDL
947
947
  [case val
948
948
  when Integer; :int
949
949
  when Numeric; :float
950
- when String; :string
950
+ when String; :text
951
951
  else fail "huh? value #{val.inspect}"
952
952
  end, val]
953
953
  end
@@ -988,7 +988,7 @@ module CDDL
988
988
  fail [n, n.children, mk, mk.children].inspect
989
989
  end
990
990
  name = bw.to_s
991
- [[:member, *occ, [:string, name], type(nt)]]
991
+ [[:member, *occ, [:text, name], type(nt)]]
992
992
  end
993
993
  else
994
994
  t = if nbw = nt.bareword
@@ -0,0 +1,48 @@
1
+ reputation-object = {
2
+ application: tstr
3
+ reputons: [* reputon]
4
+ }
5
+
6
+ reputon = {
7
+ rater: tstr
8
+ assertion: tstr
9
+ rated: tstr
10
+ rating: float16
11
+ ? confidence: float16
12
+ ? normal-rating: float16
13
+ ? sample-size: uint
14
+ ? generated: uint
15
+ ? expires: uint
16
+ * tstr => any
17
+ }
18
+
19
+ #
20
+ # a = b / c / d
21
+ # a = b / (c / d)
22
+ # b = "foo" ^ bar
23
+ # c = "bar" ^ baz
24
+
25
+ # foo: bar
26
+ # "foo" ^ => bar
27
+
28
+
29
+ # (rater: tstr // rater: uint)
30
+ # (rater: tstr / uint)
31
+
32
+ # (
33
+ # * tstr => uint
34
+ # rater: float16
35
+ # )
36
+
37
+ # a = b / c
38
+ # c = e / f
39
+ # a = b / (e / f)
40
+
41
+ # a = ( a // b )
42
+ # a = ( b // a )
43
+
44
+ # a = (uint .size 3) .le 100000
45
+
46
+ # name = uint .size 3
47
+ # reserved_name = name .le 100000
48
+
@@ -21,26 +21,26 @@ class TestABNF < Test::Unit::TestCase
21
21
 
22
22
  EXPECTED_RULES = [:type1,
23
23
  [:map,
24
- [:member, 1, 1, [:string, "application"], [:prim, 3]],
24
+ [:member, 1, 1, [:text, "application"], [:prim, 3]],
25
25
  [:member,
26
26
  1,
27
27
  1,
28
- [:string, "reputons"],
28
+ [:text, "reputons"],
29
29
  [:array,
30
30
  [:member,
31
31
  0,
32
32
  CDDL::MANY,
33
33
  nil,
34
34
  [:map,
35
- [:member, 1, 1, [:string, "rater"], [:prim, 3]],
36
- [:member, 1, 1, [:string, "assertion"], [:prim, 3]],
37
- [:member, 1, 1, [:string, "rated"], [:prim, 3]],
38
- [:member, 1, 1, [:string, "rating"], [:prim, 7, 25]],
39
- [:member, 0, 1, [:string, "confidence"], [:prim, 7, 25]],
40
- [:member, 0, 1, [:string, "normal-rating"], [:prim, 7, 25]],
41
- [:member, 0, 1, [:string, "sample-size"], [:prim, 0]],
42
- [:member, 0, 1, [:string, "generated"], [:prim, 0]],
43
- [:member, 0, 1, [:string, "expires"], [:prim, 0]],
35
+ [:member, 1, 1, [:text, "rater"], [:prim, 3]],
36
+ [:member, 1, 1, [:text, "assertion"], [:prim, 3]],
37
+ [:member, 1, 1, [:text, "rated"], [:prim, 3]],
38
+ [:member, 1, 1, [:text, "rating"], [:prim, 7, 25]],
39
+ [:member, 0, 1, [:text, "confidence"], [:prim, 7, 25]],
40
+ [:member, 0, 1, [:text, "normal-rating"], [:prim, 7, 25]],
41
+ [:member, 0, 1, [:text, "sample-size"], [:prim, 0]],
42
+ [:member, 0, 1, [:text, "generated"], [:prim, 0]],
43
+ [:member, 0, 1, [:text, "expires"], [:prim, 0]],
44
44
  [:member, 0, CDDL::MANY, [:prim, 3], [:prim]]]]]]]]
45
45
 
46
46
  def test_aa_rfc7071_concise
@@ -182,6 +182,26 @@ HERE
182
182
  refute parser.validate_for_test([2, 1], false)
183
183
  end
184
184
 
185
+ def test_validate_a_map
186
+ parser = CDDL::Parser.new <<HERE
187
+ test = {* one: 1}
188
+ HERE
189
+ assert parser.validate_for_test({})
190
+ assert parser.validate_for_test({"one" => 1})
191
+ refute parser.validate_for_test({"one" => 2}, false)
192
+ refute parser.validate_for_test({"two" => 1}, false)
193
+ end
194
+
195
+ def test_validate_a_group_map
196
+ parser = CDDL::Parser.new <<HERE
197
+ test = {* (text => 1)}
198
+ HERE
199
+ assert parser.validate_for_test({})
200
+ assert parser.validate_for_test({"one" => 1})
201
+ refute parser.validate_for_test({"one" => 2}, false)
202
+ assert parser.validate_for_test({"one" => 1, "two" => 1}, false)
203
+ end
204
+
185
205
  def test_validate_a_string
186
206
  parser = CDDL::Parser.new <<HERE
187
207
  test = [* one: "one"]
@@ -739,7 +759,7 @@ HERE
739
759
  foo = {* bar}
740
760
  bar = (* b: 1)
741
761
  HERE
742
- assert_equal [:type1, [:map, [:member, 0, CDDL::MANY, [:string, "b"], [:int, 1]]]], parser.rules
762
+ assert_equal [:type1, [:map, [:member, 0, CDDL::MANY, [:text, "b"], [:int, 1]]]], parser.rules
743
763
  end
744
764
 
745
765
  def test_nested_group_many2
@@ -747,7 +767,7 @@ HERE
747
767
  foo = {* bar}
748
768
  bar = (b: 1)
749
769
  HERE
750
- assert_equal [:type1, [:map, [:member, 0, CDDL::MANY, [:string, "b"], [:int, 1]]]], parser.rules
770
+ assert_equal [:type1, [:map, [:member, 0, CDDL::MANY, [:text, "b"], [:int, 1]]]], parser.rules
751
771
  end
752
772
 
753
773
  def test_nested_group_many3
@@ -755,7 +775,7 @@ HERE
755
775
  foo = {* bar}
756
776
  bar = (4*6 b: 1)
757
777
  HERE
758
- assert_equal [:type1, [:map, [:member, 0, CDDL::MANY, [:string, "b"], [:int, 1]]]], parser.rules
778
+ assert_equal [:type1, [:map, [:member, 0, CDDL::MANY, [:text, "b"], [:int, 1]]]], parser.rules
759
779
  end
760
780
 
761
781
  def test_range_integer
@@ -1595,9 +1615,9 @@ identifier //= ( "ifmap" // "ifmap")
1595
1615
  ;identifier = ( "ifmap" // "ifmap" )
1596
1616
  HERE
1597
1617
  p parser.rules
1598
- # - [:type1, [:array, [:member, 2, 2, nil, [:grpchoice, [[:member, 1, 1, nil, [:string, "ifmap"]]]]]]]
1599
- # - [:type1, [:array, [:member, 2, 2, nil, [:grpchoice, [[:grpchoice, [[:member, 1, 1, nil, [:string, "ifmap"]]], [[:member, 1, 1, nil, [:string, "ifmap"]]]]]]]]]
1600
- # + [:type1, [:array, [:member, 2, 2, nil, [:grpent, [:grpchoice, [[:member, 1, 1, nil, [:string, "ifmap"]]], [[:member, 1, 1, nil, [:string, "ifmap"]]]]]]]]
1618
+ # - [:type1, [:array, [:member, 2, 2, nil, [:grpchoice, [[:member, 1, 1, nil, [:text, "ifmap"]]]]]]]
1619
+ # - [:type1, [:array, [:member, 2, 2, nil, [:grpchoice, [[:grpchoice, [[:member, 1, 1, nil, [:text, "ifmap"]]], [[:member, 1, 1, nil, [:text, "ifmap"]]]]]]]]]
1620
+ # + [:type1, [:array, [:member, 2, 2, nil, [:grpent, [:grpchoice, [[:member, 1, 1, nil, [:text, "ifmap"]]], [[:member, 1, 1, nil, [:text, "ifmap"]]]]]]]]
1601
1621
  g = parser.generate
1602
1622
  assert_equal g, ["ifmap", "ifmap"]
1603
1623
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cddl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.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: 2016-07-17 00:00:00.000000000 Z
11
+ date: 2016-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor-diag
@@ -94,6 +94,7 @@ files:
94
94
  - lib/cbor-pp-play.rb
95
95
  - lib/cbor-pp.rb
96
96
  - lib/cddl.rb
97
+ - test-data/7071-concise-cut.cddl
97
98
  - test-data/7071-concise.cddl
98
99
  - test-data/7071-verbose.cddl
99
100
  - test-data/a.cddl
@@ -145,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
146
  version: '0'
146
147
  requirements: []
147
148
  rubyforge_project:
148
- rubygems_version: 2.5.1
149
+ rubygems_version: 2.6.7
149
150
  signing_key:
150
151
  specification_version: 4
151
152
  summary: CDDL generator and validator.