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 +4 -4
- data/cddl.gemspec +1 -1
- data/data/cddl.abnf +9 -2
- data/data/prelude.cddl +2 -2
- data/lib/cddl.rb +8 -8
- data/test-data/7071-concise-cut.cddl +48 -0
- data/test/test-cddl.rb +37 -17
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc5efc3a37bc0a936d6e03eb4f7d689196758914
|
4
|
+
data.tar.gz: 2ec4a61c192d6ec61ce94bbbcfa805693ef127fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e09a9a2e079f8eafa1c879ed3a2d5c30f5c507624dff1222f68bf54ee1e05b8d56e30060ee9e27da2124834158ec7f9d222fe61ebb92a251da1070fd0d966509
|
7
|
+
data.tar.gz: 3f045307ce12737a799c238fb3eef169c9481b405d3f009af18aa6819ba12b86317e2473272685c244c278ea48f471b93c972411da7ba7610d8be3da1b36aab3
|
data/cddl.gemspec
CHANGED
data/data/cddl.abnf
CHANGED
@@ -53,7 +53,8 @@ uint = ["0x" / "0b"] "0"
|
|
53
53
|
/ ["0x" / "0b"] DIGIT1 *DIGIT
|
54
54
|
|
55
55
|
value = number
|
56
|
-
/
|
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
|
-
|
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
|
+
|
data/data/prelude.cddl
CHANGED
@@ -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.
|
26
|
-
eb16 = #6.
|
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)
|
data/lib/cddl.rb
CHANGED
@@ -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] == :
|
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 :
|
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 = {
|
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 :
|
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; :
|
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, [:
|
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
|
+
|
data/test/test-cddl.rb
CHANGED
@@ -21,26 +21,26 @@ class TestABNF < Test::Unit::TestCase
|
|
21
21
|
|
22
22
|
EXPECTED_RULES = [:type1,
|
23
23
|
[:map,
|
24
|
-
[:member, 1, 1, [:
|
24
|
+
[:member, 1, 1, [:text, "application"], [:prim, 3]],
|
25
25
|
[:member,
|
26
26
|
1,
|
27
27
|
1,
|
28
|
-
[:
|
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, [:
|
36
|
-
[:member, 1, 1, [:
|
37
|
-
[:member, 1, 1, [:
|
38
|
-
[:member, 1, 1, [:
|
39
|
-
[:member, 0, 1, [:
|
40
|
-
[:member, 0, 1, [:
|
41
|
-
[:member, 0, 1, [:
|
42
|
-
[:member, 0, 1, [:
|
43
|
-
[:member, 0, 1, [:
|
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, [:
|
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, [:
|
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, [:
|
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, [:
|
1599
|
-
# - [:type1, [:array, [:member, 2, 2, nil, [:grpchoice, [[:grpchoice, [[:member, 1, 1, nil, [:
|
1600
|
-
# + [:type1, [:array, [:member, 2, 2, nil, [:grpent, [:grpchoice, [[:member, 1, 1, nil, [:
|
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.
|
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-
|
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.
|
149
|
+
rubygems_version: 2.6.7
|
149
150
|
signing_key:
|
150
151
|
specification_version: 4
|
151
152
|
summary: CDDL generator and validator.
|