cddl 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
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.