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
@@ -0,0 +1,32 @@
1
+ $ javac -classpath '.:kwalify.jar' *.java
2
+ $ java -classpath '.:kwalify.jar' ExampleAddressBook
3
+ group name: family
4
+ group desc: my family
5
+
6
+ group name: friend
7
+ group desc: my friends
8
+
9
+ group name: business
10
+ group desc: those who works together
11
+
12
+ person name: Sumire
13
+ person group: family
14
+ person email: null
15
+ person phone: null
16
+ person blood: A
17
+ person birth: Tue Feb 01 00:00:00 JST 2000
18
+
19
+ person name: Shiina
20
+ person group: friend
21
+ person email: shiina@mail.org
22
+ person phone: null
23
+ person blood: null
24
+ person birth: Wed Feb 01 00:00:00 JST 1995
25
+
26
+ person name: Sakura
27
+ person group: business
28
+ person email: cherry@mail.net
29
+ person phone: 012-345-6789
30
+ person blood: null
31
+ person birth: null
32
+
@@ -0,0 +1,31 @@
1
+ $ ruby example_address_book.rb
2
+ [#<Group:0xddf24 @desc="my family", @name="family">,
3
+ #<Group:0xddf10 @desc="my friends", @name="friend">,
4
+ #<Group:0xdde84 @desc="those who works together", @name="business">]
5
+ [#<Person:0xdefdc
6
+ @birth=#<Date: 4903089/2,0,2299161>,
7
+ @blood="A",
8
+ @deleted=false,
9
+ @desc=nil,
10
+ @email=nil,
11
+ @group="family",
12
+ @name="Sumire",
13
+ @phone=nil>,
14
+ #<Person:0xdee9c
15
+ @birth=#<Date: 4899437/2,0,2299161>,
16
+ @blood=nil,
17
+ @deleted=false,
18
+ @desc=nil,
19
+ @email="shiina@mail.org",
20
+ @group="friend",
21
+ @name="Shiina",
22
+ @phone=nil>,
23
+ #<Person:0xde8e8
24
+ @birth=nil,
25
+ @blood=nil,
26
+ @deleted=false,
27
+ @desc=nil,
28
+ @email="cherry@mail.net",
29
+ @group="business",
30
+ @name="Sakura",
31
+ @phone="012-345-6789">]
@@ -0,0 +1,4 @@
1
+ $ kwalify -a genclass-java -tf address_book.schema.yaml
2
+ generating ./AddressBook.java...done.
3
+ generating ./Group.java...done.
4
+ generating ./Person.java...done.
@@ -0,0 +1,28 @@
1
+ require 'kwalify'
2
+ #require 'yaml'
3
+
4
+ ## load schema data
5
+ schema = Kwalify::Yaml.load_file('schema.yaml')
6
+ ## or
7
+ #schema = YAML.load_file('schema.yaml')
8
+
9
+ ## create validator
10
+ validator = Kwalify::Validator.new(schema)
11
+
12
+ ## create parser with validator
13
+ ## (if validator is ommitted, no validation executed.)
14
+ parser = Kwalify:::Yaml::Parser.new(validator)
15
+
16
+ ## parse document with validation
17
+ filename = 'document.yaml'
18
+ document = parser.parse_file(filename)
19
+ ## or
20
+ #document = parser.parse(File.read(filename), filename)
21
+
22
+ ## show errors if exist
23
+ errors = parser.errors()
24
+ if errors && !errors.empty?
25
+ for e in errors
26
+ puts "#{e.linenum}:#{e.column} [#{e.path}] #{e.message}"
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ require 'kwalify'
2
+ #require 'yaml'
3
+
4
+ ## load schema data
5
+ schema = Kwalify::Yaml.load_file('schema.yaml')
6
+ ## or
7
+ #schema = YAML.load_file('schema.yaml')
8
+
9
+ ## create validator
10
+ validator = Kwalify::Validator.new(schema)
11
+
12
+ ## load document
13
+ document = Kwalify::Yaml.load_file('document.yaml')
14
+ ## or
15
+ #document = YAML.load_file('document.yaml')
16
+
17
+ ## validate
18
+ errors = validator.validate(document)
19
+
20
+ ## show errors
21
+ if errors && !errors.empty?
22
+ for e in errors
23
+ puts "[#{e.path}] #{e.message}"
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ require 'kwalify'
2
+ parser = Kwalify::Yaml::Parser.new
3
+ parser.preceding_alias = true # enable preceding alias
4
+ ydoc = parser.parse_file('howto3.yaml')
5
+ require 'pp'
6
+ pp ydoc
@@ -0,0 +1,5 @@
1
+ $ ruby howto3.rb
2
+ [{"name"=>"Foo",
3
+ "parent"=>{"name"=>"Bar", "parent"=>{"name"=>"Baz", "parent"=>nil}}},
4
+ {"name"=>"Bar", "parent"=>{"name"=>"Baz", "parent"=>nil}},
5
+ {"name"=>"Baz", "parent"=>nil}]
@@ -0,0 +1,8 @@
1
+ - name: Foo
2
+ parent: *bar # preceding alias
3
+ - &bar
4
+ name: Bar
5
+ parent: *baz # preceding alias
6
+ - &baz
7
+ name: Baz
8
+ parent: null
@@ -0,0 +1,111 @@
1
+ $ ruby loadbabel.rb
2
+ {"teams"=>
3
+ [#<Babel::Team:0x53e0f8
4
+ @chief=
5
+ #<Babel::Member:0x53d5e0
6
+ @desc="Scientist",
7
+ @name="Kohichi Minamoto",
8
+ @team=#<Babel::Team:0x53e0f8 ...>>,
9
+ @desc="Level 7 ESPers",
10
+ @members=
11
+ [#<Babel::Member:0x53d018
12
+ @desc="Psychokino",
13
+ @name="Kaoru Akashi",
14
+ @team=#<Babel::Team:0x53e0f8 ...>>,
15
+ #<Babel::Member:0x53ca50
16
+ @desc="Teleporter",
17
+ @name="Aoi Nogami",
18
+ @team=#<Babel::Team:0x53e0f8 ...>>,
19
+ #<Babel::Member:0x53c488
20
+ @desc="Psycometrer",
21
+ @name="Shiho Sannomiya",
22
+ @team=#<Babel::Team:0x53e0f8 ...>>],
23
+ @name="The Children">],
24
+ "members"=>
25
+ [#<Babel::Member:0x53d5e0
26
+ @desc="Scientist",
27
+ @name="Kohichi Minamoto",
28
+ @team=
29
+ #<Babel::Team:0x53e0f8
30
+ @chief=#<Babel::Member:0x53d5e0 ...>,
31
+ @desc="Level 7 ESPers",
32
+ @members=
33
+ [#<Babel::Member:0x53d018
34
+ @desc="Psychokino",
35
+ @name="Kaoru Akashi",
36
+ @team=#<Babel::Team:0x53e0f8 ...>>,
37
+ #<Babel::Member:0x53ca50
38
+ @desc="Teleporter",
39
+ @name="Aoi Nogami",
40
+ @team=#<Babel::Team:0x53e0f8 ...>>,
41
+ #<Babel::Member:0x53c488
42
+ @desc="Psycometrer",
43
+ @name="Shiho Sannomiya",
44
+ @team=#<Babel::Team:0x53e0f8 ...>>],
45
+ @name="The Children">>,
46
+ #<Babel::Member:0x53d018
47
+ @desc="Psychokino",
48
+ @name="Kaoru Akashi",
49
+ @team=
50
+ #<Babel::Team:0x53e0f8
51
+ @chief=
52
+ #<Babel::Member:0x53d5e0
53
+ @desc="Scientist",
54
+ @name="Kohichi Minamoto",
55
+ @team=#<Babel::Team:0x53e0f8 ...>>,
56
+ @desc="Level 7 ESPers",
57
+ @members=
58
+ [#<Babel::Member:0x53d018 ...>,
59
+ #<Babel::Member:0x53ca50
60
+ @desc="Teleporter",
61
+ @name="Aoi Nogami",
62
+ @team=#<Babel::Team:0x53e0f8 ...>>,
63
+ #<Babel::Member:0x53c488
64
+ @desc="Psycometrer",
65
+ @name="Shiho Sannomiya",
66
+ @team=#<Babel::Team:0x53e0f8 ...>>],
67
+ @name="The Children">>,
68
+ #<Babel::Member:0x53ca50
69
+ @desc="Teleporter",
70
+ @name="Aoi Nogami",
71
+ @team=
72
+ #<Babel::Team:0x53e0f8
73
+ @chief=
74
+ #<Babel::Member:0x53d5e0
75
+ @desc="Scientist",
76
+ @name="Kohichi Minamoto",
77
+ @team=#<Babel::Team:0x53e0f8 ...>>,
78
+ @desc="Level 7 ESPers",
79
+ @members=
80
+ [#<Babel::Member:0x53d018
81
+ @desc="Psychokino",
82
+ @name="Kaoru Akashi",
83
+ @team=#<Babel::Team:0x53e0f8 ...>>,
84
+ #<Babel::Member:0x53ca50 ...>,
85
+ #<Babel::Member:0x53c488
86
+ @desc="Psycometrer",
87
+ @name="Shiho Sannomiya",
88
+ @team=#<Babel::Team:0x53e0f8 ...>>],
89
+ @name="The Children">>,
90
+ #<Babel::Member:0x53c488
91
+ @desc="Psycometrer",
92
+ @name="Shiho Sannomiya",
93
+ @team=
94
+ #<Babel::Team:0x53e0f8
95
+ @chief=
96
+ #<Babel::Member:0x53d5e0
97
+ @desc="Scientist",
98
+ @name="Kohichi Minamoto",
99
+ @team=#<Babel::Team:0x53e0f8 ...>>,
100
+ @desc="Level 7 ESPers",
101
+ @members=
102
+ [#<Babel::Member:0x53d018
103
+ @desc="Psychokino",
104
+ @name="Kaoru Akashi",
105
+ @team=#<Babel::Team:0x53e0f8 ...>>,
106
+ #<Babel::Member:0x53ca50
107
+ @desc="Teleporter",
108
+ @name="Aoi Nogami",
109
+ @team=#<Babel::Team:0x53e0f8 ...>>,
110
+ #<Babel::Member:0x53c488 ...>],
111
+ @name="The Children">>]}
@@ -0,0 +1,3 @@
1
+ $ kwalify -lf schema01.yaml document01b.yaml
2
+ document01b.yaml#0: INVALID
3
+ - (line 2) [/1] '123': not a string.
@@ -0,0 +1,5 @@
1
+ $ kwalify -lf schema02.yaml document02b.yaml
2
+ document02b.yaml#0: INVALID
3
+ - (line 2) [/email] 'foo(at)mail.com': not matched to pattern /@/.
4
+ - (line 3) [/age] 'twenty': not a integer.
5
+ - (line 4) [/birth] 'Jun 01, 1985': not a date.
@@ -0,0 +1,5 @@
1
+ $ kwalify -lf schema03.yaml document03b.yaml
2
+ document03b.yaml#0: INVALID
3
+ - (line 3) [/1] key 'name:' is required.
4
+ - (line 3) [/1/naem] key 'naem:' is undefined.
5
+ - (line 6) [/2/mail] key 'mail:' is undefined.
@@ -0,0 +1,4 @@
1
+ $ kwalify -lf schema04.yaml document04b.yaml
2
+ document04b.yaml#0: INVALID
3
+ - (line 4) [/employees/0/code] 'A101': not a integer.
4
+ - (line 9) [/employees/1/mail] key 'mail:' is undefined.
@@ -0,0 +1,11 @@
1
+ $ kwalify -lf schema05.yaml document05b.yaml
2
+ document05b.yaml#0: INVALID
3
+ - (line 2) [/0/email] 'foo(at)mail.com': not matched to pattern /@/.
4
+ - (line 3) [/0/password] 'xxx123': too short (length 6 < min 8).
5
+ - (line 4) [/0/age] 'twenty': not a integer.
6
+ - (line 5) [/0/blood] 'a': invalid blood value.
7
+ - (line 7) [/1] key 'name:' is required.
8
+ - (line 7) [/1/given-name] key 'given-name:' is undefined.
9
+ - (line 8) [/1/family-name] key 'family-name:' is undefined.
10
+ - (line 10) [/1/age] '15': too small (< min 18).
11
+ - (line 12) [/1/birth] '1980/01/01': not a date.
@@ -0,0 +1,4 @@
1
+ $ kwalify -lf schema06.yaml document06b.yaml
2
+ document06b.yaml#0: INVALID
3
+ - (line 7) [/0/groups/3] 'foo': is already used at '/0/groups/0'.
4
+ - (line 13) [/2/name] 'bar': is already used at '/1/name'.
@@ -0,0 +1,3 @@
1
+ $ ruby answers-validator.rb document07b.yaml
2
+ *** INVALID!
3
+ 4:3 [/answers/1] reason is required when answer is 'bad'.
@@ -0,0 +1,3 @@
1
+ $ ruby validate08.rb document07b.yaml
2
+ *** INVALID!
3
+ - [/answers/1] : reason is required when answer is 'bad'.
@@ -0,0 +1,8 @@
1
+ $ kwalify -lf schema12.json document12b.json
2
+ document12b.json#0: INVALID
3
+ - (line 1) [/] key 'name:' is required.
4
+ - (line 2) [/mail] key 'mail:' is undefined.
5
+ - (line 3) [/age] 'twenty': not a integer.
6
+ - (line 4) [/gender] 'X': invalid gender value.
7
+ - (line 5) [/favorite/0] '123': not a string.
8
+ - (line 5) [/favorite/1] '456': not a string.
@@ -0,0 +1,4 @@
1
+ $ kwalify -lf schema14.yaml document14b.yaml
2
+ document14b.yaml#0: INVALID
3
+ - (line 2) [/value2] '1.1': too large (> max 1).
4
+ - (line 3) [/value3] '-2.0': too small (< min -1).
@@ -0,0 +1,4 @@
1
+ $ kwalify -lf schema15.yaml document15b.yaml
2
+ document15b.yaml#0: INVALID
3
+ - (line 5) [/user] key 'email:' is required.
4
+ - (line 5) [/user/name] 'toooooo-looooong-name': too long (length 21 > max 16).
@@ -0,0 +1,27 @@
1
+ require 'kwalify'
2
+ require 'models'
3
+
4
+ ## load schema definition
5
+ schema = Kwalify::Yaml.load_file('BABEL.schema.yaml',
6
+ :untabify=>true,
7
+ :preceding_alias=>true)
8
+
9
+ ## add module name to 'class:'
10
+ Kwalify::Util.traverse_schema(schema) do |rulehash|
11
+ if rulehash['class']
12
+ rulehash['class'] = 'Babel::' + rulehash['class']
13
+ end
14
+ end
15
+
16
+ ## create validator
17
+ validator = Kwalify::Validator.new(schema)
18
+
19
+ ## parse with data-binding
20
+ parser = Kwalify::Yaml::Parser.new(validator)
21
+ parser.preceding_alias = true
22
+ parser.data_binding = true
23
+ ydoc = parser.parse_file('BABEL.data.yaml', :untabify=>true)
24
+
25
+ ## show document
26
+ require 'pp'
27
+ pp ydoc
@@ -0,0 +1,16 @@
1
+ ## class definition
2
+ require 'kwalify/util/hashlike'
3
+ class Config
4
+ include Kwalify::Util::HashLike # defines [], []=, and keys?
5
+ attr_accessor :host, :posrt, :user, :pass
6
+ end
7
+ ## create validator object
8
+ require 'kwalify'
9
+ schema = Kwalify::Yaml.load_file('config.schema.yaml')
10
+ validator = Kwalify::Validator.new(schema)
11
+ ## parse configuration file with data binding
12
+ parser = Kwalify::Yaml::Parser.new(validator)
13
+ parser.data_binding = true # enable data binding
14
+ config = parser.parse_file('config.yaml')
15
+ require 'pp'
16
+ pp config
@@ -0,0 +1,6 @@
1
+ $ ruby loadconfig.rb
2
+ #<Config:
3
+ @host="localhost",
4
+ @pass="password1",
5
+ @port=8080,
6
+ @user="user1">
@@ -0,0 +1,22 @@
1
+ require 'kwalify/util/hashlike'
2
+
3
+ module Babel
4
+
5
+ ##
6
+ class Team
7
+ include Kwalify::Util::HashLike
8
+ attr_accessor :name # str
9
+ attr_accessor :desc # str
10
+ attr_accessor :chief # map
11
+ attr_accessor :members # seq
12
+ end
13
+
14
+ ##
15
+ class Member
16
+ include Kwalify::Util::HashLike
17
+ attr_accessor :name # str
18
+ attr_accessor :desc # str
19
+ attr_accessor :team # map
20
+ end
21
+
22
+ end
@@ -0,0 +1,6 @@
1
+ $ kwalify -ha genclass-ruby
2
+ --module=name : module name in which class defined
3
+ --parent=name : parent class name
4
+ --include=name : module name which all classes include
5
+ --initialize=false : not print initialize() method
6
+ --hashlike : include Kwalify::Util::HashLike module
@@ -0,0 +1,7 @@
1
+ $ kwalify -ha genclass-java
2
+ --package=name : package name
3
+ --extends=name : class name to extend
4
+ --implements=name,... : interface names to implement
5
+ --dir=path : directory to locate output file
6
+ --basedir=path : base directory to locate output file
7
+ --constructor=false : not print initialize() method
@@ -0,0 +1,3 @@
1
+ type: seq
2
+ sequence:
3
+ - type: str
@@ -0,0 +1,12 @@
1
+ type: map
2
+ mapping:
3
+ "name":
4
+ type: str
5
+ required: yes
6
+ "email":
7
+ type: str
8
+ pattern: /@/
9
+ "age":
10
+ type: int
11
+ "birth":
12
+ type: date
@@ -0,0 +1,9 @@
1
+ type: seq
2
+ sequence:
3
+ - type: map
4
+ mapping:
5
+ "name":
6
+ type: str
7
+ required: true
8
+ "email":
9
+ type: str
@@ -0,0 +1,20 @@
1
+ type: map
2
+ mapping:
3
+ "company":
4
+ type: str
5
+ required: yes
6
+ "email":
7
+ type: str
8
+ "employees":
9
+ type: seq
10
+ sequence:
11
+ - type: map
12
+ mapping:
13
+ "code":
14
+ type: int
15
+ required: yes
16
+ "name":
17
+ type: str
18
+ required: yes
19
+ "email":
20
+ type: str
@@ -0,0 +1,29 @@
1
+ type: seq
2
+ sequence:
3
+ -
4
+ type: map
5
+ mapping:
6
+ "name":
7
+ type: str
8
+ required: yes
9
+ "email":
10
+ type: str
11
+ required: yes
12
+ pattern: /@/
13
+ "password":
14
+ type: text
15
+ length: { max: 16, min: 8 }
16
+ "age":
17
+ type: int
18
+ range: { max: 30, min: 18 }
19
+ # or assert: 18 <= val && val <= 30
20
+ "blood":
21
+ type: str
22
+ enum: [A, B, O, AB]
23
+ "birth":
24
+ type: date
25
+ "memo":
26
+ type: any
27
+ "deleted":
28
+ type: bool
29
+ default: false
@@ -0,0 +1,11 @@
1
+ type: seq
2
+ sequence:
3
+ - type: map
4
+ required: yes
5
+ mapping:
6
+ "name": { type: str, required: yes, unique: yes }
7
+ "email": { type: str }
8
+ "groups":
9
+ type: seq
10
+ sequence:
11
+ - { type: str, unique: yes }
@@ -0,0 +1,12 @@
1
+ { "type": "map",
2
+ "required": true,
3
+ "mapping": {
4
+ "name": { "type": "str", "required": true },
5
+ "email": { "type": "str" },
6
+ "age": { "type": "int" },
7
+ "gender": { "type": "str", "enum": ["M", "F"] },
8
+ "favorite": { "type": "seq",
9
+ "sequence": [ { "type": "str" } ]
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,13 @@
1
+ type: seq
2
+ sequence:
3
+ - &employee
4
+ type: map
5
+ mapping:
6
+ "given-name": &name
7
+ type: str
8
+ required: yes
9
+ "family-name": *name
10
+ "post":
11
+ type: str
12
+ enum: [exective, manager, clerk]
13
+ "supervisor": *employee
@@ -0,0 +1,5 @@
1
+ type: map
2
+ mapping:
3
+ =: # default rule
4
+ type: number
5
+ range: { max: 1, min: -1 }
@@ -0,0 +1,21 @@
1
+ type: map
2
+ mapping:
3
+ "group":
4
+ type: map
5
+ mapping:
6
+ "name": &name
7
+ type: str
8
+ required: yes
9
+ "email": &email
10
+ type: str
11
+ pattern: /@/
12
+ required: no
13
+ "user":
14
+ type: map
15
+ mapping:
16
+ "name":
17
+ <<: *name # merge
18
+ length: { max: 16 } # add
19
+ "email":
20
+ <<: *email # merge
21
+ required: yes # override
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema01.yaml document01a.yaml
2
+ document01a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema02.yaml document02a.yaml
2
+ document02a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema03.yaml document03a.yaml
2
+ document03a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema04.yaml document04a.yaml
2
+ document04a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema05.yaml document05a.yaml
2
+ document05a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema06.yaml document06a.yaml
2
+ document06a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ ruby answers-validator.rb document07a.yaml
2
+ Valid.
@@ -0,0 +1,2 @@
1
+ $ ruby validate08.rb document07a.yaml
2
+ Valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema12.json document12a.json
2
+ document12a.json#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema13.yaml document13a.yaml
2
+ document13a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema14.yaml document14a.yaml
2
+ document14a.yaml#0: valid.
@@ -0,0 +1,2 @@
1
+ $ kwalify -lf schema15.yaml document15a.yaml
2
+ document15a.yaml#0: valid.