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 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