quarry 0.3.0 → 0.4.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 +40 -3
- data/MANIFEST +290 -78
- data/README +51 -37
- data/RELEASE +12 -0
- data/VERSION +1 -1
- data/bin/quarry +117 -0
- data/bin/quarry-doc +26 -0
- data/bin/ruby-break +10 -0
- data/bin/{xact-ruby → ruby-xacto} +0 -0
- 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 +1 -0
- data/doc/assets/jquery/jquery.tabs.js +1 -0
- data/doc/assets/rdoc_ad.html +12 -0
- data/doc/assets/styles/index.css +138 -0
- data/doc/guide/stubs.md +125 -0
- data/doc/index.html +285 -0
- data/doc/log/bstats/stats.html +39 -0
- data/doc/log/notes.xml +32 -0
- data/doc/log/stats.html +25 -0
- data/doc/log/stats.log +14 -0
- data/doc/log/syntax.log +0 -0
- data/doc/rdoc/classes/Assertion/False.html +151 -106
- data/doc/rdoc/classes/Assertion/True.html +128 -113
- data/doc/rdoc/classes/Assertion.html +147 -77
- data/doc/rdoc/classes/Kernel.html +84 -65
- data/doc/rdoc/classes/Method.html +123 -92
- data/doc/rdoc/classes/Object.html +468 -115
- data/doc/rdoc/classes/Quarry/Break.html +231 -0
- data/doc/rdoc/classes/Quarry/Command.html +443 -0
- data/doc/rdoc/classes/Quarry/Extract.html +215 -0
- data/doc/rdoc/classes/Quarry/MethodProbe.html +203 -145
- data/doc/rdoc/classes/Quarry/Mock/Delegator.html +179 -0
- data/doc/rdoc/classes/Quarry/Mock/Setter.html +175 -0
- data/doc/rdoc/classes/Quarry/Mock.html +211 -67
- data/doc/rdoc/classes/Quarry/Spec/Comment.html +237 -0
- data/doc/rdoc/classes/Quarry/Spec/Config.html +257 -0
- data/doc/rdoc/classes/Quarry/Spec/Context.html +154 -0
- data/doc/rdoc/classes/Quarry/Spec/Document.html +382 -0
- data/doc/rdoc/classes/Quarry/Spec/Header.html +195 -0
- data/doc/rdoc/classes/Quarry/Spec/Macro.html +166 -0
- data/doc/rdoc/classes/Quarry/Spec/Markup.html +279 -0
- data/doc/rdoc/classes/Quarry/Spec/Reporter/DotProgress.html +234 -0
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Summary.html +294 -0
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Verbatim.html +311 -0
- data/doc/rdoc/classes/Quarry/Spec/Runner.html +352 -0
- data/doc/rdoc/classes/Quarry/Spec/Step.html +190 -0
- data/doc/rdoc/classes/Quarry/Spec/Template.html +205 -0
- data/doc/rdoc/classes/Quarry/Stub/Delegator.html +179 -0
- data/doc/rdoc/classes/Quarry/Stub/Setter.html +175 -0
- data/doc/rdoc/classes/Quarry/Stub.html +224 -0
- data/doc/rdoc/classes/Quarry.html +153 -154
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/CHANGES.html +126 -76
- data/doc/rdoc/files/COPYING.html +84 -73
- data/doc/rdoc/files/README.html +135 -111
- data/doc/rdoc/files/RELEASE.html +122 -0
- data/doc/rdoc/files/VERSION.html +85 -74
- data/doc/rdoc/files/bin/quarry-doc.html +109 -0
- data/doc/rdoc/files/bin/quarry.html +109 -0
- data/doc/rdoc/files/bin/ruby-break.html +108 -0
- data/doc/rdoc/files/bin/ruby-xacto.html +101 -0
- data/doc/rdoc/files/lib/quarry/assert_rb.html +155 -0
- data/doc/rdoc/files/lib/quarry/break_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/extract_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/loadmonitor_rb.html +80 -71
- data/doc/rdoc/files/lib/quarry/spec/config_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/spec/context_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/spec/document_rb.html +111 -0
- data/doc/rdoc/files/lib/quarry/spec/markup_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter/dotprogress_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter/summary_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter/verbatim_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter_rb.html +109 -0
- data/doc/rdoc/files/lib/quarry/spec/runner_rb.html +109 -0
- data/doc/rdoc/files/lib/quarry/spec/step_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/spec/template_rhtml.html +228 -0
- data/doc/rdoc/files/lib/quarry/spec_rb.html +113 -0
- data/doc/rdoc/files/lib/quarry/stub/mock_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/stub/probe_rb.html +122 -0
- data/doc/rdoc/files/lib/quarry/stub/spec_txt.html +118 -0
- data/doc/rdoc/files/lib/quarry/stub/stub_rb.html +101 -0
- data/doc/rdoc/fr_class_index.html +48 -52
- data/doc/rdoc/fr_file_index.html +47 -57
- data/doc/rdoc/fr_method_index.html +109 -69
- data/doc/rdoc/index.html +12 -14
- data/doc/rdoc/rdoc-style.css +154 -121
- data/doc/ri/Assertion/False/cdesc-False.yaml +5 -3
- data/doc/ri/Assertion/True/cdesc-True.yaml +4 -2
- data/doc/ri/Assertion/True/message-c.yaml +2 -2
- data/doc/ri/Assertion/True/message-i.yaml +1 -1
- data/doc/ri/Assertion/True/method_missing-i.yaml +4 -3
- data/doc/ri/Assertion/cdesc-Assertion.yaml +24 -1
- data/doc/ri/Object/assert%21-i.yaml +7 -4
- data/doc/ri/Object/assert-i.yaml +3 -2
- data/doc/ri/Object/assert_raises%21-i.yaml +12 -0
- data/doc/ri/Object/assert_raises-i.yaml +15 -0
- data/doc/ri/Object/cdesc-Object.yaml +24 -2
- data/doc/ri/{Quarry/Design/Specification/outline-i.yaml → Object/mock-i.yaml} +4 -4
- data/doc/ri/Object/refute-i.yaml +13 -0
- data/doc/ri/Object/refute_raises-i.yaml +17 -0
- data/doc/ri/Object/remove-i.yaml +12 -0
- data/doc/ri/{Quarry/Design/check-c.yaml → Object/should-i.yaml} +4 -4
- data/doc/ri/Object/should_not-i.yaml +12 -0
- data/doc/ri/Object/should_not_raise-i.yaml +12 -0
- data/doc/ri/Object/should_raise-i.yaml +12 -0
- data/doc/ri/{Quarry/Mock/Object/mock-c.yaml → Object/stub-i.yaml} +5 -5
- data/doc/ri/{Module/cdesc-Module.yaml → Quarry/Break/cdesc-Break.yaml} +10 -8
- data/doc/ri/Quarry/Break/edit-i.yaml +11 -0
- data/doc/ri/Quarry/Break/new-c.yaml +11 -0
- data/doc/ri/Quarry/Extract/cdesc-Extract.yaml +26 -0
- data/doc/ri/Quarry/Extract/create_test-i.yaml +12 -0
- data/doc/ri/Quarry/Extract/extract_test_from_file-i.yaml +12 -0
- data/doc/ri/Quarry/Extract/test_extract-i.yaml +18 -0
- data/doc/ri/Quarry/Mock/Delegator/cdesc-Delegator.yaml +20 -0
- data/doc/ri/Quarry/{Design/Specification/Context → Mock/Delegator}/method_missing-i.yaml +2 -2
- data/doc/ri/Quarry/{Design/specification-c.yaml → Mock/Delegator/new-c.yaml} +3 -3
- data/doc/ri/{Module/method_added-i.yaml → Quarry/Mock/Setter/%3d%3d-i.yaml} +3 -3
- data/doc/ri/Quarry/Mock/Setter/cdesc-Setter.yaml +18 -0
- data/doc/ri/Quarry/Mock/Setter/new-c.yaml +10 -0
- data/doc/ri/Quarry/Mock/__table__-i.yaml +11 -0
- data/doc/ri/Quarry/Mock/cdesc-Mock.yaml +17 -7
- data/doc/ri/Quarry/Mock/method_missing-i.yaml +12 -0
- data/doc/ri/Quarry/{Design/outline-c.yaml → Mock/new-c.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Comment/cdesc-Comment.yaml +33 -0
- data/doc/ri/Quarry/Spec/Comment/macro%3f-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Comment/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Comment/type-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/after-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/after_spec-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/before-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/before_spec-i.yaml +12 -0
- data/doc/ri/Quarry/{Design/Specification/Context/cdesc-Context.yaml → Spec/Config/cdesc-Config.yaml} +11 -9
- data/doc/ri/Quarry/{Mock/Object/mocks-c.yaml → Spec/Config/new-c.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Context/cdesc-Context.yaml +21 -0
- data/doc/ri/Quarry/{Design/specifications-c.yaml → Spec/Context/new-c.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Document/cdesc-Document.yaml +76 -0
- data/doc/ri/Quarry/Spec/Document/generate-i.yaml +12 -0
- data/doc/ri/Quarry/{Mock/Object/echo-c.yaml → Spec/Document/new-c.yaml} +4 -4
- data/doc/ri/Quarry/Spec/Document/quiet%3f-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Document/require_rdoc-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Document/save-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Document/template-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Header/cdesc-Header.yaml +30 -0
- data/doc/ri/Quarry/Spec/Header/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Macro/cdesc-Macro.yaml +22 -0
- data/doc/ri/Quarry/Spec/Macro/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Markup/cdesc-Markup.yaml +31 -0
- data/doc/ri/Quarry/Spec/Markup/description-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Markup/new-c.yaml +11 -0
- data/doc/ri/Quarry/Spec/Markup/parse-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Markup/parse_section-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/cdesc-DotProgress.yaml +21 -0
- data/doc/ri/Quarry/{Design/Specification/Context/specifications-i.yaml → Spec/Reporter/DotProgress/report_intro-i.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_step-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_summary-i.yaml +16 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/cdesc-Summary.yaml +31 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_comment-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_error-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_fail-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_header-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_macro-i.yaml +10 -0
- data/doc/ri/Quarry/{Design/Specification/Context/before-i.yaml → Spec/Reporter/Summary/report_pass-i.yaml} +3 -3
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/cdesc-Verbatim.yaml +29 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_comment-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_error-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_fail-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_header-i.yaml +16 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_macro-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_pass-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/cdesc-Reporter.yaml +20 -0
- data/doc/ri/Quarry/Spec/Runner/cdesc-Runner.yaml +47 -0
- data/doc/ri/Quarry/{Design/Specification → Spec/Runner}/check-i.yaml +3 -3
- data/doc/ri/Quarry/Spec/Runner/check_spec-i.yaml +12 -0
- data/doc/ri/Quarry/{Design/Specification → Spec/Runner}/new-c.yaml +2 -2
- data/doc/ri/Quarry/Spec/Runner/run_step-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Step/cdesc-Step.yaml +30 -0
- data/doc/ri/Quarry/Spec/Step/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Template/cdesc-Template.yaml +31 -0
- data/doc/ri/Quarry/Spec/Template/new-c.yaml +11 -0
- data/doc/ri/Quarry/{Design/Specification/Context/after-i.yaml → Spec/Template/parse_template-i.yaml} +3 -3
- data/doc/ri/Quarry/Spec/cdesc-Spec.yaml +15 -0
- data/doc/ri/Quarry/Stub/Delegator/cdesc-Delegator.yaml +20 -0
- data/doc/ri/Quarry/Stub/Delegator/method_missing-i.yaml +10 -0
- data/doc/ri/Quarry/Stub/Delegator/new-c.yaml +10 -0
- data/doc/ri/Quarry/Stub/Setter/%3d%3d-i.yaml +10 -0
- data/doc/ri/Quarry/Stub/Setter/cdesc-Setter.yaml +18 -0
- data/doc/ri/Quarry/Stub/Setter/new-c.yaml +10 -0
- data/doc/ri/Quarry/Stub/__table__-i.yaml +11 -0
- data/doc/ri/Quarry/Stub/cdesc-Stub.yaml +23 -0
- data/doc/ri/Quarry/Stub/method_missing-i.yaml +11 -0
- data/doc/ri/Quarry/Stub/new-c.yaml +10 -0
- data/doc/ri/Quarry/cdesc-Quarry.yaml +2 -3
- data/doc/ri/created.rid +1 -1
- data/doc/spec/stub.html +394 -0
- data/lib/quarry/assert.rb +198 -0
- data/lib/quarry/break.rb +51 -0
- data/lib/quarry/extract.rb +135 -0
- data/lib/quarry/loadmonitor.rb +6 -1
- data/lib/quarry/spec/config.rb +32 -0
- data/lib/quarry/spec/context.rb +19 -0
- data/lib/quarry/spec/document.rb +130 -0
- data/lib/quarry/spec/markup.rb +85 -0
- data/lib/quarry/spec/reporter/dotprogress.rb +66 -0
- data/lib/quarry/spec/reporter/summary.rb +74 -0
- data/lib/quarry/spec/reporter/verbatim.rb +87 -0
- data/lib/quarry/spec/reporter.rb +74 -0
- data/lib/quarry/spec/runner.rb +127 -0
- data/lib/quarry/spec/step.rb +78 -0
- data/lib/quarry/spec/template.rhtml +116 -0
- data/lib/quarry/spec.rb +7 -0
- data/lib/quarry/stub/mock.rb +94 -0
- data/lib/quarry/{methodprobe.rb → stub/probe.rb} +0 -0
- data/lib/quarry/stub/spec.txt +113 -0
- data/lib/quarry/stub/stub.rb +93 -0
- data/meta/abstract +5 -0
- data/meta/authors +1 -0
- data/meta/created +1 -0
- data/meta/homepage +1 -0
- data/meta/requires +1 -0
- data/meta/summary +1 -0
- data/spec/basic.rd +20 -0
- data/spec/complex.rd +50 -0
- data/spec/mock.rd +53 -0
- data/spec/stub.rd +61 -0
- data/{lib/quarry → work/consider}/document.rb +0 -0
- data/work/consider/fixture.rb +153 -0
- data/{lib/quarry → work/deprecated}/assert/must.rb +1 -0
- data/{lib/quarry → work/deprecated}/assert/should.rb +0 -0
- data/work/deprecated/build.rb +82 -0
- data/work/deprecated/mock/file.rb +11 -0
- data/work/deprecated/mock/mock.0.rb +77 -0
- data/work/deprecated/overlay.rb +64 -0
- data/work/deprecated/spec.rb +195 -0
- data/work/deprecated/stub/stub.0.rb +180 -0
- data/work/deprecated/stub/stub.1.rb +114 -0
- data/work/deprecated/stub/test_stub.rb +66 -0
- data/work/deprecated/test/case.rb +141 -0
- data/work/sandbox/assert.rb +100 -0
- data/work/sandbox/bug.rb +49 -0
- data/work/sandbox/build/announce.rb +213 -0
- data/work/sandbox/build/check.rb +109 -0
- data/work/sandbox/build/gem.rb +235 -0
- data/work/sandbox/build/make.rb +118 -0
- data/work/sandbox/build/manpage.rb +201 -0
- data/work/sandbox/build/notes.rb +214 -0
- data/work/sandbox/build/pack.rb +228 -0
- data/work/sandbox/build/rdoc.rb +289 -0
- data/work/sandbox/build/rubyforge.rb +91 -0
- data/work/sandbox/build/sign.rb +241 -0
- data/work/sandbox/build/stamp.rb +37 -0
- data/work/sandbox/build/stats.rb +154 -0
- data/work/sandbox/build/svn.rb +193 -0
- data/work/sandbox/build/test.rb +521 -0
- data/work/sandbox/design.rb +200 -0
- data/work/sandbox/iface_scanner.rb +102 -0
- data/work/sandbox/testunit/assertions/assert_has_keys.rb +38 -0
- data/work/sandbox/testunit/assertions/assert_has_only_keys.rb +38 -0
- data/work/sandbox/testunit/unit.rb +104 -0
- data/work/sandbox/unitspec.rb +54 -0
- data/work/sandbox/x_isotest.rb +532 -0
- metadata +318 -93
- data/METADATA +0 -22
- data/NEWS +0 -8
- data/bin/rubybreak +0 -3
- data/demo/spec/demo_check.rb +0 -21
- data/demo/spec/demo_outline.rb +0 -25
- data/demo/test/demo_run.rb +0 -21
- data/doc/manual.html2 +0 -1416
- data/doc/rdoc/classes/Module.html +0 -165
- data/doc/rdoc/classes/Quarry/Design/Specification/Context.html +0 -174
- data/doc/rdoc/classes/Quarry/Design/Specification.html +0 -265
- data/doc/rdoc/classes/Quarry/Design.html +0 -170
- data/doc/rdoc/classes/Quarry/Mock/Object.html +0 -276
- data/doc/rdoc/files/MANIFEST.html +0 -630
- data/doc/rdoc/files/METADATA.html +0 -92
- data/doc/rdoc/files/NEWS.html +0 -99
- data/doc/rdoc/files/bin/rubybreak.html +0 -96
- data/doc/rdoc/files/bin/xact-ruby.html +0 -92
- data/doc/rdoc/files/lib/quarry/assert/must_rb.html +0 -96
- data/doc/rdoc/files/lib/quarry/assert/should_rb.html +0 -96
- data/doc/rdoc/files/lib/quarry/assertion_rb.html +0 -96
- data/doc/rdoc/files/lib/quarry/breakout_rb.html +0 -144
- data/doc/rdoc/files/lib/quarry/design/spec_rb.html +0 -100
- data/doc/rdoc/files/lib/quarry/document_rb.html +0 -92
- data/doc/rdoc/files/lib/quarry/methodprobe_rb.html +0 -111
- data/doc/rdoc/files/lib/quarry/mock/object_rb.html +0 -123
- data/doc/rdoc/files/lib/quarry/mockery_rb.html +0 -115
- data/doc/ri/Module/doc-i.yaml +0 -16
- data/doc/ri/Quarry/Design/Specification/cdesc-Specification.yaml +0 -44
- data/doc/ri/Quarry/Design/cdesc-Design.yaml +0 -22
- data/doc/ri/Quarry/Mock/Object/cdesc-Object.yaml +0 -52
- data/doc/ri/Quarry/Mock/Object/keys-c.yaml +0 -12
- data/doc/ri/Quarry/Mock/Object/spin-c.yaml +0 -12
- data/doc/ri/Quarry/Mockery-i.yaml +0 -12
- data/lib/quarry/assertion.rb +0 -95
- data/lib/quarry/breakout.rb +0 -45
- data/lib/quarry/design/spec.rb +0 -197
- data/lib/quarry/mock/object.rb +0 -169
- data/lib/quarry/mockery.rb +0 -85
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
class Object
|
|
2
|
+
# Asserts a operational relationship.
|
|
3
|
+
#
|
|
4
|
+
# 4.assert == 3 #=> Assertion Error
|
|
5
|
+
#
|
|
6
|
+
def assert
|
|
7
|
+
return Assert.new(self, true)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Refutes an operational relationship.
|
|
11
|
+
#
|
|
12
|
+
# 4.assert! == 4 #=> Assertion Error
|
|
13
|
+
#
|
|
14
|
+
def assert!
|
|
15
|
+
return Assert.new(self, false)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# = Assertion
|
|
20
|
+
#
|
|
21
|
+
# Assertion is a special subclass of Exception.
|
|
22
|
+
# An Assertion error is raised when an assertion fails.
|
|
23
|
+
#
|
|
24
|
+
class Assertion < Exception
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# = Assert
|
|
28
|
+
#
|
|
29
|
+
# The Assert class is an Assertion functor. It delegates
|
|
30
|
+
# to the underlying object to test if assertions applied
|
|
31
|
+
# to it are successful or not. When they fail it raises
|
|
32
|
+
# and Assertion error.
|
|
33
|
+
#
|
|
34
|
+
class Assert
|
|
35
|
+
|
|
36
|
+
hide = instance_methods.reject { |m| m.to_s =~ /^__/ }
|
|
37
|
+
hide.each { |m| protected m }
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
def initialize(delegate, predicate)
|
|
43
|
+
@delegate = delegate
|
|
44
|
+
@predicate = predicate
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
def method_missing(sym, *a, &b)
|
|
49
|
+
case sym
|
|
50
|
+
when :raise?, :raises?
|
|
51
|
+
begin
|
|
52
|
+
@delegate.call #yield
|
|
53
|
+
assert false, "Expected #{a[0]} to be raised"
|
|
54
|
+
rescue Exception => e
|
|
55
|
+
assert a[0] === e, "Expected #{a[0]} to be raised, but got #{e.class}"
|
|
56
|
+
return e
|
|
57
|
+
end
|
|
58
|
+
else
|
|
59
|
+
assert(@delegate.__send__(sym, *a, &b), message(@delegate, sym, *a, &b))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
#
|
|
64
|
+
def assert(assertion, msg="failed assertion (no message given)")
|
|
65
|
+
if @predicate
|
|
66
|
+
raise Assertion, msg unless assertion
|
|
67
|
+
else
|
|
68
|
+
raise Assertion, msg if assertion
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
def message(obj, sym, *a, &b)
|
|
74
|
+
#self.class.message(sym)[@delegate, *a] )
|
|
75
|
+
if @predicate
|
|
76
|
+
"#{obj.inspect} #{sym} #{a.collect{|x| x.inspect}.join(',')}"
|
|
77
|
+
else
|
|
78
|
+
"NOT #{obj.inspect} #{sym} #{a.collect{|x| x.inspect}.join(',')}"
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# TODO: Ultimately better messages would be nice.
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
#def self.message(msg,&block)
|
|
86
|
+
# @messages ||= {}
|
|
87
|
+
# if block
|
|
88
|
+
# @messages[msg] = block
|
|
89
|
+
# else
|
|
90
|
+
# @messages[msg]
|
|
91
|
+
# end
|
|
92
|
+
#end
|
|
93
|
+
|
|
94
|
+
#
|
|
95
|
+
#message(:==){ |*a| "Expected #{a[0].inspect} to be equal to #{a[1].inspect}" }
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Copyright (c) 2008 Tiger Ops
|
|
100
|
+
|
data/work/sandbox/bug.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Raise a bug.
|
|
2
|
+
|
|
3
|
+
module Quarry
|
|
4
|
+
class Bug < Exception; end
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
module Kernel
|
|
8
|
+
|
|
9
|
+
# Raises a ScritBug error with a message.
|
|
10
|
+
#
|
|
11
|
+
# if find_bug then
|
|
12
|
+
# bug! "unknown bug found"
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
#--
|
|
16
|
+
# Credit goes to Minero Aoki. Cute! :-)
|
|
17
|
+
#++
|
|
18
|
+
def bug!(message='Report this bug!')
|
|
19
|
+
raise Quarry::Bug, "\n[BUG] " + message
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# _____ _
|
|
26
|
+
# |_ _|__ ___| |_
|
|
27
|
+
# | |/ _ \/ __| __|
|
|
28
|
+
# | | __/\__ \ |_
|
|
29
|
+
# |_|\___||___/\__|
|
|
30
|
+
#
|
|
31
|
+
=begin test
|
|
32
|
+
|
|
33
|
+
require 'test/unit'
|
|
34
|
+
|
|
35
|
+
class TestKernelError < Test::Unit::TestCase
|
|
36
|
+
|
|
37
|
+
def test_bug!
|
|
38
|
+
assert_raises( Bug ) { bug! }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# def test_demo
|
|
42
|
+
# demo(i=''){%{ a = [1,2,3] }}
|
|
43
|
+
# o = " a = [1,2,3] #=> [1, 2, 3]\n"
|
|
44
|
+
# assert_equal( o, i )
|
|
45
|
+
# end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
=end
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
require 'quarry/build'
|
|
2
|
+
|
|
3
|
+
module Reap
|
|
4
|
+
|
|
5
|
+
# Make a release announcement. Generates and can email a release
|
|
6
|
+
# announcements. These are nicely formated message and can
|
|
7
|
+
# email the message to the specified address(es).
|
|
8
|
+
#
|
|
9
|
+
# The following settings apply:
|
|
10
|
+
#
|
|
11
|
+
# title Project title.
|
|
12
|
+
# subtitle Brief one-line description.
|
|
13
|
+
# version Project version.
|
|
14
|
+
# description Long description of project.
|
|
15
|
+
# homepage Project homepage web address.
|
|
16
|
+
# slogan Motto for you project.
|
|
17
|
+
# memo File that contains announcement message.
|
|
18
|
+
# template Custom announcement template file.
|
|
19
|
+
# mail_to Email address(es) to send announcemnt.
|
|
20
|
+
#
|
|
21
|
+
# If <em>mail_to</em> is set then these also apply:
|
|
22
|
+
#
|
|
23
|
+
# from Message FROM address [email].
|
|
24
|
+
# subject Subject of email message ([ANN] title verison).
|
|
25
|
+
# server Email server to route message.
|
|
26
|
+
# port Email server's port.
|
|
27
|
+
# domain Email server's domain name.
|
|
28
|
+
# account Email account name [email].
|
|
29
|
+
# login Login type: plain, cram_md5 or login.
|
|
30
|
+
# secure Uses TLS security, true or false?
|
|
31
|
+
#
|
|
32
|
+
# A template file can be specified that uses "$setting" as
|
|
33
|
+
# substitutes for poject information.
|
|
34
|
+
|
|
35
|
+
class Announcement < Build
|
|
36
|
+
|
|
37
|
+
# Default layout of release announcement.
|
|
38
|
+
|
|
39
|
+
DEFAULT_TEMPLATE = <<-END
|
|
40
|
+
$title $version
|
|
41
|
+
$subtitle
|
|
42
|
+
$homepage
|
|
43
|
+
|
|
44
|
+
$summary $description
|
|
45
|
+
|
|
46
|
+
$memo
|
|
47
|
+
|
|
48
|
+
$slogan
|
|
49
|
+
END
|
|
50
|
+
|
|
51
|
+
# Name of project (ie. unix name).
|
|
52
|
+
attr_accessor :project
|
|
53
|
+
|
|
54
|
+
# Title of project.
|
|
55
|
+
attr_accessor :title
|
|
56
|
+
|
|
57
|
+
# Subtitle of project.
|
|
58
|
+
attr_accessor :subtitle
|
|
59
|
+
|
|
60
|
+
# Version number of project release.
|
|
61
|
+
attr_accessor :version
|
|
62
|
+
|
|
63
|
+
# Description of project.
|
|
64
|
+
attr_accessor :description
|
|
65
|
+
|
|
66
|
+
# Project's homepage.
|
|
67
|
+
attr_accessor :homepage
|
|
68
|
+
|
|
69
|
+
# URL to download.
|
|
70
|
+
attr_accessor :download
|
|
71
|
+
|
|
72
|
+
# Project slogan.
|
|
73
|
+
attr_accessor :slogan
|
|
74
|
+
|
|
75
|
+
# To email address(es). If this is not set then
|
|
76
|
+
# the announcement is not emailed and instead
|
|
77
|
+
# is only sent to stdout.
|
|
78
|
+
attr_accessor :mail_to
|
|
79
|
+
|
|
80
|
+
# From email address.
|
|
81
|
+
attr_accessor :mail_from
|
|
82
|
+
|
|
83
|
+
# Memo (personalized message for this release)
|
|
84
|
+
attr_accessor :memo
|
|
85
|
+
|
|
86
|
+
# User defined announcement template.
|
|
87
|
+
attr_accessor :template
|
|
88
|
+
|
|
89
|
+
# Subject line (default is "ANN: project version").
|
|
90
|
+
attr_accessor :subject
|
|
91
|
+
|
|
92
|
+
# Email server
|
|
93
|
+
attr_accessor :server
|
|
94
|
+
|
|
95
|
+
# Emails server port (default is usually correct).
|
|
96
|
+
attr_accessor :port
|
|
97
|
+
|
|
98
|
+
# Email account name (defaults to mail_from).
|
|
99
|
+
attr_accessor :account
|
|
100
|
+
|
|
101
|
+
# User domain (not sure why SMTP requires this?)
|
|
102
|
+
attr_accessor :domain
|
|
103
|
+
|
|
104
|
+
# Login type (plain, login)
|
|
105
|
+
attr_accessor :login_type
|
|
106
|
+
|
|
107
|
+
# Use TLS/SSL true or false?
|
|
108
|
+
attr_accessor :secure
|
|
109
|
+
|
|
110
|
+
# Password (deafults to ENV['PASSWORD']
|
|
111
|
+
attr_accessor :password
|
|
112
|
+
|
|
113
|
+
#
|
|
114
|
+
|
|
115
|
+
def subject
|
|
116
|
+
@subject ||= "ANN: #{title}, v#{version}"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
#
|
|
120
|
+
|
|
121
|
+
def account
|
|
122
|
+
@account ||= @mail_from
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
#config['mail_to'] = nil if keys['mail_to'].empty?
|
|
126
|
+
|
|
127
|
+
# Validate settings.
|
|
128
|
+
|
|
129
|
+
def validate
|
|
130
|
+
raise ArgumentError, "missing title" unless title
|
|
131
|
+
raise ArgumentError, "missing version" unless version
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Announcement message.
|
|
135
|
+
|
|
136
|
+
def message
|
|
137
|
+
# Announce template
|
|
138
|
+
unless template
|
|
139
|
+
files = Dir.glob("{ANN,doc/[aA]nn,doc/ANN}{,.txt}")
|
|
140
|
+
template = files.first
|
|
141
|
+
end
|
|
142
|
+
template = File.read(template) if template
|
|
143
|
+
template = template || DEFAULT_TEMPLATE
|
|
144
|
+
|
|
145
|
+
# Announce Memo
|
|
146
|
+
unless memo
|
|
147
|
+
files = Dir.glob("{MEMO,doc/[mM]emo,doc/MEMO}{,.txt}")
|
|
148
|
+
memo = files.first
|
|
149
|
+
end
|
|
150
|
+
memo = File.read(memo).fold(true) if memo
|
|
151
|
+
|
|
152
|
+
# Strip tiny version zero.
|
|
153
|
+
#if keys['version'] =~ /[.].*?[.]/
|
|
154
|
+
# keys['version'] = keys['version'].chomp('.0')
|
|
155
|
+
#end
|
|
156
|
+
|
|
157
|
+
# Make announcement message
|
|
158
|
+
message = template.dup
|
|
159
|
+
|
|
160
|
+
message.gsub!('$memo',memo) if memo # insert memo
|
|
161
|
+
#message.gsub!('$stamp',stamp.to_s) # insert stamp
|
|
162
|
+
|
|
163
|
+
template.scan(/[$].*?\s/m) do |key|
|
|
164
|
+
key = key.strip
|
|
165
|
+
name = key[1..-1]
|
|
166
|
+
value = info.send(name)
|
|
167
|
+
message.gsub!(key, value.to_s.strip)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
message.gsub!(/(^|[ ])[$].*?(?=[ ]|$)/,'') # remove unused vars
|
|
171
|
+
message.gsub!("\n\n\n","\n") # remove any triple blank lines
|
|
172
|
+
message.rstrip!
|
|
173
|
+
|
|
174
|
+
#message = release_announcement(config)
|
|
175
|
+
|
|
176
|
+
message
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
#
|
|
180
|
+
|
|
181
|
+
def email_message
|
|
182
|
+
email(message, email_options)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
#
|
|
186
|
+
|
|
187
|
+
def email_options
|
|
188
|
+
{ :to => mail_to,
|
|
189
|
+
:from => mail_from,
|
|
190
|
+
:subject => subject,
|
|
191
|
+
:server => server,
|
|
192
|
+
:port => port,
|
|
193
|
+
:domain => domain,
|
|
194
|
+
:account => account,
|
|
195
|
+
:login => login,
|
|
196
|
+
:secure => secure
|
|
197
|
+
}
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# keys = {}
|
|
205
|
+
# keys['from'] = info.email
|
|
206
|
+
# keys.update info.gather('mail')
|
|
207
|
+
# keys.update info.gather('announce')
|
|
208
|
+
# keys.update info.select(
|
|
209
|
+
# :project, :version, :title, :subtitle, :description,
|
|
210
|
+
# :homepage, :download, :slogan
|
|
211
|
+
# )
|
|
212
|
+
# keys.update override if override
|
|
213
|
+
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
require 'quarry/build'
|
|
2
|
+
|
|
3
|
+
module Quarry
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
class Check < Build
|
|
8
|
+
|
|
9
|
+
DEFAULT_LOADPATH = ['lib']
|
|
10
|
+
|
|
11
|
+
# List of file path(s) of project scripts to check.
|
|
12
|
+
|
|
13
|
+
attr_accessor :loadpath
|
|
14
|
+
attr_accessor :exclude
|
|
15
|
+
|
|
16
|
+
alias_method :include, :loadpath
|
|
17
|
+
alias_method :include=, :loadpath=
|
|
18
|
+
|
|
19
|
+
# Veridy syntax of ruby scripts.
|
|
20
|
+
#
|
|
21
|
+
# This takes one option +:scripts+ which is a glob or list of globs
|
|
22
|
+
# of the scripts to check. By default this is all scripts in the libpath(s).
|
|
23
|
+
|
|
24
|
+
def syntax(options=nil)
|
|
25
|
+
options ||= {}
|
|
26
|
+
|
|
27
|
+
glob = options[:include] || options[:loadpath] || loadpath || DEFAULT_LOADPATH
|
|
28
|
+
excl = options[:exclude] || exclude || []
|
|
29
|
+
|
|
30
|
+
if String===glob
|
|
31
|
+
glob = glob.split(/[:;]/)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
files = multiglob_r(*glob) - multiglob_r(*excl)
|
|
35
|
+
max = files.collect{ |f| f.size }.max
|
|
36
|
+
errs = []
|
|
37
|
+
cnt = 0
|
|
38
|
+
|
|
39
|
+
files.each do |s|
|
|
40
|
+
next unless File.file?(s)
|
|
41
|
+
#if not system "ruby -c -Ibin:lib:test #{s} &> /dev/null" then
|
|
42
|
+
r = system "ruby -c -I#{libpath} #{s} > /dev/null"
|
|
43
|
+
if r
|
|
44
|
+
puts("%-#{max}s [PASS]" % [s]) #if verbose?
|
|
45
|
+
else
|
|
46
|
+
puts("%-#{max}s [FAIL]" % [s]) #if verbose?
|
|
47
|
+
errs << s #:syntax
|
|
48
|
+
cnt += 1
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
if cnt == 0
|
|
53
|
+
puts "Syntax checks out."
|
|
54
|
+
else
|
|
55
|
+
puts "#{cnt} Syntax Failures:\n "
|
|
56
|
+
puts errs.join("\n ")
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Load each script independently to ensure there are no
|
|
61
|
+
# require dependency issues.
|
|
62
|
+
#
|
|
63
|
+
# WARNING! Only do this on scripts that have no toplevel side-effects!
|
|
64
|
+
#
|
|
65
|
+
# This takes one option +:scripts+ which is a glob or list of globs
|
|
66
|
+
# of the scripts to check. By default this is all scripts in the libpath(s).
|
|
67
|
+
#
|
|
68
|
+
# FIXME: This isn;t routing output to dev/null as expected.
|
|
69
|
+
|
|
70
|
+
def dependencies(options=nil)
|
|
71
|
+
options ||= {}
|
|
72
|
+
|
|
73
|
+
options ||= {}
|
|
74
|
+
|
|
75
|
+
glob = options[:include] || options[:loadpath] || loadpath || DEFAULT_LOADPATH
|
|
76
|
+
excl = options[:exclude] || exclude || []
|
|
77
|
+
|
|
78
|
+
if String===glob
|
|
79
|
+
glob = glob.split(/[:;]/)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
files = multiglob_r(*glob) - multiglob_r(*excl)
|
|
83
|
+
max = files.collect{ |f| f.size }.max
|
|
84
|
+
errs = []
|
|
85
|
+
cnt = 0
|
|
86
|
+
|
|
87
|
+
files.each do |s|
|
|
88
|
+
next unless File.file?(s)
|
|
89
|
+
#if not system "ruby -c -Ibin:lib:test #{s} &> /dev/null" then
|
|
90
|
+
if r = system("ruby -I#{libpath} #{s} > /dev/null")
|
|
91
|
+
puts "%-#{max}s [PASS]" % [s] #if verbose?
|
|
92
|
+
else
|
|
93
|
+
puts "%-#{max}s [FAIL]" % [s] #if verbose?
|
|
94
|
+
errs << s #:load
|
|
95
|
+
cnt += 1
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
if cnt == 0
|
|
100
|
+
puts "Load dependencies check out."
|
|
101
|
+
else
|
|
102
|
+
puts "#{cnt} Load Failures:\n "
|
|
103
|
+
puts errs.join("\n ")
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
require 'quarry/build'
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require 'rubygems/specification'
|
|
5
|
+
Gem::manage_gems
|
|
6
|
+
rescue LoadError
|
|
7
|
+
#raise LoadError, "RubyGems is not installed?"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module Qaurry
|
|
11
|
+
|
|
12
|
+
class Gem < Build
|
|
13
|
+
|
|
14
|
+
# Remove package products.
|
|
15
|
+
#
|
|
16
|
+
# Can task an +omit+ option as a regular expression
|
|
17
|
+
# omit certain removals.
|
|
18
|
+
|
|
19
|
+
def clobber_packages(opts=nil)
|
|
20
|
+
opts ||= {}
|
|
21
|
+
|
|
22
|
+
omit = opts[:omit]
|
|
23
|
+
|
|
24
|
+
pkgdir = "pkg" # FIXME
|
|
25
|
+
|
|
26
|
+
packages = glob(File.join(pkgdir, '*'))
|
|
27
|
+
|
|
28
|
+
if omit
|
|
29
|
+
packages.reject!{ |path| omit =~ path }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
packages.each do |path|
|
|
33
|
+
rm_r(path)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Create a Tar'd Gzip package.
|
|
38
|
+
|
|
39
|
+
def package_tgz
|
|
40
|
+
status "Creating .tgz package"
|
|
41
|
+
|
|
42
|
+
config = configuration['pack'] || {}
|
|
43
|
+
config = config['tgz'] || {}
|
|
44
|
+
|
|
45
|
+
package = package.clone
|
|
46
|
+
package.update(config)
|
|
47
|
+
|
|
48
|
+
store = config[:store] || 'pkg'
|
|
49
|
+
templ = config[:template]
|
|
50
|
+
|
|
51
|
+
name = package.stage_name(templ)
|
|
52
|
+
stage = File.join(store, name)
|
|
53
|
+
files = package.filelist
|
|
54
|
+
|
|
55
|
+
stage(stage, files)
|
|
56
|
+
|
|
57
|
+
if dryrun?
|
|
58
|
+
status "tar -cxf #{name}.tgz"
|
|
59
|
+
else
|
|
60
|
+
file = nil
|
|
61
|
+
cd(store) do
|
|
62
|
+
file = tgz(name)
|
|
63
|
+
end
|
|
64
|
+
transfer(file, store)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Create Zip package.
|
|
69
|
+
|
|
70
|
+
def package_zip
|
|
71
|
+
status "Creating .zip package"
|
|
72
|
+
|
|
73
|
+
config = configuration['pack'] || {}
|
|
74
|
+
config = config['zip'] || {}
|
|
75
|
+
|
|
76
|
+
package = package().clone
|
|
77
|
+
package.update(config)
|
|
78
|
+
|
|
79
|
+
store = config[:store] || 'pkg'
|
|
80
|
+
templ = config[:template]
|
|
81
|
+
|
|
82
|
+
name = package.stage_name(templ)
|
|
83
|
+
stage = File.join(store, name)
|
|
84
|
+
files = package.filelist
|
|
85
|
+
|
|
86
|
+
stage(stage, files)
|
|
87
|
+
|
|
88
|
+
if dryrun?
|
|
89
|
+
status "tar -cxf #{name}.zip"
|
|
90
|
+
else
|
|
91
|
+
file = nil
|
|
92
|
+
cd(store) do
|
|
93
|
+
file = zip(name)
|
|
94
|
+
end
|
|
95
|
+
transfer(file, store)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Create a Gem package.
|
|
100
|
+
#
|
|
101
|
+
# TODO: Should this use staging too, like zip/tgz?
|
|
102
|
+
|
|
103
|
+
def package_gem
|
|
104
|
+
status "Creating .gem package"
|
|
105
|
+
|
|
106
|
+
config = configuration['pack'] || {}
|
|
107
|
+
config = config['gem'] || {}
|
|
108
|
+
|
|
109
|
+
package = package().clone
|
|
110
|
+
package.update(config)
|
|
111
|
+
|
|
112
|
+
store = config[:store] || 'pkg'
|
|
113
|
+
|
|
114
|
+
#dir = Dir.pwd
|
|
115
|
+
|
|
116
|
+
file = nil
|
|
117
|
+
#cd(dir) do
|
|
118
|
+
#status "vi #{metadata.name}.gemspec"
|
|
119
|
+
builder = ::Gem::Builder.new(gemspec(package))
|
|
120
|
+
status "gem build #{package.name}"
|
|
121
|
+
unless dryrun?
|
|
122
|
+
file = builder.build
|
|
123
|
+
file = File.expand_path(file)
|
|
124
|
+
end
|
|
125
|
+
#end
|
|
126
|
+
|
|
127
|
+
transfer(file, store)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
private
|
|
131
|
+
|
|
132
|
+
# Create Gem::Specification.
|
|
133
|
+
|
|
134
|
+
def gemspec(package)
|
|
135
|
+
distribute = package.filelist
|
|
136
|
+
#distribute = Dir.multiglob_with_default( '**/*', distribute )
|
|
137
|
+
|
|
138
|
+
::Gem::Specification.new do |spec|
|
|
139
|
+
spec.name = package.name
|
|
140
|
+
spec.version = package.version
|
|
141
|
+
spec.summary = package.brief
|
|
142
|
+
spec.description = package.description
|
|
143
|
+
spec.author = package.author
|
|
144
|
+
spec.email = package.email
|
|
145
|
+
spec.rubyforge_project = package.development if /rubyforge.org/ =~ package.development
|
|
146
|
+
spec.homepage = package.homepage
|
|
147
|
+
|
|
148
|
+
# Platform: ruby, mswin32, i586-linux, powerpc-darwin, current
|
|
149
|
+
spec.platform = 'ruby' # TODO current support!
|
|
150
|
+
|
|
151
|
+
spec.require_paths = [package.gem_path].flatten.reverse
|
|
152
|
+
|
|
153
|
+
#if package.platform != 'ruby'
|
|
154
|
+
# spec.require_paths.concat(spec.require_paths.collect{ |d| File.join(d, platform) })
|
|
155
|
+
#end
|
|
156
|
+
|
|
157
|
+
spec.bindir = "bin"
|
|
158
|
+
spec.executables = package.executables
|
|
159
|
+
spec.requirements = package.requirements
|
|
160
|
+
spec.has_rdoc = package.document
|
|
161
|
+
|
|
162
|
+
if package.dependencies
|
|
163
|
+
package.dependencies.each do |d,v|
|
|
164
|
+
spec.add_dependency(*[d,v].compact)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
spec.extensions = package.compile
|
|
169
|
+
|
|
170
|
+
spec.files = distribute
|
|
171
|
+
|
|
172
|
+
spec.test_files = distribute.select{ |f| f =~ /^test\// } # TODO make test_files configurable
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Transfer package file to storage location.
|
|
177
|
+
|
|
178
|
+
def transfer(file, store)
|
|
179
|
+
# move to store, unless already there
|
|
180
|
+
dest = File.join(store, File.basename(file))
|
|
181
|
+
dest = File.expand_path(dest)
|
|
182
|
+
mv(file, store) unless file == dest
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# Report that a package has been built.
|
|
186
|
+
# FIXME
|
|
187
|
+
|
|
188
|
+
def report_package_built(type, file)
|
|
189
|
+
r = ''
|
|
190
|
+
r << "\n Successfully built #{type}"
|
|
191
|
+
r << "\n Name: #{package.name}"
|
|
192
|
+
r << "\n Version: #{package.version}"
|
|
193
|
+
r << "\n File: #{File.basename(file)}"
|
|
194
|
+
say r
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# # Build packages.
|
|
202
|
+
# # TODO Move this to Manager ?
|
|
203
|
+
#
|
|
204
|
+
# def generate_packages
|
|
205
|
+
# package_files = formats.collect do |format|
|
|
206
|
+
# #format = clean_type(format)
|
|
207
|
+
# say '' if format == 'gem' # FIXME This is here b/c Gems outputs on it's own.
|
|
208
|
+
# file = create_package(format)
|
|
209
|
+
# unless dryrun? or (format == 'gem')
|
|
210
|
+
# report_package_built(format, file) if file
|
|
211
|
+
# end
|
|
212
|
+
# file
|
|
213
|
+
# end
|
|
214
|
+
# report_packaging_complete(package_files.size)
|
|
215
|
+
# end
|
|
216
|
+
#
|
|
217
|
+
# # Create package.
|
|
218
|
+
#
|
|
219
|
+
# def create_package(type)
|
|
220
|
+
# package.format = type
|
|
221
|
+
#
|
|
222
|
+
# builder_class = FormatBuilder.registry[type]
|
|
223
|
+
# builder = builder_class.new(package, stage_directory, options)
|
|
224
|
+
# file = builder.build
|
|
225
|
+
#
|
|
226
|
+
# transfer(file) unless dryrun?
|
|
227
|
+
#
|
|
228
|
+
# return file
|
|
229
|
+
# end
|
|
230
|
+
#
|
|
231
|
+
# # Report that packaging is complete.
|
|
232
|
+
#
|
|
233
|
+
# def report_packaging_complete(size)
|
|
234
|
+
# say "\nSuccessfully built #{size} packages at #{store}/."
|
|
235
|
+
# end
|