quarry 0.4.0 → 0.5.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 (296) hide show
  1. data/CHANGES +22 -1
  2. data/MANIFEST +30 -339
  3. data/RELEASE +2 -4
  4. data/VERSION +1 -1
  5. data/bin/quarry +14 -10
  6. data/bin/quarry-doc +2 -2
  7. data/lib/quarry/assertion.rb +27 -0
  8. data/lib/quarry/{spec/config.rb → config.rb} +0 -0
  9. data/lib/quarry/document/template.rhtml +239 -0
  10. data/lib/quarry/document.rb +126 -0
  11. data/lib/quarry/expectation.rb +60 -0
  12. data/lib/quarry/extract.rb +2 -0
  13. data/lib/quarry/grammar/assert.rb +48 -0
  14. data/lib/quarry/grammar/expect.rb +114 -0
  15. data/lib/quarry/grammar/legacy/assert.rb +280 -0
  16. data/lib/quarry/grammar/should.rb +50 -0
  17. data/lib/quarry/grammar.rb +4 -0
  18. data/lib/quarry/{spec → markup}/step.rb +4 -3
  19. data/lib/quarry/markup.rb +70 -0
  20. data/lib/quarry/{stub/mock.rb → mock.rb} +1 -1
  21. data/lib/quarry/{loadmonitor.rb → monitor.rb} +0 -0
  22. data/lib/quarry/{stub/probe.rb → probe.rb} +8 -35
  23. data/lib/quarry/reporter/dotprogress.rb +62 -0
  24. data/lib/quarry/reporter/summary.rb +70 -0
  25. data/lib/quarry/reporter/verbatim.rb +82 -0
  26. data/lib/quarry/reporter.rb +70 -0
  27. data/lib/quarry/{spec → runner}/context.rb +7 -2
  28. data/lib/quarry/runner.rb +123 -0
  29. data/lib/quarry/{stub/stub.rb → stub.rb} +1 -1
  30. data/lib/quarry.rb +10 -0
  31. data/spec/basic.rd +0 -2
  32. data/spec/complex.rd +0 -2
  33. data/spec/mock.rd +20 -26
  34. data/spec/stub.rd +8 -12
  35. metadata +48 -361
  36. data/bin/ruby-break +0 -10
  37. data/doc/assets/images/clipboard.jpg +0 -0
  38. data/doc/assets/images/clipboard2.png +0 -0
  39. data/doc/assets/images/darksilver.png +0 -0
  40. data/doc/assets/images/icon/book.jpg +0 -0
  41. data/doc/assets/images/icon/download.gif +0 -0
  42. data/doc/assets/images/icon/letter_r.png +0 -0
  43. data/doc/assets/images/icon/license.png +0 -0
  44. data/doc/assets/images/icon/software.png +0 -0
  45. data/doc/assets/images/icon/source.png +0 -0
  46. data/doc/assets/images/miner.jpg +0 -0
  47. data/doc/assets/images/rbrylmtrx.png +0 -0
  48. data/doc/assets/images/ruby.gif +0 -0
  49. data/doc/assets/images/runneth.png +0 -0
  50. data/doc/assets/images/silver.gif +0 -0
  51. data/doc/assets/images/test.jpg +0 -0
  52. data/doc/assets/jquery/jquery.js +0 -1
  53. data/doc/assets/jquery/jquery.tabs.js +0 -1
  54. data/doc/assets/rdoc_ad.html +0 -12
  55. data/doc/assets/styles/index.css +0 -138
  56. data/doc/guide/stubs.md +0 -125
  57. data/doc/index.html +0 -285
  58. data/doc/log/bstats/stats.html +0 -39
  59. data/doc/log/notes.xml +0 -32
  60. data/doc/log/stats.html +0 -25
  61. data/doc/log/stats.log +0 -14
  62. data/doc/log/syntax.log +0 -0
  63. data/doc/rdoc/classes/Assertion/False.html +0 -177
  64. data/doc/rdoc/classes/Assertion/True.html +0 -152
  65. data/doc/rdoc/classes/Assertion.html +0 -171
  66. data/doc/rdoc/classes/Kernel.html +0 -105
  67. data/doc/rdoc/classes/Method.html +0 -168
  68. data/doc/rdoc/classes/Object.html +0 -507
  69. data/doc/rdoc/classes/Quarry/Break.html +0 -231
  70. data/doc/rdoc/classes/Quarry/Command.html +0 -443
  71. data/doc/rdoc/classes/Quarry/Extract.html +0 -215
  72. data/doc/rdoc/classes/Quarry/MethodProbe.html +0 -325
  73. data/doc/rdoc/classes/Quarry/Mock/Delegator.html +0 -179
  74. data/doc/rdoc/classes/Quarry/Mock/Setter.html +0 -175
  75. data/doc/rdoc/classes/Quarry/Mock.html +0 -233
  76. data/doc/rdoc/classes/Quarry/Spec/Comment.html +0 -237
  77. data/doc/rdoc/classes/Quarry/Spec/Config.html +0 -257
  78. data/doc/rdoc/classes/Quarry/Spec/Context.html +0 -154
  79. data/doc/rdoc/classes/Quarry/Spec/Document.html +0 -382
  80. data/doc/rdoc/classes/Quarry/Spec/Header.html +0 -195
  81. data/doc/rdoc/classes/Quarry/Spec/Macro.html +0 -166
  82. data/doc/rdoc/classes/Quarry/Spec/Markup.html +0 -279
  83. data/doc/rdoc/classes/Quarry/Spec/Reporter/DotProgress.html +0 -234
  84. data/doc/rdoc/classes/Quarry/Spec/Reporter/Summary.html +0 -294
  85. data/doc/rdoc/classes/Quarry/Spec/Reporter/Verbatim.html +0 -311
  86. data/doc/rdoc/classes/Quarry/Spec/Runner.html +0 -352
  87. data/doc/rdoc/classes/Quarry/Spec/Step.html +0 -190
  88. data/doc/rdoc/classes/Quarry/Spec/Template.html +0 -205
  89. data/doc/rdoc/classes/Quarry/Stub/Delegator.html +0 -179
  90. data/doc/rdoc/classes/Quarry/Stub/Setter.html +0 -175
  91. data/doc/rdoc/classes/Quarry/Stub.html +0 -224
  92. data/doc/rdoc/classes/Quarry.html +0 -176
  93. data/doc/rdoc/created.rid +0 -1
  94. data/doc/rdoc/files/CHANGES.html +0 -150
  95. data/doc/rdoc/files/COPYING.html +0 -468
  96. data/doc/rdoc/files/README.html +0 -195
  97. data/doc/rdoc/files/RELEASE.html +0 -122
  98. data/doc/rdoc/files/VERSION.html +0 -107
  99. data/doc/rdoc/files/bin/quarry-doc.html +0 -109
  100. data/doc/rdoc/files/bin/quarry.html +0 -109
  101. data/doc/rdoc/files/bin/ruby-break.html +0 -108
  102. data/doc/rdoc/files/bin/ruby-xacto.html +0 -101
  103. data/doc/rdoc/files/lib/quarry/assert_rb.html +0 -155
  104. data/doc/rdoc/files/lib/quarry/break_rb.html +0 -101
  105. data/doc/rdoc/files/lib/quarry/extract_rb.html +0 -108
  106. data/doc/rdoc/files/lib/quarry/loadmonitor_rb.html +0 -101
  107. data/doc/rdoc/files/lib/quarry/spec/config_rb.html +0 -101
  108. data/doc/rdoc/files/lib/quarry/spec/context_rb.html +0 -101
  109. data/doc/rdoc/files/lib/quarry/spec/document_rb.html +0 -111
  110. data/doc/rdoc/files/lib/quarry/spec/markup_rb.html +0 -108
  111. data/doc/rdoc/files/lib/quarry/spec/reporter/dotprogress_rb.html +0 -108
  112. data/doc/rdoc/files/lib/quarry/spec/reporter/summary_rb.html +0 -108
  113. data/doc/rdoc/files/lib/quarry/spec/reporter/verbatim_rb.html +0 -108
  114. data/doc/rdoc/files/lib/quarry/spec/reporter_rb.html +0 -109
  115. data/doc/rdoc/files/lib/quarry/spec/runner_rb.html +0 -109
  116. data/doc/rdoc/files/lib/quarry/spec/step_rb.html +0 -101
  117. data/doc/rdoc/files/lib/quarry/spec/template_rhtml.html +0 -228
  118. data/doc/rdoc/files/lib/quarry/spec_rb.html +0 -113
  119. data/doc/rdoc/files/lib/quarry/stub/mock_rb.html +0 -101
  120. data/doc/rdoc/files/lib/quarry/stub/probe_rb.html +0 -122
  121. data/doc/rdoc/files/lib/quarry/stub/spec_txt.html +0 -118
  122. data/doc/rdoc/files/lib/quarry/stub/stub_rb.html +0 -101
  123. data/doc/rdoc/fr_class_index.html +0 -56
  124. data/doc/rdoc/fr_file_index.html +0 -55
  125. data/doc/rdoc/fr_method_index.html +0 -117
  126. data/doc/rdoc/index.html +0 -24
  127. data/doc/rdoc/rdoc-style.css +0 -208
  128. data/doc/ri/Assertion/False/assert-i.yaml +0 -10
  129. data/doc/ri/Assertion/False/cdesc-False.yaml +0 -21
  130. data/doc/ri/Assertion/False/message-i.yaml +0 -10
  131. data/doc/ri/Assertion/True/assert-i.yaml +0 -11
  132. data/doc/ri/Assertion/True/cdesc-True.yaml +0 -26
  133. data/doc/ri/Assertion/True/message-c.yaml +0 -11
  134. data/doc/ri/Assertion/True/message-i.yaml +0 -11
  135. data/doc/ri/Assertion/True/method_missing-i.yaml +0 -12
  136. data/doc/ri/Assertion/True/new-c.yaml +0 -11
  137. data/doc/ri/Assertion/cdesc-Assertion.yaml +0 -40
  138. data/doc/ri/Kernel/cdesc-Kernel.yaml +0 -15
  139. data/doc/ri/Method/cdesc-Method.yaml +0 -18
  140. data/doc/ri/Method/migration-i.yaml +0 -12
  141. data/doc/ri/Method/signature-i.yaml +0 -12
  142. data/doc/ri/Object/assert%21-i.yaml +0 -17
  143. data/doc/ri/Object/assert-i.yaml +0 -15
  144. data/doc/ri/Object/assert_raises%21-i.yaml +0 -12
  145. data/doc/ri/Object/assert_raises-i.yaml +0 -15
  146. data/doc/ri/Object/cdesc-Object.yaml +0 -42
  147. data/doc/ri/Object/mock-i.yaml +0 -12
  148. data/doc/ri/Object/refute-i.yaml +0 -13
  149. data/doc/ri/Object/refute_raises-i.yaml +0 -17
  150. data/doc/ri/Object/remove-i.yaml +0 -12
  151. data/doc/ri/Object/should-i.yaml +0 -12
  152. data/doc/ri/Object/should_not-i.yaml +0 -12
  153. data/doc/ri/Object/should_not_raise-i.yaml +0 -12
  154. data/doc/ri/Object/should_raise-i.yaml +0 -12
  155. data/doc/ri/Object/stub-i.yaml +0 -12
  156. data/doc/ri/Quarry/Break/cdesc-Break.yaml +0 -23
  157. data/doc/ri/Quarry/Break/edit-i.yaml +0 -11
  158. data/doc/ri/Quarry/Break/new-c.yaml +0 -11
  159. data/doc/ri/Quarry/Extract/cdesc-Extract.yaml +0 -26
  160. data/doc/ri/Quarry/Extract/create_test-i.yaml +0 -12
  161. data/doc/ri/Quarry/Extract/extract_test_from_file-i.yaml +0 -12
  162. data/doc/ri/Quarry/Extract/test_extract-i.yaml +0 -18
  163. data/doc/ri/Quarry/MethodProbe/cdesc-MethodProbe.yaml +0 -46
  164. data/doc/ri/Quarry/MethodProbe/duckcall-c.yaml +0 -10
  165. data/doc/ri/Quarry/MethodProbe/initialize_copy-i.yaml +0 -10
  166. data/doc/ri/Quarry/MethodProbe/method_missing-i.yaml +0 -10
  167. data/doc/ri/Quarry/MethodProbe/new-c.yaml +0 -10
  168. data/doc/ri/Quarry/Mock/Delegator/cdesc-Delegator.yaml +0 -20
  169. data/doc/ri/Quarry/Mock/Delegator/method_missing-i.yaml +0 -10
  170. data/doc/ri/Quarry/Mock/Delegator/new-c.yaml +0 -10
  171. data/doc/ri/Quarry/Mock/Setter/%3d%3d-i.yaml +0 -10
  172. data/doc/ri/Quarry/Mock/Setter/cdesc-Setter.yaml +0 -18
  173. data/doc/ri/Quarry/Mock/Setter/new-c.yaml +0 -10
  174. data/doc/ri/Quarry/Mock/__table__-i.yaml +0 -11
  175. data/doc/ri/Quarry/Mock/cdesc-Mock.yaml +0 -25
  176. data/doc/ri/Quarry/Mock/method_missing-i.yaml +0 -12
  177. data/doc/ri/Quarry/Mock/new-c.yaml +0 -10
  178. data/doc/ri/Quarry/Spec/Comment/cdesc-Comment.yaml +0 -33
  179. data/doc/ri/Quarry/Spec/Comment/macro%3f-i.yaml +0 -12
  180. data/doc/ri/Quarry/Spec/Comment/new-c.yaml +0 -10
  181. data/doc/ri/Quarry/Spec/Comment/type-i.yaml +0 -12
  182. data/doc/ri/Quarry/Spec/Config/after-i.yaml +0 -12
  183. data/doc/ri/Quarry/Spec/Config/after_spec-i.yaml +0 -12
  184. data/doc/ri/Quarry/Spec/Config/before-i.yaml +0 -12
  185. data/doc/ri/Quarry/Spec/Config/before_spec-i.yaml +0 -12
  186. data/doc/ri/Quarry/Spec/Config/cdesc-Config.yaml +0 -26
  187. data/doc/ri/Quarry/Spec/Config/new-c.yaml +0 -10
  188. data/doc/ri/Quarry/Spec/Context/cdesc-Context.yaml +0 -21
  189. data/doc/ri/Quarry/Spec/Context/new-c.yaml +0 -10
  190. data/doc/ri/Quarry/Spec/Document/cdesc-Document.yaml +0 -76
  191. data/doc/ri/Quarry/Spec/Document/generate-i.yaml +0 -12
  192. data/doc/ri/Quarry/Spec/Document/new-c.yaml +0 -12
  193. data/doc/ri/Quarry/Spec/Document/quiet%3f-i.yaml +0 -12
  194. data/doc/ri/Quarry/Spec/Document/require_rdoc-i.yaml +0 -11
  195. data/doc/ri/Quarry/Spec/Document/save-i.yaml +0 -12
  196. data/doc/ri/Quarry/Spec/Document/template-i.yaml +0 -12
  197. data/doc/ri/Quarry/Spec/Header/cdesc-Header.yaml +0 -30
  198. data/doc/ri/Quarry/Spec/Header/new-c.yaml +0 -10
  199. data/doc/ri/Quarry/Spec/Macro/cdesc-Macro.yaml +0 -22
  200. data/doc/ri/Quarry/Spec/Macro/new-c.yaml +0 -10
  201. data/doc/ri/Quarry/Spec/Markup/cdesc-Markup.yaml +0 -31
  202. data/doc/ri/Quarry/Spec/Markup/description-i.yaml +0 -11
  203. data/doc/ri/Quarry/Spec/Markup/new-c.yaml +0 -11
  204. data/doc/ri/Quarry/Spec/Markup/parse-i.yaml +0 -11
  205. data/doc/ri/Quarry/Spec/Markup/parse_section-i.yaml +0 -11
  206. data/doc/ri/Quarry/Spec/Reporter/DotProgress/cdesc-DotProgress.yaml +0 -21
  207. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_intro-i.yaml +0 -10
  208. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_step-i.yaml +0 -10
  209. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_summary-i.yaml +0 -16
  210. data/doc/ri/Quarry/Spec/Reporter/Summary/cdesc-Summary.yaml +0 -31
  211. data/doc/ri/Quarry/Spec/Reporter/Summary/report_comment-i.yaml +0 -10
  212. data/doc/ri/Quarry/Spec/Reporter/Summary/report_error-i.yaml +0 -10
  213. data/doc/ri/Quarry/Spec/Reporter/Summary/report_fail-i.yaml +0 -10
  214. data/doc/ri/Quarry/Spec/Reporter/Summary/report_header-i.yaml +0 -10
  215. data/doc/ri/Quarry/Spec/Reporter/Summary/report_macro-i.yaml +0 -10
  216. data/doc/ri/Quarry/Spec/Reporter/Summary/report_pass-i.yaml +0 -10
  217. data/doc/ri/Quarry/Spec/Reporter/Verbatim/cdesc-Verbatim.yaml +0 -29
  218. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_comment-i.yaml +0 -10
  219. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_error-i.yaml +0 -10
  220. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_fail-i.yaml +0 -10
  221. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_header-i.yaml +0 -16
  222. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_macro-i.yaml +0 -10
  223. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_pass-i.yaml +0 -10
  224. data/doc/ri/Quarry/Spec/Reporter/cdesc-Reporter.yaml +0 -20
  225. data/doc/ri/Quarry/Spec/Runner/cdesc-Runner.yaml +0 -47
  226. data/doc/ri/Quarry/Spec/Runner/check-i.yaml +0 -12
  227. data/doc/ri/Quarry/Spec/Runner/check_spec-i.yaml +0 -12
  228. data/doc/ri/Quarry/Spec/Runner/new-c.yaml +0 -12
  229. data/doc/ri/Quarry/Spec/Runner/run_step-i.yaml +0 -12
  230. data/doc/ri/Quarry/Spec/Step/cdesc-Step.yaml +0 -30
  231. data/doc/ri/Quarry/Spec/Step/new-c.yaml +0 -10
  232. data/doc/ri/Quarry/Spec/Template/cdesc-Template.yaml +0 -31
  233. data/doc/ri/Quarry/Spec/Template/new-c.yaml +0 -11
  234. data/doc/ri/Quarry/Spec/Template/parse_template-i.yaml +0 -10
  235. data/doc/ri/Quarry/Spec/cdesc-Spec.yaml +0 -15
  236. data/doc/ri/Quarry/Stub/Delegator/cdesc-Delegator.yaml +0 -20
  237. data/doc/ri/Quarry/Stub/Delegator/method_missing-i.yaml +0 -10
  238. data/doc/ri/Quarry/Stub/Delegator/new-c.yaml +0 -10
  239. data/doc/ri/Quarry/Stub/Setter/%3d%3d-i.yaml +0 -10
  240. data/doc/ri/Quarry/Stub/Setter/cdesc-Setter.yaml +0 -18
  241. data/doc/ri/Quarry/Stub/Setter/new-c.yaml +0 -10
  242. data/doc/ri/Quarry/Stub/__table__-i.yaml +0 -11
  243. data/doc/ri/Quarry/Stub/cdesc-Stub.yaml +0 -23
  244. data/doc/ri/Quarry/Stub/method_missing-i.yaml +0 -11
  245. data/doc/ri/Quarry/Stub/new-c.yaml +0 -10
  246. data/doc/ri/Quarry/cdesc-Quarry.yaml +0 -16
  247. data/doc/ri/created.rid +0 -1
  248. data/doc/spec/stub.html +0 -394
  249. data/lib/quarry/assert.rb +0 -198
  250. data/lib/quarry/break.rb +0 -51
  251. data/lib/quarry/spec/document.rb +0 -130
  252. data/lib/quarry/spec/markup.rb +0 -85
  253. data/lib/quarry/spec/reporter/dotprogress.rb +0 -66
  254. data/lib/quarry/spec/reporter/summary.rb +0 -74
  255. data/lib/quarry/spec/reporter/verbatim.rb +0 -87
  256. data/lib/quarry/spec/reporter.rb +0 -74
  257. data/lib/quarry/spec/runner.rb +0 -127
  258. data/lib/quarry/spec/template.rhtml +0 -116
  259. data/lib/quarry/spec.rb +0 -7
  260. data/lib/quarry/stub/spec.txt +0 -113
  261. data/work/consider/document.rb +0 -35
  262. data/work/consider/fixture.rb +0 -153
  263. data/work/deprecated/assert/must.rb +0 -9
  264. data/work/deprecated/assert/should.rb +0 -9
  265. data/work/deprecated/build.rb +0 -82
  266. data/work/deprecated/mock/file.rb +0 -11
  267. data/work/deprecated/mock/mock.0.rb +0 -77
  268. data/work/deprecated/overlay.rb +0 -64
  269. data/work/deprecated/spec.rb +0 -195
  270. data/work/deprecated/stub/stub.0.rb +0 -180
  271. data/work/deprecated/stub/stub.1.rb +0 -114
  272. data/work/deprecated/stub/test_stub.rb +0 -66
  273. data/work/deprecated/test/case.rb +0 -141
  274. data/work/sandbox/assert.rb +0 -100
  275. data/work/sandbox/bug.rb +0 -49
  276. data/work/sandbox/build/announce.rb +0 -213
  277. data/work/sandbox/build/check.rb +0 -109
  278. data/work/sandbox/build/gem.rb +0 -235
  279. data/work/sandbox/build/make.rb +0 -118
  280. data/work/sandbox/build/manpage.rb +0 -201
  281. data/work/sandbox/build/notes.rb +0 -214
  282. data/work/sandbox/build/pack.rb +0 -228
  283. data/work/sandbox/build/rdoc.rb +0 -289
  284. data/work/sandbox/build/rubyforge.rb +0 -91
  285. data/work/sandbox/build/sign.rb +0 -241
  286. data/work/sandbox/build/stamp.rb +0 -37
  287. data/work/sandbox/build/stats.rb +0 -154
  288. data/work/sandbox/build/svn.rb +0 -193
  289. data/work/sandbox/build/test.rb +0 -521
  290. data/work/sandbox/design.rb +0 -200
  291. data/work/sandbox/iface_scanner.rb +0 -102
  292. data/work/sandbox/testunit/assertions/assert_has_keys.rb +0 -38
  293. data/work/sandbox/testunit/assertions/assert_has_only_keys.rb +0 -38
  294. data/work/sandbox/testunit/unit.rb +0 -104
  295. data/work/sandbox/unitspec.rb +0 -54
  296. data/work/sandbox/x_isotest.rb +0 -532
@@ -0,0 +1,239 @@
1
+ <html>
2
+ <head>
3
+ <title><%= title %></title>
4
+
5
+ <style>
6
+ #container{ margin: 0 auto; width: 800px; }
7
+ /* Debug borders */
8
+ p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
9
+ /*
10
+ border: 1px solid red;
11
+ */
12
+ }
13
+ body { font-size: 0.9em; margin: 1em 5% 1em 5%; }
14
+ a { color: blue; text-decoration: underline; }
15
+ a:visited { color: fuchsia; }
16
+ em { font-style: italic; }
17
+ strong { font-weight: bold; }
18
+ tt { color: navy; }
19
+ h1, h2, h3, h4, h5, h6 {
20
+ color: #527bbd;
21
+ font-family: sans-serif;
22
+ margin-top: 1.2em;
23
+ margin-bottom: 0.5em;
24
+ line-height: 1.3;
25
+ }
26
+ h1 { border-bottom: 2px solid silver; }
27
+ h2 { border-bottom: 2px solid silver; padding-top: 0.5em; }
28
+ hr { border: 1px solid silver; }
29
+ p { color: #555;
30
+ text-align: justify;
31
+ margin-top: 0.5em;
32
+ margin-bottom: 0.5em;
33
+ line-height: 1.4em;
34
+ }
35
+ pre { padding: 10; margin: 0; }
36
+
37
+ span#author {
38
+ color: #527bbd;
39
+ font-family: sans-serif;
40
+ font-weight: bold;
41
+ font-size: 1.1em;
42
+ }
43
+ span#email {
44
+ }
45
+ span#revision {
46
+ font-family: sans-serif;
47
+ }
48
+
49
+ div#footer {
50
+ font-family: sans-serif;
51
+ font-size: small;
52
+ border-top: 2px solid silver;
53
+ padding-top: 0.5em;
54
+ margin-top: 4.0em;
55
+ }
56
+
57
+ div#footer-text {
58
+ float: left;
59
+ padding-bottom: 0.5em;
60
+ }
61
+
62
+ div#footer-badges {
63
+ float: right;
64
+ padding-bottom: 0.5em;
65
+ }
66
+
67
+ div.content { /* Block element content. */
68
+ padding: 0;
69
+ }
70
+
71
+ /* Block element titles. */
72
+ h1.title {
73
+ font-family: sans-serif;
74
+ font-weight: bold;
75
+ text-align: left;
76
+ font-size: 3em;
77
+ margin-top: 1.0em;
78
+ margin-bottom: 0.5em;
79
+ }
80
+
81
+ /* Block element titles. */
82
+ div.title, caption.title {
83
+ font-family: sans-serif;
84
+ font-weight: bold;
85
+ text-align: left;
86
+ margin-top: 1.0em;
87
+ margin-bottom: 0.5em;
88
+ }
89
+ div.title + * {
90
+ margin-top: 0;
91
+ }
92
+
93
+ td div.title:first-child {
94
+ margin-top: 0.0em;
95
+ }
96
+ div.content div.title:first-child {
97
+ margin-top: 0.0em;
98
+ }
99
+ div.content + div.title {
100
+ margin-top: 0.0em;
101
+ }
102
+
103
+ div.sidebarblock > div.content {
104
+ background: #ffffee;
105
+ border: 1px solid silver;
106
+ padding: 0.5em;
107
+ }
108
+
109
+ img { border-style: none; }
110
+
111
+ dl { margin-top: 0.8em; margin-bottom: 0.8em; }
112
+ dt { margin-top: 0.5em; margin-bottom: 0; font-style: italic; }
113
+ dd > *:first-child { margin-top: 0; }
114
+ ul, ol { list-style-position: outside; }
115
+
116
+ thead { font-family: sans-serif; font-weight: bold; }
117
+ tfoot { font-weight: bold; }
118
+ </style>
119
+
120
+ <!-- JQuery is needed -->
121
+ <script src="../assets/scripts/jquery.js" type="text/javascript" language="javascript"></script>
122
+
123
+ <% if css %>
124
+ <link rel="stylesheet" href="<%= css %>" type="text/css">
125
+ <% end %>
126
+
127
+ <link href="../assets/styles/spec.css" type="text/css" rel="stylesheet">
128
+ </head>
129
+
130
+ <body>
131
+
132
+ <!-- Side Table of Contents -->
133
+ <div id="sidebar" style="position: fixed; top: 10; right: 10; background: white;">
134
+ <a href="javascript: toc_toggle();">
135
+ <img src="img/icon/book.jpg" height="30px;" style="border: none;" alt="TOC" align="right"/>
136
+ </a>
137
+
138
+ <div id="toc_side" class="toc">
139
+ </div>
140
+ </div>
141
+
142
+ <div id="container">
143
+ <div id="header">
144
+ <img src="img/icon/book.jpg" align="left" style="padding-right: 10px;" alt=""/>
145
+
146
+ <h1 class="title"><%= title %></h1>
147
+
148
+ <h1>Table of Contents</h1>
149
+
150
+ <div class="toc">
151
+ </div>
152
+ </div>
153
+
154
+ <div id="content">
155
+ <%= spec %>
156
+ </div>
157
+ </div>
158
+
159
+ </body>
160
+
161
+ </html>
162
+
163
+ <script src="../assets/scripts/spec.js" type="text/javascript" language="javascript"></script>
164
+
165
+ <script type="text/javascript" language="javascript">
166
+ /*****************************************************************
167
+ * $.toc()
168
+ * by rebecca murphey
169
+ * rmurphey gmail com
170
+ *
171
+ * This function is called on its own and takes as an argument
172
+ * a list of selectors with which it will build a table of
173
+ * contents.
174
+ *
175
+ * The first selector will make up the top level of the TOC;
176
+ * the second selector will make up the second level of the TOC;
177
+ * etc.
178
+ *
179
+ * This function returns a div containing nested unordered lists;
180
+ * each list item is linked to an anchor tag added before the item
181
+ * on the page.
182
+ *
183
+ * usage: $.toc('h1,h2,h3').prependTo('body');
184
+ ************************************************************************/
185
+ (function($) {
186
+ $.toc = function(tocList) {
187
+ $(tocList).addClass('jquery-toc');
188
+ var tocListArray = tocList.split(',');
189
+ $.each(tocListArray, function(i,v) { tocListArray[i] = $.trim(v); });
190
+ var $elements = $('.jquery-toc');
191
+ $('body').append('<div></div>');
192
+ var $toc = $('body div:last');
193
+ var lastLevel = 1;
194
+ $toc.append('<ul class="jquery-toc-1"></ul>');
195
+ $elements.each(function() {
196
+ var $e = $(this);
197
+ var text = $e.text();
198
+ var anchor = text.replace(/ /g,'-');
199
+ $e.before('<a name="' + anchor + '"></a>');
200
+ var level;
201
+ $.each(tocListArray, function(i,v) {
202
+ if (v.match(' ')) {
203
+ var vArray = v.split(' ');
204
+ var e = vArray[vArray.length - 1];
205
+ } else { e = v; }
206
+ if ($e.is(e)) { level = i+1; }
207
+ });
208
+ var className = 'jquery-toc-' + level;
209
+ var li = '<li><a href="#' + anchor + '">' + text + '</a></li>';
210
+ if (level == lastLevel) {
211
+ $('ul.' + className + ':last',$toc).append(li);
212
+ } else if (level > lastLevel) {
213
+ var parentLevel = level - 1;
214
+ var parentClassName = 'jquery-toc-' + parentLevel;
215
+ $('ul.' + parentClassName + ':last',$toc).
216
+ append('<ul class="' + className + '"></ul>');
217
+ $('ul.' + className + ':last',$toc).append(li);
218
+ } else if (level < lastLevel) {
219
+ $('ul.' + className + ':last',$toc).append(li);
220
+ }
221
+ lastLevel = level;
222
+ });
223
+ var $toc_ul = $('ul.jquery-toc-1',$toc);
224
+ $toc.remove();
225
+ return($toc_ul);
226
+ }
227
+ })(jQuery);
228
+ </script>
229
+
230
+ <script>
231
+ function toc_toggle() {
232
+ $('#toc_side').toggle();
233
+ };
234
+
235
+ $.toc('#content h1,h2,h3,h4').appendTo('.toc');
236
+
237
+ toc_toggle();
238
+ </script>
239
+
@@ -0,0 +1,126 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+
4
+ module Quarry
5
+
6
+ # = Document
7
+ #
8
+ # TODO: css and javascripts have fixed location
9
+ # - need to make more flexible.
10
+ class Document
11
+
12
+ DEFAULT_TITLE = "Specifications"
13
+ DEFAULT_CSS = nil #"../assets/styles/spec.css"
14
+ DEFAULT_FILE = "doc/spec/index.html"
15
+ DEFAULT_PATH = ["spec/**/*"]
16
+
17
+ attr_accessor :title
18
+ attr_accessor :css
19
+ attr_accessor :paths
20
+ attr_accessor :dryrun
21
+ attr_accessor :quiet
22
+
23
+ # Ouput file.
24
+ attr_accessor :output
25
+
26
+ # New Spec Document object.
27
+ def initialize(options)
28
+ options.each do |k,v|
29
+ __send__("#{k}=", v)
30
+ end
31
+
32
+ @title ||= DEFAULT_TITLE
33
+ @css ||= DEFAULT_CSS
34
+ @output ||= DEFAULT_FILE
35
+ @paths ||= []
36
+
37
+ @paths = DEFAULT_PATH if @paths.empty?
38
+ end
39
+
40
+ # Supress output.
41
+ def quiet? ; @quiet ; end
42
+
43
+ # Generate specification document.
44
+ def generate
45
+ files = []
46
+ paths.each do |path|
47
+ files.concat(Dir.glob(path).select{ |f| File.file?(f) })
48
+ end
49
+
50
+ text = ''
51
+ files.each do |file|
52
+ puts file unless quiet?
53
+ case ext = File.extname(file)
54
+ when '.rd', '.rdoc'
55
+ require_rdoc
56
+ markup = SM::SimpleMarkup.new
57
+ formatter = SM::ToHtml.new
58
+ text << markup.convert(File.read(file), formatter)
59
+ when '.md', '.markdown'
60
+ # TODO
61
+ end
62
+ text << "\n"
63
+ end
64
+
65
+ temp = Template.new(template, text, title, css)
66
+ html = temp.parse_template
67
+
68
+ save(html)
69
+ end
70
+
71
+ # Load specification HTML template.
72
+ def template
73
+ @template ||= (
74
+ file = File.join(File.dirname(__FILE__), 'document', 'template.rhtml')
75
+ File.read(file)
76
+ )
77
+ end
78
+
79
+ # Save specification document.
80
+ def save(text)
81
+ if dryrun
82
+ puts "\nwrite #{output}"
83
+ else
84
+ FileUtils.mkdir_p(File.dirname(output))
85
+ File.open(output, 'wb') do |f|
86
+ f << text
87
+ end
88
+ end
89
+ end
90
+
91
+ private
92
+
93
+ #
94
+ def require_rdoc
95
+ @require_rdoc ||= (
96
+ require 'rdoc/markup/simple_markup'
97
+ require 'rdoc/markup/simple_markup/to_html'
98
+ true
99
+ )
100
+ end
101
+
102
+ end
103
+
104
+ # = Document Template
105
+ #
106
+ class Template
107
+ attr :spec
108
+ attr :title
109
+ attr :css
110
+
111
+ #
112
+ def initialize(template, spec, title, css)
113
+ @template = template
114
+ @spec = spec
115
+ @title = title
116
+ @css = css
117
+ end
118
+
119
+ def parse_template
120
+ erb = ERB.new(@template)
121
+ erb.result(binding)
122
+ end
123
+ end
124
+
125
+ end
126
+
@@ -0,0 +1,60 @@
1
+ require 'quarry/assertion'
2
+
3
+ module Quarry
4
+
5
+ # = Expectation
6
+ #
7
+ # Expectation is an Assertion Functor.
8
+ #
9
+ class Expectation
10
+
11
+ hide = instance_methods.select{ |m| m.to_s !~ /^__/ }
12
+ hide.each{ |m| protected m }
13
+
14
+ private
15
+
16
+ # New Expectation.
17
+ #
18
+ def initialize(delegate, ioc={}) #, backtrace)
19
+ @delegate = delegate
20
+ @negate = ioc[:negate]
21
+ @message = ioc[:message]
22
+ @backtrace = ioc[:backtrace] || caller #[1..-1]
23
+ end
24
+
25
+ # Converts missing method into an Assertion.
26
+ #
27
+ def method_missing(sym, *a, &b)
28
+ test = @delegate.__send__(sym, *a, &b)
29
+
30
+ if (@negate ? test : !test)
31
+ msg = @message || __msg__(sym, *a, &b)
32
+ error = Assertion.new(msg)
33
+ error.set_backtrace(@backtrace)
34
+ raise error
35
+ end
36
+ end
37
+
38
+ # Puts together a suitable error message.
39
+ #
40
+ def __msg__(m, *a, &b)
41
+ if @negate
42
+ "! #{@delegate.inspect} #{m} #{a.collect{|x| x.inspect}.join(',')}"
43
+ else
44
+ "#{@delegate.inspect} #{m} #{a.collect{|x| x.inspect}.join(',')}"
45
+ end
46
+ #self.class.message(m)[@delegate, *a] )
47
+ end
48
+
49
+ # TODO: Ultimately better messages would be nice ?
50
+ #
51
+ #def self.message(op,&block)
52
+ # @message ||= {}
53
+ # block ? @message[op.to_sym] = block : @message[op.to_sym]
54
+ #end
55
+ #
56
+ #message(:==){ |*a| "Expected #{a[0].inspect} to be equal to #{a[1].inspect}" }
57
+ end
58
+
59
+ end
60
+
@@ -1,5 +1,7 @@
1
1
  require 'fileutils'
2
2
 
3
+ raise "not ready yet"
4
+
3
5
  module Quarry
4
6
 
5
7
  # Extractor is a tool for extracting code from embedded
@@ -0,0 +1,48 @@
1
+ module Quarry
2
+
3
+ module Grammar
4
+
5
+ # = Assert Nomenclature
6
+ #
7
+ # Some people prefer TDD over BDD so we also provide an
8
+ # assertion-based nomenclature.
9
+ #
10
+ module Assert
11
+
12
+ # Assert a operational relationship.
13
+ #
14
+ # 4.assert == 3
15
+ #
16
+ def assert
17
+ return Expectation.new(self, :backtrace=>caller)
18
+ end
19
+
20
+ # Assert not an operational relationship.
21
+ # Read it as "assert not".
22
+ #
23
+ # 4.assert! == 4
24
+ #
25
+ # AUHTOR'S NOTE: This method would not be necessary
26
+ # if Ruby would allow +!=+ to be define as a method,
27
+ # or at least +!+ as a unary method.
28
+ #
29
+ def assert!
30
+ return Expectation.new(self, :negate=>true, :backtrace=>caller)
31
+ end
32
+
33
+ # Same as #assert!.
34
+ #
35
+ # 4.refute == 4 #=> Assertion Error
36
+ #
37
+ alias_method :refute, :assert!
38
+
39
+ end
40
+
41
+ end
42
+
43
+ class ::Object #:nodoc:
44
+ include Grammar::Assert
45
+ end
46
+
47
+ end
48
+
@@ -0,0 +1,114 @@
1
+ require 'quarry/expectation'
2
+
3
+ module Quarry
4
+
5
+ module Grammar
6
+
7
+ # = Expect Nomenclature
8
+ #
9
+ # Provides expect nomenclature. This is Quarry's "standard"
10
+ # nomenclature.
11
+ #
12
+ module Expect
13
+
14
+ # The +expect+ method is the primary means to define
15
+ # expectations in specifications.
16
+ #
17
+ # Designate an expectation via a *functor*.
18
+ #
19
+ # 4.expect == 3 #=> Expectation Error
20
+ #
21
+ # Or in block form.
22
+ #
23
+ # expect(4){ 3 } #=> Expectation Error
24
+ #
25
+ # The later compares the expected value and the actual
26
+ # value with <i>broad equality</i>. This is similar to
27
+ # case equality (#===) but also checks other forms of
28
+ # equality. See the #equate method.
29
+ #
30
+ # Exception classes also check to see if the block
31
+ # raises the error.
32
+ #
33
+ def expect(exp=Expectation, &block)
34
+ if exp == Expectation
35
+ Expectation.new(self, :backtrace=>caller)
36
+ elsif Exception >= exp
37
+ begin
38
+ act = block.call
39
+ test = exp.equate?(act)
40
+ msg = "#{exp}.equate? #{act}"
41
+ rescue exp => error
42
+ test = true
43
+ #msg = "#{exp} expected to be raised"
44
+ rescue Exception => error
45
+ test = false
46
+ msg = "#{exp} expected but #{error.class} was raised"
47
+ end
48
+ raise Assertion.new(msg, caller) unless test
49
+ else
50
+ act = block.call
51
+ test = exp.equate?(act)
52
+ msg = "#{exp}.equate? #{act}"
53
+ raise Assertion.new(msg, caller) unless test
54
+ end
55
+ end
56
+
57
+ # Designate a negated expectation. Read this as
58
+ # "expect not".
59
+ #
60
+ # 4.expect! == 4 #=> Expectation Error
61
+ #
62
+ # Note that this method would not be necessary if
63
+ # Ruby would allow +!=+ to be defined as a method,
64
+ # or perhaps +!+ as a unary method.
65
+ #
66
+ def expect!(exp=Expectation, &block)
67
+ if exp == Expectation
68
+ Expectation.new(self, :negate=>true, :backtrace=>caller)
69
+ elsif Exception >= exp
70
+ begin
71
+ act = block.call
72
+ test = !exp.equate?(act)
73
+ msg = "! #{exp}.equate? #{act}"
74
+ rescue exp => error
75
+ test = false
76
+ msg = "#{exp} raised"
77
+ rescue Exception => error
78
+ test = true
79
+ #msg = "#{exp} expected but was #{error.class}"
80
+ end
81
+ raise Assertion.new(msg, caller) unless test
82
+ else
83
+ act = block.call
84
+ test = !exp.equate?(act)
85
+ msg = "! #{exp}.equate? #{act}"
86
+ raise Assertion.new(msg, caller) unless test
87
+ end
88
+ end
89
+
90
+ # See #expect! method.
91
+ #
92
+ alias_method :expect_not, :expect!
93
+
94
+ end
95
+
96
+ end
97
+
98
+ class ::Object #:nodoc:
99
+ include Grammar::Expect
100
+ end
101
+
102
+ module ::Kernel
103
+ # Broad equality.
104
+ #
105
+ def equate?(actual)
106
+ self.equal?(actual) ||
107
+ self.eql?(actual) ||
108
+ self == actual ||
109
+ self === actual
110
+ end
111
+ end
112
+
113
+ end
114
+