ddao-kwalify 0.7.1

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