cddl 0.5.0 → 0.6.0

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: 4b41bbfc4b845713489d878733a2c1e51277ce80
4
- data.tar.gz: 00096ccc572f588b44cd35007ef8795453f57430
3
+ metadata.gz: 393b811831045b4c855ad1f27ba0fa410c6e5278
4
+ data.tar.gz: 8f28e4e50d8a408b1ef43c13b90c6c8c00c6d99c
5
5
  SHA512:
6
- metadata.gz: 5481738cee35fb77e07500fe839b0f9a7c6473309938e098893f6af32cf3a00d5f720061e733211ac1df4f3dcd945cc0dbe3d855920a288e44cd432de01b723e
7
- data.tar.gz: c3d84ab6506b6620996963e76040af1b097c4886b678317f70598a989fdd5d2a9e82d52119fb49e1e987e0abf9af7a2095addbafcf5592f9db287cd6f7dca3eb
6
+ metadata.gz: 73d8c3fb4b67680d74eeb9ea2b91dc84e9b23410a5ee4f8fb253dddfccbf3531114fece3c2d4008e36cd171c7f833567141690a856f3a41684dfb14f0d227cdf
7
+ data.tar.gz: 1402b3fd3b79bc6f1c69627125886ef9d59a1693d1c65c76883d79f982551f94af2332cc35eec9f8141100bb8e086a079542677551d2c209ff704b405dc9469a
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.5.0'
3
+ s.version = '0.6.0'
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')
@@ -1,10 +1,12 @@
1
1
  cddl = S 1*rule
2
- rule = typename [genericparm] S "=" S type S
3
- / groupname [genericparm] S "=" S grpent S
2
+ rule = typename [genericparm] S assign S type S
3
+ / groupname [genericparm] S assign S grpent S
4
4
 
5
5
  typename = id
6
6
  groupname = id
7
7
 
8
+ assign = "=" / "/=" / "//="
9
+
8
10
  genericparm = "<" S id S *("," S id S ) ">"
9
11
  genericarg = "<" S type1 S *("," S type1 S ) ">"
10
12
 
@@ -66,7 +68,7 @@ SESC = "\" %x20-7E
66
68
 
67
69
  id = EALPHA *(*("-" / ".") (EALPHA / DIGIT))
68
70
  ALPHA = %x41-5A / %x61-7A
69
- EALPHA = %x41-5A / %x61-7A / "@" / "_"
71
+ EALPHA = %x41-5A / %x61-7A / "@" / "_" / "$"
70
72
  DIGIT = %x30-39
71
73
  DIGIT1 = %x31-39
72
74
  S = *WS
@@ -7,7 +7,9 @@ nint = #1
7
7
  int = uint / nint
8
8
 
9
9
  bstr = #2
10
+ bytes = bstr
10
11
  tstr = #3
12
+ text = tstr
11
13
 
12
14
  tdate = #6.0(tstr)
13
15
  time = #6.1(number)
@@ -40,6 +42,7 @@ false = #7.20
40
42
  true = #7.21
41
43
  bool = false / true
42
44
  nil = #7.22
45
+ null = nil
43
46
  undefined = #7.23
44
47
 
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
48
+ used_in_cddl_prelude = any / bytes / 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 / null / undefined / uint / nint / int / text
@@ -1,7 +1,7 @@
1
1
  require 'abnc'
2
2
  require 'pp'
3
3
  require 'pathname'
4
- require 'cbor-pure'
4
+ require 'cbor-pure' unless defined?(CBOR::Tagged)
5
5
  require 'regexp-examples'
6
6
  require 'colorize'
7
7
 
@@ -19,6 +19,9 @@ module CDDL
19
19
  class ParseError < ArgumentError; end
20
20
 
21
21
  class Parser
22
+
23
+ class BackTrack < Exception; end
24
+
22
25
  def initialize(source_text)
23
26
  @abnf = Peggy::ABNF.new
24
27
  _cresult = @abnf.compile! ABNF_SPEC, ignore: :s
@@ -81,7 +84,11 @@ module CDDL
81
84
  fail "Huh?"
82
85
  end
83
86
  n = rulename.to_s
87
+ asg = rule.assign.to_s
84
88
  if g = rule.genericparm
89
+ if asg != "="
90
+ fail "Augment #{asg.inspect} not implemented for generics"
91
+ end
85
92
  ids = g.children(:id).map(&:to_s)
86
93
  # puts ["ids", ids].inspect
87
94
  if b = @generics[n]
@@ -89,16 +96,36 @@ module CDDL
89
96
  end
90
97
  @generics[n] = [rule_ast, ids]
91
98
  else
92
- if @rules[n]
93
- a = strip_nodes(rule_ast).inspect
94
- b = strip_nodes(@rules[n]).inspect
95
- if a == b
96
- warn "*** Warning: Identical redefinition of #{n} as #{a}"
97
- else
98
- fail "Duplicate rule definition #{n} as #{b} (was #{a})"
99
+ case asg
100
+ when "="
101
+ if @rules[n]
102
+ a = strip_nodes(rule_ast).inspect
103
+ b = strip_nodes(@rules[n]).inspect
104
+ if a == b
105
+ warn "*** Warning: Identical redefinition of #{n} as #{a}"
106
+ else
107
+ fail "Duplicate rule definition #{n} as #{b} (was #{a})"
108
+ end
109
+ end
110
+ @rules[n] = rule_ast
111
+ when "/="
112
+ @rules[n] ||= [:type1]
113
+ fail "Can't add #{rule_ast} to #{n}" unless rule_ast[0] == :type1
114
+ # XXX need to check existing rule as well
115
+ @rules[n].concat rule_ast[1..-1]
116
+ # puts "#{@rules[n].inspect} /="
117
+ when "//="
118
+ @rules[n] ||= [:grpchoice]
119
+ fail "Can't add #{rule_ast} to #{n}" unless rule_ast[0] == :grpent
120
+ # XXX need to check existing rule as well
121
+ if @rules[n][0] == :grpent # widen
122
+ @rules[n] = [:grpchoice, @rules[n]]
99
123
  end
124
+ @rules[n] << rule_ast
125
+ # puts "#{@rules[n].inspect} //="
126
+ else
127
+ fail "Unknown assign #{asg.inspect}"
100
128
  end
101
- @rules[n] = rule_ast
102
129
  end
103
130
  end
104
131
  # pp @generics
@@ -140,13 +167,43 @@ module CDDL
140
167
  def generate1(where, inmap = false)
141
168
  case where[0]
142
169
  when :type1
143
- generate1(where[rand(where.size-1)+1])
170
+ fail BackTrack.new("Can't generate from empty type choice socket yet") unless where.size > 1
171
+ begin
172
+ chosen = where[rand(where.size-1)+1]
173
+ generate1(chosen)
174
+ rescue BackTrack
175
+ tries = where[1..-1].sample(where.size) - [chosen]
176
+ r = begin
177
+ if tries.empty?
178
+ BackTrack.new("No suitable alternative in type choice")
179
+ else
180
+ generate1(tries.pop)
181
+ end
182
+ rescue BackTrack
183
+ retry
184
+ end
185
+ fail r if BackTrack === r
186
+ r
187
+ end
144
188
  when :grpchoice
145
- chosen = where[rand(where.size-1)+1]
146
- # pp [:chosen, chosen]
147
- r = chosen.flat_map {|m| generate1(m, inmap)}
148
- # pp r
149
- r
189
+ fail BackTrack.new("Can't generate from empty group choice socket yet") unless where.size > 1
190
+ begin
191
+ chosen = where[rand(where.size-1)+1]
192
+ chosen.flat_map {|m| generate1(m, inmap)}
193
+ rescue BackTrack
194
+ tries = where[1..-1].sample(where.size) - [chosen]
195
+ r = begin
196
+ if tries.empty?
197
+ BackTrack.new("No suitable alternative in group choice")
198
+ else
199
+ tries.pop.flat_map {|m| generate1(m, inmap)}
200
+ end
201
+ rescue BackTrack
202
+ retry
203
+ end
204
+ fail r if BackTrack === r
205
+ r
206
+ end
150
207
  when :map
151
208
  Hash[where[1..-1].flat_map {|m| generate1(m, true)}]
152
209
  when :recurse_grpent
@@ -177,10 +234,26 @@ module CDDL
177
234
  st += rand(en + 1 - st) if en != st
178
235
  kr = where[3]
179
236
  vr = where[4]
180
- fail "member key not given in map for #{where}" unless kr if inmap
181
- Array.new(st) { [ (generate1(kr) if kr), # XXX: need error in map context
182
- generate1(vr)
183
- ]}
237
+ if inmap
238
+ unless kr
239
+ if vr[0] == :grpent
240
+ fail "grpent in map #{vr.inspect}" unless vr.size == 2
241
+ g = generate1(vr[1], true)
242
+ # warn "GGG #{g.inspect}"
243
+ return g
244
+ else
245
+ fail "member key not given in map for #{where}" # || vr == [:grpchoice]
246
+ end
247
+ end
248
+ end
249
+ begin
250
+ Array.new(st) { [ (generate1(kr) if kr), # XXX: need error in map context
251
+ generate1(vr)
252
+ ]}
253
+ rescue BackTrack
254
+ fail BackTrack("Need #{where[1]}..#{where[2]} of these: #{[kr, vr].inspect}") unless where[1] == 0
255
+ []
256
+ end
184
257
  when :string, :int, :float
185
258
  where[1]
186
259
  when :range
@@ -374,8 +447,13 @@ module CDDL
374
447
  end
375
448
  }
376
449
  when :member
450
+ unless k
451
+ fail "member name not known for group entry #{r} in map" unless v[0] == :grpent
452
+ d_check1 = d_check.dup
453
+ # XXX this is ignoring occur = [s, _e]
454
+ return map_check(d, d_check1, v[1..-1]) && d_check.replace(d_check1)
455
+ end
377
456
  # this is mostly quadratic; let's do the linear thing if possible
378
- fail "member name not known for group entry #{r} in map" unless k
379
457
  simple, simpleval = extract_value(k)
380
458
  if simple
381
459
  # puts "SIMPLE: #{d_check.inspect} #{simpleval}"
@@ -417,8 +495,8 @@ module CDDL
417
495
  when :array
418
496
  if Array === d
419
497
  # validate1 against the record
420
- i = validate_forward(d, 0, where)
421
- validate_result(i == d.size) { "cannot complete array #{d} for #{where}" }
498
+ idx = validate_forward(d, 0, where)
499
+ validate_result(idx == d.size) { "cannot complete array #{d} for #{where}" }
422
500
  end
423
501
  when :string, :int, :float
424
502
  _, v = extract_value(where)
@@ -534,17 +612,27 @@ module CDDL
534
612
  b
535
613
  else
536
614
  r = @rules[name]
615
+ unless r
616
+ if name[0] == "$"
617
+ r = @rules[name] = if name[1] == "$"
618
+ [:grpchoice]
619
+ else
620
+ [:type1]
621
+ end
622
+ end
623
+ end
537
624
  if r
538
625
  t = r_process(name, r)
539
626
  unless t[0] == :type1
540
- fail "#{name} not a type #{t}" unless canbegroup && t[0] == :grpent
627
+ fail "#{name} not a type #{t}" unless canbegroup && (t[0] == :grpent || t[0] == :grpchoice)
541
628
  end
542
629
  t
543
630
  end
544
631
  end
545
632
  end
546
633
 
547
- RECURSE_TYPE = {grpent: :recurse_grpent, type1: :recurse} # MMM
634
+ RECURSE_TYPE = {grpent: :recurse_grpent, grpchoice: :recurse_grpent,
635
+ type1: :recurse} # MMM
548
636
  RECURSE_TYPE.default_proc = proc do |a|
549
637
  fail a.inspect
550
638
  end
@@ -557,6 +645,12 @@ module CDDL
557
645
  @bindings.push(bindings)
558
646
  r = [t, *r[1..-1].map {|e|
559
647
  case t
648
+ when :grpchoice
649
+ fail e[0].inspect unless e[0] == :grpent
650
+ fail e unless e.size == 2
651
+ res = grpent(e[1])
652
+ # warn "RES #{res.inspect}"
653
+ res
560
654
  when :grpent
561
655
  grpent(e)
562
656
  when :type1
@@ -652,10 +746,18 @@ module CDDL
652
746
  }
653
747
  end
654
748
  else
655
- if t[0] == :grpent
656
- t = [t[0], *t[1..-1].flatten(1)]
749
+ if t[0] == :grpchoice && occ == [1, 1]
750
+ [t]
751
+ else
752
+ if t[0] == :grpent
753
+ t = [t[0], *t[1..-1].flatten(1)]
754
+ end
755
+ if occ[0] == 0 && t == [:grpchoice]
756
+ [] # we won't be able to generate any of those
757
+ else
758
+ [[:member, *occ, nil, t]]
759
+ end
657
760
  end
658
- [[:member, *occ, nil, t]]
659
761
  end
660
762
  end
661
763
  end
@@ -730,7 +832,7 @@ module CDDL
730
832
  end
731
833
  when :recurse_grpent # XXX we don't have the entry yet
732
834
  when :member
733
- fail "map entry without member key given: #{member}" unless member[3]
835
+ fail "map entry without member key given: #{member}" unless member[3] || member[4][0] == :grpent # || member[4] == [:grpchoice]
734
836
  else
735
837
  fail ["type1 member", member].inspect unless member[0] == :member
736
838
  end
@@ -778,7 +880,7 @@ module CDDL
778
880
  when /\A[\[{]/
779
881
  type = BRACE[str[0]]
780
882
  @insides << type
781
- s = n.children(:group).flat_map {|ch| group(ch)}
883
+ s = n.children(:group).flat_map {|g| group(g)}
782
884
  @insides.pop
783
885
  if type == :map
784
886
  memberkey_check(s)
@@ -791,7 +893,7 @@ module CDDL
791
893
  s = group_recall(gn.to_s, n.genericarg).flatten(1)
792
894
  else
793
895
  @insides << :enum
794
- s = n.children(:group).flat_map {|ch| group(ch)}
896
+ s = n.children(:group).flat_map {|g| group(g)}
795
897
  @insides.pop
796
898
  end
797
899
  [:type1, *s.map {|mem|
@@ -0,0 +1,21 @@
1
+ response =
2
+ ["ifmap", "response",
3
+ [ ? validation-attributes ],
4
+ [ response-choice ]]
5
+
6
+ response-choice = (
7
+ error-result // poll-result // search-result // subscribe-received //
8
+ publish-received // purge-publisher-received // new-session-result //
9
+ renew-session-result // end-session-result
10
+ )
11
+
12
+ error-result = 1
13
+ poll-result = 2
14
+ search-result = 3
15
+ subscribe-received = 4
16
+ publish-received = 5
17
+ purge-publisher-received = 6
18
+ new-session-result = 7
19
+ renew-session-result = 8
20
+ end-session-result = 9
21
+ validation-attributes = (10, 11)
@@ -428,7 +428,28 @@ HERE
428
428
  }
429
429
  end
430
430
 
431
-
431
+ def test_another_simple_alternative_group_occur
432
+ parser = CDDL::Parser.new <<HERE
433
+ test = {
434
+ ?(bar: int // bar: true)
435
+ }
436
+ HERE
437
+ pp parser.rules
438
+ parser.validate({})
439
+ 10.times {
440
+ g = parser.generate
441
+ # pp ["tasag", g]
442
+ if g != {}
443
+ bar = g['bar']
444
+ fail "GGG #{g.inspect}" unless bar
445
+ assert bar == true || Integer(bar)
446
+ assert parser.validate(g)
447
+ refute parser.validate(g.merge(foo: 3), false)
448
+ refute parser.validate(g.merge(bar: "baz"), false)
449
+ end
450
+ }
451
+ end
452
+
432
453
  def test_bad_simple_alternative_group
433
454
  parser = CDDL::Parser.new <<HERE
434
455
  test = {
@@ -1068,6 +1089,176 @@ HERE
1068
1089
  assert parser.validate({})
1069
1090
  end
1070
1091
 
1092
+
1093
+ def test_empty_group_augmented
1094
+ parser = CDDL::Parser.new <<HERE
1095
+ a = {b}
1096
+ b = (
1097
+ )
1098
+ ; b //= (3) PENDING: need to recognize this as group
1099
+ b //= ()
1100
+ HERE
1101
+ # puts "empty_group_sp AST:"
1102
+ # puts parser.ast_debug
1103
+ # puts "empty_group_sp RULES:"
1104
+ # pp parser.rules
1105
+ assert_equal({}, parser.generate)
1106
+ assert parser.validate({})
1107
+ end
1108
+
1109
+ def test_simple_group_augmented
1110
+ parser = CDDL::Parser.new <<HERE
1111
+ a = {b}
1112
+ b = ( "abs": 3 )
1113
+ ; b //= (3) PENDING: need to recognize this as group
1114
+ b //= ( "abs": -3 )
1115
+ b //= ( "abs": 5 )
1116
+ HERE
1117
+ # puts "empty_group_sp AST:"
1118
+ # puts parser.ast_debug
1119
+ # puts "simple_group_augmented RULES:"
1120
+ # pp parser.rules
1121
+ assert_equal(["abs"], parser.generate.keys)
1122
+ v = {}
1123
+ 20.times do
1124
+ v[parser.generate["abs"]] = true
1125
+ end
1126
+ assert_equal({3 => true, -3 => true, 5 => true}, v)
1127
+ assert parser.validate({"abs" => 3})
1128
+ assert parser.validate({"abs" => 5})
1129
+ assert parser.validate({"abs" => -3})
1130
+ end
1131
+
1132
+ def test_simple_group_augmented_uninitialized
1133
+ parser = CDDL::Parser.new <<HERE
1134
+ a = {b}
1135
+ b //= ( "abs": 3 )
1136
+ ; b //= (3) PENDING: need to recognize this as group
1137
+ b //= ( "abs": -3 )
1138
+ HERE
1139
+ # puts "empty_group_sp AST:"
1140
+ # puts parser.ast_debug
1141
+ # puts "simple_group_augmented_uninitialized RULES:"
1142
+ # pp parser.rules
1143
+ assert_equal(["abs"], parser.generate.keys)
1144
+ v = {}
1145
+ 10.times do
1146
+ v[parser.generate["abs"]] = true
1147
+ end
1148
+ assert_equal({3 => true, -3 => true}, v)
1149
+ assert parser.validate({"abs" => 3})
1150
+ assert parser.validate({"abs" => -3})
1151
+ end
1152
+
1153
+
1154
+ def test_simple_type_augmented
1155
+ parser = CDDL::Parser.new <<HERE
1156
+ a = {b}
1157
+ b = ( "abs": t1 )
1158
+ t1 = 3
1159
+ t1 /= -3
1160
+ HERE
1161
+ # puts "empty_group_sp AST:"
1162
+ # puts parser.ast_debug
1163
+ # puts "simple_type_augmented RULES:"
1164
+ # pp parser.rules
1165
+ assert_equal(["abs"], parser.generate.keys)
1166
+ v = {}
1167
+ 10.times do
1168
+ v[parser.generate["abs"]] = true
1169
+ end
1170
+ assert_equal({3 => true, -3 => true}, v)
1171
+ assert parser.validate({"abs" => 3})
1172
+ assert parser.validate({"abs" => -3})
1173
+ end
1174
+
1175
+
1176
+ def test_empty_type_socket
1177
+ parser = CDDL::Parser.new <<HERE
1178
+ a = {b}
1179
+ b = ( "abs": $t1 )
1180
+ HERE
1181
+ # puts "empty_group_sp AST:"
1182
+ # puts parser.ast_debug
1183
+ # puts "simple_type_augmented RULES:"
1184
+ # pp parser.rules
1185
+ assert_raise { parser.generate }
1186
+ end
1187
+
1188
+
1189
+ def test_empty_group_socket
1190
+ parser = CDDL::Parser.new <<HERE
1191
+ a = {$$t2}
1192
+ HERE
1193
+ # puts "empty_group_sp AST:"
1194
+ # puts parser.ast_debug
1195
+ # puts "simple_type_augmented RULES:"
1196
+ # pp parser.rules
1197
+ assert_raise { parser.generate }
1198
+ end
1199
+
1200
+
1201
+ def test_validate_empty_type_socket
1202
+ parser = CDDL::Parser.new <<HERE
1203
+ a = {b}
1204
+ b = ( "abs": $t1 / 17 )
1205
+ HERE
1206
+ # puts "empty_group_sp AST:"
1207
+ # puts parser.ast_debug
1208
+ # puts "simple_type_augmented RULES:"
1209
+ # pp parser.rules
1210
+ assert_equal parser.generate, {"abs" => 17}
1211
+ assert parser.validate({"abs" => 17})
1212
+ end
1213
+
1214
+
1215
+ def test_validate_empty_group_socket
1216
+ parser = CDDL::Parser.new <<HERE
1217
+ a = {$$t2 // a: 1}
1218
+ HERE
1219
+ # puts "empty_group_sp AST:"
1220
+ # puts parser.ast_debug
1221
+ # puts "simple_type_augmented RULES:"
1222
+ # pp parser.rules
1223
+ assert_equal parser.generate, {"a" => 1}
1224
+ assert parser.validate({"a" => 1})
1225
+ end
1226
+
1227
+
1228
+ def test_validate_empty_group_socket_in_star
1229
+ parser = CDDL::Parser.new <<HERE
1230
+ a = {* $$t2}
1231
+ HERE
1232
+ # puts "empty_group_sp AST:"
1233
+ # puts parser.ast_debug
1234
+ # puts "simple_type_augmented RULES:"
1235
+ # pp parser.rules
1236
+ assert_equal parser.generate, {}
1237
+ assert parser.validate({})
1238
+ end
1239
+
1240
+
1241
+ def test_simple_type_augmented_uninitialized
1242
+ parser = CDDL::Parser.new <<HERE
1243
+ a = {b}
1244
+ b = ( "abs": t1 )
1245
+ t1 /= 3
1246
+ t1 /= -3
1247
+ HERE
1248
+ # puts "empty_group_sp AST:"
1249
+ # puts parser.ast_debug
1250
+ # puts "simple_type_augmented_uninitialized RULES:"
1251
+ # pp parser.rules
1252
+ assert_equal(["abs"], parser.generate.keys)
1253
+ v = {}
1254
+ 10.times do
1255
+ v[parser.generate["abs"]] = true
1256
+ end
1257
+ assert_equal({3 => true, -3 => true}, v)
1258
+ assert parser.validate({"abs" => 3})
1259
+ assert parser.validate({"abs" => -3})
1260
+ end
1261
+
1071
1262
 
1072
1263
  def test_empty_group_indirect
1073
1264
  parser = CDDL::Parser.new <<HERE
@@ -1075,7 +1266,7 @@ a = {b}
1075
1266
  b = (c)
1076
1267
  c = ()
1077
1268
  HERE
1078
- # XXX
1269
+ # XXX: Pending
1079
1270
  # assert_equal({}, parser.generate)
1080
1271
  # assert parser.validate({})
1081
1272
  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.5.0
4
+ version: 0.6.0
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-06-05 00:00:00.000000000 Z
11
+ date: 2015-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor-diag
@@ -106,6 +106,7 @@ files:
106
106
  - test-data/cdni-ct.cddl
107
107
  - test-data/dcaf1.cddl
108
108
  - test-data/ifmap-base-2.0v17.cddl
109
+ - test-data/ifmap2.cddl
109
110
  - test-data/jcr-ex.cddl
110
111
  - test-data/minimal.cddl
111
112
  - test-data/reused_named_group.cddl
@@ -136,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
137
  version: '0'
137
138
  requirements: []
138
139
  rubyforge_project:
139
- rubygems_version: 2.4.6
140
+ rubygems_version: 2.4.8
140
141
  signing_key:
141
142
  specification_version: 4
142
143
  summary: CDDL generator and validator.