cddl 0.1.3 → 0.1.4
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/prelude.cddl +2 -1
- data/lib/cddl.rb +21 -12
- data/test/test-cddl.rb +23 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14938c337d552f720d587e2b46be2c4738e48f8b
|
4
|
+
data.tar.gz: 9a2b6a95471d6d29b6acd051d3c838d30f1724c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 557ce79dad209f8577c361effcb3aea96ee43be2b4dba7914fa34fdb9f7bca9d5e5adfe079dcdadce42062f07f1eb55c2e825ec1c30833f9d23d5ffb118ecaf1
|
7
|
+
data.tar.gz: a1d8f53c4baf9d5c50c65a7daf3a91d40a1c5c43616978f3fedcb0c84493012906335712003c90b73d04b0f2800d9e89d081200036e5506f99b20db8a95b23d6
|
data/cddl.gemspec
CHANGED
data/data/prelude.cddl
CHANGED
@@ -38,7 +38,8 @@ float = float16-32 / float64
|
|
38
38
|
|
39
39
|
false = #7.20
|
40
40
|
true = #7.21
|
41
|
+
bool = false / true
|
41
42
|
nil = #7.22
|
42
43
|
undefined = #7.23
|
43
44
|
|
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
|
45
|
+
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 / bool / nil / undefined / uint / nint / int / tstr
|
data/lib/cddl.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'abnc'
|
2
2
|
require 'pp'
|
3
3
|
require 'pathname'
|
4
|
+
require 'cbor-pure'
|
4
5
|
|
5
6
|
module CDDL
|
6
7
|
|
@@ -35,16 +36,17 @@ module CDDL
|
|
35
36
|
def rules
|
36
37
|
@rules = {}
|
37
38
|
ast.each :rule do |rule|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
39
|
+
rule_ast =
|
40
|
+
if rulename = rule.groupname
|
41
|
+
[:grpent, *rule.group.children(:grpent)]
|
42
|
+
elsif rulename = rule.typename
|
43
|
+
[:type1, *rule.type.children(:type1)]
|
44
|
+
else
|
45
|
+
fail "Huh?"
|
46
|
+
end
|
47
|
+
n = rulename.to_s
|
48
|
+
fail "Duplicate rule #{n}" if @rules[n]
|
49
|
+
@rules[n] = rule_ast
|
48
50
|
end
|
49
51
|
# pp @rules
|
50
52
|
@rootrule = @rules.keys.first
|
@@ -97,6 +99,8 @@ module CDDL
|
|
97
99
|
gen_word.force_encoding(Encoding::BINARY)
|
98
100
|
when 3
|
99
101
|
gen_word
|
102
|
+
when 6
|
103
|
+
CBOR::Tagged.new(where[2], generate(where[3]))
|
100
104
|
when 7
|
101
105
|
case where[2]
|
102
106
|
when nil
|
@@ -201,6 +205,7 @@ module CDDL
|
|
201
205
|
when :array
|
202
206
|
if Array === d
|
203
207
|
# validate1 against the record
|
208
|
+
# XXX do that in some recursive descent fashion
|
204
209
|
i = 0
|
205
210
|
where[1..-1].each { |r|
|
206
211
|
t, s, e, _k, v = r # XXX
|
@@ -233,6 +238,8 @@ module CDDL
|
|
233
238
|
String === d && d.encoding == Encoding::BINARY
|
234
239
|
when 3
|
235
240
|
String === d && d.encoding != Encoding::BINARY # cheat
|
241
|
+
when 6
|
242
|
+
CBOR::Tagged === d && d.tag == where[2] && validate1(d.data, where[3])
|
236
243
|
when 7
|
237
244
|
t, v = extract_value(where)
|
238
245
|
if t
|
@@ -263,7 +270,7 @@ module CDDL
|
|
263
270
|
private
|
264
271
|
|
265
272
|
def gen_word
|
266
|
-
@words ||= File.read("/usr/share/dict/words").lines.shuffle
|
273
|
+
@words ||= (File.read("/usr/share/dict/words").lines.shuffle rescue %w{tic tac toe})
|
267
274
|
@wordptr ||= 0
|
268
275
|
@wordptr = 0 if @wordptr == @words.size
|
269
276
|
w = @words[@wordptr].chomp
|
@@ -304,7 +311,8 @@ module CDDL
|
|
304
311
|
type1(n.type1, true) # type1 can be a group here!
|
305
312
|
end
|
306
313
|
if t[0] == :grpent
|
307
|
-
#
|
314
|
+
# go through the members here and multiply the occs
|
315
|
+
# XXX only do this for maps. Keep the structure up for the arrays!
|
308
316
|
t1 = t[1..-1].flatten(1)
|
309
317
|
t1.flat_map {|t2|
|
310
318
|
if t2[0] == :member
|
@@ -406,6 +414,7 @@ module CDDL
|
|
406
414
|
fail unless member[0] == :member
|
407
415
|
fail "map entry without member key given: #{member}" unless member[3]
|
408
416
|
end
|
417
|
+
# XXX do the occurrence multiplier here
|
409
418
|
end
|
410
419
|
[type, *s]
|
411
420
|
else
|
data/test/test-cddl.rb
CHANGED
@@ -341,4 +341,27 @@ HERE
|
|
341
341
|
refute parser.validate({"f16" => 1, "foo" => 1, "f64" => 1.1}, false)
|
342
342
|
end
|
343
343
|
|
344
|
+
def test_validate_tags
|
345
|
+
parser = CDDL::Parser.new <<HERE
|
346
|
+
my_breakfast = #6.55799(breakfast) ; cbor-any is too general!
|
347
|
+
breakfast = cereal / porridge
|
348
|
+
cereal = #6.998(tstr)
|
349
|
+
porridge = #6.999([liquid, solid])
|
350
|
+
liquid = milk / water
|
351
|
+
milk = 0
|
352
|
+
water = 1
|
353
|
+
solid = tstr
|
354
|
+
HERE
|
355
|
+
# pp parser.rules
|
356
|
+
# pp parser.generate
|
357
|
+
refute parser.validate({}, false)
|
358
|
+
refute parser.validate(CBOR::Tagged.new(55799, CBOR::Tagged.new(997, 1)), false)
|
359
|
+
refute parser.validate(CBOR::Tagged.new(55799, CBOR::Tagged.new(998, 1)), false)
|
360
|
+
assert parser.validate(CBOR::Tagged.new(55799, CBOR::Tagged.new(998, "cornflakes")))
|
361
|
+
assert parser.validate(CBOR::Tagged.new(55799, CBOR::Tagged.new(999, [0, "barley"])))
|
362
|
+
refute parser.validate(CBOR::Tagged.new(55799, CBOR::Tagged.new(999, [0, 1])), false)
|
363
|
+
refute parser.validate(CBOR::Tagged.new(55799, CBOR::Tagged.new(999, [0, "barley", 1])), false)
|
364
|
+
end
|
365
|
+
|
366
|
+
|
344
367
|
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.4
|
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-03-
|
11
|
+
date: 2015-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cbor-diag
|