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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c11e42eff3d540d3d5a7db2097a1e247788ffbe
4
- data.tar.gz: 19183bc21865f3c17b8b89f91747a006f1c1d49c
3
+ metadata.gz: 14938c337d552f720d587e2b46be2c4738e48f8b
4
+ data.tar.gz: 9a2b6a95471d6d29b6acd051d3c838d30f1724c0
5
5
  SHA512:
6
- metadata.gz: 2f19f5e350b7fd93d674f120ad6dcb43c06edacb2f3c78bf6f81c7643319268c8ddb4d65f512d381c1813eba07e3fd7cc64640f06e1e69a8743cfae9170d5bf1
7
- data.tar.gz: 7423ef4fd5b04d518be5df9a597f85143b4a6b60f8a8955675805344d0a27d2646cb5df911ce6a243d52af43475ce81b1a3351a62f863df2a58a0b43dce46698
6
+ metadata.gz: 557ce79dad209f8577c361effcb3aea96ee43be2b4dba7914fa34fdb9f7bca9d5e5adfe079dcdadce42062f07f1eb55c2e825ec1c30833f9d23d5ffb118ecaf1
7
+ data.tar.gz: a1d8f53c4baf9d5c50c65a7daf3a91d40a1c5c43616978f3fedcb0c84493012906335712003c90b73d04b0f2800d9e89d081200036e5506f99b20db8a95b23d6
data/cddl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.1.3'
3
+ s.version = '0.1.4'
4
4
  s.summary = "CDDL generator and validator."
5
5
  s.description = %{A parser, generator, and validator for CDDL}
6
6
  s.add_dependency('cbor-diag')
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
- # p rule
39
- if rulename = rule.groupname
40
- fail "Duplicate rule #{rulename.to_s}" if @rules[rulename.to_s]
41
- @rules[rulename.to_s] = [:grpent, *rule.group.children(:grpent)]
42
- elsif rulename = rule.typename
43
- fail "Duplicate rule #{rulename.to_s}" if @rules[rulename.to_s]
44
- @rules[rulename.to_s] = [:type1, *rule.type.children(:type1)]
45
- else
46
- fail "Huh?"
47
- end
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
- # XXX go through the members here and multiply the occs
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.3
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-01 00:00:00.000000000 Z
11
+ date: 2015-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor-diag