ddao-kwalify 0.7.1

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