cddl 0.5.0 → 0.6.0

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