cddl 0.1.3 → 0.1.4
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/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
|