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.
- data/CHANGES +22 -1
- data/MANIFEST +30 -339
- data/RELEASE +2 -4
- data/VERSION +1 -1
- data/bin/quarry +14 -10
- data/bin/quarry-doc +2 -2
- data/lib/quarry/assertion.rb +27 -0
- data/lib/quarry/{spec/config.rb → config.rb} +0 -0
- data/lib/quarry/document/template.rhtml +239 -0
- data/lib/quarry/document.rb +126 -0
- data/lib/quarry/expectation.rb +60 -0
- data/lib/quarry/extract.rb +2 -0
- data/lib/quarry/grammar/assert.rb +48 -0
- data/lib/quarry/grammar/expect.rb +114 -0
- data/lib/quarry/grammar/legacy/assert.rb +280 -0
- data/lib/quarry/grammar/should.rb +50 -0
- data/lib/quarry/grammar.rb +4 -0
- data/lib/quarry/{spec → markup}/step.rb +4 -3
- data/lib/quarry/markup.rb +70 -0
- data/lib/quarry/{stub/mock.rb → mock.rb} +1 -1
- data/lib/quarry/{loadmonitor.rb → monitor.rb} +0 -0
- data/lib/quarry/{stub/probe.rb → probe.rb} +8 -35
- data/lib/quarry/reporter/dotprogress.rb +62 -0
- data/lib/quarry/reporter/summary.rb +70 -0
- data/lib/quarry/reporter/verbatim.rb +82 -0
- data/lib/quarry/reporter.rb +70 -0
- data/lib/quarry/{spec → runner}/context.rb +7 -2
- data/lib/quarry/runner.rb +123 -0
- data/lib/quarry/{stub/stub.rb → stub.rb} +1 -1
- data/lib/quarry.rb +10 -0
- data/spec/basic.rd +0 -2
- data/spec/complex.rd +0 -2
- data/spec/mock.rd +20 -26
- data/spec/stub.rd +8 -12
- metadata +48 -361
- data/bin/ruby-break +0 -10
- data/doc/assets/images/clipboard.jpg +0 -0
- data/doc/assets/images/clipboard2.png +0 -0
- data/doc/assets/images/darksilver.png +0 -0
- data/doc/assets/images/icon/book.jpg +0 -0
- data/doc/assets/images/icon/download.gif +0 -0
- data/doc/assets/images/icon/letter_r.png +0 -0
- data/doc/assets/images/icon/license.png +0 -0
- data/doc/assets/images/icon/software.png +0 -0
- data/doc/assets/images/icon/source.png +0 -0
- data/doc/assets/images/miner.jpg +0 -0
- data/doc/assets/images/rbrylmtrx.png +0 -0
- data/doc/assets/images/ruby.gif +0 -0
- data/doc/assets/images/runneth.png +0 -0
- data/doc/assets/images/silver.gif +0 -0
- data/doc/assets/images/test.jpg +0 -0
- data/doc/assets/jquery/jquery.js +0 -1
- data/doc/assets/jquery/jquery.tabs.js +0 -1
- data/doc/assets/rdoc_ad.html +0 -12
- data/doc/assets/styles/index.css +0 -138
- data/doc/guide/stubs.md +0 -125
- data/doc/index.html +0 -285
- data/doc/log/bstats/stats.html +0 -39
- data/doc/log/notes.xml +0 -32
- data/doc/log/stats.html +0 -25
- data/doc/log/stats.log +0 -14
- data/doc/log/syntax.log +0 -0
- data/doc/rdoc/classes/Assertion/False.html +0 -177
- data/doc/rdoc/classes/Assertion/True.html +0 -152
- data/doc/rdoc/classes/Assertion.html +0 -171
- data/doc/rdoc/classes/Kernel.html +0 -105
- data/doc/rdoc/classes/Method.html +0 -168
- data/doc/rdoc/classes/Object.html +0 -507
- data/doc/rdoc/classes/Quarry/Break.html +0 -231
- data/doc/rdoc/classes/Quarry/Command.html +0 -443
- data/doc/rdoc/classes/Quarry/Extract.html +0 -215
- data/doc/rdoc/classes/Quarry/MethodProbe.html +0 -325
- data/doc/rdoc/classes/Quarry/Mock/Delegator.html +0 -179
- data/doc/rdoc/classes/Quarry/Mock/Setter.html +0 -175
- data/doc/rdoc/classes/Quarry/Mock.html +0 -233
- data/doc/rdoc/classes/Quarry/Spec/Comment.html +0 -237
- data/doc/rdoc/classes/Quarry/Spec/Config.html +0 -257
- data/doc/rdoc/classes/Quarry/Spec/Context.html +0 -154
- data/doc/rdoc/classes/Quarry/Spec/Document.html +0 -382
- data/doc/rdoc/classes/Quarry/Spec/Header.html +0 -195
- data/doc/rdoc/classes/Quarry/Spec/Macro.html +0 -166
- data/doc/rdoc/classes/Quarry/Spec/Markup.html +0 -279
- data/doc/rdoc/classes/Quarry/Spec/Reporter/DotProgress.html +0 -234
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Summary.html +0 -294
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Verbatim.html +0 -311
- data/doc/rdoc/classes/Quarry/Spec/Runner.html +0 -352
- data/doc/rdoc/classes/Quarry/Spec/Step.html +0 -190
- data/doc/rdoc/classes/Quarry/Spec/Template.html +0 -205
- data/doc/rdoc/classes/Quarry/Stub/Delegator.html +0 -179
- data/doc/rdoc/classes/Quarry/Stub/Setter.html +0 -175
- data/doc/rdoc/classes/Quarry/Stub.html +0 -224
- data/doc/rdoc/classes/Quarry.html +0 -176
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/CHANGES.html +0 -150
- data/doc/rdoc/files/COPYING.html +0 -468
- data/doc/rdoc/files/README.html +0 -195
- data/doc/rdoc/files/RELEASE.html +0 -122
- data/doc/rdoc/files/VERSION.html +0 -107
- data/doc/rdoc/files/bin/quarry-doc.html +0 -109
- data/doc/rdoc/files/bin/quarry.html +0 -109
- data/doc/rdoc/files/bin/ruby-break.html +0 -108
- data/doc/rdoc/files/bin/ruby-xacto.html +0 -101
- data/doc/rdoc/files/lib/quarry/assert_rb.html +0 -155
- data/doc/rdoc/files/lib/quarry/break_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/extract_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/loadmonitor_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/config_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/context_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/document_rb.html +0 -111
- data/doc/rdoc/files/lib/quarry/spec/markup_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter/dotprogress_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter/summary_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter/verbatim_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter_rb.html +0 -109
- data/doc/rdoc/files/lib/quarry/spec/runner_rb.html +0 -109
- data/doc/rdoc/files/lib/quarry/spec/step_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/template_rhtml.html +0 -228
- data/doc/rdoc/files/lib/quarry/spec_rb.html +0 -113
- data/doc/rdoc/files/lib/quarry/stub/mock_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/stub/probe_rb.html +0 -122
- data/doc/rdoc/files/lib/quarry/stub/spec_txt.html +0 -118
- data/doc/rdoc/files/lib/quarry/stub/stub_rb.html +0 -101
- data/doc/rdoc/fr_class_index.html +0 -56
- data/doc/rdoc/fr_file_index.html +0 -55
- data/doc/rdoc/fr_method_index.html +0 -117
- data/doc/rdoc/index.html +0 -24
- data/doc/rdoc/rdoc-style.css +0 -208
- data/doc/ri/Assertion/False/assert-i.yaml +0 -10
- data/doc/ri/Assertion/False/cdesc-False.yaml +0 -21
- data/doc/ri/Assertion/False/message-i.yaml +0 -10
- data/doc/ri/Assertion/True/assert-i.yaml +0 -11
- data/doc/ri/Assertion/True/cdesc-True.yaml +0 -26
- data/doc/ri/Assertion/True/message-c.yaml +0 -11
- data/doc/ri/Assertion/True/message-i.yaml +0 -11
- data/doc/ri/Assertion/True/method_missing-i.yaml +0 -12
- data/doc/ri/Assertion/True/new-c.yaml +0 -11
- data/doc/ri/Assertion/cdesc-Assertion.yaml +0 -40
- data/doc/ri/Kernel/cdesc-Kernel.yaml +0 -15
- data/doc/ri/Method/cdesc-Method.yaml +0 -18
- data/doc/ri/Method/migration-i.yaml +0 -12
- data/doc/ri/Method/signature-i.yaml +0 -12
- data/doc/ri/Object/assert%21-i.yaml +0 -17
- data/doc/ri/Object/assert-i.yaml +0 -15
- data/doc/ri/Object/assert_raises%21-i.yaml +0 -12
- data/doc/ri/Object/assert_raises-i.yaml +0 -15
- data/doc/ri/Object/cdesc-Object.yaml +0 -42
- data/doc/ri/Object/mock-i.yaml +0 -12
- data/doc/ri/Object/refute-i.yaml +0 -13
- data/doc/ri/Object/refute_raises-i.yaml +0 -17
- data/doc/ri/Object/remove-i.yaml +0 -12
- data/doc/ri/Object/should-i.yaml +0 -12
- data/doc/ri/Object/should_not-i.yaml +0 -12
- data/doc/ri/Object/should_not_raise-i.yaml +0 -12
- data/doc/ri/Object/should_raise-i.yaml +0 -12
- data/doc/ri/Object/stub-i.yaml +0 -12
- data/doc/ri/Quarry/Break/cdesc-Break.yaml +0 -23
- data/doc/ri/Quarry/Break/edit-i.yaml +0 -11
- data/doc/ri/Quarry/Break/new-c.yaml +0 -11
- data/doc/ri/Quarry/Extract/cdesc-Extract.yaml +0 -26
- data/doc/ri/Quarry/Extract/create_test-i.yaml +0 -12
- data/doc/ri/Quarry/Extract/extract_test_from_file-i.yaml +0 -12
- data/doc/ri/Quarry/Extract/test_extract-i.yaml +0 -18
- data/doc/ri/Quarry/MethodProbe/cdesc-MethodProbe.yaml +0 -46
- data/doc/ri/Quarry/MethodProbe/duckcall-c.yaml +0 -10
- data/doc/ri/Quarry/MethodProbe/initialize_copy-i.yaml +0 -10
- data/doc/ri/Quarry/MethodProbe/method_missing-i.yaml +0 -10
- data/doc/ri/Quarry/MethodProbe/new-c.yaml +0 -10
- data/doc/ri/Quarry/Mock/Delegator/cdesc-Delegator.yaml +0 -20
- data/doc/ri/Quarry/Mock/Delegator/method_missing-i.yaml +0 -10
- data/doc/ri/Quarry/Mock/Delegator/new-c.yaml +0 -10
- data/doc/ri/Quarry/Mock/Setter/%3d%3d-i.yaml +0 -10
- data/doc/ri/Quarry/Mock/Setter/cdesc-Setter.yaml +0 -18
- data/doc/ri/Quarry/Mock/Setter/new-c.yaml +0 -10
- data/doc/ri/Quarry/Mock/__table__-i.yaml +0 -11
- data/doc/ri/Quarry/Mock/cdesc-Mock.yaml +0 -25
- data/doc/ri/Quarry/Mock/method_missing-i.yaml +0 -12
- data/doc/ri/Quarry/Mock/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Comment/cdesc-Comment.yaml +0 -33
- data/doc/ri/Quarry/Spec/Comment/macro%3f-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Comment/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Comment/type-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/after-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/after_spec-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/before-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/before_spec-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/cdesc-Config.yaml +0 -26
- data/doc/ri/Quarry/Spec/Config/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Context/cdesc-Context.yaml +0 -21
- data/doc/ri/Quarry/Spec/Context/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Document/cdesc-Document.yaml +0 -76
- data/doc/ri/Quarry/Spec/Document/generate-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/new-c.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/quiet%3f-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/require_rdoc-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Document/save-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/template-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Header/cdesc-Header.yaml +0 -30
- data/doc/ri/Quarry/Spec/Header/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Macro/cdesc-Macro.yaml +0 -22
- data/doc/ri/Quarry/Spec/Macro/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Markup/cdesc-Markup.yaml +0 -31
- data/doc/ri/Quarry/Spec/Markup/description-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Markup/new-c.yaml +0 -11
- data/doc/ri/Quarry/Spec/Markup/parse-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Markup/parse_section-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/cdesc-DotProgress.yaml +0 -21
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_intro-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_step-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_summary-i.yaml +0 -16
- data/doc/ri/Quarry/Spec/Reporter/Summary/cdesc-Summary.yaml +0 -31
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_comment-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_error-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_fail-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_header-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_macro-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_pass-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/cdesc-Verbatim.yaml +0 -29
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_comment-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_error-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_fail-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_header-i.yaml +0 -16
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_macro-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_pass-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/cdesc-Reporter.yaml +0 -20
- data/doc/ri/Quarry/Spec/Runner/cdesc-Runner.yaml +0 -47
- data/doc/ri/Quarry/Spec/Runner/check-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Runner/check_spec-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Runner/new-c.yaml +0 -12
- data/doc/ri/Quarry/Spec/Runner/run_step-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Step/cdesc-Step.yaml +0 -30
- data/doc/ri/Quarry/Spec/Step/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Template/cdesc-Template.yaml +0 -31
- data/doc/ri/Quarry/Spec/Template/new-c.yaml +0 -11
- data/doc/ri/Quarry/Spec/Template/parse_template-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/cdesc-Spec.yaml +0 -15
- data/doc/ri/Quarry/Stub/Delegator/cdesc-Delegator.yaml +0 -20
- data/doc/ri/Quarry/Stub/Delegator/method_missing-i.yaml +0 -10
- data/doc/ri/Quarry/Stub/Delegator/new-c.yaml +0 -10
- data/doc/ri/Quarry/Stub/Setter/%3d%3d-i.yaml +0 -10
- data/doc/ri/Quarry/Stub/Setter/cdesc-Setter.yaml +0 -18
- data/doc/ri/Quarry/Stub/Setter/new-c.yaml +0 -10
- data/doc/ri/Quarry/Stub/__table__-i.yaml +0 -11
- data/doc/ri/Quarry/Stub/cdesc-Stub.yaml +0 -23
- data/doc/ri/Quarry/Stub/method_missing-i.yaml +0 -11
- data/doc/ri/Quarry/Stub/new-c.yaml +0 -10
- data/doc/ri/Quarry/cdesc-Quarry.yaml +0 -16
- data/doc/ri/created.rid +0 -1
- data/doc/spec/stub.html +0 -394
- data/lib/quarry/assert.rb +0 -198
- data/lib/quarry/break.rb +0 -51
- data/lib/quarry/spec/document.rb +0 -130
- data/lib/quarry/spec/markup.rb +0 -85
- data/lib/quarry/spec/reporter/dotprogress.rb +0 -66
- data/lib/quarry/spec/reporter/summary.rb +0 -74
- data/lib/quarry/spec/reporter/verbatim.rb +0 -87
- data/lib/quarry/spec/reporter.rb +0 -74
- data/lib/quarry/spec/runner.rb +0 -127
- data/lib/quarry/spec/template.rhtml +0 -116
- data/lib/quarry/spec.rb +0 -7
- data/lib/quarry/stub/spec.txt +0 -113
- data/work/consider/document.rb +0 -35
- data/work/consider/fixture.rb +0 -153
- data/work/deprecated/assert/must.rb +0 -9
- data/work/deprecated/assert/should.rb +0 -9
- data/work/deprecated/build.rb +0 -82
- data/work/deprecated/mock/file.rb +0 -11
- data/work/deprecated/mock/mock.0.rb +0 -77
- data/work/deprecated/overlay.rb +0 -64
- data/work/deprecated/spec.rb +0 -195
- data/work/deprecated/stub/stub.0.rb +0 -180
- data/work/deprecated/stub/stub.1.rb +0 -114
- data/work/deprecated/stub/test_stub.rb +0 -66
- data/work/deprecated/test/case.rb +0 -141
- data/work/sandbox/assert.rb +0 -100
- data/work/sandbox/bug.rb +0 -49
- data/work/sandbox/build/announce.rb +0 -213
- data/work/sandbox/build/check.rb +0 -109
- data/work/sandbox/build/gem.rb +0 -235
- data/work/sandbox/build/make.rb +0 -118
- data/work/sandbox/build/manpage.rb +0 -201
- data/work/sandbox/build/notes.rb +0 -214
- data/work/sandbox/build/pack.rb +0 -228
- data/work/sandbox/build/rdoc.rb +0 -289
- data/work/sandbox/build/rubyforge.rb +0 -91
- data/work/sandbox/build/sign.rb +0 -241
- data/work/sandbox/build/stamp.rb +0 -37
- data/work/sandbox/build/stats.rb +0 -154
- data/work/sandbox/build/svn.rb +0 -193
- data/work/sandbox/build/test.rb +0 -521
- data/work/sandbox/design.rb +0 -200
- data/work/sandbox/iface_scanner.rb +0 -102
- data/work/sandbox/testunit/assertions/assert_has_keys.rb +0 -38
- data/work/sandbox/testunit/assertions/assert_has_only_keys.rb +0 -38
- data/work/sandbox/testunit/unit.rb +0 -104
- data/work/sandbox/unitspec.rb +0 -54
- 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
|
+
|
data/lib/quarry/extract.rb
CHANGED
|
@@ -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
|
+
|