kwalify 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. data/CHANGES.txt +232 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.txt +16 -19
  4. data/bin/kwalify +3 -3
  5. data/contrib/inline-require +6 -4
  6. data/contrib/kwalify +3719 -2427
  7. data/doc-api/classes/CommandOptionError.html +17 -17
  8. data/doc-api/classes/CommandOptionParser.html +63 -63
  9. data/doc-api/classes/Kwalify.html +29 -7
  10. data/doc-api/classes/Kwalify/AssertionError.html +9 -9
  11. data/doc-api/classes/Kwalify/BaseError.html +72 -71
  12. data/doc-api/classes/Kwalify/BaseParser.html +461 -0
  13. data/doc-api/classes/Kwalify/CommandOptionError.html +11 -11
  14. data/doc-api/classes/Kwalify/ErrorHelper.html +51 -46
  15. data/doc-api/classes/Kwalify/HashInterface.html +13 -135
  16. data/doc-api/classes/Kwalify/Json.html +105 -0
  17. data/doc-api/classes/Kwalify/Main.html +129 -126
  18. data/doc-api/classes/Kwalify/MetaValidator.html +248 -232
  19. data/doc-api/classes/Kwalify/Parser.html +12 -12
  20. data/doc-api/classes/Kwalify/PlainYamlParser.html +166 -163
  21. data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +11 -11
  22. data/doc-api/classes/Kwalify/Rule.html +152 -130
  23. data/doc-api/classes/Kwalify/SchemaError.html +10 -10
  24. data/doc-api/classes/Kwalify/SyntaxError.html +185 -0
  25. data/doc-api/classes/Kwalify/Types.html +26 -25
  26. data/doc-api/classes/Kwalify/Util.html +389 -0
  27. data/doc-api/classes/Kwalify/Util/HashLike.html +246 -0
  28. data/doc-api/classes/Kwalify/Util/OrderedHash.html +330 -0
  29. data/doc-api/classes/Kwalify/ValidationError.html +10 -10
  30. data/doc-api/classes/Kwalify/Validator.html +153 -86
  31. data/doc-api/classes/Kwalify/Yaml.html +181 -0
  32. data/doc-api/classes/Kwalify/Yaml/Parser.html +1538 -0
  33. data/doc-api/classes/Kwalify/YamlParser.html +190 -183
  34. data/doc-api/classes/Kwalify/YamlSyntaxError.html +8 -57
  35. data/doc-api/created.rid +1 -1
  36. data/doc-api/files/__/README_txt.html +17 -22
  37. data/doc-api/files/kwalify/errors_rb.html +2 -2
  38. data/doc-api/files/kwalify/main_rb.html +4 -3
  39. data/doc-api/files/kwalify/messages_rb.html +2 -2
  40. data/doc-api/files/kwalify/meta-validator_rb.html +3 -3
  41. data/doc-api/files/kwalify/{util/yaml-helper_rb.html → parser/base_rb.html} +8 -6
  42. data/doc-api/files/kwalify/parser/yaml_rb.html +117 -0
  43. data/doc-api/files/kwalify/rule_rb.html +2 -2
  44. data/doc-api/files/kwalify/types_rb.html +2 -2
  45. data/doc-api/files/kwalify/util/assert-text-equal_rb.html +2 -2
  46. data/doc-api/files/kwalify/util/hash-interface_rb.html +9 -2
  47. data/doc-api/files/kwalify/util/hashlike_rb.html +107 -0
  48. data/doc-api/files/kwalify/util/option-parser_rb.html +2 -2
  49. data/doc-api/files/kwalify/util/ordered-hash_rb.html +107 -0
  50. data/doc-api/files/kwalify/util/testcase-helper_rb.html +2 -2
  51. data/doc-api/files/kwalify/util_rb.html +107 -0
  52. data/doc-api/files/kwalify/validator_rb.html +2 -2
  53. data/doc-api/files/kwalify/yaml-parser_rb.html +2 -2
  54. data/doc-api/files/kwalify_rb.html +3 -2
  55. data/doc-api/fr_class_index.html +8 -1
  56. data/doc-api/fr_file_index.html +5 -1
  57. data/doc-api/fr_method_index.html +128 -69
  58. data/doc/img/fig01.png +0 -0
  59. data/doc/users-guide.html +882 -717
  60. data/examples/address-book/address-book.schema.yaml +2 -2
  61. data/examples/data-binding/BABEL.data.yaml +63 -0
  62. data/examples/data-binding/BABEL.schema.yaml +31 -0
  63. data/examples/data-binding/Makefile +8 -0
  64. data/examples/data-binding/Rakefile +13 -0
  65. data/examples/data-binding/main.rb +27 -0
  66. data/examples/invoice/invoice.schema.yaml +3 -3
  67. data/examples/tapkit/tapkit.schema.yaml +2 -2
  68. data/lib/kwalify.rb +41 -4
  69. data/lib/kwalify/errors.rb +118 -96
  70. data/lib/kwalify/kwalify.schema.yaml +58 -0
  71. data/lib/kwalify/main.rb +384 -377
  72. data/lib/kwalify/messages.rb +41 -27
  73. data/lib/kwalify/meta-validator.rb +251 -331
  74. data/lib/kwalify/parser/base.rb +127 -0
  75. data/lib/kwalify/parser/yaml.rb +837 -0
  76. data/lib/kwalify/rule.rb +545 -487
  77. data/lib/kwalify/templates/genclass-java.eruby +189 -162
  78. data/lib/kwalify/templates/genclass-php.eruby +104 -0
  79. data/lib/kwalify/templates/genclass-ruby.eruby +95 -66
  80. data/lib/kwalify/types.rb +107 -106
  81. data/lib/kwalify/util.rb +157 -0
  82. data/lib/kwalify/util/assert-text-equal.rb +33 -31
  83. data/lib/kwalify/util/hash-interface.rb +11 -30
  84. data/lib/kwalify/util/hashlike.rb +51 -0
  85. data/lib/kwalify/util/option-parser.rb +144 -144
  86. data/lib/kwalify/util/ordered-hash.rb +57 -0
  87. data/lib/kwalify/util/testcase-helper.rb +3 -3
  88. data/lib/kwalify/validator.rb +267 -212
  89. data/lib/kwalify/yaml-parser.rb +822 -768
  90. data/setup.rb +861 -607
  91. data/test/Rookbook.yaml +10 -0
  92. data/test/{tmp.dir/Context.java → data/users-guide/AddressBook.java.expected} +11 -11
  93. data/test/data/users-guide/BABEL.data.yaml +24 -0
  94. data/test/data/users-guide/BABEL.schema.yaml +30 -0
  95. data/test/data/users-guide/ExampleAddressBook.java +47 -0
  96. data/test/{tmp.dir/Group.java → data/users-guide/Group.java.expected} +2 -11
  97. data/test/data/users-guide/Person.java.expected +44 -0
  98. data/test/data/users-guide/address_book.rb +52 -0
  99. data/test/data/users-guide/address_book.schema.yaml +28 -0
  100. data/test/data/users-guide/address_book.yaml +27 -0
  101. data/test/data/users-guide/answers-schema.yaml +12 -0
  102. data/test/data/users-guide/answers-validator.rb +52 -0
  103. data/test/data/users-guide/babel_genclass.result +26 -0
  104. data/test/data/users-guide/config.schema.yaml +7 -0
  105. data/test/data/users-guide/config.yaml +4 -0
  106. data/test/{tmp.dir/silent1.document → data/users-guide/document01a.yaml} +0 -0
  107. data/test/data/users-guide/document01b.yaml +3 -0
  108. data/test/data/users-guide/document02a.yaml +4 -0
  109. data/test/data/users-guide/document02b.yaml +4 -0
  110. data/test/data/users-guide/document03a.yaml +6 -0
  111. data/test/data/users-guide/document03b.yaml +6 -0
  112. data/test/data/users-guide/document04a.yaml +9 -0
  113. data/test/data/users-guide/document04b.yaml +9 -0
  114. data/test/data/users-guide/document05a.yaml +11 -0
  115. data/test/data/users-guide/document05b.yaml +12 -0
  116. data/test/data/users-guide/document06a.yaml +15 -0
  117. data/test/data/users-guide/document06b.yaml +16 -0
  118. data/test/data/users-guide/document07a.yaml +9 -0
  119. data/test/data/users-guide/document07b.yaml +7 -0
  120. data/test/data/users-guide/document12a.json +10 -0
  121. data/test/data/users-guide/document12b.json +6 -0
  122. data/test/data/users-guide/document13a.yaml +17 -0
  123. data/test/data/users-guide/document14a.yaml +3 -0
  124. data/test/data/users-guide/document14b.yaml +3 -0
  125. data/test/data/users-guide/document15a.yaml +6 -0
  126. data/test/data/users-guide/document15b.yaml +5 -0
  127. data/test/data/users-guide/example_address_book.rb +10 -0
  128. data/test/data/users-guide/example_address_book_java.result +32 -0
  129. data/test/data/users-guide/example_address_book_ruby.result +31 -0
  130. data/test/data/users-guide/genclass_java.result +4 -0
  131. data/test/data/users-guide/howto-validation-with-parsing.rb +28 -0
  132. data/test/data/users-guide/howto-validation.rb +25 -0
  133. data/test/data/users-guide/howto3.rb +6 -0
  134. data/test/data/users-guide/howto3.result +5 -0
  135. data/test/data/users-guide/howto3.yaml +8 -0
  136. data/test/data/users-guide/howto5_databinding.result +111 -0
  137. data/test/data/users-guide/invalid01.result +3 -0
  138. data/test/data/users-guide/invalid02.result +5 -0
  139. data/test/data/users-guide/invalid03.result +5 -0
  140. data/test/data/users-guide/invalid04.result +4 -0
  141. data/test/data/users-guide/invalid05.result +11 -0
  142. data/test/data/users-guide/invalid06.result +4 -0
  143. data/test/data/users-guide/invalid07.result +3 -0
  144. data/test/data/users-guide/invalid08.result +3 -0
  145. data/test/data/users-guide/invalid12.json +8 -0
  146. data/test/data/users-guide/invalid14.result +4 -0
  147. data/test/data/users-guide/invalid15.result +4 -0
  148. data/test/data/users-guide/loadbabel.rb +27 -0
  149. data/test/data/users-guide/loadconfig.rb +15 -0
  150. data/test/data/users-guide/loadconfig.result +2 -0
  151. data/test/data/users-guide/models.rb +22 -0
  152. data/test/data/users-guide/option_ha.result +6 -0
  153. data/test/data/users-guide/option_ha_genclass_java.result +7 -0
  154. data/test/{tmp.dir/meta1.schema → data/users-guide/schema01.yaml} +0 -0
  155. data/test/data/users-guide/schema02.yaml +12 -0
  156. data/test/data/users-guide/schema03.yaml +9 -0
  157. data/test/data/users-guide/schema04.yaml +20 -0
  158. data/test/data/users-guide/schema05.yaml +29 -0
  159. data/test/data/users-guide/schema06.yaml +11 -0
  160. data/test/data/users-guide/schema12.json +12 -0
  161. data/test/data/users-guide/schema13.yaml +13 -0
  162. data/test/data/users-guide/schema14.yaml +5 -0
  163. data/test/data/users-guide/schema15.yaml +21 -0
  164. data/test/data/users-guide/valid01.result +2 -0
  165. data/test/data/users-guide/valid02.result +2 -0
  166. data/test/data/users-guide/valid03.result +2 -0
  167. data/test/data/users-guide/valid04.result +2 -0
  168. data/test/data/users-guide/valid05.result +2 -0
  169. data/test/data/users-guide/valid06.result +2 -0
  170. data/test/data/users-guide/valid07.result +2 -0
  171. data/test/data/users-guide/valid08.result +2 -0
  172. data/test/data/users-guide/valid12.result +2 -0
  173. data/test/data/users-guide/valid13.result +2 -0
  174. data/test/data/users-guide/valid14.result +2 -0
  175. data/test/data/users-guide/valid15.result +2 -0
  176. data/test/data/users-guide/validate08.rb +37 -0
  177. data/test/test-action.rb +78 -0
  178. data/test/test-action.yaml +738 -0
  179. data/test/test-databinding.rb +80 -0
  180. data/test/test-databinding.yaml +301 -0
  181. data/test/test-main.rb +129 -150
  182. data/test/test-main.yaml +126 -321
  183. data/test/test-metavalidator.rb +47 -47
  184. data/test/test-metavalidator.yaml +77 -21
  185. data/test/test-parser-yaml.rb +57 -0
  186. data/test/test-parser-yaml.yaml +1749 -0
  187. data/test/test-rule.rb +14 -15
  188. data/test/test-rule.yaml +6 -3
  189. data/test/test-users-guide.rb +75 -0
  190. data/test/test-validator.rb +77 -52
  191. data/test/test-validator.yaml +168 -6
  192. data/test/test-yaml-parser.rb +47 -0
  193. data/test/{test-yamlparser.yaml → test-yaml-parser.yaml} +159 -52
  194. data/test/test.rb +37 -21
  195. metadata +136 -37
  196. data/COPYING +0 -340
  197. data/ChangeLog +0 -70
  198. data/doc-api/classes/YamlHelper.html +0 -259
  199. data/lib/kwalify/util/yaml-helper.rb +0 -82
  200. data/test/test-yamlparser.rb +0 -58
  201. data/test/tmp.dir/User.java +0 -43
  202. data/test/tmp.dir/action1.document +0 -18
  203. data/test/tmp.dir/action1.schema +0 -32
  204. data/test/tmp.dir/action2.document +0 -18
  205. data/test/tmp.dir/action2.schema +0 -32
  206. data/test/tmp.dir/emacs.document +0 -6
  207. data/test/tmp.dir/emacs.schema +0 -6
  208. data/test/tmp.dir/meta1.document +0 -0
  209. data/test/tmp.dir/meta2.document +0 -0
  210. data/test/tmp.dir/meta2.schema +0 -3
  211. data/test/tmp.dir/silent1.schema +0 -3
  212. data/test/tmp.dir/silent2.document +0 -7
  213. data/test/tmp.dir/silent2.schema +0 -3
  214. data/test/tmp.dir/stream.invalid +0 -8
  215. data/test/tmp.dir/stream.schema +0 -3
  216. data/test/tmp.dir/stream.valid +0 -8
  217. data/test/tmp.dir/untabify.document +0 -5
  218. data/test/tmp.dir/untabify.schema +0 -10
  219. data/todo.txt +0 -34
data/ChangeLog DELETED
@@ -1,70 +0,0 @@
1
- .=title: ChangeLog
2
- .?release: $Release$
3
- .?lastupdate: $Date: 2007-07-27 21:18:20 +0900 (Fri, 27 Jul 2007) $
4
- .?version: $Rev: 68 $
5
-
6
- .: release 0.6.1 (2007-07-27)
7
- .* bugfix:
8
- .- Quoted string in flow style was not parsed correctly.
9
-
10
- .: release 0.6.0 (2006-05-30)
11
- .* enhances:
12
- .- Class definition generation support.
13
- New command-line option '-a genclass-ruby' or '-a genclass-java' generates
14
- class definitions in Ruby or Java from schema file.
15
-
16
- .: release 0.5.1 (2005-12-20)
17
- .* enhances:
18
- .- add new command-line option '-E' which show errors in emacs-compatible style.
19
-
20
- .: release 0.5.0 (2005-12-17)
21
- .* enhances:
22
- .- Meta-validation check for 'max < min', 'max-ex <= min-ex', and so on.
23
- .- Many test-cases are added
24
- .* changes:
25
- .- 'Parser' class is renamed to 'YamlParser'
26
- .- 'PlainParser' class is renamed to 'PlainYamlParser'
27
- .- YamlParser#set_error_linenums() is renamed to set_errors_linenum()
28
- .- ValidatorError#<=> added
29
- .- ParseError class is renamed to YamlSyntaxError
30
-
31
- .: release 0.4.1 (2005-10-26)
32
- .* bugfix:
33
- .- Support Ruby 1.8.3 (around YAML::Syck::DomainType)
34
- .- Show correct error line number when key is undefined or unknown.
35
-
36
- .: release 0.4.0 (2005-10-25)
37
- .* enhances:
38
- .- New command-line option '-l' prints error line numbers.
39
- .- Supports default rule of mapping.
40
-
41
- .: release 0.3.0 (2005-09-30)
42
- .* enhances:
43
- .- Support 'max-ex' and 'min-ex' (max/min exclusive) support with 'range:'
44
- .- Support 'max-ex' and 'min-ex' (max/min exclusive) support with 'length:'
45
- .- Support 'unique' constraint
46
-
47
- .: release 0.2.0 (2005-09-25)
48
- .* enhances:
49
- .- New type 'scalar' and 'timestamp' added
50
- .- Add new rule 'range:' which validates value range.
51
- See users' guide for details.
52
- .- Add new rule 'length:' which validate length of string value.
53
- See users' guide for details.
54
- .- Add experimental rule 'assert:' which validates value with an
55
- expression. See users' guide for details.
56
- .- New method 'Kwalify::Validator#validate_hook()' is added.
57
- This method is called by Kwalify::Validator#validate().
58
- See users' guide for details.
59
- .- New class 'MetaValidator' added.
60
- .- New test script 'test/test-metavalidator.rb' added.
61
- .* changes:
62
- .- Type name changed to suite YAML data type:
63
- .= string -> str
64
- .= integer -> int
65
- .= boolean -> bool
66
- .- Error index starts with 0 (before starts with 1).
67
- .- Class 'Schema' is renamed to 'Rule'.
68
-
69
- .: release 0.1.0 (2005-08-01)
70
- .- beta release
@@ -1,259 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Module: YamlHelper</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Module</strong></td>
53
- <td class="class-name-in-header">YamlHelper</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../files/kwalify/util/yaml-helper_rb.html">
59
- kwalify/util/yaml-helper.rb
60
- </a>
61
- <br />
62
- </td>
63
- </tr>
64
-
65
- </table>
66
- </div>
67
- <!-- banner header -->
68
-
69
- <div id="bodyContent">
70
-
71
-
72
-
73
- <div id="contextContent">
74
-
75
-
76
-
77
- </div>
78
-
79
- <div id="method-list">
80
- <h3 class="section-bar">Methods</h3>
81
-
82
- <div class="name-list">
83
- <a href="#M000082">create_hashtable</a>&nbsp;&nbsp;
84
- <a href="#M000083">get_value</a>&nbsp;&nbsp;
85
- <a href="#M000081">untabify</a>&nbsp;&nbsp;
86
- </div>
87
- </div>
88
-
89
- </div>
90
-
91
-
92
- <!-- if includes -->
93
-
94
- <div id="section">
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
- <!-- if method_list -->
104
- <div id="methods">
105
- <h3 class="section-bar">Public Class methods</h3>
106
-
107
- <div id="method-M000082" class="method-detail">
108
- <a name="M000082"></a>
109
-
110
- <div class="method-heading">
111
- <a href="#M000082" class="method-signature">
112
- <span class="method-name">create_hashtable</span><span class="method-args">(hashlist, primarykey, flag_duplicate_check=true)</span>
113
- </a>
114
- </div>
115
-
116
- <div class="method-description">
117
- <p>
118
- create a hash table from list of hash with primary key.
119
- </p>
120
- <p>
121
- ex.
122
- </p>
123
- <pre>
124
- hashlist = [
125
- { &quot;name&quot;=&gt;&quot;Foo&quot;, &quot;gender&quot;=&gt;&quot;M&quot;, &quot;age&quot;=&gt;20, },
126
- { &quot;name&quot;=&gt;&quot;Bar&quot;, &quot;gender&quot;=&gt;&quot;F&quot;, &quot;age&quot;=&gt;25, },
127
- { &quot;name&quot;=&gt;&quot;Baz&quot;, &quot;gender&quot;=&gt;&quot;M&quot;, &quot;age&quot;=&gt;30, },
128
- ]
129
- hashtable = YamlHelper.create_hashtable(hashlist, &quot;name&quot;)
130
- p hashtable
131
- # =&gt; { &quot;Foo&quot; =&gt; { &quot;name&quot;=&gt;&quot;Foo&quot;, &quot;gender&quot;=&gt;&quot;M&quot;, &quot;age&quot;=&gt;20, },
132
- &quot;Bar&quot; =&gt; { &quot;name&quot;=&gt;&quot;Bar&quot;, &quot;gender&quot;=&gt;&quot;F&quot;, &quot;age&quot;=&gt;25, },
133
- &quot;Baz&quot; =&gt; { &quot;name&quot;=&gt;&quot;Baz&quot;, &quot;gender&quot;=&gt;&quot;M&quot;, &quot;age&quot;=&gt;30, }, }
134
- </pre>
135
- <p><a class="source-toggle" href="#"
136
- onclick="toggleCode('M000082-source');return false;">[Source]</a></p>
137
- <div class="method-source-code" id="M000082-source">
138
- <pre>
139
- <span class="ruby-comment cmt"># File kwalify/util/yaml-helper.rb, line 43</span>
140
- <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">create_hashtable</span>(<span class="ruby-identifier">hashlist</span>, <span class="ruby-identifier">primarykey</span>, <span class="ruby-identifier">flag_duplicate_check</span>=<span class="ruby-keyword kw">true</span>)
141
- <span class="ruby-identifier">hashtable</span> = {}
142
- <span class="ruby-identifier">hashlist</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hash</span><span class="ruby-operator">|</span>
143
- <span class="ruby-identifier">key</span> = <span class="ruby-identifier">hash</span>[<span class="ruby-identifier">primarykey</span>]
144
- <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">key</span>
145
- <span class="ruby-identifier">riase</span> <span class="ruby-node">&quot;primary key '#{key}' not found.&quot;</span>
146
- <span class="ruby-keyword kw">end</span>
147
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flag_duplicate_check</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">hashtable</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">key</span>)
148
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;primary key '#{key}' duplicated (value '#{hashtable[key]}')&quot;</span>
149
- <span class="ruby-keyword kw">end</span>
150
- <span class="ruby-identifier">hashtable</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">hash</span>
151
- <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hashlist</span>
152
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">hashtable</span>
153
- <span class="ruby-keyword kw">end</span>
154
- </pre>
155
- </div>
156
- </div>
157
- </div>
158
-
159
- <div id="method-M000083" class="method-detail">
160
- <a name="M000083"></a>
161
-
162
- <div class="method-heading">
163
- <a href="#M000083" class="method-signature">
164
- <span class="method-name">get_value</span><span class="method-args">(obj, path)</span>
165
- </a>
166
- </div>
167
-
168
- <div class="method-description">
169
- <p>
170
- get nested value directly.
171
- </p>
172
- <p>
173
- ex.
174
- </p>
175
- <pre>
176
- val = YamlHelper.get_value(obj, ['aaa', 0, 'xxx'])
177
- </pre>
178
- <p>
179
- This is equal to the following:
180
- </p>
181
- <pre>
182
- begin
183
- val = obj['aaa'][0]['xxx']
184
- rescue NameError
185
- val = nil
186
- end
187
- </pre>
188
- <p><a class="source-toggle" href="#"
189
- onclick="toggleCode('M000083-source');return false;">[Source]</a></p>
190
- <div class="method-source-code" id="M000083-source">
191
- <pre>
192
- <span class="ruby-comment cmt"># File kwalify/util/yaml-helper.rb, line 72</span>
193
- <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_value</span>(<span class="ruby-identifier">obj</span>, <span class="ruby-identifier">path</span>)
194
- <span class="ruby-identifier">val</span> = <span class="ruby-identifier">obj</span>
195
- <span class="ruby-identifier">path</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span>
196
- <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
197
- <span class="ruby-identifier">val</span> = <span class="ruby-identifier">val</span>[<span class="ruby-identifier">key</span>]
198
- <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">path</span>
199
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">val</span>
200
- <span class="ruby-keyword kw">end</span>
201
- </pre>
202
- </div>
203
- </div>
204
- </div>
205
-
206
- <div id="method-M000081" class="method-detail">
207
- <a name="M000081"></a>
208
-
209
- <div class="method-heading">
210
- <a href="#M000081" class="method-signature">
211
- <span class="method-name">untabify</span><span class="method-args">(input)</span>
212
- </a>
213
- </div>
214
-
215
- <div class="method-description">
216
- <p>
217
- expand tab character to spaces
218
- </p>
219
- <p>
220
- ex.
221
- </p>
222
- <pre>
223
- untabified_str = YamlHelper.untabify(tabbed_str)
224
- </pre>
225
- <table>
226
- <tr><td valign="top">input:</td><td>String or IO
227
-
228
- </td></tr>
229
- </table>
230
- <p><a class="source-toggle" href="#"
231
- onclick="toggleCode('M000081-source');return false;">[Source]</a></p>
232
- <div class="method-source-code" id="M000081-source">
233
- <pre>
234
- <span class="ruby-comment cmt"># File kwalify/util/yaml-helper.rb, line 19</span>
235
- <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">untabify</span>(<span class="ruby-identifier">input</span>)
236
- <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span>
237
- <span class="ruby-identifier">input</span>.<span class="ruby-identifier">each_line</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
238
- <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/([^\t]{8})|([^\t]*)\t/n</span>) { [<span class="ruby-identifier">$+</span>].<span class="ruby-identifier">pack</span>(<span class="ruby-value str">&quot;A8&quot;</span>) }
239
- <span class="ruby-keyword kw">end</span>
240
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s</span>
241
- <span class="ruby-keyword kw">end</span>
242
- </pre>
243
- </div>
244
- </div>
245
- </div>
246
-
247
-
248
- </div>
249
-
250
-
251
- </div>
252
-
253
-
254
- <div id="validator-badges">
255
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
256
- </div>
257
-
258
- </body>
259
- </html>
@@ -1,82 +0,0 @@
1
- ###
2
- ### $Rev: 51 $
3
- ### $Release: 0.6.1 $
4
- ### copyright(c) 2005 kuwata-lab all rights reserved.
5
- ###
6
-
7
- require 'yaml'
8
-
9
- module YamlHelper
10
-
11
- ##
12
- ## expand tab character to spaces
13
- ##
14
- ## ex.
15
- ## untabified_str = YamlHelper.untabify(tabbed_str)
16
- ##
17
- ## input:: String or IO
18
- ##
19
- def self.untabify(input)
20
- s = ''
21
- input.each_line do |line|
22
- s << line.gsub(/([^\t]{8})|([^\t]*)\t/n) { [$+].pack("A8") }
23
- end
24
- return s
25
- end
26
-
27
-
28
- ##
29
- ## create a hash table from list of hash with primary key.
30
- ##
31
- ## ex.
32
- ## hashlist = [
33
- ## { "name"=>"Foo", "gender"=>"M", "age"=>20, },
34
- ## { "name"=>"Bar", "gender"=>"F", "age"=>25, },
35
- ## { "name"=>"Baz", "gender"=>"M", "age"=>30, },
36
- ## ]
37
- ## hashtable = YamlHelper.create_hashtable(hashlist, "name")
38
- ## p hashtable
39
- ## # => { "Foo" => { "name"=>"Foo", "gender"=>"M", "age"=>20, },
40
- ## "Bar" => { "name"=>"Bar", "gender"=>"F", "age"=>25, },
41
- ## "Baz" => { "name"=>"Baz", "gender"=>"M", "age"=>30, }, }
42
- ##
43
- def self.create_hashtable(hashlist, primarykey, flag_duplicate_check=true)
44
- hashtable = {}
45
- hashlist.each do |hash|
46
- key = hash[primarykey]
47
- unless key
48
- riase "primary key '#{key}' not found."
49
- end
50
- if flag_duplicate_check && hashtable.key?(key)
51
- raise "primary key '#{key}' duplicated (value '#{hashtable[key]}')"
52
- end
53
- hashtable[key] = hash
54
- end if hashlist
55
- return hashtable
56
- end
57
-
58
-
59
- ##
60
- ## get nested value directly.
61
- ##
62
- ## ex.
63
- ## val = YamlHelper.get_value(obj, ['aaa', 0, 'xxx'])
64
- ##
65
- ## This is equal to the following:
66
- ## begin
67
- ## val = obj['aaa'][0]['xxx']
68
- ## rescue NameError
69
- ## val = nil
70
- ## end
71
- ##
72
- def self.get_value(obj, path)
73
- val = obj
74
- path.each do |key|
75
- return nil unless val.is_a?(Hash) || val.is_a?(Array)
76
- val = val[key]
77
- end if path
78
- return val
79
- end
80
-
81
- end
82
-
@@ -1,58 +0,0 @@
1
- ###
2
- ### $Rev: 51 $
3
- ### $Release: 0.6.1 $
4
- ### copyright(c) 2005 kuwata-lab all rights reserved.
5
- ###
6
-
7
- require File.dirname(__FILE__) + '/test.rb'
8
-
9
-
10
- class Hash
11
-
12
- def inspect
13
- buf = [ '{' ]
14
- self.keys.sort_by { |k| k.to_s }.each_with_index do |key, i|
15
- buf << ', ' if i > 0
16
- buf << key.inspect << '=>' << self[key].inspect
17
- end
18
- buf << '}'
19
- return buf.join
20
- end
21
-
22
- end
23
-
24
-
25
- class YamlParserTest < Test::Unit::TestCase
26
-
27
- filename = __FILE__.sub(/\.rb$/, '.yaml')
28
- load_yaml_testdata(filename, :lang=>'ruby')
29
-
30
- def _test()
31
- @error_class = Kwalify.const_get(@exception) if @exception
32
- parser = Kwalify::YamlParser.new(@input)
33
- if @error_class
34
- assert_raise(@error_class) do
35
- doc = parser.parse()
36
- end
37
- else
38
- doc = parser.parse()
39
- if @recursive || @pp
40
- s = StringWriter.new
41
- PP.pp(doc, s)
42
- actual = s
43
- else
44
- actual = doc.inspect + "\n"
45
- end
46
- if $log
47
- File.open("#{@name}.expected", 'w') { |f| f.write(@expected) }
48
- File.open("#{@name}.actual", 'w') { |f| f.write(actual) }
49
- end
50
- if $print
51
- print actual
52
- else
53
- assert_text_equal(@expected, actual)
54
- end
55
- end
56
- end
57
-
58
- end