kwalify 0.4.1 → 0.5.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.
- data/ChangeLog +14 -3
- data/README.txt +3 -3
- data/bin/kwalify +4 -15
- data/doc/users-guide.html +237 -61
- data/examples/address-book/address-book.schema.yaml +1 -1
- data/examples/invoice/invoice.schema.yaml +2 -2
- data/examples/tapkit/tapkit.schema.yaml +39 -39
- data/lib/kwalify.rb +4 -4
- data/lib/kwalify/errors.rb +21 -14
- data/lib/kwalify/main.rb +357 -0
- data/lib/kwalify/messages.rb +38 -9
- data/lib/kwalify/meta-validator.rb +96 -64
- data/lib/kwalify/rule.rb +356 -269
- data/lib/kwalify/types.rb +53 -35
- data/lib/kwalify/util/assert-diff.rb +2 -2
- data/lib/kwalify/util/option-parser.rb +2 -2
- data/lib/kwalify/util/yaml-helper.rb +2 -2
- data/lib/kwalify/validator.rb +8 -17
- data/lib/kwalify/{parser.rb → yaml-parser.rb} +70 -41
- data/test/test-main.rb +179 -0
- data/test/test-main.yaml +756 -0
- data/test/test-metavalidator.rb +38 -721
- data/test/test-metavalidator.yaml +1104 -0
- data/test/test-rule.rb +60 -0
- data/test/test-rule.yaml +314 -0
- data/test/test-validator.rb +5 -5
- data/test/test-validator.yaml +816 -0
- data/test/{test-parser.rb → test-yamlparser.rb} +17 -17
- data/test/test-yamlparser.yaml +1080 -0
- data/test/test.rb +5 -3
- data/todo.txt +1 -0
- metadata +16 -11
- data/lib/kwalify/main-program.rb +0 -258
data/test/test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###
|
2
|
-
### $Rev:
|
3
|
-
### $Release: 0.
|
2
|
+
### $Rev: 42 $
|
3
|
+
### $Release: 0.5.0 $
|
4
4
|
### copyright(c) 2005 kuwata-lab all rights reserved.
|
5
5
|
###
|
6
6
|
|
@@ -10,9 +10,11 @@ unless defined?(TESTDIR)
|
|
10
10
|
$LOAD_PATH << libdir << TESTDIR
|
11
11
|
end
|
12
12
|
|
13
|
+
require 'test-yamlparser.rb'
|
14
|
+
require 'test-rule.rb'
|
13
15
|
require 'test-validator.rb'
|
14
16
|
require 'test-metavalidator.rb'
|
15
|
-
require 'test-
|
17
|
+
require 'test-main.rb'
|
16
18
|
|
17
19
|
#suite = Test::Unit::TestSuite.new()
|
18
20
|
#suite << ValidatorTest.suite()
|
data/todo.txt
CHANGED
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
!ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.10
|
3
3
|
specification_version: 1
|
4
4
|
name: kwalify
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.5.0
|
7
|
+
date: 2005-12-18
|
8
8
|
summary: a tiny schema validator for YAML document.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -23,22 +23,20 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
23
23
|
version: 0.0.0
|
24
24
|
version:
|
25
25
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
26
|
authors:
|
29
27
|
- kwatch
|
30
28
|
files:
|
31
|
-
- lib/kwalify
|
32
29
|
- lib/kwalify.rb
|
30
|
+
- lib/kwalify
|
33
31
|
- lib/kwalify/errors.rb
|
34
|
-
- lib/kwalify/main
|
32
|
+
- lib/kwalify/main.rb
|
35
33
|
- lib/kwalify/messages.rb
|
36
34
|
- lib/kwalify/meta-validator.rb
|
37
|
-
- lib/kwalify/parser.rb
|
38
35
|
- lib/kwalify/rule.rb
|
39
36
|
- lib/kwalify/types.rb
|
40
|
-
- lib/kwalify/util
|
41
37
|
- lib/kwalify/validator.rb
|
38
|
+
- lib/kwalify/yaml-parser.rb
|
39
|
+
- lib/kwalify/util
|
42
40
|
- lib/kwalify/util/assert-diff.rb
|
43
41
|
- lib/kwalify/util/option-parser.rb
|
44
42
|
- lib/kwalify/util/yaml-helper.rb
|
@@ -56,9 +54,16 @@ files:
|
|
56
54
|
- examples/tapkit/tapkit.schema.yaml
|
57
55
|
- examples/tapkit/tapkit.yaml
|
58
56
|
- test/test-metavalidator.rb
|
59
|
-
- test/test-parser.rb
|
60
57
|
- test/test-validator.rb
|
61
58
|
- test/test.rb
|
59
|
+
- test/test-main.rb
|
60
|
+
- test/test-main.yaml
|
61
|
+
- test/test-rule.yaml
|
62
|
+
- test/test-validator.yaml
|
63
|
+
- test/test-rule.rb
|
64
|
+
- test/test-yamlparser.yaml
|
65
|
+
- test/test-yamlparser.rb
|
66
|
+
- test/test-metavalidator.yaml
|
62
67
|
- doc/users-guide.html
|
63
68
|
- doc/docstyle.css
|
64
69
|
- README.txt
|
data/lib/kwalify/main-program.rb
DELETED
@@ -1,258 +0,0 @@
|
|
1
|
-
###
|
2
|
-
### $Rev: 39 $
|
3
|
-
### $Release: 0.4.1 $
|
4
|
-
### copyright(c) 2005 kuwata-lab all rights reserved.
|
5
|
-
###
|
6
|
-
|
7
|
-
require 'yaml'
|
8
|
-
require 'kwalify'
|
9
|
-
require 'kwalify/util/yaml-helper'
|
10
|
-
require 'kwalify/util/option-parser'
|
11
|
-
|
12
|
-
|
13
|
-
module Kwalify
|
14
|
-
|
15
|
-
##
|
16
|
-
## ex.
|
17
|
-
## command = File.basename($0)
|
18
|
-
## begin
|
19
|
-
## main = Kwalify::MainProgram.new(ARGV, command)
|
20
|
-
## s = main.execute
|
21
|
-
## print s if s
|
22
|
-
## rescue CommandOptionError => ex
|
23
|
-
## $stderr.puts "ERROR: #{ex.message}"
|
24
|
-
## exit 1
|
25
|
-
## rescue Kwalify::KwalifyError => ex
|
26
|
-
## $stderr.puts "ERROR: #{ex.message}"
|
27
|
-
## exit 1
|
28
|
-
## end
|
29
|
-
##
|
30
|
-
class MainProgram
|
31
|
-
|
32
|
-
def initialize(argv=ARGV, command=nil)
|
33
|
-
@command = command || File.basename($0)
|
34
|
-
@options, @proerties = _parse_argv(argv)
|
35
|
-
@filenames = argv
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
def execute(filenames=@filenames)
|
40
|
-
if @options[:help] || @options[:version]
|
41
|
-
s = ''
|
42
|
-
s << _version() if @options[:version]
|
43
|
-
s << _usage() if @options[:help]
|
44
|
-
return s
|
45
|
-
end
|
46
|
-
if @options[:meta] || @options[:meta2]
|
47
|
-
s = _meta_validate(filenames)
|
48
|
-
elsif @options[:schema]
|
49
|
-
if @options[:debug]
|
50
|
-
s = _inspect_schema(@options[:schema])
|
51
|
-
else
|
52
|
-
s = _validate(filenames)
|
53
|
-
end
|
54
|
-
else
|
55
|
-
#* key=:action_required msg="command-line option '-f' or '-m' required."
|
56
|
-
raise CommandOptionError.new(nil, nil, Kwalify.msg(:action_required))
|
57
|
-
end
|
58
|
-
return s # or return (s == nil || s.empty?) ? nil : s
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
|
65
|
-
def _load_yaml(str)
|
66
|
-
str = YamlHelper.untabify(tr) if @options[:untabify]
|
67
|
-
if @options[:linenum]
|
68
|
-
@parser = Kwalify::Parser.new(str)
|
69
|
-
doc = @parser.parse()
|
70
|
-
else
|
71
|
-
doc = YAML.load(str)
|
72
|
-
doc = doc.value if _domain_type?(doc)
|
73
|
-
end
|
74
|
-
return doc
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
def _meta_validate(filenames)
|
79
|
-
filenames = [ nil ] if filenames.empty?
|
80
|
-
meta_validator = @options[:meta2] ? nil : Kwalify.meta_validator()
|
81
|
-
flag_no_validate = @options[:meta2] == true
|
82
|
-
s = ''
|
83
|
-
filenames.each do |filename|
|
84
|
-
s << __meta_validate(meta_validator, filename)
|
85
|
-
end
|
86
|
-
return s
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
def __meta_validate(meta_validator, filename=nil)
|
91
|
-
str = filename ? File.open(filename) { |f| f.read() } : $stdin.read()
|
92
|
-
schema = _load_yaml(str)
|
93
|
-
filename ||= "(stdin)"
|
94
|
-
if !schema || schema.empty?
|
95
|
-
#* key=:meta_schema_empty msg="%s: empty.\n"
|
96
|
-
return Kwalify.msg(:meta_schema_emtpy) % filename
|
97
|
-
end
|
98
|
-
errors = nil
|
99
|
-
if meta_validator
|
100
|
-
errors = meta_validator.validate(schema)
|
101
|
-
else
|
102
|
-
begin
|
103
|
-
validator = Kwalify::Validator.new(schema) # error raised when schema is wrong
|
104
|
-
rescue Kwalify::SchemaError => ex
|
105
|
-
errors = [ ex ]
|
106
|
-
end
|
107
|
-
end
|
108
|
-
s = ''
|
109
|
-
if !errors || errors.empty?
|
110
|
-
#* key=:meta_validation_valid msg="%s: ok.\n"
|
111
|
-
s << (Kwalify.msg(:meta_validation_valid) % filename) unless @options[:silent]
|
112
|
-
else
|
113
|
-
#* key=:meta_validation_invalid msg="%s: NG!\n"
|
114
|
-
s << (Kwalify.msg(:meta_validation_invalid) % filename)
|
115
|
-
s << _errors_to_str(errors)
|
116
|
-
end
|
117
|
-
return s
|
118
|
-
end
|
119
|
-
|
120
|
-
|
121
|
-
def _errors_to_str(errors)
|
122
|
-
s = ''
|
123
|
-
flag_linenum = @options[:linenum]
|
124
|
-
if flag_linenum
|
125
|
-
@parser.set_error_linenums(errors)
|
126
|
-
errors = errors.sort { |e1, e2| e1.linenum <=> e2.linenum }
|
127
|
-
end
|
128
|
-
errors.each do |error|
|
129
|
-
if flag_linenum
|
130
|
-
s << " - (line #{error.linenum}) [#{error.path}] #{error.message}\n"
|
131
|
-
else
|
132
|
-
s << " - [#{error.path}] #{error.message}\n"
|
133
|
-
end
|
134
|
-
end
|
135
|
-
return s
|
136
|
-
end
|
137
|
-
|
138
|
-
|
139
|
-
def _validate(filenames)
|
140
|
-
schema_filename = @options[:schema]
|
141
|
-
str = File.open(schema_filename) { |f| f.read() }
|
142
|
-
schema = _load_yaml(str)
|
143
|
-
validator = Kwalify::Validator.new(schema)
|
144
|
-
#
|
145
|
-
filenames = [ nil ] if filenames.empty?
|
146
|
-
s = ''
|
147
|
-
filenames.each do |filename|
|
148
|
-
s << __validate(validator, filename)
|
149
|
-
end
|
150
|
-
return s
|
151
|
-
end
|
152
|
-
|
153
|
-
|
154
|
-
def __validate(validator, filename=nil)
|
155
|
-
str = filename ? File.open(filename) { |f| f.read() } : $stdin.read()
|
156
|
-
filename ||= "(stdin)"
|
157
|
-
s = ''
|
158
|
-
i = -1
|
159
|
-
_each_yaml_documents(str) do |document|
|
160
|
-
i += 1
|
161
|
-
if !document || document.empty?
|
162
|
-
#* key=:schema_empty msg="%s#%d: empty.\n"
|
163
|
-
s << (Kwalify.msg(:schema_empty) % i)
|
164
|
-
next
|
165
|
-
end
|
166
|
-
errors = validator.validate(document)
|
167
|
-
if errors.empty?
|
168
|
-
#* key=:validation_valid msg="%s#%d: valid.\n"
|
169
|
-
s << (Kwalify.msg(:validation_valid) % [filename, i]) unless @options[:silent]
|
170
|
-
else
|
171
|
-
#* key=:validation_invalid msg="%s#%d: INVALID\n"
|
172
|
-
s << (Kwalify.msg(:validation_invalid) % [filename, i])
|
173
|
-
s << _errors_to_str(errors)
|
174
|
-
end
|
175
|
-
end
|
176
|
-
return s
|
177
|
-
end
|
178
|
-
|
179
|
-
|
180
|
-
def _each_yaml_documents(str, &block)
|
181
|
-
str = YamlHelper.untabify(str) if @options[:untabify]
|
182
|
-
if @options[:linenum]
|
183
|
-
@parser = Kwalify::Parser.new(str)
|
184
|
-
doc = @parser.parse()
|
185
|
-
yield(doc)
|
186
|
-
else
|
187
|
-
YAML::load_documents(str) do |doc|
|
188
|
-
doc = doc.value if _domain_type?(doc)
|
189
|
-
yield(doc)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
|
195
|
-
def _inspect_schema(schema_filename)
|
196
|
-
filename = schema_filename
|
197
|
-
str = filename ? File.open(filename) { |f| f.read() } : $stdin.read()
|
198
|
-
schema = _load_yaml(str)
|
199
|
-
return nil if !schema || schema.empty?
|
200
|
-
validator = Kwalify::Validator.new(schema) # error raised when schema is wrong
|
201
|
-
s = validator._inspect()
|
202
|
-
s << "\n" unless s[-1] == ?\n
|
203
|
-
return s
|
204
|
-
end
|
205
|
-
|
206
|
-
|
207
|
-
def _usage()
|
208
|
-
s = ''
|
209
|
-
s << "Usage1: #{@command} [-hvstl] -f schema.yaml document.yaml [document2.yaml ...]\n"
|
210
|
-
s << "Usage2: #{@command} [-hvstl] -m schema.yaml [schema2.yaml ...]\n"
|
211
|
-
s << " -h, --help : help\n"
|
212
|
-
s << " -v : version\n"
|
213
|
-
s << " -s : silent\n"
|
214
|
-
s << " -f schema.yaml : schema definition file\n"
|
215
|
-
s << " -m : meta-validation mode\n"
|
216
|
-
s << " -t : expand tab character automatically\n"
|
217
|
-
s << " -l : show linenumber when errored (experimental)\n"
|
218
|
-
return s
|
219
|
-
end
|
220
|
-
|
221
|
-
|
222
|
-
def _version()
|
223
|
-
return "Kwalify: #{RELEASE}\n"
|
224
|
-
end
|
225
|
-
|
226
|
-
|
227
|
-
def _parse_argv(argv)
|
228
|
-
opt_parser = CommandOptionParser.new("hvstlmMD", "f")
|
229
|
-
#opts, props = opt_parser.parse(argv)
|
230
|
-
#properties = {}
|
231
|
-
#props.each do |pname, pvalue|
|
232
|
-
# key = pname.gsub(/-/, '_').intern
|
233
|
-
# value = value == nil ? true: CommandOptionParser.to_value(pvalue)
|
234
|
-
# properties[key] = value
|
235
|
-
#end
|
236
|
-
auto_convert = true
|
237
|
-
opts, properties = opt_parser.parse(argv, auto_convert)
|
238
|
-
options = {}
|
239
|
-
options[:help] = opts[?h] || properties[:help]
|
240
|
-
options[:version] = opts[?v] || properties[:version]
|
241
|
-
options[:silent] = opts[?s]
|
242
|
-
options[:schema] = opts[?f]
|
243
|
-
options[:linenum] = opts[?l]
|
244
|
-
options[:meta] = opts[?m]
|
245
|
-
options[:meta2] = opts[?M]
|
246
|
-
options[:untabify] = opts[?t]
|
247
|
-
options[:debug] = opts[?D]
|
248
|
-
return options, properties
|
249
|
-
end
|
250
|
-
|
251
|
-
def _domain_type?(doc)
|
252
|
-
klass = defined?(YAML::DomainType) ? YAML::DomainType : YAML::Syck::DomainType
|
253
|
-
return doc.is_a?(klass)
|
254
|
-
end
|
255
|
-
|
256
|
-
end
|
257
|
-
|
258
|
-
end
|