cddl 0.1.2 → 0.1.3
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/cddl +6 -3
- data/cddl.gemspec +1 -1
- data/data/cddl.abnf +7 -5
- data/data/prelude.cddl +1 -0
- data/lib/cddl.rb +23 -9
- data/test-data/basic_syntax_example.cddl +7 -0
- data/test-data/minimal.cddl +1 -0
- data/test-data/reused_named_group.cddl +14 -0
- data/test-data/structure.cddl +9 -0
- data/test-data/two_anonymous_groups.cddl +13 -0
- data/test/test-cddl.rb +52 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c11e42eff3d540d3d5a7db2097a1e247788ffbe
|
4
|
+
data.tar.gz: 19183bc21865f3c17b8b89f91747a006f1c1d49c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f19f5e350b7fd93d674f120ad6dcb43c06edacb2f3c78bf6f81c7643319268c8ddb4d65f512d381c1813eba07e3fd7cc64640f06e1e69a8743cfae9170d5bf1
|
7
|
+
data.tar.gz: 7423ef4fd5b04d518be5df9a597f85143b4a6b60f8a8955675805344d0a27d2646cb5df911ce6a243d52af43475ce81b1a3351a62f863df2a58a0b43dce46698
|
data/bin/cddl
CHANGED
@@ -15,9 +15,14 @@ def usage
|
|
15
15
|
exit 1
|
16
16
|
end
|
17
17
|
|
18
|
+
def parser
|
19
|
+
@parser ||= CDDL::Parser.new(File.read(ARGV[0]))
|
20
|
+
end
|
21
|
+
|
18
22
|
case ARGV[1]
|
23
|
+
when /\Ar/ # secret
|
24
|
+
pp parser.rules
|
19
25
|
when /\Ag/
|
20
|
-
parser = CDDL::Parser.new(File.read(ARGV[0]))
|
21
26
|
n = 1
|
22
27
|
n = ARGV[2].to_i if ARGV[2]
|
23
28
|
n.times do
|
@@ -25,7 +30,6 @@ when /\Ag/
|
|
25
30
|
puts g.cbor_diagnostic
|
26
31
|
end
|
27
32
|
when /\Aj/
|
28
|
-
parser = CDDL::Parser.new(File.read(ARGV[0]))
|
29
33
|
n = 1
|
30
34
|
n = ARGV[2].to_i if ARGV[2]
|
31
35
|
n.times do
|
@@ -33,7 +37,6 @@ when /\Aj/
|
|
33
37
|
puts JSON.pretty_generate(g)
|
34
38
|
end
|
35
39
|
when /\Av/
|
36
|
-
parser = CDDL::Parser.new(File.read(ARGV[0]))
|
37
40
|
instance = File.read(ARGV[2])
|
38
41
|
instance = CBOR.decode(instance.b) rescue JSON.load(instance)
|
39
42
|
p parser.validate(instance)
|
data/cddl.gemspec
CHANGED
data/data/cddl.abnf
CHANGED
@@ -34,16 +34,18 @@ occur = [uint] "*" [uint]
|
|
34
34
|
/ "+"
|
35
35
|
/ "?"
|
36
36
|
|
37
|
-
uint = "0"
|
38
|
-
/ DIGIT1 *DIGIT
|
37
|
+
uint = ["0x" / "0b"] "0"
|
38
|
+
/ ["0x" / "0b"] DIGIT1 *DIGIT
|
39
39
|
|
40
|
-
value =
|
41
|
-
/ float
|
40
|
+
value = number
|
42
41
|
/ string
|
43
42
|
|
44
43
|
int = ["-"] uint
|
45
44
|
|
46
|
-
float
|
45
|
+
; This is a float if it has fraction or exponent; int otherwise
|
46
|
+
number = int ["." fraction] ["e" exponent ]
|
47
|
+
fraction = 1*DIGIT
|
48
|
+
exponent = int
|
47
49
|
|
48
50
|
string = %x22 *SCHAR %x22
|
49
51
|
SCHAR = %x20-21 / %x23-7E / SESC
|
data/data/prelude.cddl
CHANGED
@@ -41,3 +41,4 @@ true = #7.21
|
|
41
41
|
nil = #7.22
|
42
42
|
undefined = #7.23
|
43
43
|
|
44
|
+
used_in_cddl_prelude = any / bstr / tdate / time / number / biguint / bignint / bigint / integer / decfrac / bigfloat / eb64url / eb64legacy / eb16 / encoded-cbor / uri / b64url / b64legacy / regexp / mime-message / cbor-any / float16 / float32 / float64 / float16-32 / float32-64 / float / false / true / nil / undefined / uint / nint / int / tstr
|
data/lib/cddl.rb
CHANGED
@@ -50,11 +50,18 @@ module CDDL
|
|
50
50
|
@rootrule = @rules.keys.first
|
51
51
|
# now process the rules...
|
52
52
|
@stage1 = {}
|
53
|
-
r_process(@rootrule, @rules[@rootrule])
|
54
|
-
|
55
|
-
|
53
|
+
result = r_process(@rootrule, @rules[@rootrule])
|
54
|
+
r_process("used_in_cddl_prelude", @rules["used_in_cddl_prelude"])
|
55
|
+
@rules.each do |n, r|
|
56
|
+
# r_process(n, r) # debug only loop
|
57
|
+
warn "Unused rule #{n}" unless @stage1[n]
|
58
|
+
end
|
59
|
+
if result[0] == :grpent
|
60
|
+
warn "Group at top -- first rule must be a type!"
|
61
|
+
end
|
56
62
|
# end
|
57
63
|
# @stage1
|
64
|
+
result
|
58
65
|
end
|
59
66
|
|
60
67
|
def generate(where=rules, inmap = false)
|
@@ -109,7 +116,7 @@ module CDDL
|
|
109
116
|
fail "Can't generate prim #{where[1]}"
|
110
117
|
end
|
111
118
|
else
|
112
|
-
|
119
|
+
fail "Don't know how to generate from #{where[0]}"
|
113
120
|
end
|
114
121
|
end
|
115
122
|
|
@@ -214,6 +221,7 @@ module CDDL
|
|
214
221
|
_, v = extract_value(where)
|
215
222
|
d == v
|
216
223
|
when :prim
|
224
|
+
# warn "validate prim WI #{where.inspect} #{d.inspect}"
|
217
225
|
case where[1]
|
218
226
|
when nil
|
219
227
|
true
|
@@ -242,7 +250,7 @@ module CDDL
|
|
242
250
|
end
|
243
251
|
|
244
252
|
else
|
245
|
-
fail "Can't
|
253
|
+
fail "Can't validate prim #{where[1]} yet"
|
246
254
|
end
|
247
255
|
else
|
248
256
|
# fail where
|
@@ -273,7 +281,9 @@ module CDDL
|
|
273
281
|
|
274
282
|
def value(n)
|
275
283
|
# cheat:
|
284
|
+
# warn n
|
276
285
|
val = eval(n.to_s)
|
286
|
+
# warn val
|
277
287
|
[case val
|
278
288
|
when Integer; :int
|
279
289
|
when Numeric; :float
|
@@ -318,11 +328,15 @@ module CDDL
|
|
318
328
|
|
319
329
|
def label(n)
|
320
330
|
# if this is not a rulename, it's a bareword
|
321
|
-
|
322
|
-
|
323
|
-
|
331
|
+
if n.bareword
|
332
|
+
name = n.to_s
|
333
|
+
if r = @rules[name]
|
334
|
+
r_process(name, r)
|
335
|
+
else
|
336
|
+
[:string, name]
|
337
|
+
end
|
324
338
|
else
|
325
|
-
|
339
|
+
type1(n.type1)
|
326
340
|
end
|
327
341
|
end
|
328
342
|
|
@@ -0,0 +1 @@
|
|
1
|
+
foo = #
|
data/test/test-cddl.rb
CHANGED
@@ -49,6 +49,39 @@ class TestABNF < Test::Unit::TestCase
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
def test_generate_hex_bin
|
53
|
+
parser = CDDL::Parser.new <<HERE
|
54
|
+
test = [0x4711, 0b1011001110001111000]
|
55
|
+
HERE
|
56
|
+
assert_equal [0x4711, 0b1011001110001111000], parser.generate
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
def test_validate_person_occurs
|
61
|
+
person = <<HERE
|
62
|
+
person = (
|
63
|
+
name: tstr,
|
64
|
+
age: uint,
|
65
|
+
)
|
66
|
+
HERE
|
67
|
+
parser1 = CDDL::Parser.new "unlimitedpersons = [* person ]" + person
|
68
|
+
parser2 = CDDL::Parser.new "oneortwoPerson = [1*2 person ]" + person
|
69
|
+
parser3 = CDDL::Parser.new "min2Person = [2* person ]" + person
|
70
|
+
|
71
|
+
assert parser1.validate([])
|
72
|
+
refute parser2.validate([], false)
|
73
|
+
refute parser3.validate([], false)
|
74
|
+
assert parser1.validate(["Methuselah", 969])
|
75
|
+
assert parser2.validate(["Methuselah", 969])
|
76
|
+
refute parser3.validate(["Methuselah", 969], false)
|
77
|
+
assert parser1.validate(["Methuselah", "Methuselah", 969, 969]) # XXX Sequence
|
78
|
+
assert parser2.validate(["Methuselah", "Methuselah", 969, 969])
|
79
|
+
assert parser3.validate(["Methuselah", "Methuselah", 969, 969])
|
80
|
+
assert parser1.validate(["Methuselah", "Methuselah", "Methuselah", 969, 969]) # XXX Sequence
|
81
|
+
refute parser2.validate(["Methuselah", "Methuselah", "Methuselah", 969, 969], false)
|
82
|
+
assert parser3.validate(["Methuselah", "Methuselah", "Methuselah", 969, 969])
|
83
|
+
end
|
84
|
+
|
52
85
|
def test_validate
|
53
86
|
parser1 = CDDL::Parser.new(File.read("test-data/7071-concise.cddl"))
|
54
87
|
g = parser1.generate
|
@@ -288,5 +321,24 @@ HERE
|
|
288
321
|
refute parser.validate([1, 2, 1], false)
|
289
322
|
end
|
290
323
|
|
324
|
+
def test_validate_json_float
|
325
|
+
parser = CDDL::Parser.new <<HERE
|
326
|
+
test = {
|
327
|
+
foo: int
|
328
|
+
? bar: beer
|
329
|
+
f16: float16
|
330
|
+
"f64": float64
|
331
|
+
}
|
332
|
+
beer = 3.14 / 6.28
|
333
|
+
HERE
|
334
|
+
pp parser.rules
|
335
|
+
pp parser.generate
|
336
|
+
refute parser.validate({}, false)
|
337
|
+
assert parser.validate({"f16" => 1.5, "foo" => 1, "f64" => 1.1, "bar" => 3.14})
|
338
|
+
assert parser.validate({"f16" => 1.5, "foo" => 1, "f64" => 1.1, "bar" => 6.28})
|
339
|
+
refute parser.validate({"f16" => 1.5, "foo" => 1, "f64" => 1.1, "bar" => 3.15}, false)
|
340
|
+
assert parser.validate({"f16" => 1.5, "foo" => 1, "f64" => 1.1})
|
341
|
+
refute parser.validate({"f16" => 1, "foo" => 1, "f64" => 1.1}, false)
|
342
|
+
end
|
291
343
|
|
292
344
|
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.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cbor-diag
|
@@ -66,6 +66,11 @@ files:
|
|
66
66
|
- lib/cddl.rb
|
67
67
|
- test-data/7071-concise.cddl
|
68
68
|
- test-data/7071-verbose.cddl
|
69
|
+
- test-data/basic_syntax_example.cddl
|
70
|
+
- test-data/minimal.cddl
|
71
|
+
- test-data/reused_named_group.cddl
|
72
|
+
- test-data/structure.cddl
|
73
|
+
- test-data/two_anonymous_groups.cddl
|
69
74
|
- test/test-cddl.rb
|
70
75
|
homepage: http://github.com/cabo/cddl
|
71
76
|
licenses:
|