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 +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.
|