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