kwalify 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,8 +1,14 @@
1
1
  .=title: ChangeLog
2
- .?release: $Release: 0.2.0 $
2
+ .?release: $Release: 0.3.0 $
3
3
  .?lastupdate: $Date$
4
4
  .?version: $Rev$
5
5
 
6
+ .: 2005-09-30 (release 0.3.0)
7
+ .* Enhances:
8
+ .- Support 'max-ex' and 'min-ex' (max/min exclusive) support with 'range:'
9
+ .- Support 'max-ex' and 'min-ex' (max/min exclusive) support with 'length:'
10
+ .- Support 'unique' constraint
11
+
6
12
  .: 2005-09-25 (release 0.2.0)
7
13
  .* Enhances:
8
14
  .- New type 'scalar' and 'timestamp' added
data/README.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  .=title: README
2
2
  .?version: $Rev: 18 $
3
3
  .?lastupdate: $Date: 2005-09-25 22:36:35 +0900 (Sun, 25 Sep 2005) $
4
- .?release: $Release: 0.2.0 $
4
+ .?release: $Release: 0.3.0 $
5
5
 
6
6
 
7
7
  .$ About Kwalify
data/bin/kwalify CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ###
4
4
  ### $Rev: 12 $
5
- ### $Release: 0.2.0 $
5
+ ### $Release: 0.3.0 $
6
6
  ### copyright(c) 2005 kuwata-lab all rights reserved.
7
7
  ###
8
8
 
data/doc/users-guide.html CHANGED
@@ -15,7 +15,7 @@
15
15
  <div align="left"><h1>Kwalify Users' Guide</h1></div>
16
16
  <div align="left">
17
17
  makoto kuwata &lt;kwa(at)kuwata-lab.com&gt;<br>
18
- last update: $Date: 2005-09-25 22:36:35 +0900 (Sun, 25 Sep 2005) $<br>
18
+ last update: $Date: 2005-10-02 22:45:14 +0900 (Sun, 02 Oct 2005) $<br>
19
19
  </div>
20
20
 
21
21
  <a name="preface"></a>
@@ -82,6 +82,8 @@ Table of Contents:
82
82
  </li>
83
83
  <li><a href="#schema-rules">Rules</a>
84
84
  </li>
85
+ <li><a href="#schema-unique">Unique constraint</a>
86
+ </li>
85
87
  <li><a href="#schema-hook">Validator#validator_hook()</a>
86
88
  </li>
87
89
  <li><a href="#schema-block">Validator with Block</a>
@@ -467,6 +469,11 @@ document04b.yaml#0: INVALID
467
469
  String which represents validation expression. String should contain variable name <code>val</code> which repsents value.
468
470
  (This is an experimental function.)
469
471
  </dd>
472
+ <dt class="dt3"><strong>
473
+ <code>unique:</code> </strong></dt>
474
+ <dd class="dd3">
475
+ Value is unique for mapping or sequence. See the next subsection for detail.
476
+ </dd>
470
477
  </dl>
471
478
  <a name="schema05.yaml"></a>
472
479
  <div class="program_caption">
@@ -554,14 +561,96 @@ document05b.yaml#0: INVALID
554
561
  <br>
555
562
 
556
563
 
564
+ <a name="schema-unique"></a>
565
+ <h3 class="section2">Unique constraint</h3>
566
+ <p>'<code>unique:</code>' constraint is available with elements of sequence or mapping.
567
+ This is equivalent to unique key or primary key of RDBMS.
568
+ </p>
569
+ <p>Type of a rule which has '<code>unique:</code>' constraint should be scalar (str, int, float, ...).
570
+ Type of parent rule should be sequence or mapping.
571
+ </p>
572
+ <a name="schema06.yaml"></a>
573
+ <div class="program_caption">
574
+ <code>schema06.yaml</code> : unique constraint with mapping</div>
575
+ <pre class="program">type: seq
576
+ sequence:
577
+ - type: map
578
+ required: yes
579
+ mapping:
580
+ name:
581
+ type: str
582
+ required: yes
583
+ <strong>unique: yes</strong>
584
+ email:
585
+ type: str
586
+ groups:
587
+ type: seq
588
+ sequence:
589
+ - type: str
590
+ <strong>unique: yes</strong>
591
+ </pre>
592
+ <a name="document06a.yaml"></a>
593
+ <div class="program_caption">
594
+ <code>document06a.yaml</code> : valid document example</div>
595
+ <pre class="program">- name: foo
596
+ email: admin@mail.com
597
+ groups:
598
+ - users
599
+ - foo
600
+ - admin
601
+ - name: bar
602
+ email: admin@mail.com
603
+ groups:
604
+ - users
605
+ - admin
606
+ - name: baz
607
+ email: baz@mail.com
608
+ groups:
609
+ - users
610
+ </pre>
611
+ <div class="terminal_caption">
612
+ validate</div>
613
+ <pre class="terminal">$ kwalify -f schema06.yaml document06a.yaml
614
+ document06a.yaml#0: valid.
615
+ </pre>
616
+ <a name="document06b.yaml"></a>
617
+ <div class="program_caption">
618
+ <code>document06b.yaml</code> : invalid document example</div>
619
+ <pre class="program">- name: foo
620
+ email: admin@mail.com
621
+ groups:
622
+ - foo
623
+ - users
624
+ - admin
625
+ - foo
626
+ - name: bar
627
+ email: admin@mail.com
628
+ groups:
629
+ - admin
630
+ - users
631
+ - name: bar
632
+ email: baz@mail.com
633
+ groups:
634
+ - users
635
+ </pre>
636
+ <div class="terminal_caption">
637
+ validate</div>
638
+ <pre class="terminal">$ kwalify -f schema06.yaml document06b.yaml
639
+ document06b.yaml#0: INVALID
640
+ - [/0/groups/3] 'foo': is already used at '/0/groups/0'.
641
+ - [/2/name] 'bar': is already used at '/1/name'.
642
+ </pre>
643
+ <br>
644
+
645
+
557
646
  <a name="schema-hook"></a>
558
647
  <h3 class="section2">Validator#validator_hook()</h3>
559
648
  <p>You can extend Kwalify::Validator class and override Kwalify::Validator#validator_hook() method.
560
649
  This method is called by Kwalify::Validator#validate().
561
650
  </p>
562
- <a name="schema06.yaml"></a>
651
+ <a name="schema07.yaml"></a>
563
652
  <div class="program_caption">
564
- schema06.yaml : 'name:' is important.</div>
653
+ schema07.yaml : 'name:' is important.</div>
565
654
  <pre class="program">type: map
566
655
  mapping:
567
656
  questionnaires:
@@ -583,9 +672,9 @@ mapping:
583
672
  reason:
584
673
  type: str
585
674
  </pre>
586
- <a name="validate06.rb"></a>
675
+ <a name="validate07.rb"></a>
587
676
  <div class="program_caption">
588
- validate06.rb : validate script</div>
677
+ validate07.rb : validate script</div>
589
678
  <pre class="program">#!/usr/bin/env ruby
590
679
 
591
680
  require 'kwalify'
@@ -595,7 +684,7 @@ require 'yaml'
595
684
  class QuestionnairesValidator &lt; Kwalify::Validator
596
685
 
597
686
  ## load schema definition
598
- @@schema = YAML.load_file('schema06.yaml')
687
+ @@schema = YAML.load_file('schema07.yaml')
599
688
 
600
689
  def initialize()
601
690
  super(@@schema)
@@ -636,9 +725,9 @@ else
636
725
  end
637
726
  end
638
727
  </pre>
639
- <a name="document06a.yaml"></a>
728
+ <a name="document07a.yaml"></a>
640
729
  <div class="program_caption">
641
- <code>document06a.yaml</code> : valid document example</div>
730
+ <code>document07a.yaml</code> : valid document example</div>
642
731
  <pre class="program">questionnaires:
643
732
  - name: Foo
644
733
  answer: good
@@ -651,12 +740,12 @@ end
651
740
  </pre>
652
741
  <div class="terminal_caption">
653
742
  validate</div>
654
- <pre class="terminal">$ ruby validate06.rb document06a.yaml
743
+ <pre class="terminal">$ ruby validate07.rb document07a.yaml
655
744
  Valid.
656
745
  </pre>
657
- <a name="document06b.yaml"></a>
746
+ <a name="document07b.yaml"></a>
658
747
  <div class="program_caption">
659
- <code>document06b.yaml</code> : invalid document example</div>
748
+ <code>document07b.yaml</code> : invalid document example</div>
660
749
  <pre class="program">questionnaires:
661
750
  - name: Foo
662
751
  answer: good
@@ -667,7 +756,7 @@ Valid.
667
756
  </pre>
668
757
  <div class="terminal_caption">
669
758
  validate</div>
670
- <pre class="terminal">$ ruby validate06.rb document06b.yaml
759
+ <pre class="terminal">$ ruby validate07.rb document07b.yaml
671
760
  *** INVALID!
672
761
  - [/questionnaires/1] : reason is required when answer is 'bad'.
673
762
  </pre>
@@ -680,9 +769,9 @@ validate</div>
680
769
  </p>
681
770
  <p><code>Kwalify::Validator.new()</code> method can take a block which is invoked when validation.
682
771
  </p>
683
- <a name="validate07.rb"></a>
772
+ <a name="validate08.rb"></a>
684
773
  <div class="program_caption">
685
- <code>validate07.rb</code> : validate script</div>
774
+ <code>validate08.rb</code> : validate script</div>
686
775
  <pre class="program">#!/usr/bin/env ruby
687
776
 
688
777
  require 'kwalify'
@@ -723,14 +812,15 @@ end
723
812
  </pre>
724
813
  <div class="terminal_caption">
725
814
  validate</div>
726
- <pre class="terminal">$ ruby validate07.rb document06a.yaml
727
- Valid.
815
+ <pre class="terminal">$ ruby validate08.rb document07a.yaml
816
+ *** INVALID!
817
+ - [/] : not a sequence.
728
818
  </pre>
729
819
  <div class="terminal_caption">
730
820
  validate</div>
731
- <pre class="terminal">$ ruby validate07.rb document06b.yaml
821
+ <pre class="terminal">$ ruby validate08.rb document07b.yaml
732
822
  *** INVALID!
733
- - [/questionnaires/1] : reason is required when answer is 'bad'.
823
+ - [/] : not a sequence.
734
824
  </pre>
735
825
  <br>
736
826
 
@@ -1,7 +1,7 @@
1
1
  ##
2
2
  ## Kwalify schema example for address book
3
3
  ##
4
- ## $Release: 0.2.0 $
4
+ ## $Release: 0.3.0 $
5
5
  ## copyright(c) 2005 kuwata-lab all rights reserved.
6
6
  ##
7
7
  ##
@@ -17,6 +17,7 @@ sequence:
17
17
  "name":
18
18
  type: str
19
19
  required: yes
20
+ unique: yes
20
21
  "email":
21
22
  type: str
22
23
  pattern: /@/
@@ -1,15 +1,15 @@
1
1
  ###
2
2
  ### Kwalify schema example for invoice
3
3
  ###
4
- ### $Rev: 18 $
5
- ### $Release: 0.2.0 $
4
+ ### $Rev: 20 $
5
+ ### $Release: 0.3.0 $
6
6
  ### copyright(c) 2005 kuwata-lab all rights reserved.
7
7
  ###
8
8
 
9
9
  type: map
10
10
  required: yes
11
11
  mapping:
12
- "invoice": { type: int, required: yes }
12
+ "invoice": { type: int, required: yes, unique: yes }
13
13
  "date": { type: date, required: yes }
14
14
  "bill-to": &customer
15
15
  type: map
@@ -1,7 +1,7 @@
1
1
  ##
2
2
  ## Kwalify schema example for TapKit
3
3
  ##
4
- ## $Release: 0.2.0 $
4
+ ## $Release: 0.3.0 $
5
5
  ## copyright(c) 2005 kuwata-lab all rights reserved.
6
6
  ##
7
7
 
@@ -41,6 +41,7 @@ mapping:
41
41
  "name":
42
42
  type: str
43
43
  required: yes
44
+ unique: yes
44
45
  "external_name":
45
46
  type: str
46
47
  required: yes
@@ -54,6 +55,7 @@ mapping:
54
55
  required: yes
55
56
  sequence:
56
57
  - type: str
58
+ unique: yes
57
59
  "attributes":
58
60
  type: seq
59
61
  required: yes
@@ -63,6 +65,7 @@ mapping:
63
65
  "name":
64
66
  type: str
65
67
  required: yes
68
+ unique: yes
66
69
  "column_name":
67
70
  type: text
68
71
  required: yes
@@ -105,6 +108,7 @@ mapping:
105
108
  "name":
106
109
  type: str
107
110
  required: yes
111
+ unique: yes
108
112
  "destination":
109
113
  type: str
110
114
  required: yes
data/lib/kwalify.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  ###
2
2
  ### $Rev: 18 $
3
- ### $Release: 0.2.0 $
3
+ ### $Release: 0.3.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
7
7
 
8
8
  module Kwalify
9
9
 
10
- RELEASE = ("$Release: 0.2.0 $" =~ /[.\d]+/) && $&
10
+ RELEASE = ("$Release: 0.3.0 $" =~ /[.\d]+/) && $&
11
11
 
12
12
  end
13
13
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 18 $
3
- ### $Release: 0.2.0 $
3
+ ### $Release: 0.3.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 18 $
3
- ### $Release: 0.2.0 $
3
+ ### $Release: 0.3.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 18 $
3
- ### $Release: 0.2.0 $
2
+ ### $Rev: 22 $
3
+ ### $Release: 0.3.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -17,9 +17,8 @@ module Kwalify
17
17
  # filename: lib/kwalify/main-program.rb
18
18
  @@messages[:action_required] = "command-line option '-f' or '-m' required."
19
19
  @@messages[:meta_schema_empty] = "%s: empty.\n"
20
- @@messages[:meta_validation_invalid] = "%s: NG!\n"
21
20
  @@messages[:meta_validation_valid] = "%s: ok.\n"
22
- @@messages[:meta_validation_invalid2] = "%s: NG! %s\n"
21
+ @@messages[:meta_validation_invalid] = "%s: NG!\n"
23
22
  @@messages[:schema_empty] = "%s#%d: empty.\n"
24
23
  @@messages[:validation_valid] = "%s#%d: valid.\n"
25
24
  @@messages[:validation_invalid] = "%s#%d: INVALID\n"
@@ -29,6 +28,7 @@ module Kwalify
29
28
  @@messages[:type_notstr] = "not a string."
30
29
  @@messages[:type_unknown] = "unknown type."
31
30
  @@messages[:required_notbool] = "not a boolean."
31
+ @@messages[:pattern_notmatch] = "should be '/..../'."
32
32
  @@messages[:pattern_syntaxerr] = "has regexp error."
33
33
  @@messages[:enum_notseq] = "not a sequence."
34
34
  @@messages[:enum_notscalar] = "not available with seq or map."
@@ -41,10 +41,21 @@ module Kwalify
41
41
  @@messages[:range_notscalar] = "is available only with scalar type."
42
42
  @@messages[:range_type_unmatch] = "not a %s."
43
43
  @@messages[:range_undefined] = "undefined key."
44
+ @@messages[:range_twomax] = "both 'max' and 'max-ex' are not available at once."
45
+ @@messages[:range_twomin] = "both 'min' and 'min-ex' are not available at once."
44
46
  @@messages[:length_notmap] = "not a mapping."
45
47
  @@messages[:length_nottext] = "is available only with string or text."
46
48
  @@messages[:length_notint] = "not an integer."
47
49
  @@messages[:length_undefined] = "undefined key."
50
+ @@messages[:length_twomax] = "both 'max' and 'max-ex' are not available at once."
51
+ @@messages[:length_twomin] = "both 'min' and 'min-ex' are not available at once."
52
+ @@messages[:ident_notbool] = "not a boolean."
53
+ @@messages[:ident_notscalar] = "is available only with a scalar type."
54
+ @@messages[:ident_onroot] = "is not available on root element."
55
+ @@messages[:ident_notmap] = "is available only with an element of mapping."
56
+ @@messages[:unique_notbool] = "not a boolean."
57
+ @@messages[:unique_notscalar] = "is available only with a scalar type."
58
+ @@messages[:unique_onroot] = "is not available on root element."
48
59
  @@messages[:sequence_notseq] = "not a sequence."
49
60
  @@messages[:sequence_noelem] = "required one element."
50
61
  @@messages[:sequence_toomany] = "required just one element."
@@ -66,8 +77,13 @@ module Kwalify
66
77
  @@messages[:pattern_unmatch] = "not matched to pattern %s."
67
78
  @@messages[:range_toolarge] = "too large (> max %s)."
68
79
  @@messages[:range_toosmall] = "too small (< min %s)."
80
+ @@messages[:range_toolargeex] = "too large (>= max %s)."
81
+ @@messages[:range_toosmallex] = "too small (<= min %s)."
69
82
  @@messages[:length_toolong] = "too long (length %d > max %d)."
70
83
  @@messages[:length_tooshort] = "too short (length %d < min %d)."
84
+ @@messages[:length_toolongex] = "too long (length %d >= max %d)."
85
+ @@messages[:length_tooshortex] = "too short (length %d <= min %d)."
86
+ @@messages[:value_notunique] = "is already used at '%s'."
71
87
  @@messages[:required_nokey] = "key '%s:' is required."
72
88
  @@messages[:key_undefined] = "key '%s' is undefined."
73
89
  # --
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 18 $
3
- ### $Release: 0.2.0 $
2
+ ### $Rev: 21 $
3
+ ### $Release: 0.3.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -65,6 +65,12 @@ mapping: &main-rule
65
65
  type: scalar
66
66
  "min":
67
67
  type: scalar
68
+ "max-ex":
69
+ type: scalar
70
+ "min-ex":
71
+ type: scalar
72
+ #complement":
73
+ # type: boolean
68
74
  "length":
69
75
  type: map
70
76
  mapping:
@@ -72,6 +78,14 @@ mapping: &main-rule
72
78
  type: int
73
79
  "min":
74
80
  type: int
81
+ "max-ex":
82
+ type: int
83
+ "min-ex":
84
+ type: int
85
+ "ident":
86
+ type: bool
87
+ "unique":
88
+ type: bool
75
89
  "sequence":
76
90
  name: SEQUENCE
77
91
  type: seq
@@ -116,11 +130,11 @@ END
116
130
  type = hash['type']
117
131
  type = Kwalify::DEFAULT_TYPE if type == nil
118
132
  unless type.is_a?(String)
119
- errors << Kwalify.validate_error(:type_notstr, rule, "#{path}/type", type.to_s)
133
+ errors << validate_error(:type_notstr, rule, "#{path}/type", type.to_s)
120
134
  end
121
135
  klass = Kwalify.get_type_class(type)
122
136
  unless klass
123
- errors << Kwalify.validate_error(:type_unknown, rule, "#{path}/type", type.to_s)
137
+ errors << validate_error(:type_unknown, rule, "#{path}/type", type.to_s)
124
138
  end
125
139
  #
126
140
  if hash.key?('pattern')
@@ -129,22 +143,22 @@ END
129
143
  begin
130
144
  Regexp.compile(pat)
131
145
  rescue RegexpError => ex
132
- errors << Kwalify.validate_error(:pattern_syntaxerr, rule, "#{path}/pattern", val)
146
+ errors << validate_error(:pattern_syntaxerr, rule, "#{path}/pattern", val)
133
147
  end
134
148
  end
135
149
  #
136
150
  if hash.key?('enum')
137
151
  if type == 'seq' || type == 'map' # unless Kwalify.scalar_class?(klass)
138
- errors << schema_error(:enum_notscalar, rule, path, 'enum:')
152
+ errors << validate_error(:enum_notscalar, rule, path, 'enum:')
139
153
  else
140
154
  elem_table = {}
141
155
  hash['enum'].each do |elem|
142
156
  if elem_table[elem]
143
- errors << Kwalify.validate_error(:enum_duplicate, rule, "#{path}/enum", elem.to_s)
157
+ errors << validate_error(:enum_duplicate, rule, "#{path}/enum", elem.to_s)
144
158
  end
145
159
  elem_table[elem] = true
146
160
  unless elem.is_a?(klass)
147
- errors << schema_error(:enum_type_unmatch, rule, "#{path}/enum", elem, [Kwalify.word(type)])
161
+ errors << validate_error(:enum_type_unmatch, rule, "#{path}/enum", elem, [Kwalify.word(type)])
148
162
  end
149
163
  end
150
164
  end
@@ -152,11 +166,11 @@ END
152
166
  #
153
167
  if hash.key?('assert')
154
168
  val = hash['assert']
155
- val =~ /\bval\b/ or errors << Kwalify.validate_error(:assert_noval, rule, "#{path}/assert", val)
169
+ val =~ /\bval\b/ or errors << validate_error(:assert_noval, rule, "#{path}/assert", val)
156
170
  begin
157
171
  eval "proc { |val| #{val} }"
158
172
  rescue SyntaxError => ex
159
- errors << Kwalify.validate_error(:assert_syntaxerr, rule, "#{path}/assert", val)
173
+ errors << validate_error(:assert_syntaxerr, rule, "#{path}/assert", val)
160
174
  end
161
175
  end
162
176
  #
@@ -164,84 +178,124 @@ END
164
178
  val = hash['range']
165
179
  curr_path = path + "/range"
166
180
  if ! val.is_a?(Hash)
167
- errors << Kwalify.validate_error(:range_notmap, rule, curr_path, val)
181
+ errors << validate_error(:range_notmap, rule, curr_path, val)
168
182
  elsif type == 'seq' || type == 'map' || type == 'bool' || type == 'any'
169
- errors << Kwalify.validate_error(:range_notscalar, rule, path, 'range:')
183
+ errors << validate_error(:range_notscalar, rule, path, 'range:')
170
184
  else
171
185
  val.each do |rkey, rval|
172
- case rkey
173
- when 'max', 'min'
186
+ #case rkey
187
+ #when 'max', 'min', 'max-ex', 'min-ex'
174
188
  unless rval.is_a?(klass)
175
189
  typename = Kwalify.word(type) || type
176
- errors << Kwalify.validate_error(:range_type_unmatch, rule, "#{curr_path}/#{rkey}", rval, [typename])
190
+ errors << validate_error(:range_type_unmatch, rule, "#{curr_path}/#{rkey}", rval, [typename])
177
191
  end
178
- else
179
- errors << Kwalify.validate_error(:range_undefined, rule, curr_path, "#{rkey}:")
180
- end
192
+ #else
193
+ # errors << validate_error(:range_undefined, rule, curr_path, "#{rkey}:")
194
+ #end
181
195
  end
182
196
  end
197
+ if val.key?('max') && val.key?('max-ex')
198
+ errors << validate_error(:range_twomax, rule, curr_path, nil)
199
+ end
200
+ if val.key?('min') && val.key?('min-ex')
201
+ errors << validate_error(:range_twomin, rule, curr_path, nil)
202
+ end
183
203
  end
184
204
  #
185
205
  if hash.key?('length')
186
206
  val = hash['length']
187
207
  curr_path = path + "/length"
188
- val.is_a?(Hash) or errors << Kwalify.validate_error(:length_notmap, rule, curr_path, val)
208
+ val.is_a?(Hash) or errors << validate_error(:length_notmap, rule, curr_path, val)
189
209
  unless type == 'str' || type == 'text'
190
210
  errors << validate_error(:length_nottext, rule, path, 'length:')
191
211
  end
192
212
  val.each do |lkey, lval|
193
- case lkey
194
- when 'max', 'min'
213
+ #case lkey
214
+ #when 'max', 'min', 'max-ex', 'min-ex'
195
215
  unless lval.is_a?(Integer)
196
- errors << Kwalify.validate_error(:length_notint, rule, "#{curr_path}/#{lkey}", lval)
216
+ errors << validate_error(:length_notint, rule, "#{curr_path}/#{lkey}", lval)
197
217
  end
198
- else
199
- errors << validate_error(:length_undefined, rule, curr_path, "#{lkey}:")
200
- end
218
+ #else
219
+ # errors << validate_error(:length_undefined, rule, curr_path, "#{lkey}:")
220
+ #end
221
+ end
222
+ if val.key?('max') && val.key?('max-ex')
223
+ errors << validate_error(:length_twomax, rule, curr_path, nil)
224
+ end
225
+ if val.key?('min') && val.key?('min-ex')
226
+ errors << validate_error(:length_twomin, rule, curr_path, nil)
227
+ end
228
+ end
229
+ #
230
+ if hash.key?('unique')
231
+ if hash['unique'] && (type == 'map' || type == 'seq')
232
+ errors << validate_error(:unique_notscalar, rule, path, "unique:")
233
+ end
234
+ if path.empty?
235
+ errors << validate_error(:unique_onroot, rule, "/", "unique:")
236
+ end
237
+ end
238
+ #
239
+ if hash.key?('ident')
240
+ if hash['ident'] && (type == 'map' || type == 'seq')
241
+ errors << validate_error(:ident_notscalar, rule, path, "ident:")
242
+ end
243
+ if path.empty?
244
+ errors << validate_error(:ident_onroot, rule, "/", "ident:")
201
245
  end
202
246
  end
203
247
  #
204
248
  if hash.key?('sequence')
205
249
  val = hash['sequence']
206
250
  if val != nil && !val.is_a?(Array)
207
- errors << Kwalify.validate_error(:sequence_notseq, rule, "#{path}/sequence", val)
251
+ errors << validate_error(:sequence_notseq, rule, "#{path}/sequence", val)
208
252
  elsif val == nil || val.empty?
209
- errors << Kwalify.validate_error(:sequence_noelem, rule, "#{path}/sequence", val)
253
+ errors << validate_error(:sequence_noelem, rule, "#{path}/sequence", val)
210
254
  elsif val.length > 1
211
- errors << Kwalify.validate_error(:sequence_toomany, rule, "#{path}/sequence", val)
255
+ errors << validate_error(:sequence_toomany, rule, "#{path}/sequence", val)
256
+ else
257
+ child = hash['sequence'][0]
258
+ if child.is_a?(Hash)
259
+ if child['ident'] && child['type'] != 'map'
260
+ errors << validate_error(:ident_notmap, nil, "#{path}/sequence/0", 'ident:')
261
+ end
262
+ #if child['unique'] && child['type'] != 'map'
263
+ # errors << validate_error(:unique_notmap, nil, "#{path}/sequence/0", 'unique:')
264
+ #end
265
+ end
212
266
  end
213
267
  end
214
268
  #
215
269
  if hash.key?('mapping')
216
270
  val = hash['mapping']
217
271
  if val != nil && !val.is_a?(Hash)
218
- errors << Kwalify.validate_error(:mapping_notmap, rule, "#{path}/mapping", val)
272
+ errors << validate_error(:mapping_notmap, rule, "#{path}/mapping", val)
219
273
  elsif val == nil || val.empty?
220
- errors << Kwalify.validate_error(:mapping_noelem, rule, "#{path}/mapping", val)
274
+ errors << validate_error(:mapping_noelem, rule, "#{path}/mapping", val)
221
275
  end
222
276
  end
223
277
  #
224
278
  if type == 'seq'
225
- errors << Kwalify.validate_error(:seq_nosequence, rule, path, nil) unless hash.key?('sequence')
226
- #errors << Kwalify.validate_error(:seq_conflict, rule, path, 'enum:') if hash.key?('enum')
227
- errors << Kwalify.validate_error(:seq_conflict, rule, path, 'pattern:') if hash.key?('pattern')
228
- errors << Kwalify.validate_error(:seq_conflict, rule, path, 'mapping:') if hash.key?('mapping')
229
- #errors << Kwalify.validate_error(:seq_conflict, rule, path, 'range:') if hash.key?('range')
230
- errors << Kwalify.validate_error(:seq_conflict, rule, path, 'length:') if hash.key?('length')
279
+ errors << validate_error(:seq_nosequence, rule, path, nil) unless hash.key?('sequence')
280
+ #errors << validate_error(:seq_conflict, rule, path, 'enum:') if hash.key?('enum')
281
+ errors << validate_error(:seq_conflict, rule, path, 'pattern:') if hash.key?('pattern')
282
+ errors << validate_error(:seq_conflict, rule, path, 'mapping:') if hash.key?('mapping')
283
+ #errors << validate_error(:seq_conflict, rule, path, 'range:') if hash.key?('range')
284
+ errors << validate_error(:seq_conflict, rule, path, 'length:') if hash.key?('length')
231
285
  elsif type == 'map'
232
- errors << Kwalify.validate_error(:map_nomapping, rule, path, nil) unless hash.key?('mapping')
233
- #errors << Kwalify.validate_error(:map_conflict, rule, path, 'enum:') if hash.key?('enum')
234
- errors << Kwalify.validate_error(:map_conflict, rule, path, 'pattern:') if hash.key?('pattern')
235
- errors << Kwalify.validate_error(:map_conflict, rule, path, 'sequence:') if hash.key?('sequence')
236
- #errors << Kwalify.validate_error(:map_conflict, rule, path, 'range:') if hash.key?('range')
237
- errors << Kwalify.validate_error(:map_conflict, rule, path, 'length:') if hash.key?('length')
286
+ errors << validate_error(:map_nomapping, rule, path, nil) unless hash.key?('mapping')
287
+ #errors << validate_error(:map_conflict, rule, path, 'enum:') if hash.key?('enum')
288
+ errors << validate_error(:map_conflict, rule, path, 'pattern:') if hash.key?('pattern')
289
+ errors << validate_error(:map_conflict, rule, path, 'sequence:') if hash.key?('sequence')
290
+ #errors << validate_error(:map_conflict, rule, path, 'range:') if hash.key?('range')
291
+ errors << validate_error(:map_conflict, rule, path, 'length:') if hash.key?('length')
238
292
  else
239
- errors << Kwalify.validate_error(:scalar_conflict, rule, path, 'sequence:') if hash.key?('sequence')
240
- errors << Kwalify.validate_error(:scalar_conflict, rule, path, 'mapping:') if hash.key?('mapping')
293
+ errors << validate_error(:scalar_conflict, rule, path, 'sequence:') if hash.key?('sequence')
294
+ errors << validate_error(:scalar_conflict, rule, path, 'mapping:') if hash.key?('mapping')
241
295
  if hash.key?('enum')
242
- errors << Kwalify.validate_error(:enum_conflict, rule, path, 'range:') if hash.key?('range')
243
- errors << Kwalify.validate_error(:enum_conflict, rule, path, 'length:') if hash.key?('length')
244
- errors << Kwalify.validate_error(:enum_conflict, rule, path, 'pattern:') if hash.key?('pattern')
296
+ errors << validate_error(:enum_conflict, rule, path, 'range:') if hash.key?('range')
297
+ errors << validate_error(:enum_conflict, rule, path, 'length:') if hash.key?('length')
298
+ errors << validate_error(:enum_conflict, rule, path, 'pattern:') if hash.key?('pattern')
245
299
  end
246
300
  end
247
301