dc-kwalify 0.7.2
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/CHANGES.txt +252 -0
- data/MIT-LICENSE +20 -0
- data/README.txt +61 -0
- data/bin/kwalify +13 -0
- data/contrib/inline-require +179 -0
- data/contrib/kwalify +4160 -0
- data/doc/docstyle.css +188 -0
- data/doc/img/fig01.png +0 -0
- data/doc/users-guide.html +2050 -0
- data/doc-api/classes/CommandOptionError.html +184 -0
- data/doc-api/classes/CommandOptionParser.html +325 -0
- data/doc-api/classes/Kwalify/AssertionError.html +148 -0
- data/doc-api/classes/Kwalify/BaseError.html +297 -0
- data/doc-api/classes/Kwalify/BaseParser.html +461 -0
- data/doc-api/classes/Kwalify/CommandOptionError.html +168 -0
- data/doc-api/classes/Kwalify/ErrorHelper.html +223 -0
- data/doc-api/classes/Kwalify/HashInterface.html +118 -0
- data/doc-api/classes/Kwalify/Json.html +105 -0
- data/doc-api/classes/Kwalify/KwalifyError.html +111 -0
- data/doc-api/classes/Kwalify/Main.html +339 -0
- data/doc-api/classes/Kwalify/MetaValidator.html +448 -0
- data/doc-api/classes/Kwalify/Parser.html +155 -0
- data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +165 -0
- data/doc-api/classes/Kwalify/PlainYamlParser.html +523 -0
- data/doc-api/classes/Kwalify/Rule.html +433 -0
- data/doc-api/classes/Kwalify/SchemaError.html +148 -0
- data/doc-api/classes/Kwalify/SyntaxError.html +185 -0
- data/doc-api/classes/Kwalify/Types.html +302 -0
- data/doc-api/classes/Kwalify/Util/HashLike.html +246 -0
- data/doc-api/classes/Kwalify/Util/OrderedHash.html +330 -0
- data/doc-api/classes/Kwalify/Util.html +390 -0
- data/doc-api/classes/Kwalify/ValidationError.html +148 -0
- data/doc-api/classes/Kwalify/Validator.html +381 -0
- data/doc-api/classes/Kwalify/Yaml/Parser.html +1538 -0
- data/doc-api/classes/Kwalify/Yaml.html +194 -0
- data/doc-api/classes/Kwalify/YamlParser.html +542 -0
- data/doc-api/classes/Kwalify/YamlSyntaxError.html +119 -0
- data/doc-api/classes/Kwalify.html +292 -0
- data/doc-api/classes/Test/Unit.html +101 -0
- data/doc-api/classes/Test.html +107 -0
- data/doc-api/created.rid +1 -0
- data/doc-api/files/__/README_txt.html +172 -0
- data/doc-api/files/kwalify/errors_rb.html +114 -0
- data/doc-api/files/kwalify/main_rb.html +118 -0
- data/doc-api/files/kwalify/messages_rb.html +107 -0
- data/doc-api/files/kwalify/meta-validator_rb.html +117 -0
- data/doc-api/files/kwalify/parser/base_rb.html +116 -0
- data/doc-api/files/kwalify/parser/yaml_rb.html +117 -0
- data/doc-api/files/kwalify/rule_rb.html +116 -0
- data/doc-api/files/kwalify/types_rb.html +114 -0
- data/doc-api/files/kwalify/util/assert-text-equal_rb.html +115 -0
- data/doc-api/files/kwalify/util/hash-interface_rb.html +114 -0
- data/doc-api/files/kwalify/util/hashlike_rb.html +107 -0
- data/doc-api/files/kwalify/util/option-parser_rb.html +107 -0
- data/doc-api/files/kwalify/util/ordered-hash_rb.html +107 -0
- data/doc-api/files/kwalify/util/testcase-helper_rb.html +115 -0
- data/doc-api/files/kwalify/util_rb.html +107 -0
- data/doc-api/files/kwalify/validator_rb.html +117 -0
- data/doc-api/files/kwalify/yaml-parser_rb.html +117 -0
- data/doc-api/files/kwalify_rb.html +121 -0
- data/doc-api/fr_class_index.html +57 -0
- data/doc-api/fr_file_index.html +45 -0
- data/doc-api/fr_method_index.html +168 -0
- data/doc-api/index.html +24 -0
- data/doc-api/rdoc-style.css +208 -0
- data/examples/address-book/Makefile +10 -0
- data/examples/address-book/address-book.schema.yaml +45 -0
- data/examples/address-book/address-book.yaml +36 -0
- data/examples/data-binding/BABEL.data.yaml +63 -0
- data/examples/data-binding/BABEL.schema.yaml +31 -0
- data/examples/data-binding/Makefile +8 -0
- data/examples/data-binding/Rakefile +13 -0
- data/examples/data-binding/main.rb +27 -0
- data/examples/invoice/Makefile +9 -0
- data/examples/invoice/invoice.schema.yaml +43 -0
- data/examples/invoice/invoice.yaml +32 -0
- data/examples/tapkit/Makefile +10 -0
- data/examples/tapkit/main.rb +7 -0
- data/examples/tapkit/tapkit.schema.yaml +146 -0
- data/examples/tapkit/tapkit.yaml +85 -0
- data/lib/kwalify/errors.rb +127 -0
- data/lib/kwalify/kwalify.schema.yaml +58 -0
- data/lib/kwalify/main.rb +442 -0
- data/lib/kwalify/messages.rb +173 -0
- data/lib/kwalify/meta-validator.rb +275 -0
- data/lib/kwalify/parser/base.rb +127 -0
- data/lib/kwalify/parser/yaml.rb +841 -0
- data/lib/kwalify/rule.rb +559 -0
- data/lib/kwalify/templates/genclass-java.eruby +222 -0
- data/lib/kwalify/templates/genclass-php.eruby +104 -0
- data/lib/kwalify/templates/genclass-ruby.eruby +113 -0
- data/lib/kwalify/types.rb +156 -0
- data/lib/kwalify/util/assert-text-equal.rb +46 -0
- data/lib/kwalify/util/hash-interface.rb +18 -0
- data/lib/kwalify/util/hashlike.rb +51 -0
- data/lib/kwalify/util/option-parser.rb +220 -0
- data/lib/kwalify/util/ordered-hash.rb +57 -0
- data/lib/kwalify/util/testcase-helper.rb +112 -0
- data/lib/kwalify/util.rb +158 -0
- data/lib/kwalify/validator.rb +282 -0
- data/lib/kwalify/yaml-parser.rb +870 -0
- data/lib/kwalify.rb +67 -0
- data/setup.rb +1585 -0
- data/test/Rookbook.yaml +10 -0
- data/test/data/users-guide/AddressBook.java.expected +40 -0
- data/test/data/users-guide/BABEL.data.yaml +24 -0
- data/test/data/users-guide/BABEL.schema.yaml +30 -0
- data/test/data/users-guide/ExampleAddressBook.java +47 -0
- data/test/data/users-guide/Group.java.expected +24 -0
- data/test/data/users-guide/Person.java.expected +44 -0
- data/test/data/users-guide/address_book.rb +52 -0
- data/test/data/users-guide/address_book.schema.yaml +28 -0
- data/test/data/users-guide/address_book.yaml +27 -0
- data/test/data/users-guide/answers-schema.yaml +12 -0
- data/test/data/users-guide/answers-validator.rb +52 -0
- data/test/data/users-guide/babel_genclass.result +26 -0
- data/test/data/users-guide/config.schema.yaml +7 -0
- data/test/data/users-guide/config.yaml +4 -0
- data/test/data/users-guide/document01a.yaml +3 -0
- data/test/data/users-guide/document01b.yaml +3 -0
- data/test/data/users-guide/document02a.yaml +4 -0
- data/test/data/users-guide/document02b.yaml +4 -0
- data/test/data/users-guide/document03a.yaml +6 -0
- data/test/data/users-guide/document03b.yaml +6 -0
- data/test/data/users-guide/document04a.yaml +9 -0
- data/test/data/users-guide/document04b.yaml +9 -0
- data/test/data/users-guide/document05a.yaml +11 -0
- data/test/data/users-guide/document05b.yaml +12 -0
- data/test/data/users-guide/document06a.yaml +15 -0
- data/test/data/users-guide/document06b.yaml +16 -0
- data/test/data/users-guide/document07a.yaml +9 -0
- data/test/data/users-guide/document07b.yaml +7 -0
- data/test/data/users-guide/document12a.json +10 -0
- data/test/data/users-guide/document12b.json +6 -0
- data/test/data/users-guide/document13a.yaml +17 -0
- data/test/data/users-guide/document14a.yaml +3 -0
- data/test/data/users-guide/document14b.yaml +3 -0
- data/test/data/users-guide/document15a.yaml +6 -0
- data/test/data/users-guide/document15b.yaml +5 -0
- data/test/data/users-guide/example_address_book.rb +10 -0
- data/test/data/users-guide/example_address_book_java.result +32 -0
- data/test/data/users-guide/example_address_book_ruby.result +31 -0
- data/test/data/users-guide/genclass_java.result +4 -0
- data/test/data/users-guide/howto-validation-with-parsing.rb +28 -0
- data/test/data/users-guide/howto-validation.rb +25 -0
- data/test/data/users-guide/howto3.rb +6 -0
- data/test/data/users-guide/howto3.result +5 -0
- data/test/data/users-guide/howto3.yaml +8 -0
- data/test/data/users-guide/howto5_databinding.result +111 -0
- data/test/data/users-guide/invalid01.result +3 -0
- data/test/data/users-guide/invalid02.result +5 -0
- data/test/data/users-guide/invalid03.result +5 -0
- data/test/data/users-guide/invalid04.result +4 -0
- data/test/data/users-guide/invalid05.result +11 -0
- data/test/data/users-guide/invalid06.result +4 -0
- data/test/data/users-guide/invalid07.result +3 -0
- data/test/data/users-guide/invalid08.result +3 -0
- data/test/data/users-guide/invalid12.json +8 -0
- data/test/data/users-guide/invalid14.result +4 -0
- data/test/data/users-guide/invalid15.result +4 -0
- data/test/data/users-guide/loadbabel.rb +27 -0
- data/test/data/users-guide/loadconfig.rb +16 -0
- data/test/data/users-guide/loadconfig.result +6 -0
- data/test/data/users-guide/models.rb +22 -0
- data/test/data/users-guide/option_ha.result +6 -0
- data/test/data/users-guide/option_ha_genclass_java.result +7 -0
- data/test/data/users-guide/schema01.yaml +3 -0
- data/test/data/users-guide/schema02.yaml +12 -0
- data/test/data/users-guide/schema03.yaml +9 -0
- data/test/data/users-guide/schema04.yaml +20 -0
- data/test/data/users-guide/schema05.yaml +29 -0
- data/test/data/users-guide/schema06.yaml +11 -0
- data/test/data/users-guide/schema12.json +12 -0
- data/test/data/users-guide/schema13.yaml +13 -0
- data/test/data/users-guide/schema14.yaml +5 -0
- data/test/data/users-guide/schema15.yaml +21 -0
- data/test/data/users-guide/valid01.result +2 -0
- data/test/data/users-guide/valid02.result +2 -0
- data/test/data/users-guide/valid03.result +2 -0
- data/test/data/users-guide/valid04.result +2 -0
- data/test/data/users-guide/valid05.result +2 -0
- data/test/data/users-guide/valid06.result +2 -0
- data/test/data/users-guide/valid07.result +2 -0
- data/test/data/users-guide/valid08.result +2 -0
- data/test/data/users-guide/valid12.result +2 -0
- data/test/data/users-guide/valid13.result +2 -0
- data/test/data/users-guide/valid14.result +2 -0
- data/test/data/users-guide/valid15.result +2 -0
- data/test/data/users-guide/validate08.rb +37 -0
- data/test/test-action.rb +78 -0
- data/test/test-action.yaml +738 -0
- data/test/test-databinding.rb +83 -0
- data/test/test-databinding.yaml +339 -0
- data/test/test-main.rb +157 -0
- data/test/test-main.yaml +415 -0
- data/test/test-metavalidator.rb +80 -0
- data/test/test-metavalidator.yaml +1179 -0
- data/test/test-parser-yaml.rb +57 -0
- data/test/test-parser-yaml.yaml +1749 -0
- data/test/test-rule.rb +26 -0
- data/test/test-rule.yaml +317 -0
- data/test/test-users-guide.rb +75 -0
- data/test/test-util.rb +125 -0
- data/test/test-validator.rb +95 -0
- data/test/test-validator.yaml +986 -0
- data/test/test-yaml-parser.rb +47 -0
- data/test/test-yaml-parser.yaml +1226 -0
- data/test/test.rb +61 -0
- metadata +274 -0
data/CHANGES.txt
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
.=title: ChangeLog
|
|
2
|
+
.?release: $Release: 0.7.2 $
|
|
3
|
+
.?lastupdate: $Date$
|
|
4
|
+
.?version: $Rev$
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
.: Release 0.7.2 (2010-07-18)
|
|
8
|
+
|
|
9
|
+
.* bugfix:
|
|
10
|
+
|
|
11
|
+
.- Fix a bug that kwalify command raised error when YAML document is empty (thanks to Nuttall).
|
|
12
|
+
|
|
13
|
+
.- Fix a bug that Kwalify::Util.untabify() removed tailing empty strings.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
.: Release 0.7.1 (2008-01-28)
|
|
17
|
+
|
|
18
|
+
.* bugfix:
|
|
19
|
+
|
|
20
|
+
.- 'Duplicated key' error is now not raised if corresponding rule
|
|
21
|
+
has 'default:' constraint.
|
|
22
|
+
|
|
23
|
+
.- Path is now copied in Kwalify::ValidationError#initialize()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
.: Release 0.7.0 (2008-01-27)
|
|
27
|
+
|
|
28
|
+
.* enhancements:
|
|
29
|
+
|
|
30
|
+
.- YAML parser is rewrited from scratch.
|
|
31
|
+
The new parser class Kwalify::Yaml::Parser is available.
|
|
32
|
+
The old parser class Kwalify::YamlParser is stil available,
|
|
33
|
+
but it is not recommended to use.
|
|
34
|
+
|
|
35
|
+
.- Validator is integrated with yaml parser.
|
|
36
|
+
It is able to parse and validate at once.
|
|
37
|
+
.--------------------
|
|
38
|
+
## create validator
|
|
39
|
+
require 'kwalify'
|
|
40
|
+
schema = Kwalify::Yaml.load_file('schema.yaml')
|
|
41
|
+
validator = Kwalify::Validator.new(schema)
|
|
42
|
+
## parse with validation
|
|
43
|
+
parser = Kwalify::Yaml::Parser.new(validator)
|
|
44
|
+
ydoc = parser.parse(File.read('data.yaml'))
|
|
45
|
+
## show validation errors if exist
|
|
46
|
+
errors = parser.errors()
|
|
47
|
+
if errors && !errors.empty?
|
|
48
|
+
for e in errors
|
|
49
|
+
puts "** %d:%d [%s] %s" % [e.linenum, e.column, e.path, e.message]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
.--------------------
|
|
53
|
+
|
|
54
|
+
.- Data binding is integrated into Kwalify::Yaml::Parser.
|
|
55
|
+
If you set Kwalify::Yaml::Parser#data_binding to true
|
|
56
|
+
and you specified class names in schema file,
|
|
57
|
+
parser creates instance objects instead of Hash objects.
|
|
58
|
+
It means that you don't need to add '!ruby/Classname'
|
|
59
|
+
for each data.
|
|
60
|
+
.? schema file (config.schema.yaml)
|
|
61
|
+
.--------------------
|
|
62
|
+
type: map
|
|
63
|
+
class: Config
|
|
64
|
+
mapping:
|
|
65
|
+
"host": { type: str, required: true }
|
|
66
|
+
"port": { type: int }
|
|
67
|
+
"user": { type: str, required: true }
|
|
68
|
+
"pass": { type: str, required: true }
|
|
69
|
+
.--------------------
|
|
70
|
+
.? configuration file (config.yaml)
|
|
71
|
+
.--------------------
|
|
72
|
+
host: localhost
|
|
73
|
+
port: 8080
|
|
74
|
+
user: user1
|
|
75
|
+
pass: password1
|
|
76
|
+
.--------------------
|
|
77
|
+
.? ruby program (ex1.rb)
|
|
78
|
+
.--------------------
|
|
79
|
+
## class definition
|
|
80
|
+
require 'kwalify/util/hashlike'
|
|
81
|
+
class Config
|
|
82
|
+
include Kwalify::Util::HashLike # defines [], []=, ...
|
|
83
|
+
attr_accessor :host, :posrt, :user, :pass
|
|
84
|
+
end
|
|
85
|
+
## create validator object
|
|
86
|
+
require 'kwalify'
|
|
87
|
+
schema = Kwalify::Yaml.load_file('config.schema.yaml')
|
|
88
|
+
validator = Kwalify::Validator.new(schema)
|
|
89
|
+
## parse configuration file with data binding
|
|
90
|
+
parser = Kwalify::Yaml::Parser.new(validator)
|
|
91
|
+
parser.data_binding = true # enable data binding
|
|
92
|
+
config = parser.parse_file('config.yaml')
|
|
93
|
+
p config #=> #<Config:0x542590 @user="user1", @port=8080,
|
|
94
|
+
# @pass="password1", @host="localhost">
|
|
95
|
+
.--------------------
|
|
96
|
+
|
|
97
|
+
.- Preceding alias supported.
|
|
98
|
+
If you set Kwalify::Yaml::Parser#preceding_alias to true,
|
|
99
|
+
parser allows aliases to apprear before corresponding anchor
|
|
100
|
+
appears.
|
|
101
|
+
This is very useful when node graph is complex.
|
|
102
|
+
.--------------------
|
|
103
|
+
- name: Foo
|
|
104
|
+
parent: *bar # preceding alias
|
|
105
|
+
- &bar
|
|
106
|
+
name: Bar
|
|
107
|
+
parent: *baz # preceding alias
|
|
108
|
+
- &baz
|
|
109
|
+
name: Baz
|
|
110
|
+
.--------------------
|
|
111
|
+
|
|
112
|
+
.- New command-line option '-P' enables preceding alias.
|
|
113
|
+
|
|
114
|
+
.- Kwalify::Yaml.load() and Kwalify::Yaml.load_file() are added.
|
|
115
|
+
They are similar to YAML.load() and YAML.load_file() but they
|
|
116
|
+
use Kwalify::Yaml::Parser object.
|
|
117
|
+
|
|
118
|
+
.- New utilify method Kwalify::Util.traverse_schema() provided.
|
|
119
|
+
.--------------------
|
|
120
|
+
require 'kwalify'
|
|
121
|
+
require 'kwalify/util'
|
|
122
|
+
schema = Kwalify::Yaml.load('schema.yaml')
|
|
123
|
+
Kwalify::Util.traverse_schema(schema) do |rulehash|
|
|
124
|
+
if classname = rulehash['class']
|
|
125
|
+
## add namespace to class name
|
|
126
|
+
rulehash['class'] = "Foo::Bar::#{classname}"
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
.--------------------
|
|
130
|
+
|
|
131
|
+
.- Add 'kwalify/util/hashlike.rb' which contains definition of
|
|
132
|
+
Kwalify::Util::HashLike module.
|
|
133
|
+
This module defines [], []=, keys(), key?(), and each() methods,
|
|
134
|
+
and these are required for data-binding.
|
|
135
|
+
|
|
136
|
+
.- Action 'genclass-ruby' supports '--hashlike' property.
|
|
137
|
+
|
|
138
|
+
.- Action 'genclass-ruby' supports '--initialize=false' property.
|
|
139
|
+
|
|
140
|
+
.- Add action 'geclass-php'
|
|
141
|
+
|
|
142
|
+
.- '\xXX' and '\uXXXX' are supported in Kwalify::Yaml::Parser.
|
|
143
|
+
|
|
144
|
+
.- New constrant 'default:' is added to kwalify.schema.yaml.
|
|
145
|
+
This constrant have no effect to validation and parsing,
|
|
146
|
+
and it is used only in 'genclass-xxx' action.
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
.* changes:
|
|
150
|
+
|
|
151
|
+
.- Action 'genclass-ruby' and 'genclass-java' are changed to
|
|
152
|
+
generate boolean accessors.
|
|
153
|
+
For example, attribute 'active' is specified as 'type: bool'
|
|
154
|
+
in schema file, action 'genclass-ruby' generates
|
|
155
|
+
"def active? ; @active; end"
|
|
156
|
+
and action 'genclass-java' generates
|
|
157
|
+
"public boolean isActive() { return _active; }".
|
|
158
|
+
|
|
159
|
+
.- Command-line option '-s' (silent) is obsolete and replaced with
|
|
160
|
+
'-q' (quiet). Option '-s' is still available but it is recommended
|
|
161
|
+
to use '-q'.
|
|
162
|
+
|
|
163
|
+
.- License is changed from LGPL to MIT-LICENSE.
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
.: Release 0.6.0 (2006-05-30)
|
|
167
|
+
|
|
168
|
+
.* enhancements:
|
|
169
|
+
|
|
170
|
+
.- Class definition generation support.
|
|
171
|
+
New command-line option '-a genclass-ruby' or '-a genclass-java' generates
|
|
172
|
+
class definitions in Ruby or Java from schema file.
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
.: Release 0.5.1 (2005-12-20)
|
|
176
|
+
|
|
177
|
+
.* enhances:
|
|
178
|
+
|
|
179
|
+
.- add new command-line option '-E' which show errors in emacs-compatible style.
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
.: Release 0.5.0 (2005-12-17)
|
|
183
|
+
|
|
184
|
+
.* enhancements:
|
|
185
|
+
|
|
186
|
+
.- Meta-validation check for 'max < min', 'max-ex <= min-ex', and so on.
|
|
187
|
+
.- Many test-cases are added
|
|
188
|
+
|
|
189
|
+
.* changes:
|
|
190
|
+
|
|
191
|
+
.- 'Parser' class is renamed to 'YamlParser'
|
|
192
|
+
.- 'PlainParser' class is renamed to 'PlainYamlParser'
|
|
193
|
+
.- YamlParser#set_error_linenums() is renamed to set_errors_linenum()
|
|
194
|
+
.- ValidatorError#<=> added
|
|
195
|
+
.- ParseError class is renamed to YamlSyntaxError
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
.: Release 0.4.1 (2005-10-26)
|
|
199
|
+
|
|
200
|
+
.* bugfix:
|
|
201
|
+
|
|
202
|
+
.- Support Ruby 1.8.3 (around YAML::Syck::DomainType)
|
|
203
|
+
.- Show correct error line number when key is undefined or unknown.
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
.: Release 0.4.0 (2005-10-25)
|
|
207
|
+
|
|
208
|
+
.* enhancements:
|
|
209
|
+
|
|
210
|
+
.- New command-line option '-l' prints error line numbers.
|
|
211
|
+
.- Supports default rule of mapping.
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
.: Release 0.3.0 (2005-09-30)
|
|
215
|
+
|
|
216
|
+
.* enhancements:
|
|
217
|
+
|
|
218
|
+
.- Support 'max-ex' and 'min-ex' (max/min exclusive) support with 'range:'
|
|
219
|
+
.- Support 'max-ex' and 'min-ex' (max/min exclusive) support with 'length:'
|
|
220
|
+
.- Support 'unique' constraint
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
.: Release 0.2.0 (2005-09-25)
|
|
224
|
+
|
|
225
|
+
.* enhancements:
|
|
226
|
+
|
|
227
|
+
.- New type 'scalar' and 'timestamp' added
|
|
228
|
+
.- Add new rule 'range:' which validates value range.
|
|
229
|
+
See users' guide for details.
|
|
230
|
+
.- Add new rule 'length:' which validate length of string value.
|
|
231
|
+
See users' guide for details.
|
|
232
|
+
.- Add experimental rule 'assert:' which validates value with an
|
|
233
|
+
expression. See users' guide for details.
|
|
234
|
+
.- New method 'Kwalify::Validator#validate_hook()' is added.
|
|
235
|
+
This method is called by Kwalify::Validator#validate().
|
|
236
|
+
See users' guide for details.
|
|
237
|
+
.- New class 'MetaValidator' added.
|
|
238
|
+
.- New test script 'test/test-metavalidator.rb' added.
|
|
239
|
+
|
|
240
|
+
.* changes:
|
|
241
|
+
|
|
242
|
+
.- Type name changed to suite YAML data type:
|
|
243
|
+
.= string -> str
|
|
244
|
+
.= integer -> int
|
|
245
|
+
.= boolean -> bool
|
|
246
|
+
.- Error index starts with 0 (before starts with 1).
|
|
247
|
+
.- Class 'Schema' is renamed to 'Rule'.
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
.: Release 0.1.0 (2005-08-01)
|
|
251
|
+
|
|
252
|
+
.- beta release
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
copyright(c) 2005-2010 kuwata-lab all rights reserved.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.txt
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
= README
|
|
2
|
+
|
|
3
|
+
release:: 0.7.2
|
|
4
|
+
lastupdate:: $Date$
|
|
5
|
+
copyright:: copyright(c) 2005-2010 kuwata-lab all rights reserved.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
== Introduction
|
|
10
|
+
|
|
11
|
+
Kwalify is a parser, schema validator, and data binding tool for
|
|
12
|
+
YAML and JSON.
|
|
13
|
+
|
|
14
|
+
See doc/users-guide.html for details.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
== Installation
|
|
19
|
+
|
|
20
|
+
If you have installed RubyGems, just type 'gem install kwalify'
|
|
21
|
+
|
|
22
|
+
$ sudo gem install kwalify
|
|
23
|
+
|
|
24
|
+
Else if you can be root user, use 'setup.rb' as following:
|
|
25
|
+
|
|
26
|
+
$ tar xjf kwalify-0.7.2.tar.bz2
|
|
27
|
+
$ cd kwalify-0.7.2/
|
|
28
|
+
$ sudo ruby setup.rb install
|
|
29
|
+
|
|
30
|
+
Else copy script and libraries to proper directory.
|
|
31
|
+
|
|
32
|
+
$ tar xjf kwalify-0.7.2.tar.bz2
|
|
33
|
+
$ cd kwalify-0.7.2/
|
|
34
|
+
$ mkdir -p $HOME/bin
|
|
35
|
+
$ cp -a bin/* $HOME/bin
|
|
36
|
+
$ export PATH=$PATH:$HOME/bin
|
|
37
|
+
$ mkdir -p $HOME/lib/ruby
|
|
38
|
+
$ cp -a lib/* $HOME/lib/ruby
|
|
39
|
+
$ export RUBYLIB=$HOME/lib/ruby
|
|
40
|
+
|
|
41
|
+
(Optional) 'contrib/inline-require' script to concatenate all script
|
|
42
|
+
and libraries into a file.
|
|
43
|
+
|
|
44
|
+
$ tar xjf kwalify-0.7.2.tar.bz2
|
|
45
|
+
$ cd kwalify-0.7.2/
|
|
46
|
+
$ unset RUBYLIB
|
|
47
|
+
$ ruby contrib/inline-require -I ./lib bin/kwalify > contrib/kwalify
|
|
48
|
+
$ chmod a+x contrib/kwalify
|
|
49
|
+
$ mv contrib/kwalify $HOME/bin
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
== License
|
|
54
|
+
|
|
55
|
+
MIT License
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
== Copyright
|
|
60
|
+
|
|
61
|
+
copyright(c) 2005-2010 kuwata-lab all rights reserved.
|
data/bin/kwalify
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
###
|
|
4
|
+
### inline-require - expand 'require "foo"' into inline code
|
|
5
|
+
###
|
|
6
|
+
### usage: inline-require [-h] [-I path[,path2,..]] script
|
|
7
|
+
###
|
|
8
|
+
### copyright(c) 2005-2010 kuwata-lab all rights reserved.
|
|
9
|
+
### 0.7.2
|
|
10
|
+
### $Rev: 10 $
|
|
11
|
+
###
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InlineRequire
|
|
15
|
+
|
|
16
|
+
def initialize(opts={})
|
|
17
|
+
@opts = opts.dup
|
|
18
|
+
end
|
|
19
|
+
attr_accessor :opts
|
|
20
|
+
|
|
21
|
+
def expand(filename)
|
|
22
|
+
sbuf = ''
|
|
23
|
+
inlined = []
|
|
24
|
+
level = 0
|
|
25
|
+
expand_require(filename, sbuf, inlined, level)
|
|
26
|
+
return sbuf
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def expand_require(filename, sbuf, inlined, level)
|
|
32
|
+
raise "*** assertion error" if inlined.include?(filename)
|
|
33
|
+
remove_comment = @opts[:remove_comment]
|
|
34
|
+
expand_indented = @opts[:expand_indented]
|
|
35
|
+
keep_filename = @opts[:keep_filename]
|
|
36
|
+
loaded_features = @opts[:loaded_features]
|
|
37
|
+
inlined << filename
|
|
38
|
+
prog = File.read(filename)
|
|
39
|
+
n = 0
|
|
40
|
+
flag_if_file = false
|
|
41
|
+
prog.each_line do |line|
|
|
42
|
+
n += 1
|
|
43
|
+
|
|
44
|
+
## comment out from 'if __FILE__ == $0' to 'end'
|
|
45
|
+
if level > 0
|
|
46
|
+
if flag_if_file
|
|
47
|
+
sbuf << "#" << line
|
|
48
|
+
flag_if_file = false if line =~ /^end$/
|
|
49
|
+
next
|
|
50
|
+
end
|
|
51
|
+
if line =~ /^if\s+__FILE__\s*==\s*\$0(\s+then)?$/ || line =~ /^if\s+\$0\s*==\s*__FILE__(\s+then)?$/
|
|
52
|
+
flag_if_file = true
|
|
53
|
+
sbuf << "#" << line
|
|
54
|
+
next
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
## find 'require "foo"' and expand it to inline code
|
|
59
|
+
flag_inline = false
|
|
60
|
+
pattern = expand_indented ? /^[ \t]*require ['"](.*)["']\s*$/ \
|
|
61
|
+
: /^require ['"](.*)["']\s*$/
|
|
62
|
+
if line =~ pattern
|
|
63
|
+
libname = $1
|
|
64
|
+
libpath = find_library(libname)
|
|
65
|
+
$stderr.puts "*** debug: libpath=#{libpath.inspect}" if $debug_mode
|
|
66
|
+
unless libpath
|
|
67
|
+
#raise "file '#{filename}'(line #{n}): library '#{libname}' not found."
|
|
68
|
+
warn "file '#{filename}'(line #{n}): library '#{libname}' not found."
|
|
69
|
+
else
|
|
70
|
+
flag_inline = true if libpath =~ /\.rb$/ && local_library?(libpath)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
if !flag_inline
|
|
74
|
+
sbuf << line unless remove_comment && line =~ /^[ \t]*\#/
|
|
75
|
+
elsif inlined.include?(libpath)
|
|
76
|
+
sbuf << "#--already included #{line}" unless remove_comment
|
|
77
|
+
else
|
|
78
|
+
if keep_filename
|
|
79
|
+
@n ||= 0; @n += 1; n = @n
|
|
80
|
+
end
|
|
81
|
+
sbuf << "#--begin of #{line}" unless remove_comment
|
|
82
|
+
sbuf << "$LOADED_FEATURES << '#{libname}.rb'\n" if loaded_features
|
|
83
|
+
sbuf << "eval <<'END_OF_SCRIPT__#{n}', TOPLEVEL_BINDING, '#{libpath}', 1\n" if keep_filename
|
|
84
|
+
expand_require(libpath, sbuf, inlined, level+1)
|
|
85
|
+
sbuf << "END_OF_SCRIPT__#{n}\n" if keep_filename
|
|
86
|
+
sbuf << "#--end of #{line}" unless remove_comment
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
#sbuf << "\n" if sbuf[-1] != ?\n
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def local_library?(libpath)
|
|
93
|
+
return libpath !~ /^\//
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def find_library(libname)
|
|
97
|
+
if libname =~ /^\.rb$/
|
|
98
|
+
libname_rb = libname
|
|
99
|
+
libname_so = nil
|
|
100
|
+
elsif libname =~ /^\.so$/
|
|
101
|
+
libname_rb = nil
|
|
102
|
+
libname_so = libname
|
|
103
|
+
else
|
|
104
|
+
libname_rb = libname + ".rb"
|
|
105
|
+
libname_so = libname + ".so"
|
|
106
|
+
end
|
|
107
|
+
$LOAD_PATH.each do |path|
|
|
108
|
+
if libname_rb
|
|
109
|
+
libpath = path + "/" + libname_rb
|
|
110
|
+
return libpath if test(?f, libpath)
|
|
111
|
+
end
|
|
112
|
+
if libname_so
|
|
113
|
+
libpath = path + "/" + libname_so
|
|
114
|
+
return libpath if test(?f, libpath)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
return nil
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if __FILE__ == $0
|
|
123
|
+
|
|
124
|
+
begin
|
|
125
|
+
require "optparse"
|
|
126
|
+
op = OptionParser.new
|
|
127
|
+
options = {}
|
|
128
|
+
op.on("-h", "--help") {|v| options[:help] = v }
|
|
129
|
+
op.on("-I libpath") {|v| options[:libpath] = v }
|
|
130
|
+
op.on("-i") {|v| options[:expand_indented] = v }
|
|
131
|
+
op.on("-c") {|v| options[:remove_comment] = v }
|
|
132
|
+
op.on("-k") {|v| options[:keep_filename] = v }
|
|
133
|
+
op.on("-l") {|v| options[:loaded_features] = v }
|
|
134
|
+
op.on("-D") {|v| options[:debug] = v }
|
|
135
|
+
op.parse!()
|
|
136
|
+
|
|
137
|
+
$debug_mode = options[:debug]
|
|
138
|
+
|
|
139
|
+
if options[:help]
|
|
140
|
+
command = File.basename($0)
|
|
141
|
+
puts "Usage: #{command} [-h] [-I path[,path2,..]] script"
|
|
142
|
+
puts " -h : help"
|
|
143
|
+
puts " -i : expand indented require(), too"
|
|
144
|
+
puts " -c : remove comment lines start with '#'"
|
|
145
|
+
puts " -k : keep filename (for debugging)"
|
|
146
|
+
puts " -l : append libs to $LOADED_FEATURES"
|
|
147
|
+
puts " -I path[,path2,...] : ruby library path"
|
|
148
|
+
exit(0)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
if options[:libpath]
|
|
152
|
+
rubylib_paths = options[:libpath].split(/,/)
|
|
153
|
+
else
|
|
154
|
+
rubylib_paths = []
|
|
155
|
+
end
|
|
156
|
+
$stderr.puts "*** debug: rubylib_paths=#{rubylib_paths.inspect}" if $debug_mode
|
|
157
|
+
$LOAD_PATH.concat(rubylib_paths)
|
|
158
|
+
|
|
159
|
+
filenames = ARGV
|
|
160
|
+
|
|
161
|
+
opts = { :expand_indented => options[:expand_indented],
|
|
162
|
+
:remove_comment => options[:remove_comment],
|
|
163
|
+
:keep_filename => options[:keep_filename],
|
|
164
|
+
:loaded_features => options[:loaded_features] }
|
|
165
|
+
inline_require = InlineRequire.new(opts)
|
|
166
|
+
filenames.each do |filename|
|
|
167
|
+
print inline_require.expand(filename)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
rescue => ex
|
|
171
|
+
if $debug_mode
|
|
172
|
+
raise ex
|
|
173
|
+
else
|
|
174
|
+
$stderr.puts ex.message
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
end
|