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.
Files changed (209) hide show
  1. data/CHANGES.txt +252 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.txt +61 -0
  4. data/bin/kwalify +13 -0
  5. data/contrib/inline-require +179 -0
  6. data/contrib/kwalify +4160 -0
  7. data/doc/docstyle.css +188 -0
  8. data/doc/img/fig01.png +0 -0
  9. data/doc/users-guide.html +2050 -0
  10. data/doc-api/classes/CommandOptionError.html +184 -0
  11. data/doc-api/classes/CommandOptionParser.html +325 -0
  12. data/doc-api/classes/Kwalify/AssertionError.html +148 -0
  13. data/doc-api/classes/Kwalify/BaseError.html +297 -0
  14. data/doc-api/classes/Kwalify/BaseParser.html +461 -0
  15. data/doc-api/classes/Kwalify/CommandOptionError.html +168 -0
  16. data/doc-api/classes/Kwalify/ErrorHelper.html +223 -0
  17. data/doc-api/classes/Kwalify/HashInterface.html +118 -0
  18. data/doc-api/classes/Kwalify/Json.html +105 -0
  19. data/doc-api/classes/Kwalify/KwalifyError.html +111 -0
  20. data/doc-api/classes/Kwalify/Main.html +339 -0
  21. data/doc-api/classes/Kwalify/MetaValidator.html +448 -0
  22. data/doc-api/classes/Kwalify/Parser.html +155 -0
  23. data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +165 -0
  24. data/doc-api/classes/Kwalify/PlainYamlParser.html +523 -0
  25. data/doc-api/classes/Kwalify/Rule.html +433 -0
  26. data/doc-api/classes/Kwalify/SchemaError.html +148 -0
  27. data/doc-api/classes/Kwalify/SyntaxError.html +185 -0
  28. data/doc-api/classes/Kwalify/Types.html +302 -0
  29. data/doc-api/classes/Kwalify/Util/HashLike.html +246 -0
  30. data/doc-api/classes/Kwalify/Util/OrderedHash.html +330 -0
  31. data/doc-api/classes/Kwalify/Util.html +390 -0
  32. data/doc-api/classes/Kwalify/ValidationError.html +148 -0
  33. data/doc-api/classes/Kwalify/Validator.html +381 -0
  34. data/doc-api/classes/Kwalify/Yaml/Parser.html +1538 -0
  35. data/doc-api/classes/Kwalify/Yaml.html +194 -0
  36. data/doc-api/classes/Kwalify/YamlParser.html +542 -0
  37. data/doc-api/classes/Kwalify/YamlSyntaxError.html +119 -0
  38. data/doc-api/classes/Kwalify.html +292 -0
  39. data/doc-api/classes/Test/Unit.html +101 -0
  40. data/doc-api/classes/Test.html +107 -0
  41. data/doc-api/created.rid +1 -0
  42. data/doc-api/files/__/README_txt.html +172 -0
  43. data/doc-api/files/kwalify/errors_rb.html +114 -0
  44. data/doc-api/files/kwalify/main_rb.html +118 -0
  45. data/doc-api/files/kwalify/messages_rb.html +107 -0
  46. data/doc-api/files/kwalify/meta-validator_rb.html +117 -0
  47. data/doc-api/files/kwalify/parser/base_rb.html +116 -0
  48. data/doc-api/files/kwalify/parser/yaml_rb.html +117 -0
  49. data/doc-api/files/kwalify/rule_rb.html +116 -0
  50. data/doc-api/files/kwalify/types_rb.html +114 -0
  51. data/doc-api/files/kwalify/util/assert-text-equal_rb.html +115 -0
  52. data/doc-api/files/kwalify/util/hash-interface_rb.html +114 -0
  53. data/doc-api/files/kwalify/util/hashlike_rb.html +107 -0
  54. data/doc-api/files/kwalify/util/option-parser_rb.html +107 -0
  55. data/doc-api/files/kwalify/util/ordered-hash_rb.html +107 -0
  56. data/doc-api/files/kwalify/util/testcase-helper_rb.html +115 -0
  57. data/doc-api/files/kwalify/util_rb.html +107 -0
  58. data/doc-api/files/kwalify/validator_rb.html +117 -0
  59. data/doc-api/files/kwalify/yaml-parser_rb.html +117 -0
  60. data/doc-api/files/kwalify_rb.html +121 -0
  61. data/doc-api/fr_class_index.html +57 -0
  62. data/doc-api/fr_file_index.html +45 -0
  63. data/doc-api/fr_method_index.html +168 -0
  64. data/doc-api/index.html +24 -0
  65. data/doc-api/rdoc-style.css +208 -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/errors.rb +127 -0
  82. data/lib/kwalify/kwalify.schema.yaml +58 -0
  83. data/lib/kwalify/main.rb +442 -0
  84. data/lib/kwalify/messages.rb +173 -0
  85. data/lib/kwalify/meta-validator.rb +275 -0
  86. data/lib/kwalify/parser/base.rb +127 -0
  87. data/lib/kwalify/parser/yaml.rb +841 -0
  88. data/lib/kwalify/rule.rb +559 -0
  89. data/lib/kwalify/templates/genclass-java.eruby +222 -0
  90. data/lib/kwalify/templates/genclass-php.eruby +104 -0
  91. data/lib/kwalify/templates/genclass-ruby.eruby +113 -0
  92. data/lib/kwalify/types.rb +156 -0
  93. data/lib/kwalify/util/assert-text-equal.rb +46 -0
  94. data/lib/kwalify/util/hash-interface.rb +18 -0
  95. data/lib/kwalify/util/hashlike.rb +51 -0
  96. data/lib/kwalify/util/option-parser.rb +220 -0
  97. data/lib/kwalify/util/ordered-hash.rb +57 -0
  98. data/lib/kwalify/util/testcase-helper.rb +112 -0
  99. data/lib/kwalify/util.rb +158 -0
  100. data/lib/kwalify/validator.rb +282 -0
  101. data/lib/kwalify/yaml-parser.rb +870 -0
  102. data/lib/kwalify.rb +67 -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 +415 -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-util.rb +125 -0
  204. data/test/test-validator.rb +95 -0
  205. data/test/test-validator.yaml +986 -0
  206. data/test/test-yaml-parser.rb +47 -0
  207. data/test/test-yaml-parser.yaml +1226 -0
  208. data/test/test.rb +61 -0
  209. 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,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ###
4
+ ### $Rev$
5
+ ### $Release: 0.7.2 $
6
+ ### copyright(c) 2005-2010 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,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