narf 0.5.1
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/ChangeLog +163 -0
- data/InstalledFiles +2227 -0
- data/README +124 -0
- data/TODO +88 -0
- data/bin/narftest +17 -0
- data/bug.rb +9 -0
- data/build.rb +314 -0
- data/build.rb~ +314 -0
- data/config.save +12 -0
- data/doc/apache_cgi.txt +17 -0
- data/doc/fastcgi.txt +19 -0
- data/doc/mod_ruby.txt +7 -0
- data/doc/rdoc/classes/Web.html +366 -0
- data/doc/rdoc/classes/Web.src/M000002.html +15 -0
- data/doc/rdoc/classes/Web.src/M000003.html +15 -0
- data/doc/rdoc/classes/Web.src/M000004.html +15 -0
- data/doc/rdoc/classes/Web.src/M000005.html +15 -0
- data/doc/rdoc/classes/Web.src/M000006.html +20 -0
- data/doc/rdoc/classes/Web.src/M000007.html +18 -0
- data/doc/rdoc/classes/Web.src/M000008.html +18 -0
- data/doc/rdoc/classes/Web.src/M000009.html +18 -0
- data/doc/rdoc/classes/Web.src/M000010.html +15 -0
- data/doc/rdoc/classes/Web.src/M000011.html +15 -0
- data/doc/rdoc/classes/Web.src/M000012.html +15 -0
- data/doc/rdoc/classes/Web/CGD.html +173 -0
- data/doc/rdoc/classes/Web/CGD.src/M000037.html +24 -0
- data/doc/rdoc/classes/Web/CGD.src/M000038.html +23 -0
- data/doc/rdoc/classes/Web/CGD.src/M000039.html +15 -0
- data/doc/rdoc/classes/Web/CGD.src/M000040.html +15 -0
- data/doc/rdoc/classes/Web/CGD.src/M000041.html +23 -0
- data/doc/rdoc/classes/Web/CGI.html +946 -0
- data/doc/rdoc/classes/Web/CGI.src/M000051.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000052.html +24 -0
- data/doc/rdoc/classes/Web/CGI.src/M000053.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000054.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000055.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000056.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000057.html +17 -0
- data/doc/rdoc/classes/Web/CGI.src/M000058.html +34 -0
- data/doc/rdoc/classes/Web/CGI.src/M000059.html +22 -0
- data/doc/rdoc/classes/Web/CGI.src/M000060.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000061.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000062.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000063.html +18 -0
- data/doc/rdoc/classes/Web/CGI.src/M000064.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000065.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000066.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000067.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000068.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000069.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000070.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000071.html +13 -0
- data/doc/rdoc/classes/Web/CGI.src/M000072.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000073.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000074.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000075.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000076.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000077.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000078.html +20 -0
- data/doc/rdoc/classes/Web/CGI.src/M000079.html +36 -0
- data/doc/rdoc/classes/Web/CGI.src/M000080.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000081.html +18 -0
- data/doc/rdoc/classes/Web/CGI.src/M000082.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000083.html +17 -0
- data/doc/rdoc/classes/Web/CGI.src/M000084.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000085.html +16 -0
- data/doc/rdoc/classes/Web/CGI.src/M000086.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000087.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000088.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000089.html +16 -0
- data/doc/rdoc/classes/Web/CGI.src/M000090.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000091.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000092.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000093.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000094.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000095.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000096.html +19 -0
- data/doc/rdoc/classes/Web/CGI.src/M000097.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000098.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000099.html +43 -0
- data/doc/rdoc/classes/Web/CGI.src/M000100.html +18 -0
- data/doc/rdoc/classes/Web/CGI.src/M000101.html +20 -0
- data/doc/rdoc/classes/Web/CGI.src/M000102.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000103.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000104.html +15 -0
- data/doc/rdoc/classes/Web/CGI.src/M000105.html +24 -0
- data/doc/rdoc/classes/Web/CGI.src/M000106.html +24 -0
- data/doc/rdoc/classes/Web/CGI.src/M000107.html +22 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +104 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +15 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +15 -0
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +15 -0
- data/doc/rdoc/classes/Web/Mime.html +122 -0
- data/doc/rdoc/classes/Web/Mime.src/M000118.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000119.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000120.html +23 -0
- data/doc/rdoc/classes/Web/Mime.src/M000121.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000122.html +15 -0
- data/doc/rdoc/classes/Web/Mime.src/M000123.html +23 -0
- data/doc/rdoc/classes/Web/Mime.src/M000124.html +15 -0
- data/doc/rdoc/classes/Web/Narflates.html +132 -0
- data/doc/rdoc/classes/Web/Parser.html +219 -0
- data/doc/rdoc/classes/Web/Parser.src/M000013.html +21 -0
- data/doc/rdoc/classes/Web/Parser.src/M000014.html +19 -0
- data/doc/rdoc/classes/Web/Parser.src/M000015.html +21 -0
- data/doc/rdoc/classes/Web/Parser.src/M000016.html +15 -0
- data/doc/rdoc/classes/Web/Parser.src/M000017.html +30 -0
- data/doc/rdoc/classes/Web/Parser.src/M000018.html +15 -0
- data/doc/rdoc/classes/Web/Parser.src/M000019.html +19 -0
- data/doc/rdoc/classes/Web/Parser.src/M000020.html +27 -0
- data/doc/rdoc/classes/Web/Parser.src/M000021.html +15 -0
- data/doc/rdoc/classes/Web/Parser.src/M000022.html +16 -0
- data/doc/rdoc/classes/Web/Parser.src/M000023.html +18 -0
- data/doc/rdoc/classes/Web/Session.html +178 -0
- data/doc/rdoc/classes/Web/Session.src/M000042.html +20 -0
- data/doc/rdoc/classes/Web/Session.src/M000043.html +19 -0
- data/doc/rdoc/classes/Web/Session.src/M000044.html +21 -0
- data/doc/rdoc/classes/Web/Session.src/M000045.html +21 -0
- data/doc/rdoc/classes/Web/Session.src/M000046.html +15 -0
- data/doc/rdoc/classes/Web/Session.src/M000047.html +17 -0
- data/doc/rdoc/classes/Web/Session.src/M000048.html +15 -0
- data/doc/rdoc/classes/Web/Session.src/M000049.html +15 -0
- data/doc/rdoc/classes/Web/Session.src/M000050.html +16 -0
- data/doc/rdoc/classes/Web/Testing.html +474 -0
- data/doc/rdoc/classes/Web/Testing.src/M000024.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000025.html +25 -0
- data/doc/rdoc/classes/Web/Testing.src/M000026.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000027.html +28 -0
- data/doc/rdoc/classes/Web/Testing.src/M000028.html +58 -0
- data/doc/rdoc/classes/Web/Testing.src/M000029.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000030.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000031.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000032.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000033.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000034.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000035.html +15 -0
- data/doc/rdoc/classes/Web/Testing.src/M000036.html +18 -0
- data/doc/rdoc/classes/Web/Upload.html +160 -0
- data/doc/rdoc/classes/Web/Upload.src/M000108.html +25 -0
- data/doc/rdoc/classes/Web/Upload.src/M000109.html +18 -0
- data/doc/rdoc/classes/Web/Upload.src/M000110.html +16 -0
- data/doc/rdoc/classes/Web/Upload.src/M000111.html +16 -0
- data/doc/rdoc/classes/Web/Wiki.html +249 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000112.html +25 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000113.html +15 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000114.html +26 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000115.html +21 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000116.html +18 -0
- data/doc/rdoc/classes/Web/Wiki.src/M000117.html +19 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/README.html +226 -0
- data/doc/rdoc/files/doc/apache_cgi_txt.html +82 -0
- data/doc/rdoc/files/doc/fastcgi_txt.html +82 -0
- data/doc/rdoc/files/doc/mod_ruby_txt.html +62 -0
- data/doc/rdoc/files/doc/webrick_txt.html +79 -0
- data/doc/rdoc/files/examples/examples_rdoc.html +73 -0
- data/doc/rdoc/files/lib/web/cgi_rb.html +75 -0
- data/doc/rdoc/files/lib/web/mime_rb.html +67 -0
- data/doc/rdoc/files/lib/web/parser_rb.html +73 -0
- data/doc/rdoc/files/lib/web/session_rb.html +73 -0
- data/doc/rdoc/files/lib/web/template_rb.html +73 -0
- data/doc/rdoc/files/lib/web/testing_rb.html +67 -0
- data/doc/rdoc/files/lib/web/upload_rb.html +73 -0
- data/doc/rdoc/files/lib/web/wiki_rb.html +79 -0
- data/doc/rdoc/files/lib/web_rb.html +116 -0
- data/doc/rdoc/files/lib/web_rb.src/M000001.html +15 -0
- data/doc/rdoc/fr_class_index.html +47 -0
- data/doc/rdoc/fr_file_index.html +52 -0
- data/doc/rdoc/fr_method_index.html +158 -0
- data/doc/rdoc/index.html +22 -0
- data/doc/rdoc/rdoc-style.css +99 -0
- data/doc/webrick.txt +23 -0
- data/examples/admin.rb +8 -0
- data/examples/admin.rb~ +5 -0
- data/examples/cookbook.rdoc +247 -0
- data/examples/cookbook.rdoc~ +238 -0
- data/examples/examples.rdoc +19 -0
- data/examples/examples.rdoc~ +17 -0
- data/examples/hello.world.rb +5 -0
- data/examples/hello.world.rb~ +3 -0
- data/examples/session.rb +34 -0
- data/examples/session.rb~ +31 -0
- data/examples/test/test.hello.world.rb +9 -0
- data/examples/test/test.hello.world.rb~ +9 -0
- data/examples/test/test.session.rb +37 -0
- data/examples/test/test.session.rb~ +37 -0
- data/examples/webunit/COPYING +340 -0
- data/examples/webunit/Makefile +14 -0
- data/examples/webunit/TIPS-ja.html +126 -0
- data/examples/webunit/TIPS-ja.rd +154 -0
- data/examples/webunit/TODO-ja.html +35 -0
- data/examples/webunit/TODO-ja.rd +28 -0
- data/examples/webunit/changes.rd +185 -0
- data/examples/webunit/conv/digit-0.cgi +40 -0
- data/examples/webunit/conv/digit-0.rb +21 -0
- data/examples/webunit/conv/digit-1.cgi +44 -0
- data/examples/webunit/conv/digit-1.rb +17 -0
- data/examples/webunit/conv/digit.cgi +59 -0
- data/examples/webunit/conv/digit.rb +23 -0
- data/examples/webunit/conv/test_digit-0.rb +16 -0
- data/examples/webunit/conv/test_digit-1.rb +19 -0
- data/examples/webunit/conv/test_digit.rb +26 -0
- data/examples/webunit/conv/test_digit_view-0.rb +76 -0
- data/examples/webunit/conv/test_digit_view-1.rb +102 -0
- data/examples/webunit/conv/test_digit_view.rb +134 -0
- data/examples/webunit/example.rd +37 -0
- data/examples/webunit/index-en.html +263 -0
- data/examples/webunit/index-en.rd +60 -0
- data/examples/webunit/index-ja.html +263 -0
- data/examples/webunit/index-ja.rd +60 -0
- data/examples/wiki.rb +7 -0
- data/examples/wiki.rb~ +5 -0
- data/install.rb +1022 -0
- data/lib/web.rb +290 -0
- data/lib/web.rb~ +290 -0
- data/lib/web/#assertinclude.rb# +110 -0
- data/lib/web/action.rb +82 -0
- data/lib/web/assertinclude.rb +110 -0
- data/lib/web/assertinclude.rb~ +110 -0
- data/lib/web/buffer.rb +20 -0
- data/lib/web/cgi.rb +641 -0
- data/lib/web/cgi.rb~ +640 -0
- data/lib/web/formreader.rb +317 -0
- data/lib/web/forms.rb +104 -0
- data/lib/web/htmlparser/html-parser.rb +429 -0
- data/lib/web/htmlparser/html-parser.rb~ +429 -0
- data/lib/web/htmlparser/sgml-parser.rb +332 -0
- data/lib/web/htmlparser/sgml-parser.rb~ +332 -0
- data/lib/web/htmltools/element.rb +296 -0
- data/lib/web/htmltools/element.rb~ +296 -0
- data/lib/web/htmltools/stparser.rb +276 -0
- data/lib/web/htmltools/stparser.rb~ +276 -0
- data/lib/web/htmltools/tags.rb +286 -0
- data/lib/web/htmltools/tags.rb~ +286 -0
- data/lib/web/htmltools/tree.rb +139 -0
- data/lib/web/htmltools/tree.rb~ +139 -0
- data/lib/web/htmltools/xmltree.rb +160 -0
- data/lib/web/htmltools/xmltree.rb~ +160 -0
- data/lib/web/htmltools/xpath.rb +71 -0
- data/lib/web/htmltools/xpath.rb~ +71 -0
- data/lib/web/mime.rb +82 -0
- data/lib/web/parser.rb +266 -0
- data/lib/web/parser.rb~ +266 -0
- data/lib/web/request.rb~ +238 -0
- data/lib/web/resources/mime.types +483 -0
- data/lib/web/runner.rb +26 -0
- data/lib/web/runner.rb~ +26 -0
- data/lib/web/sapi/fastcgi.rb +26 -0
- data/lib/web/sapi/fastcgi.rb~ +25 -0
- data/lib/web/sapi/mod_ruby.rb +46 -0
- data/lib/web/sapi/mod_ruby.rb~ +46 -0
- data/lib/web/sapi/webrick.rb +91 -0
- data/lib/web/sapi/webrick.rb~ +89 -0
- data/lib/web/session.rb +75 -0
- data/lib/web/session.rb~ +75 -0
- data/lib/web/simpledispatcher.rb +155 -0
- data/lib/web/strscanparser.rb +24 -0
- data/lib/web/tagparser.rb +96 -0
- data/lib/web/tagparser.rb~ +96 -0
- data/lib/web/template.rb +613 -0
- data/lib/web/template.rb~ +613 -0
- data/lib/web/testing.rb +546 -0
- data/lib/web/testing.rb~ +546 -0
- data/lib/web/traceoutput.rb +32 -0
- data/lib/web/unit.rb +27 -0
- data/lib/web/unit/assert.rb +154 -0
- data/lib/web/unit/converter.rb +148 -0
- data/lib/web/unit/cookie.rb +120 -0
- data/lib/web/unit/domwalker.rb +187 -0
- data/lib/web/unit/exception.rb +15 -0
- data/lib/web/unit/form.rb +118 -0
- data/lib/web/unit/formatter.rb +314 -0
- data/lib/web/unit/frame.rb +39 -0
- data/lib/web/unit/html-parser.rb +432 -0
- data/lib/web/unit/htmlelem.rb +124 -0
- data/lib/web/unit/htmlrepair.rb +116 -0
- data/lib/web/unit/htmlsplit.rb +840 -0
- data/lib/web/unit/image.rb +27 -0
- data/lib/web/unit/jscript.rb +32 -0
- data/lib/web/unit/link.rb +35 -0
- data/lib/web/unit/params.rb +323 -0
- data/lib/web/unit/parser.rb +226 -0
- data/lib/web/unit/resources/assert.html +101 -0
- data/lib/web/unit/resources/auth/index.html +5 -0
- data/lib/web/unit/resources/badtags.html +7 -0
- data/lib/web/unit/resources/cookie.cgi +33 -0
- data/lib/web/unit/resources/document.xml +13 -0
- data/lib/web/unit/resources/form.html +150 -0
- data/lib/web/unit/resources/frame-0.html +10 -0
- data/lib/web/unit/resources/frame-1.html +10 -0
- data/lib/web/unit/resources/frame.html +10 -0
- data/lib/web/unit/resources/image.html +17 -0
- data/lib/web/unit/resources/images/x.gif +0 -0
- data/lib/web/unit/resources/images/y.gif +0 -0
- data/lib/web/unit/resources/jscript-0.html +10 -0
- data/lib/web/unit/resources/jscript-1.html +10 -0
- data/lib/web/unit/resources/jscript.html +19 -0
- data/lib/web/unit/resources/link.html +19 -0
- data/lib/web/unit/resources/multipart.cgi +28 -0
- data/lib/web/unit/resources/multipart.html +74 -0
- data/lib/web/unit/resources/params.html +65 -0
- data/lib/web/unit/resources/redirect.cgi +13 -0
- data/lib/web/unit/resources/response.html +67 -0
- data/lib/web/unit/resources/simple.cgi +14 -0
- data/lib/web/unit/resources/stock.cgi +35 -0
- data/lib/web/unit/resources/table.html +83 -0
- data/lib/web/unit/response.rb +469 -0
- data/lib/web/unit/response.rb~ +461 -0
- data/lib/web/unit/runtest.rb +44 -0
- data/lib/web/unit/sgml-parser.rb +336 -0
- data/lib/web/unit/table.rb +150 -0
- data/lib/web/unit/testcase.rb +49 -0
- data/lib/web/unit/ui/cui/testrunner.rb +52 -0
- data/lib/web/unit/ui/cui/testrunner.rb~ +50 -0
- data/lib/web/unit/utils.rb +70 -0
- data/lib/web/unit/webunit.rb +28 -0
- data/lib/web/upload.rb +55 -0
- data/lib/web/upload.rb~ +262 -0
- data/lib/web/wiki.rb +506 -0
- data/lib/web/wiki.rb~ +506 -0
- data/lib/web/wiki/linker.rb +72 -0
- data/lib/web/wiki/linker.rb~ +72 -0
- data/lib/web/wiki/mime.rb~ +68 -0
- data/lib/web/wiki/page.rb +192 -0
- data/lib/web/wiki/page.rb~ +192 -0
- data/lib/web/wiki/resources/#edit.html# +65 -0
- data/lib/web/wiki/resources/admin.html +13 -0
- data/lib/web/wiki/resources/admin.html~ +13 -0
- data/lib/web/wiki/resources/asset_history.html +3 -0
- data/lib/web/wiki/resources/basic.html +1 -0
- data/lib/web/wiki/resources/default-content_editor.html +1 -0
- data/lib/web/wiki/resources/default-content_editor.html~ +1 -0
- data/lib/web/wiki/resources/edit.html +1 -1
- data/lib/web/wiki/resources/edit.html~ +1 -1
- data/lib/web/wiki/resources/ekit-content_editor.html +1 -0
- data/lib/web/wiki/resources/home.html +10 -0
- data/lib/web/wiki/resources/home.html~ +10 -0
- data/lib/web/wiki/resources/htmlarea/ChangeLog +1185 -0
- data/lib/web/wiki/resources/htmlarea/dialog.js +72 -0
- data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +16 -0
- data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +158 -0
- data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +95 -0
- data/lib/web/wiki/resources/htmlarea/examples/core.html +184 -0
- data/lib/web/wiki/resources/htmlarea/examples/css.html +88 -0
- data/lib/web/wiki/resources/htmlarea/examples/custom.css +29 -0
- data/lib/web/wiki/resources/htmlarea/examples/full-page.html +75 -0
- data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +248 -0
- data/lib/web/wiki/resources/htmlarea/examples/index.html +40 -0
- data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +132 -0
- data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +116 -0
- data/lib/web/wiki/resources/htmlarea/examples/test.cgi +21 -0
- data/lib/web/wiki/resources/htmlarea/htmlarea.css +180 -0
- data/lib/web/wiki/resources/htmlarea/htmlarea.js +2175 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_about.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_center.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_justify.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_left.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_align_right.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_blank.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_charmap.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_color_bg.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_color_fg.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_copy.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_custom.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_cut.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_bold.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_italic.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_strike.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_sub.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_sup.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_format_underline.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_help.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_hr.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_html.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_image.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_indent_less.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_indent_more.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_left_to_right.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_link.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_list_bullet.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_list_num.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_paste.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_redo.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_right_to_left.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_save.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_show_border.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_splitcel.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/ed_undo.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/fullscreen_maximize.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/fullscreen_minimize.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/images/insert_table.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/index.html +199 -0
- data/lib/web/wiki/resources/htmlarea/lang/b5.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/cz.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/da.js +38 -0
- data/lib/web/wiki/resources/htmlarea/lang/de.js +54 -0
- data/lib/web/wiki/resources/htmlarea/lang/ee.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/el.js +75 -0
- data/lib/web/wiki/resources/htmlarea/lang/en.js +88 -0
- data/lib/web/wiki/resources/htmlarea/lang/es.js +51 -0
- data/lib/web/wiki/resources/htmlarea/lang/fi.js +46 -0
- data/lib/web/wiki/resources/htmlarea/lang/fr.js +61 -0
- data/lib/web/wiki/resources/htmlarea/lang/gb.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/he.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/hu.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/it.js +54 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/lt.js +55 -0
- data/lib/web/wiki/resources/htmlarea/lang/lv.js +55 -0
- data/lib/web/wiki/resources/htmlarea/lang/nb.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/nl.js +90 -0
- data/lib/web/wiki/resources/htmlarea/lang/no.js +79 -0
- data/lib/web/wiki/resources/htmlarea/lang/pl.js +36 -0
- data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +37 -0
- data/lib/web/wiki/resources/htmlarea/lang/ro.js +80 -0
- data/lib/web/wiki/resources/htmlarea/lang/ru.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/se.js +38 -0
- data/lib/web/wiki/resources/htmlarea/lang/si.js +63 -0
- data/lib/web/wiki/resources/htmlarea/lang/vn.js +51 -0
- data/lib/web/wiki/resources/htmlarea/license.txt +30 -0
- data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +116 -0
- data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +2 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +416 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +59 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +57 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +66 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +66 -0
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +64 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +143 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +25 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +25 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +131 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +89 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/img/spell-check.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/cz.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +28 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +38 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +28 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +37 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +114 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +210 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +10 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +122 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +397 -0
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +79 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-after.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-before.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-merge.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-prop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-split.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-after.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-before.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-split.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-delete.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-above.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-under.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-prop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-split.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/table-prop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/cz.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +81 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +81 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +66 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +63 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +81 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +91 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +90 -0
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +1160 -0
- data/lib/web/wiki/resources/htmlarea/popupdiv.js +369 -0
- data/lib/web/wiki/resources/htmlarea/popups/about.html +378 -0
- data/lib/web/wiki/resources/htmlarea/popups/blank.html +2 -0
- data/lib/web/wiki/resources/htmlarea/popups/custom2.html +35 -0
- data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +16 -0
- data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +133 -0
- data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +191 -0
- data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +174 -0
- data/lib/web/wiki/resources/htmlarea/popups/link.html +142 -0
- data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +131 -0
- data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +206 -0
- data/lib/web/wiki/resources/htmlarea/popups/popup.js +109 -0
- data/lib/web/wiki/resources/htmlarea/popups/select_color.html +347 -0
- data/lib/web/wiki/resources/htmlarea/popupwin.js +139 -0
- data/lib/web/wiki/resources/htmlarea/reference.html +523 -0
- data/lib/web/wiki/resources/htmlarea/release-notes.html +165 -0
- data/lib/web/wiki/resources/ie-content_editor.html +1 -0
- data/lib/web/wiki/resources/ie-content_editor.js +196 -0
- data/lib/web/wiki/resources/illustration.html +1 -0
- data/lib/web/wiki/resources/illustration.html~ +1 -0
- data/lib/web/wiki/resources/images.html +1 -0
- data/lib/web/wiki/resources/index.html +4 -0
- data/lib/web/wiki/resources/index.html~ +4 -0
- data/lib/web/wiki/resources/more_news.html +5 -0
- data/lib/web/wiki/resources/more_news.html~ +5 -0
- data/lib/web/wiki/resources/more_news_rss_0.91.html +23 -0
- data/lib/web/wiki/resources/narf-logo.gif +0 -0
- data/lib/web/wiki/resources/page_history.html +19 -0
- data/lib/web/wiki/resources/page_history.html~ +19 -0
- data/lib/web/wiki/resources/template.html +13 -0
- data/lib/web/wiki/resources/template.html~ +13 -0
- data/lib/web/wiki/resources/test_upload.gif +0 -0
- data/lib/web/wiki/resources/text-styles.css +1 -0
- data/lib/web/writableio.rb +33 -0
- data/narf-0.5.1.gem +0 -0
- data/narf.gemspec +40 -0
- data/narf.gemspec~ +52 -0
- data/pre-setup.rb +5 -0
- data/sapi/apache_cgi/INSTALL.txt~ +9 -0
- data/sapi/apache_cgi/README~ +0 -0
- data/sapi/apache_cgi/src/narf.c +13 -0
- data/sapi/fastcgi/INSTALL.txt~ +17 -0
- data/sapi/mod_ruby/INSTALL.txt~ +5 -0
- data/sapi/webrick/INSTALL.txt~ +21 -0
- data/sapi/webrick/run_webrick.rb~ +16 -0
- data/scripts/dump.rb +14 -0
- data/scripts/makedist.rb +49 -0
- data/scripts/upload.html +5 -0
- data/scripts/uri.rb +41 -0
- data/scripts/uri/common.rb +432 -0
- data/scripts/uri/ftp.rb +149 -0
- data/scripts/uri/generic.rb +1106 -0
- data/scripts/uri/http.rb +76 -0
- data/scripts/uri/https.rb +26 -0
- data/scripts/uri/ldap.rb +238 -0
- data/scripts/uri/mailto.rb +260 -0
- data/scripts/urireg.rb +174 -0
- data/test/bufferedtestrunner.rb +112 -0
- data/test/mod_ruby_stub.rb +39 -0
- data/test/mod_ruby_stub.rb~ +38 -0
- data/test/stringio.rb +2 -0
- data/test/test.action.rb +142 -0
- data/test/test.action.rb~ +142 -0
- data/test/test.app.rb +0 -0
- data/test/test.assertinclude.rb +109 -0
- data/test/test.assertinclude.rb~ +109 -0
- data/test/test.formreader-2.0.rb +352 -0
- data/test/test.formreader.rb +465 -0
- data/test/test.mime-type.rb +23 -0
- data/test/test.narf.cgi.rb +101 -0
- data/test/test.narf.cgi.rb~ +105 -0
- data/test/test.request.rb +328 -0
- data/test/test.request.rb~ +318 -0
- data/test/test.response.rb +565 -0
- data/test/test.response.rb~ +556 -0
- data/test/test.session.rb +50 -0
- data/test/test.simpledispatcher.rb +188 -0
- data/test/test.tagparser.rb +65 -0
- data/test/test.template.rb +831 -0
- data/test/test.template.rb~ +832 -0
- data/test/test.testing2.rb +341 -0
- data/test/test.web.test.rb +463 -0
- data/test/test.web.test.rb~ +461 -0
- data/test/testfiles/basictemplate.tpl +1 -0
- data/test/testfiles/explorer5.multipart.data +9 -0
- data/test/testfiles/form.html +7 -0
- data/test/testfiles/mozilla.multipart.data +9 -0
- data/test/testfiles/netscape4.multipart.data +9 -0
- data/test/testfiles/pic hydra.png +1 -0
- data/test/testfiles/post.data +1 -0
- data/test/testfiles/print.text +1 -0
- data/test/testfiles/text +1 -0
- data/test/webunit/dont_get_it.test_webunit.rb +27 -0
- data/test/webunit/ref +38 -0
- data/test/webunit/resources/uploadfile1.txt +1 -0
- data/test/webunit/resources/uploadfile2.txt +1 -0
- data/test/webunit/test_assert.rb +169 -0
- data/test/webunit/test_cookie.rb +128 -0
- data/test/webunit/test_cookie.rb~ +128 -0
- data/test/webunit/test_domwalker.rb +83 -0
- data/test/webunit/test_form.rb +43 -0
- data/test/webunit/test_form.rb~ +43 -0
- data/test/webunit/test_frame.rb +43 -0
- data/test/webunit/test_htmlelem.rb +75 -0
- data/test/webunit/test_image.rb +46 -0
- data/test/webunit/test_jscript.rb +58 -0
- data/test/webunit/test_link.rb +87 -0
- data/test/webunit/test_multipart.rb +53 -0
- data/test/webunit/test_multipart.rb~ +53 -0
- data/test/webunit/test_params.rb +212 -0
- data/test/webunit/test_params.rb~ +211 -0
- data/test/webunit/test_parser.rb +31 -0
- data/test/webunit/test_response.rb +145 -0
- data/test/webunit/test_response.rb~ +145 -0
- data/test/webunit/test_site/assert.html +101 -0
- data/test/webunit/test_site/assert.html~ +1 -0
- data/test/webunit/test_site/auth/index.html +5 -0
- data/test/webunit/test_site/auth/index.html~ +1 -0
- data/test/webunit/test_site/badtags.html +7 -0
- data/test/webunit/test_site/badtags.html~ +1 -0
- data/test/webunit/test_site/cookie.cgi +37 -0
- data/test/webunit/test_site/cookie.cgi~ +35 -0
- data/test/webunit/test_site/document.xml +13 -0
- data/test/webunit/test_site/document.xml~ +1 -0
- data/test/webunit/test_site/form.html +150 -0
- data/test/webunit/test_site/form.html~ +1 -0
- data/test/webunit/test_site/frame-0.html +10 -0
- data/test/webunit/test_site/frame-0.html~ +1 -0
- data/test/webunit/test_site/frame-1.html +10 -0
- data/test/webunit/test_site/frame-1.html~ +1 -0
- data/test/webunit/test_site/frame.html +10 -0
- data/test/webunit/test_site/frame.html~ +1 -0
- data/test/webunit/test_site/image.html +17 -0
- data/test/webunit/test_site/image.html~ +1 -0
- data/test/webunit/test_site/images/x.gif +0 -0
- data/test/webunit/test_site/images/y.gif +0 -0
- data/test/webunit/test_site/include.cgi~ +10 -0
- data/test/webunit/test_site/jscript-0.html +10 -0
- data/test/webunit/test_site/jscript-0.html~ +1 -0
- data/test/webunit/test_site/jscript-1.html +10 -0
- data/test/webunit/test_site/jscript-1.html~ +1 -0
- data/test/webunit/test_site/jscript.html +19 -0
- data/test/webunit/test_site/jscript.html~ +1 -0
- data/test/webunit/test_site/link.html +19 -0
- data/test/webunit/test_site/link.html~ +1 -0
- data/test/webunit/test_site/multipart.cgi +27 -0
- data/test/webunit/test_site/multipart.cgi~ +25 -0
- data/test/webunit/test_site/multipart.html +74 -0
- data/test/webunit/test_site/multipart.html~ +1 -0
- data/test/webunit/test_site/params.html +65 -0
- data/test/webunit/test_site/params.html~ +1 -0
- data/test/webunit/test_site/redirect.cgi +14 -0
- data/test/webunit/test_site/redirect.cgi~ +14 -0
- data/test/webunit/test_site/response.html +67 -0
- data/test/webunit/test_site/response.html~ +1 -0
- data/test/webunit/test_site/simple.cgi +17 -0
- data/test/webunit/test_site/simple.cgi~ +17 -0
- data/test/webunit/test_site/stock.cgi +36 -0
- data/test/webunit/test_site/stock.cgi~ +34 -0
- data/test/webunit/test_site/table.html +83 -0
- data/test/webunit/test_site/table.html~ +1 -0
- data/test/webunit/test_site/test.cgi~ +25 -0
- data/test/webunit/test_table.rb +70 -0
- data/test/webunit/test_utils.rb +107 -0
- data/test/wiki/test.history.rb +277 -0
- data/test/wiki/test.history.rb~ +254 -0
- data/test/wiki/test.illustration_page.rb +287 -0
- data/test/wiki/test.illustration_page.rb~ +287 -0
- data/test/wiki/test.linker.rb +197 -0
- data/test/wiki/test.tarpit.rb +40 -0
- data/test/wiki/test.wiki.rb +295 -0
- data/test/wiki/test.wiki.rb~ +295 -0
- data/test/wikitestroot/big_image.jpg +0 -0
- data/test/wikitestroot/mime.types +483 -0
- data/test/wikitestroot/test_upload.gif +0 -0
- data/vandals.test.txt +3 -0
- metadata +768 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
<?xml version="1.0" ?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
6
|
+
<head>
|
|
7
|
+
<title>index-ja.rd</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<h1><a name="label:0" id="label:0">WebUnit</a></h1><!-- RDLabel: "WebUnit" -->
|
|
11
|
+
<h2><a name="label:1" id="label:1">WebUnit�Ȥ�</a></h2><!-- RDLabel: "WebUnit�Ȥ�" -->
|
|
12
|
+
<p>WebUnit �ϥ֥饦������Ѥ����˥����֥�����(html/cgi)��
|
|
13
|
+
�ƥ��Ȥ��뤿��� Ruby API �Ǥ���
|
|
14
|
+
���Ĥ���ν줿Ruby�Υƥ��ȥե졼���� - RubyUnit���Ȥ߹�碌�ƻ��Ѥ���
|
|
15
|
+
�����֥�����(html/cgi)�Υƥ��Ȥ�ư�����뤳�Ȥ��Ǥ��ޤ���</p>
|
|
16
|
+
<p>HttpUnit��JUnit��Ȥäƥƥ��ȤƤ����ΤǤ�����
|
|
17
|
+
�ץ������� ruby �ǽƤ���Ȥ��ˡ�
|
|
18
|
+
�ƥ��Ȥ� java �ǽΤϷ��ʤΤǡ����ޤ�����</p>
|
|
19
|
+
<h2><a name="label:2" id="label:2">�����ǻ��Ѥ��Ƥ��륽�եȥ�����</a></h2><!-- RDLabel: "�����ǻ��Ѥ��Ƥ��륽�եȥ�����" -->
|
|
20
|
+
<p>WebUnit �Ǥϰʲ��Υ��եȥ���������Ѥ��Ƥ��ޤ���
|
|
21
|
+
htmlrepair/htmlsplit �� html-parser �� WebUnit ��Ʊ�����ޤ�����</p>
|
|
22
|
+
<p>�ʤ���RubyUnit �� NQXML�Ϥ��餫���ᥤ�ȡ��뤷�Ƥ���ɬ�פ�����ޤ���</p>
|
|
23
|
+
<ul>
|
|
24
|
+
<li><a href="http://homepage1.nifty.com/markey/ruby/rubyunit/index_e.html">RubyUnit</a>
|
|
25
|
+
�ޤ��� <a href="http://www.ruby-lang.org/raa/list.rhtml?name=testunit">testunit</a></li>
|
|
26
|
+
<li><a href="http://www.moonwolf.com/ruby/">htmlrepair/htmlsplit</a></li>
|
|
27
|
+
<li><a href="http://www.jin.gr.jp/~nahi/Ruby/html-parser/README.htm">html-parser</a></li>
|
|
28
|
+
<li><a href="http://www.io.com/~jimm/downloads/nqxml/index.html">NQXML</a>
|
|
29
|
+
�ޤ��� <a href="http://www.ruby-lang.org/raa/list.rhtml?name=rexml">REXML</a></li>
|
|
30
|
+
</ul>
|
|
31
|
+
<h2><a name="label:3" id="label:3">����������ɤȥ��ȡ���</a></h2><!-- RDLabel: "����������ɤȥ��ȡ���" -->
|
|
32
|
+
<p><a href="http://xpenguin.biz/download/webunit/"><URL:http://xpenguin.biz/download/webunit/></a> ����
|
|
33
|
+
webunit-20YYMMDD-*.tar.gz �����������ɤ���Ŭ���ʥǥ��쥯�ȥ��Ÿ�����ơ�
|
|
34
|
+
<code>ruby install.rb</code> ���Ƥ���������</p>
|
|
35
|
+
<h2><a name="label:4" id="label:4">������</a></h2><!-- RDLabel: "������" -->
|
|
36
|
+
<p>cgi �ʲ��� httpd ���饢�������Ǥ������ webunit �ȸ���̾���ǥ���ơ�
|
|
37
|
+
test/test_*.rb �� runtest.rb �ʤɤ����Ѥ��Ƽ¹Ԥ��ޤ���</p>
|
|
38
|
+
<pre>% ln -s webunit/cgi $DOCUMENT_ROOT/tmp/webunit
|
|
39
|
+
% cp webunit/cgi/auth/.htpasswd /tmp
|
|
40
|
+
% URLBASE=http://localhost/tmp/ runtest.rb test_link.rb
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
require 'webunit/webunit'
|
|
44
|
+
|
|
45
|
+
# get start HTML page
|
|
46
|
+
url = 'test-1.html'
|
|
47
|
+
response = WebUnit::Response::get( url )
|
|
48
|
+
|
|
49
|
+
# test HTML page contents
|
|
50
|
+
assert_title( 'test-1', response )
|
|
51
|
+
assert_equals( 1, response.forms.size )
|
|
52
|
+
|
|
53
|
+
form = response.form
|
|
54
|
+
|
|
55
|
+
# test form of HTML page contents
|
|
56
|
+
assert_equals( 'ntext', form.parameters[0].name )
|
|
57
|
+
assert_equals( 'npassword', form.parameters[1].name )
|
|
58
|
+
|
|
59
|
+
# execute CGI script, after setting parameters
|
|
60
|
+
form.parameters[0].value = "this is test"
|
|
61
|
+
form.parameters[1].value = '!@#$%'
|
|
62
|
+
response = form.submit
|
|
63
|
+
|
|
64
|
+
# test output from CGI script
|
|
65
|
+
assert_equals( 'result', response.title )
|
|
66
|
+
assert_equals( 1, response.links.size )
|
|
67
|
+
assert_equals( 'http://....', response.links[0] )
|
|
68
|
+
|
|
69
|
+
# read link
|
|
70
|
+
response = response.links[0].read</pre>
|
|
71
|
+
<h2><a name="label:5" id="label:5">���۾��</a></h2><!-- RDLabel: "���۾��" -->
|
|
72
|
+
<p>�ܥץ������ϥե���եȥ������Ǥ���
|
|
73
|
+
GPL(the GNU GeneralPublic License)��
|
|
74
|
+
�ޤ��ϡ�Ruby���Τ�Ʊ�������ܥץ�����������ۤǤ��ޤ���
|
|
75
|
+
GPL�ˤĤ��Ƥ�COPYING�ե�����Ȥ��Ʋ�������</p>
|
|
76
|
+
<h2><a name="label:6" id="label:6">�Х���ݡ���</a></h2><!-- RDLabel: "�Х���ݡ���" -->
|
|
77
|
+
<p><a href="mailto:yt@xpenguin.biz"><URL:mailto:yt@xpenguin.biz></a></p>
|
|
78
|
+
<h2><a name="label:7" id="label:7">�ѹ�����</a></h2><!-- RDLabel: "�ѹ�����" -->
|
|
79
|
+
<h3><a name="label:8" id="label:8">20020410-alpha -> 20030121</a></h3><!-- RDLabel: "20020410-alpha -> 20030121" -->
|
|
80
|
+
<ul>
|
|
81
|
+
<li>enable using "Test::Unit" for Testing Framework. (by Kouhei Sutou)</li>
|
|
82
|
+
<li>appends XML Parser support "REXML". (by Kouhei Sutou)</li>
|
|
83
|
+
<li>supports multipart formdata. ready file transfer test. (by Narushima Hironori)</li>
|
|
84
|
+
<li>changes document type sdf to rd. (by Narushima Hironori)</li>
|
|
85
|
+
<li>changes installer to setup.rb. (by Narushima Hironori)</li>
|
|
86
|
+
<li>fix Textarea#query_data and Parser#feed. (Thanks to Torsten Rueger)</li>
|
|
87
|
+
</ul>
|
|
88
|
+
<h3><a name="label:9" id="label:9">20020330-alpha -> 20020410-alpha</a></h3><!-- RDLabel: "20020330-alpha -> 20020410-alpha" -->
|
|
89
|
+
<ul>
|
|
90
|
+
<li>XmlDocument -> DomWalker : rename</li>
|
|
91
|
+
<li>fix for 1.7 parser.(Thanks to Kazuhiro NISHIYAMA)</li>
|
|
92
|
+
<li>fix install.rb for "--program-suffix".(Thanks to Kazuhiro NISHIYAMA)</li>
|
|
93
|
+
</ul>
|
|
94
|
+
<h3><a name="label:10" id="label:10">20011019-alpha -> 20020330-alpha</a></h3><!-- RDLabel: "20011019-alpha -> 20020330-alpha" -->
|
|
95
|
+
<ul>
|
|
96
|
+
<li>XmlDocument#size : new.</li>
|
|
97
|
+
<li>mail addres of author is changed.</li>
|
|
98
|
+
</ul>
|
|
99
|
+
<h3><a name="label:11" id="label:11">20011019-alpha -> 20011022-alpha</a></h3><!-- RDLabel: "20011019-alpha -> 20011022-alpha" -->
|
|
100
|
+
<ul>
|
|
101
|
+
<li>XmlDocument#change_node : bug fix.</li>
|
|
102
|
+
</ul>
|
|
103
|
+
<h3><a name="label:12" id="label:12">20011002-alpha -> 20011019-alpha</a></h3><!-- RDLabel: "20011002-alpha -> 20011019-alpha" -->
|
|
104
|
+
<ul>
|
|
105
|
+
<li>XmlDocument : new - class to test xml document.</li>
|
|
106
|
+
</ul>
|
|
107
|
+
<h3><a name="label:13" id="label:13">20010919-alpha -> 20011002-alpha</a></h3><!-- RDLabel: "20010919-alpha -> 20011002-alpha" -->
|
|
108
|
+
<ul>
|
|
109
|
+
<li>Parser#do_input : support input tag without form tag. (Thanks to IKAGAWA, Kauztomo)</li>
|
|
110
|
+
<li>Response#init_http : append header(Content-Type) for POST method.</li>
|
|
111
|
+
<li>Response#init_http : catch IOError of HTTP::finish (for ruby 1.6.5)</li>
|
|
112
|
+
</ul>
|
|
113
|
+
<h3><a name="label:14" id="label:14">20010912-alpha -> 20010919-alpha</a></h3><!-- RDLabel: "20010912-alpha -> 20010919-alpha" -->
|
|
114
|
+
<ul>
|
|
115
|
+
<li>Response#get,post,init_http : to use BasicAuth.</li>
|
|
116
|
+
<li>sample/cgi : remove space charactor between '#!' and '/usr/bin/env'</li>
|
|
117
|
+
</ul>
|
|
118
|
+
<h3><a name="label:15" id="label:15">20010714-alpha -> 20010912-alpha</a></h3><!-- RDLabel: "20010714-alpha -> 20010912-alpha" -->
|
|
119
|
+
<ul>
|
|
120
|
+
<li>Responss : use Net::HTTP::new_implementation.</li>
|
|
121
|
+
<li>HtmlElem : fix inspect output when @tag is nil.( as toplevel )</li>
|
|
122
|
+
<li>sgml-parser.rb(line:257) : bug fix, fail when nested tags.</li>
|
|
123
|
+
<li>html-parser/install.rb : fix.</li>
|
|
124
|
+
</ul>
|
|
125
|
+
<h3><a name="label:16" id="label:16">20010618-alpha -> 20010714-alpha</a></h3><!-- RDLabel: "20010618-alpha -> 20010714-alpha" -->
|
|
126
|
+
<ul>
|
|
127
|
+
<li>Parser : add link tag to SingleTags.</li>
|
|
128
|
+
<li>Parser#start_a : execute complete_url, unless the href begins '#'.</li>
|
|
129
|
+
<li>Link : append onClick attribute, and reader.</li>
|
|
130
|
+
<li>Response#init_http : retry, when Errno::EPIPE</li>
|
|
131
|
+
<li>Response::html : append <html> tag, when there is no <html> tag.</li>
|
|
132
|
+
</ul>
|
|
133
|
+
<h3><a name="label:17" id="label:17">20010611-alpha -> 20010618-alpha</a></h3><!-- RDLabel: "20010611-alpha -> 20010618-alpha" -->
|
|
134
|
+
<ul>
|
|
135
|
+
<li>add sample</li>
|
|
136
|
+
</ul>
|
|
137
|
+
<h3><a name="label:18" id="label:18">20010604-alpha -> 20010611-alpha</a></h3><!-- RDLabel: "20010604-alpha -> 20010611-alpha" -->
|
|
138
|
+
<ul>
|
|
139
|
+
<li>HtmlElem#name : new</li>
|
|
140
|
+
<li>Response#init_html : new, to use WebUnit without http access.</li>
|
|
141
|
+
<li>(code using Response#new) : change to Response#new.init_http</li>
|
|
142
|
+
<li>Response#init_http,feed, : divide initialize.</li>
|
|
143
|
+
<li>perse_url : correspond to relative url and 'file:' prefix.</li>
|
|
144
|
+
<li>perse_url : add '-' to regexp, will match to hostname.</li>
|
|
145
|
+
<li>assert_urls : add success case, use orthop_url for expected url.</li>
|
|
146
|
+
</ul>
|
|
147
|
+
<h3><a name="label:19" id="label:19">20010521-alpha -> 20010604-alpha</a></h3><!-- RDLabel: "20010521-alpha -> 20010604-alpha" -->
|
|
148
|
+
<ul>
|
|
149
|
+
<li>include contrib/{html-parser,htmlrepair} : Thanks these authors.
|
|
150
|
+
- html-parser : Takahiro Maebashi
|
|
151
|
+
- htmlrepair : MoonWolf</li>
|
|
152
|
+
<li>installer supports to install contrib/{html-parser,htmlrepair}</li>
|
|
153
|
+
</ul>
|
|
154
|
+
<h3><a name="label:20" id="label:20">20010507-alpha -> 20010521-alpha</a></h3><!-- RDLabel: "20010507-alpha -> 20010521-alpha" -->
|
|
155
|
+
<ul>
|
|
156
|
+
<li>Response#initialize : use $URLBASE when url is relational</li>
|
|
157
|
+
<li>Parser#do_img: new</li>
|
|
158
|
+
<li>Response#add_image, Response#images, Response#image : new</li>
|
|
159
|
+
<li>Image : new</li>
|
|
160
|
+
</ul>
|
|
161
|
+
<h3><a name="label:21" id="label:21">20010330-alpha -> 20010507-alpha</a></h3><!-- RDLabel: "20010330-alpha -> 20010507-alpha" -->
|
|
162
|
+
<ul>
|
|
163
|
+
<li>sample, contrib: only directory</li>
|
|
164
|
+
<li>install.rb : new</li>
|
|
165
|
+
<li>all files : reject TAB code ( expect COPYING and Makefile )</li>
|
|
166
|
+
<li>bin : make some commands</li>
|
|
167
|
+
<li>doc : separate document files from cgi directory</li>
|
|
168
|
+
<li>tests : split files, and add testcase methods.</li>
|
|
169
|
+
<li>Utils#complete_url : bug fix</li>
|
|
170
|
+
<li>TestCase#setup : set $URLBASE as @urlbase, Response::reset, restore Cookies</li>
|
|
171
|
+
<li>TestCase#teardown : Response::reset, keep Cookies</li>
|
|
172
|
+
<li>Cookies#cookies/cookies= : new</li>
|
|
173
|
+
<li>Response#reset: close http connection</li>
|
|
174
|
+
<li>assert_urls : new</li>
|
|
175
|
+
<li>WebUnit#assert_equal_url : -> assert_urls</li>
|
|
176
|
+
<li>Select#value : new</li>
|
|
177
|
+
<li>assert_select_option : new</li>
|
|
178
|
+
<li>HtmlElem#initialize : add default value for 2nd argument.</li>
|
|
179
|
+
<li>assert_title : new - show response.body with message.</li>
|
|
180
|
+
<li>HtmlElem#extract : new - make string with nested HtmlElems.</li>
|
|
181
|
+
<li>Response#pbody : use Response#format</li>
|
|
182
|
+
<li>Response#format : new</li>
|
|
183
|
+
<li>MemWriter : new - used by Response#format</li>
|
|
184
|
+
</ul>
|
|
185
|
+
<h3><a name="label:22" id="label:22">20010314-alpha -> 20010330-alpha</a></h3><!-- RDLabel: "20010314-alpha -> 20010330-alpha" -->
|
|
186
|
+
<ul>
|
|
187
|
+
<li>Response#pbody : new - print orthopped Response#body.</li>
|
|
188
|
+
<li>Select#select : accept Array of String(value|data) and Integer(index)</li>
|
|
189
|
+
<li>assert_include : add using HtmlElem#has?</li>
|
|
190
|
+
<li>Link#target : new</li>
|
|
191
|
+
<li>Response#freeze,Form#freeze : new</li>
|
|
192
|
+
<li>Select#value= : </li>
|
|
193
|
+
<li>Form#submit : </li>
|
|
194
|
+
</ul>
|
|
195
|
+
<h3><a name="label:23" id="label:23">20010223-alpha -> 20010314-alpha</a></h3><!-- RDLabel: "20010223-alpha -> 20010314-alpha" -->
|
|
196
|
+
<ul>
|
|
197
|
+
<li>Paser#start_a : replace "&amp;" -> "&" of href. bug of sgml-parser?</li>
|
|
198
|
+
<li>Table#row_index,col_index : new</li>
|
|
199
|
+
<li>Form#store_test_data : new</li>
|
|
200
|
+
<li>assert_input,assert_attrs,assert_include : new</li>
|
|
201
|
+
<li>InputRadio#value= : bug fix</li>
|
|
202
|
+
<li>Textarea#initialize, Select#initialize, SelectOption#initialize : set type</li>
|
|
203
|
+
<li>Parser#attrs_to_hash : bug fix</li>
|
|
204
|
+
<li>Response#push : no longer support, puts WARNING</li>
|
|
205
|
+
<li>Response#click : support for readlink and submit</li>
|
|
206
|
+
<li>Utils#complete_url : <- Response#complete_url & Parser#complete_url</li>
|
|
207
|
+
<li>JSciriptOpenObject : new</li>
|
|
208
|
+
<li>Response#redirect : new</li>
|
|
209
|
+
<li>Form#submit, Response#submit : support InputImage ( add args )</li>
|
|
210
|
+
<li>InputImage : new</li>
|
|
211
|
+
<li>Input#inspect : bug fix.</li>
|
|
212
|
+
<li>Response#initialize : better performance with keeping connection.</li>
|
|
213
|
+
<li>Table#at : to access TableRow with one argument. ( two args for Cell )</li>
|
|
214
|
+
<li>Parser#complete_url : use orthop_url</li>
|
|
215
|
+
<li>Utils#orthop_url : '//', '/\./', '[^/]*/\.\./' -> '/'</li>
|
|
216
|
+
<li>TestCase#initialize : append '/' if last char of URLBASE isn't '/'</li>
|
|
217
|
+
<li>TableRow : new ( Table is also changed )</li>
|
|
218
|
+
<li>Response : attr_accessor -> attr_reader</li>
|
|
219
|
+
<li>HtmlElem#inspect : change format, and stop recursive.</li>
|
|
220
|
+
<li>HtmlElem#print : change format as inspect.</li>
|
|
221
|
+
<li>Response#readlink : use HtmlElem#readlink</li>
|
|
222
|
+
<li>HtmlElem#readlink : new</li>
|
|
223
|
+
<li>Response#click : alias of Response#readlink</li>
|
|
224
|
+
<li>Response#submit,push : same as Response#forms[0].submit</li>
|
|
225
|
+
<li>Response#params : same as Response#forms[0].params</li>
|
|
226
|
+
<li>Response#link,form,table,frame : same as Response#*[0]</li>
|
|
227
|
+
<li>Response#search,find : new</li>
|
|
228
|
+
<li>HtmlElem#search : new</li>
|
|
229
|
+
<li>change file struct.</li>
|
|
230
|
+
</ul>
|
|
231
|
+
<h3><a name="label:24" id="label:24">20010216-alpha -> 20010223-alpha</a></h3><!-- RDLabel: "20010216-alpha -> 20010223-alpha" -->
|
|
232
|
+
<ul>
|
|
233
|
+
<li>Cookies#header : bug fix. ( handle when path == nil )</li>
|
|
234
|
+
<li>Parser#endtag : raise BadHtmlTags exception</li>
|
|
235
|
+
<li>Response#readlink : new ( raise ElemNotFound when failed )</li>
|
|
236
|
+
<li>rename exception : NotFound -> HttpNotFound</li>
|
|
237
|
+
<li>unify linefeed code to '\n'(0x0a) on each files.</li>
|
|
238
|
+
</ul>
|
|
239
|
+
<h3><a name="label:25" id="label:25">20010215-alpha -> 20010216-alpha</a></h3><!-- RDLabel: "20010215-alpha -> 20010216-alpha" -->
|
|
240
|
+
<ul>
|
|
241
|
+
<li>Frame#read : bug fix.</li>
|
|
242
|
+
<li>Response#initialize : raise NotFound exception</li>
|
|
243
|
+
<li>Param#query_data : rename method from data</li>
|
|
244
|
+
<li>InputRadio#query_data : rename method from data</li>
|
|
245
|
+
<li>InputCheckBox#query_data : rename method from data</li>
|
|
246
|
+
<li>InputSubmit#query_data : rename method from data</li>
|
|
247
|
+
<li>InputReset#query_data : rename method from data</li>
|
|
248
|
+
<li>Select#query_data : rename method from data, and so on.</li>
|
|
249
|
+
<li>SelectOption#query_data : rename method from data</li>
|
|
250
|
+
<li>Form#submit : Param#query_data -> Param#query_data</li>
|
|
251
|
+
<li>SelectOption#value : return data, when value is nil</li>
|
|
252
|
+
<li>SelectOption#value= : remove</li>
|
|
253
|
+
<li>SelectOption#data : remove</li>
|
|
254
|
+
<li>SelectOption#data= : remove</li>
|
|
255
|
+
<li>SelectOption#stat= : remove</li>
|
|
256
|
+
<li>Param#value : method -> attr_accessor</li>
|
|
257
|
+
<li>InputRadio#value= : new ( from Param#value )</li>
|
|
258
|
+
<li>Textarea#value : new ( as SelectOption#value )</li>
|
|
259
|
+
<li>Cookies#add : new</li>
|
|
260
|
+
</ul>
|
|
261
|
+
|
|
262
|
+
</body>
|
|
263
|
+
</html>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
|
|
3
|
+
= WebUnit
|
|
4
|
+
|
|
5
|
+
== WebUnit�Ȥ�
|
|
6
|
+
|
|
7
|
+
WebUnit �ϥ֥饦������Ѥ����˥����֥�����(html/cgi)��
|
|
8
|
+
�ƥ��Ȥ��뤿��� Ruby API �Ǥ���
|
|
9
|
+
���Ĥ���ν줿Ruby�Υƥ��ȥե졼���� - RubyUnit���Ȥ߹�碌�ƻ��Ѥ���
|
|
10
|
+
�����֥�����(html/cgi)�Υƥ��Ȥ�ư�����뤳�Ȥ��Ǥ��ޤ���
|
|
11
|
+
|
|
12
|
+
HttpUnit��JUnit��Ȥäƥƥ��ȤƤ����ΤǤ�����
|
|
13
|
+
�ץ������� ruby �ǽƤ���Ȥ��ˡ�
|
|
14
|
+
�ƥ��Ȥ� java �ǽΤϷ��ʤΤǡ����ޤ�����
|
|
15
|
+
|
|
16
|
+
== �����ǻ��Ѥ��Ƥ��륽�եȥ�����
|
|
17
|
+
|
|
18
|
+
WebUnit �Ǥϰʲ��Υ��եȥ���������Ѥ��Ƥ��ޤ���
|
|
19
|
+
htmlrepair/htmlsplit �� html-parser �� WebUnit ��Ʊ�����ޤ�����
|
|
20
|
+
|
|
21
|
+
�ʤ���RubyUnit �� NQXML�Ϥ��餫���ᥤ�ȡ��뤷�Ƥ���ɬ�פ�����ޤ���
|
|
22
|
+
|
|
23
|
+
* ((<RubyUnit|URL:http://homepage1.nifty.com/markey/ruby/rubyunit/index_e.html>))
|
|
24
|
+
�ޤ��� ((<testunit|URL:http://www.ruby-lang.org/raa/list.rhtml?name=testunit>))
|
|
25
|
+
* ((<"htmlrepair/htmlsplit"|URL:http://www.moonwolf.com/ruby/>))
|
|
26
|
+
* ((<html-parser|URL:http://www.jin.gr.jp/~nahi/Ruby/html-parser/README.htm>))
|
|
27
|
+
* ((<NQXML|URL:http://www.io.com/~jimm/downloads/nqxml/index.html>))
|
|
28
|
+
�ޤ��� ((<REXML|URL:http://www.ruby-lang.org/raa/list.rhtml?name=rexml>))
|
|
29
|
+
|
|
30
|
+
== ����������ɤȥ��ȡ���
|
|
31
|
+
|
|
32
|
+
((<URL:http://xpenguin.biz/download/webunit/>)) ����
|
|
33
|
+
webunit-20YYMMDD-*.tar.gz �����������ɤ���Ŭ���ʥǥ��쥯�ȥ��Ÿ�����ơ�
|
|
34
|
+
(({ruby install.rb})) ���Ƥ���������
|
|
35
|
+
|
|
36
|
+
== ������
|
|
37
|
+
|
|
38
|
+
cgi �ʲ��� httpd ���饢�������Ǥ������ webunit �ȸ���̾���ǥ���ơ�
|
|
39
|
+
test/test_*.rb �� runtest.rb �ʤɤ����Ѥ��Ƽ¹Ԥ��ޤ���
|
|
40
|
+
|
|
41
|
+
<<<example.rd
|
|
42
|
+
|
|
43
|
+
== ���۾��
|
|
44
|
+
|
|
45
|
+
�ܥץ������ϥե���եȥ������Ǥ���
|
|
46
|
+
GPL(the GNU GeneralPublic License)��
|
|
47
|
+
�ޤ��ϡ�Ruby���Τ�Ʊ�������ܥץ�����������ۤǤ��ޤ���
|
|
48
|
+
GPL�ˤĤ��Ƥ�COPYING�ե�����Ȥ��Ʋ�������
|
|
49
|
+
|
|
50
|
+
== �Х���ݡ���
|
|
51
|
+
|
|
52
|
+
((<URL:mailto:yt@xpenguin.biz>))
|
|
53
|
+
|
|
54
|
+
== �ѹ�����
|
|
55
|
+
|
|
56
|
+
<<<changes.rd
|
|
57
|
+
|
|
58
|
+
# $Id: index-ja.rd,v 1.1.1.1 2003/01/21 11:50:39 yuichi Exp $
|
|
59
|
+
|
|
60
|
+
=end
|
data/examples/wiki.rb
ADDED
data/examples/wiki.rb~
ADDED
data/install.rb
ADDED
|
@@ -0,0 +1,1022 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file is automatically generated. DO NOT MODIFY!
|
|
3
|
+
#
|
|
4
|
+
# install.rb
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2000-2002 Minero Aoki <aamine@loveruby.net>
|
|
7
|
+
#
|
|
8
|
+
# This program is free software.
|
|
9
|
+
# You can distribute/modify this program under the terms of
|
|
10
|
+
# the GNU Lesser General Public License version 2.
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
### begin compat.rb
|
|
14
|
+
|
|
15
|
+
unless Enumerable.instance_methods.include? 'inject' then
|
|
16
|
+
module Enumerable
|
|
17
|
+
def inject( result )
|
|
18
|
+
each do |i|
|
|
19
|
+
result = yield(result, i)
|
|
20
|
+
end
|
|
21
|
+
result
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def File.read_all( fname )
|
|
27
|
+
File.open(fname, 'rb') {|f| return f.read }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def File.write( fname, str )
|
|
31
|
+
File.open(fname, 'wb') {|f| f.write str }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
### end compat.rb
|
|
35
|
+
### begin config.rb
|
|
36
|
+
|
|
37
|
+
if i = ARGV.index(/\A--rbconfig=/) then
|
|
38
|
+
file = $'
|
|
39
|
+
ARGV.delete_at(i)
|
|
40
|
+
require file
|
|
41
|
+
else
|
|
42
|
+
require 'rbconfig'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ConfigTable
|
|
47
|
+
|
|
48
|
+
c = ::Config::CONFIG
|
|
49
|
+
|
|
50
|
+
rubypath = c['bindir'] + '/' + c['ruby_install_name']
|
|
51
|
+
|
|
52
|
+
major = c['MAJOR'].to_i
|
|
53
|
+
minor = c['MINOR'].to_i
|
|
54
|
+
teeny = c['TEENY'].to_i
|
|
55
|
+
version = "#{major}.#{minor}"
|
|
56
|
+
|
|
57
|
+
# ruby ver. >= 1.4.4?
|
|
58
|
+
newpath_p = ((major >= 2) or
|
|
59
|
+
((major == 1) and
|
|
60
|
+
((minor >= 5) or
|
|
61
|
+
((minor == 4) and (teeny >= 4)))))
|
|
62
|
+
|
|
63
|
+
re = Regexp.new('\A' + Regexp.quote(c['prefix']))
|
|
64
|
+
subprefix = lambda {|path|
|
|
65
|
+
re === path and path.sub(re, '$prefix')
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if c['rubylibdir'] then
|
|
69
|
+
# 1.6.3 < V
|
|
70
|
+
stdruby = subprefix.call(c['rubylibdir'])
|
|
71
|
+
siteruby = subprefix.call(c['sitedir'])
|
|
72
|
+
versite = subprefix.call(c['sitelibdir'])
|
|
73
|
+
sodir = subprefix.call(c['sitearchdir'])
|
|
74
|
+
elsif newpath_p then
|
|
75
|
+
# 1.4.4 <= V <= 1.6.3
|
|
76
|
+
stdruby = "$prefix/lib/ruby/#{version}"
|
|
77
|
+
siteruby = subprefix.call(c['sitedir'])
|
|
78
|
+
versite = siteruby + '/' + version
|
|
79
|
+
sodir = "$site-ruby/#{c['arch']}"
|
|
80
|
+
else
|
|
81
|
+
# V < 1.4.4
|
|
82
|
+
stdruby = "$prefix/lib/ruby/#{version}"
|
|
83
|
+
siteruby = "$prefix/lib/ruby/#{version}/site_ruby"
|
|
84
|
+
versite = siteruby
|
|
85
|
+
sodir = "$site-ruby/#{c['arch']}"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
DESCRIPTER = [
|
|
89
|
+
[ 'prefix', [ c['prefix'],
|
|
90
|
+
'path',
|
|
91
|
+
'path prefix of target environment' ] ],
|
|
92
|
+
[ 'std-ruby', [ stdruby,
|
|
93
|
+
'path',
|
|
94
|
+
'the directory for standard ruby libraries' ] ],
|
|
95
|
+
[ 'site-ruby-common', [ siteruby,
|
|
96
|
+
'path',
|
|
97
|
+
'the directory for version-independent non-standard ruby libraries' ] ],
|
|
98
|
+
[ 'site-ruby', [ versite,
|
|
99
|
+
'path',
|
|
100
|
+
'the directory for non-standard ruby libraries' ] ],
|
|
101
|
+
[ 'bin-dir', [ '$prefix/bin',
|
|
102
|
+
'path',
|
|
103
|
+
'the directory for commands' ] ],
|
|
104
|
+
[ 'rb-dir', [ '$site-ruby',
|
|
105
|
+
'path',
|
|
106
|
+
'the directory for ruby scripts' ] ],
|
|
107
|
+
[ 'so-dir', [ sodir,
|
|
108
|
+
'path',
|
|
109
|
+
'the directory for ruby extentions' ] ],
|
|
110
|
+
[ 'data-dir', [ '$prefix/share',
|
|
111
|
+
'path',
|
|
112
|
+
'the directory for shared data' ] ],
|
|
113
|
+
[ 'ruby-path', [ rubypath,
|
|
114
|
+
'path',
|
|
115
|
+
'path to set to #! line' ] ],
|
|
116
|
+
[ 'ruby-prog', [ rubypath,
|
|
117
|
+
'name',
|
|
118
|
+
'the ruby program using for installation' ] ],
|
|
119
|
+
[ 'make-prog', [ 'make',
|
|
120
|
+
'name',
|
|
121
|
+
'the make program to compile ruby extentions' ] ],
|
|
122
|
+
[ 'without-ext', [ 'no',
|
|
123
|
+
'yes/no',
|
|
124
|
+
'does not compile/install ruby extentions' ] ]
|
|
125
|
+
]
|
|
126
|
+
|
|
127
|
+
SAVE_FILE = 'config.save'
|
|
128
|
+
|
|
129
|
+
def ConfigTable.each_name( &block )
|
|
130
|
+
keys().each( &block )
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def ConfigTable.keys
|
|
134
|
+
DESCRIPTER.collect {|k,*dummy| k }
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def ConfigTable.each_definition( &block )
|
|
138
|
+
DESCRIPTER.each( &block )
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def ConfigTable.get_entry( name )
|
|
142
|
+
name, ent = DESCRIPTER.assoc(name)
|
|
143
|
+
ent
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def ConfigTable.get_entry!( name )
|
|
147
|
+
get_entry(name) or raise ArgumentError, "no such config: #{name}"
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def ConfigTable.add_entry( name, vals )
|
|
151
|
+
ConfigTable::DESCRIPTER.push [name,vals]
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def ConfigTable.remove_entry( name )
|
|
155
|
+
get_entry name or raise ArgumentError, "no such config: #{name}"
|
|
156
|
+
DESCRIPTER.delete_if {|n,arr| n == name }
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def ConfigTable.config_key?( name )
|
|
160
|
+
get_entry(name) ? true : false
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def ConfigTable.bool_config?( name )
|
|
164
|
+
ent = get_entry(name) or return false
|
|
165
|
+
ent[1] == 'yes/no'
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def ConfigTable.value_config?( name )
|
|
169
|
+
ent = get_entry(name) or return false
|
|
170
|
+
ent[1] != 'yes/no'
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def ConfigTable.path_config?( name )
|
|
174
|
+
ent = get_entry(name) or return false
|
|
175
|
+
ent[1] == 'path'
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class << self
|
|
180
|
+
|
|
181
|
+
alias newobj new
|
|
182
|
+
|
|
183
|
+
def new
|
|
184
|
+
c = newobj()
|
|
185
|
+
c.__send__ :init
|
|
186
|
+
c
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def load
|
|
190
|
+
c = newobj()
|
|
191
|
+
File.file? SAVE_FILE or
|
|
192
|
+
raise InstallError, "#{File.basename $0} config first"
|
|
193
|
+
File.foreach( SAVE_FILE ) do |line|
|
|
194
|
+
k, v = line.split( '=', 2 )
|
|
195
|
+
c.instance_eval {
|
|
196
|
+
@table[k] = v.strip
|
|
197
|
+
}
|
|
198
|
+
end
|
|
199
|
+
c
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def initialize
|
|
205
|
+
@table = {}
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def init
|
|
209
|
+
DESCRIPTER.each do |k, (default, vname, desc, default2)|
|
|
210
|
+
@table[k] = default
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
private :init
|
|
214
|
+
|
|
215
|
+
def save
|
|
216
|
+
File.open( SAVE_FILE, 'w' ) {|f|
|
|
217
|
+
@table.each do |k, v|
|
|
218
|
+
f.printf "%s=%s\n", k, v if v
|
|
219
|
+
end
|
|
220
|
+
}
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def []=( k, v )
|
|
224
|
+
ConfigTable.config_key? k or raise InstallError, "unknown config option #{k}"
|
|
225
|
+
if ConfigTable.path_config? k then
|
|
226
|
+
@table[k] = (v[0,1] != '$') ? File.expand_path(v) : v
|
|
227
|
+
else
|
|
228
|
+
@table[k] = v
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def []( key )
|
|
233
|
+
@table[key] or return nil
|
|
234
|
+
@table[key].gsub( %r<\$([^/]+)> ) { self[$1] }
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def set_raw( key, val )
|
|
238
|
+
@table[key] = val
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def get_raw( key )
|
|
242
|
+
@table[key]
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
class MetaConfigEnvironment
|
|
249
|
+
|
|
250
|
+
def self.eval_file( file )
|
|
251
|
+
return unless File.file? file
|
|
252
|
+
new.instance_eval File.read_all(file), file, 1
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
private
|
|
256
|
+
|
|
257
|
+
def config_names
|
|
258
|
+
ConfigTable.keys
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def config?( name )
|
|
262
|
+
ConfigTable.config_key? name
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def bool_config?( name )
|
|
266
|
+
ConfigTable.bool_config? name
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def value_config?( name )
|
|
270
|
+
ConfigTable.value_config? name
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def path_config?( name )
|
|
274
|
+
ConfigTable.path_config? name
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def add_config( name, argname, default, desc )
|
|
278
|
+
ConfigTable.add_entry name,[default,argname,desc]
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def add_path_config( name, default, desc )
|
|
282
|
+
add_config name, 'path', default, desc
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def add_bool_config( name, default, desc )
|
|
286
|
+
add_config name, 'yes/no', default ? 'yes' : 'no', desc
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def set_config_default( name, default )
|
|
290
|
+
if bool_config? name then
|
|
291
|
+
ConfigTable.get_entry!(name)[0] = default ? 'yes' : 'no'
|
|
292
|
+
else
|
|
293
|
+
ConfigTable.get_entry!(name)[0] = default
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def remove_config( name )
|
|
298
|
+
ent = ConfigTable.get_entry(name)
|
|
299
|
+
ConfigTable.remove_entry name
|
|
300
|
+
ent
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
### end config.rb
|
|
306
|
+
### begin fileop.rb
|
|
307
|
+
|
|
308
|
+
module FileOperations
|
|
309
|
+
|
|
310
|
+
def mkdir_p( dname, prefix = nil )
|
|
311
|
+
dname = prefix + dname if prefix
|
|
312
|
+
$stderr.puts "mkdir -p #{dname}" if verbose?
|
|
313
|
+
return if no_harm?
|
|
314
|
+
|
|
315
|
+
# does not check '/'... it's too abnormal case
|
|
316
|
+
dirs = dname.split(%r_(?=/)_)
|
|
317
|
+
if /\A[a-z]:\z/i === dirs[0] then
|
|
318
|
+
disk = dirs.shift
|
|
319
|
+
dirs[0] = disk + dirs[0]
|
|
320
|
+
end
|
|
321
|
+
dirs.each_index do |idx|
|
|
322
|
+
path = dirs[0..idx].join('')
|
|
323
|
+
Dir.mkdir path unless dir? path
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
def rm_f( fname )
|
|
328
|
+
$stderr.puts "rm -f #{fname}" if verbose?
|
|
329
|
+
return if no_harm?
|
|
330
|
+
|
|
331
|
+
if File.exist? fname or File.symlink? fname then
|
|
332
|
+
File.chmod 0777, fname
|
|
333
|
+
File.unlink fname
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def rm_rf( dn )
|
|
338
|
+
$stderr.puts "rm -rf #{dn}" if verbose?
|
|
339
|
+
return if no_harm?
|
|
340
|
+
|
|
341
|
+
Dir.chdir dn
|
|
342
|
+
Dir.foreach('.') do |fn|
|
|
343
|
+
next if fn == '.'
|
|
344
|
+
next if fn == '..'
|
|
345
|
+
if dir? fn then
|
|
346
|
+
verbose_off {
|
|
347
|
+
rm_rf fn
|
|
348
|
+
}
|
|
349
|
+
else
|
|
350
|
+
verbose_off {
|
|
351
|
+
rm_f fn
|
|
352
|
+
}
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
Dir.chdir '..'
|
|
356
|
+
Dir.rmdir dn
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def mv( src, dest )
|
|
360
|
+
rm_f dest
|
|
361
|
+
begin
|
|
362
|
+
File.link src, dest
|
|
363
|
+
rescue
|
|
364
|
+
File.write dest, File.read_all(src)
|
|
365
|
+
File.chmod File.stat(src).mode, dest
|
|
366
|
+
end
|
|
367
|
+
rm_f src
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
def install( from, dest, mode, prefix = nil )
|
|
371
|
+
$stderr.puts "install #{from} #{dest}" if verbose?
|
|
372
|
+
return if no_harm?
|
|
373
|
+
|
|
374
|
+
realdest = prefix + dest if prefix
|
|
375
|
+
if dir? realdest then
|
|
376
|
+
realdest += '/' + File.basename(from)
|
|
377
|
+
end
|
|
378
|
+
str = File.read_all(from)
|
|
379
|
+
if diff? str, realdest then
|
|
380
|
+
verbose_off {
|
|
381
|
+
rm_f realdest if File.exist? realdest
|
|
382
|
+
}
|
|
383
|
+
File.write realdest, str
|
|
384
|
+
File.chmod mode, realdest
|
|
385
|
+
|
|
386
|
+
File.open( objdir + '/InstalledFiles', 'a' ) {|f| f.puts realdest }
|
|
387
|
+
end
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
def diff?( orig, targ )
|
|
391
|
+
return true unless File.exist? targ
|
|
392
|
+
orig != File.read_all(targ)
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
def command( str )
|
|
396
|
+
$stderr.puts str if verbose?
|
|
397
|
+
system str or raise RuntimeError, "'system #{str}' failed"
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
def ruby( str )
|
|
401
|
+
command config('ruby-prog') + ' ' + str
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
def dir?( dname )
|
|
405
|
+
# for corrupted windows stat()
|
|
406
|
+
File.directory?( (dname[-1,1] == '/') ? dname : dname + '/' )
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
def all_files( dname )
|
|
410
|
+
Dir.open( dname ) {|d|
|
|
411
|
+
return d.find_all {|n| File.file? "#{dname}/#{n}" }
|
|
412
|
+
}
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
def all_dirs( dname )
|
|
416
|
+
Dir.open( dname ) {|d|
|
|
417
|
+
return d.find_all {|n| dir? "#{dname}/#{n}" } - %w(. ..)
|
|
418
|
+
}
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
### end fileop.rb
|
|
424
|
+
### begin base.rb
|
|
425
|
+
|
|
426
|
+
class InstallError < StandardError; end
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
class Installer
|
|
430
|
+
|
|
431
|
+
Version = '3.1.2'
|
|
432
|
+
Copyright = 'Copyright (c) 2000-2002 Minero Aoki'
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
@toplevel = nil
|
|
436
|
+
|
|
437
|
+
def self.declear_toplevel_installer( inst )
|
|
438
|
+
@toplevel and
|
|
439
|
+
raise ArgumentError, 'more than one toplevel installer decleared'
|
|
440
|
+
@toplevel = inst
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
def self.toplevel_installer
|
|
444
|
+
@toplevel
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
FILETYPES = %w( bin lib ext data )
|
|
449
|
+
|
|
450
|
+
include FileOperations
|
|
451
|
+
|
|
452
|
+
def initialize( config, opt, srcroot, objroot )
|
|
453
|
+
@config = config
|
|
454
|
+
@options = opt
|
|
455
|
+
@srcdir = File.expand_path(srcroot)
|
|
456
|
+
@objdir = File.expand_path(objroot)
|
|
457
|
+
@currdir = '.'
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
def inspect
|
|
461
|
+
"#<#{type} #{__id__}>"
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
#
|
|
465
|
+
# configs/options
|
|
466
|
+
#
|
|
467
|
+
|
|
468
|
+
def get_config( key )
|
|
469
|
+
@config[key]
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
alias config get_config
|
|
473
|
+
|
|
474
|
+
def set_config( key, val )
|
|
475
|
+
@config[key] = val
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
def no_harm?
|
|
479
|
+
@options['no-harm']
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def verbose?
|
|
483
|
+
@options['verbose']
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
def verbose_off
|
|
487
|
+
save, @options['verbose'] = @options['verbose'], false
|
|
488
|
+
yield
|
|
489
|
+
@options['verbose'] = save
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
#
|
|
493
|
+
# srcdir/objdir
|
|
494
|
+
#
|
|
495
|
+
|
|
496
|
+
attr_reader :srcdir
|
|
497
|
+
alias srcdir_root srcdir
|
|
498
|
+
alias package_root srcdir
|
|
499
|
+
|
|
500
|
+
def curr_srcdir
|
|
501
|
+
"#{@srcdir}/#{@currdir}"
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
attr_reader :objdir
|
|
505
|
+
alias objdir_root objdir
|
|
506
|
+
|
|
507
|
+
def curr_objdir
|
|
508
|
+
"#{@objdir}/#{@currdir}"
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
def srcfile( path )
|
|
512
|
+
curr_srcdir + '/' + path
|
|
513
|
+
end
|
|
514
|
+
|
|
515
|
+
def srcexist?( path )
|
|
516
|
+
File.exist? srcfile(path)
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
def srcdirectory?( path )
|
|
520
|
+
dir? srcfile(path)
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
def srcfile?( path )
|
|
524
|
+
File.file? srcfile(path)
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
def srcentries( path = '.' )
|
|
528
|
+
Dir.open( curr_srcdir + '/' + path ) {|d|
|
|
529
|
+
return d.to_a - %w(. ..) - hookfilenames
|
|
530
|
+
}
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
def srcfiles( path = '.' )
|
|
534
|
+
srcentries(path).find_all {|fname|
|
|
535
|
+
File.file? File.join(curr_srcdir, path, fname)
|
|
536
|
+
}
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
def srcdirectories( path = '.' )
|
|
540
|
+
srcentries(path).find_all {|fname|
|
|
541
|
+
dir? File.join(curr_srcdir, path, fname)
|
|
542
|
+
}
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
def dive_into( rel )
|
|
546
|
+
# skip source control directories
|
|
547
|
+
if (File.basename(rel) =~ /^(\.svn|CVS)$/)
|
|
548
|
+
return
|
|
549
|
+
end
|
|
550
|
+
return unless dir? "#{@srcdir}/#{rel}"
|
|
551
|
+
|
|
552
|
+
dir = File.basename(rel)
|
|
553
|
+
Dir.mkdir dir unless dir? dir
|
|
554
|
+
save = Dir.pwd
|
|
555
|
+
Dir.chdir dir
|
|
556
|
+
$stderr.puts '---> ' + rel if verbose?
|
|
557
|
+
@currdir = rel
|
|
558
|
+
yield
|
|
559
|
+
Dir.chdir save
|
|
560
|
+
$stderr.puts '<--- ' + rel if verbose?
|
|
561
|
+
@currdir = File.dirname(rel)
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
#
|
|
565
|
+
# config
|
|
566
|
+
#
|
|
567
|
+
|
|
568
|
+
def exec_config
|
|
569
|
+
exec_task_traverse 'config'
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
def config_dir_bin( rel )
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
def config_dir_lib( rel )
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
def config_dir_ext( rel )
|
|
579
|
+
extconf if extdir? curr_srcdir
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
def extconf
|
|
583
|
+
opt = @options['config-opt'].join(' ')
|
|
584
|
+
command "#{config('ruby-prog')} #{curr_srcdir}/extconf.rb #{opt}"
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
def config_dir_data( rel )
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
#
|
|
591
|
+
# setup
|
|
592
|
+
#
|
|
593
|
+
|
|
594
|
+
def exec_setup
|
|
595
|
+
exec_task_traverse 'setup'
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
def setup_dir_bin( relpath )
|
|
599
|
+
all_files( curr_srcdir ).each do |fname|
|
|
600
|
+
add_rubypath "#{curr_srcdir}/#{fname}"
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
SHEBANG_RE = /\A\#!\s*\S*ruby\S*/
|
|
605
|
+
|
|
606
|
+
def add_rubypath( path )
|
|
607
|
+
$stderr.puts %Q<set #! line to "\#!#{config('ruby-path')}" for #{path} ...> if verbose?
|
|
608
|
+
return if no_harm?
|
|
609
|
+
|
|
610
|
+
tmpfile = File.basename(path) + '.tmp'
|
|
611
|
+
begin
|
|
612
|
+
File.open( path ) {|r|
|
|
613
|
+
File.open( tmpfile, 'w' ) {|w|
|
|
614
|
+
first = r.gets
|
|
615
|
+
return unless SHEBANG_RE === first # reject '/usr/bin/env ruby'
|
|
616
|
+
|
|
617
|
+
w.print first.sub( SHEBANG_RE, '#!' + config('ruby-path') )
|
|
618
|
+
w.write r.read
|
|
619
|
+
} }
|
|
620
|
+
mv tmpfile, File.basename(path)
|
|
621
|
+
ensure
|
|
622
|
+
rm_f tmpfile if File.exist? tmpfile
|
|
623
|
+
end
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
def setup_dir_lib( relpath )
|
|
627
|
+
end
|
|
628
|
+
|
|
629
|
+
def setup_dir_ext( relpath )
|
|
630
|
+
if extdir? curr_srcdir then
|
|
631
|
+
make
|
|
632
|
+
end
|
|
633
|
+
end
|
|
634
|
+
|
|
635
|
+
def make
|
|
636
|
+
command config('make-prog')
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
def setup_dir_data( relpath )
|
|
640
|
+
end
|
|
641
|
+
|
|
642
|
+
#
|
|
643
|
+
# install
|
|
644
|
+
#
|
|
645
|
+
|
|
646
|
+
def exec_install
|
|
647
|
+
exec_task_traverse 'install'
|
|
648
|
+
end
|
|
649
|
+
|
|
650
|
+
def install_dir_bin( rel )
|
|
651
|
+
install_files targfiles, config('bin-dir') + '/' + rel, 0755
|
|
652
|
+
end
|
|
653
|
+
|
|
654
|
+
def install_dir_lib( rel )
|
|
655
|
+
install_files targfiles, config('rb-dir') + '/' + rel, 0644
|
|
656
|
+
end
|
|
657
|
+
|
|
658
|
+
def install_dir_ext( rel )
|
|
659
|
+
if extdir? curr_srcdir then
|
|
660
|
+
install_dir_ext_main File.dirname(rel)
|
|
661
|
+
end
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
def install_dir_ext_main( rel )
|
|
665
|
+
install_files allext('.'), config('so-dir') + '/' + rel, 0555
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
def install_dir_data( rel )
|
|
669
|
+
install_files targfiles, config('data-dir') + '/' + rel, 0644
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
def install_files( list, dest, mode )
|
|
673
|
+
# Skip the narf CVS directories
|
|
674
|
+
unless dest =~ /CVS/
|
|
675
|
+
mkdir_p dest, @options['install-prefix']
|
|
676
|
+
list.each do |fname|
|
|
677
|
+
install fname, dest, mode, @options['install-prefix']
|
|
678
|
+
end
|
|
679
|
+
end
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
def targfiles
|
|
683
|
+
(targfilenames() - hookfilenames()).collect {|fname|
|
|
684
|
+
File.exist?(fname) ? fname : File.join(curr_srcdir(), fname)
|
|
685
|
+
}
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
def targfilenames
|
|
689
|
+
[ curr_srcdir(), '.' ].inject([]) {|ret, dir|
|
|
690
|
+
ret | all_files(dir)
|
|
691
|
+
}
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
def hookfilenames
|
|
695
|
+
%w( pre-%s post-%s pre-%s.rb post-%s.rb ).collect {|fmt|
|
|
696
|
+
%w( config setup install clean ).collect {|t| sprintf fmt, t }
|
|
697
|
+
}.flatten
|
|
698
|
+
end
|
|
699
|
+
|
|
700
|
+
def allext( dir )
|
|
701
|
+
_allext(dir) or raise InstallError,
|
|
702
|
+
"no extention exists: Have you done 'ruby #{$0} setup' ?"
|
|
703
|
+
end
|
|
704
|
+
|
|
705
|
+
DLEXT = /\.#{ ::Config::CONFIG['DLEXT'] }\z/
|
|
706
|
+
|
|
707
|
+
def _allext( dir )
|
|
708
|
+
Dir.open( dir ) {|d|
|
|
709
|
+
return d.find_all {|fname| DLEXT === fname }
|
|
710
|
+
}
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
#
|
|
714
|
+
# clean
|
|
715
|
+
#
|
|
716
|
+
|
|
717
|
+
def exec_clean
|
|
718
|
+
exec_task_traverse 'clean'
|
|
719
|
+
rm_f 'config.save'
|
|
720
|
+
rm_f 'InstalledFiles'
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
def clean_dir_bin( rel )
|
|
724
|
+
end
|
|
725
|
+
|
|
726
|
+
def clean_dir_lib( rel )
|
|
727
|
+
end
|
|
728
|
+
|
|
729
|
+
def clean_dir_ext( rel )
|
|
730
|
+
clean
|
|
731
|
+
end
|
|
732
|
+
|
|
733
|
+
def clean
|
|
734
|
+
command config('make-prog') + ' clean' if File.file? 'Makefile'
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
def clean_dir_data( rel )
|
|
738
|
+
end
|
|
739
|
+
|
|
740
|
+
#
|
|
741
|
+
# lib
|
|
742
|
+
#
|
|
743
|
+
|
|
744
|
+
def exec_task_traverse( task )
|
|
745
|
+
run_hook 'pre-' + task
|
|
746
|
+
FILETYPES.each do |type|
|
|
747
|
+
if config('without-ext') == 'yes' and type == 'ext' then
|
|
748
|
+
$stderr.puts 'skipping ext/* by user option' if verbose?
|
|
749
|
+
next
|
|
750
|
+
end
|
|
751
|
+
traverse task, type, task + '_dir_' + type
|
|
752
|
+
end
|
|
753
|
+
run_hook 'post-' + task
|
|
754
|
+
end
|
|
755
|
+
|
|
756
|
+
def traverse( task, rel, mid )
|
|
757
|
+
dive_into( rel ) {
|
|
758
|
+
run_hook 'pre-' + task
|
|
759
|
+
__send__ mid, rel.sub( %r_\A.*?(?:/|\z)_, '' )
|
|
760
|
+
all_dirs( curr_srcdir ).each do |d|
|
|
761
|
+
traverse task, rel + '/' + d, mid
|
|
762
|
+
end
|
|
763
|
+
run_hook 'post-' + task
|
|
764
|
+
}
|
|
765
|
+
end
|
|
766
|
+
|
|
767
|
+
def run_hook( name )
|
|
768
|
+
try_run_hook curr_srcdir + '/' + name or
|
|
769
|
+
try_run_hook curr_srcdir + '/' + name + '.rb'
|
|
770
|
+
end
|
|
771
|
+
|
|
772
|
+
def try_run_hook( fname )
|
|
773
|
+
return false unless File.file? fname
|
|
774
|
+
|
|
775
|
+
env = self.dup
|
|
776
|
+
begin
|
|
777
|
+
env.instance_eval File.read_all(fname), fname, 1
|
|
778
|
+
rescue
|
|
779
|
+
raise InstallError, "hook #{fname} failed:\n" + $!.message
|
|
780
|
+
end
|
|
781
|
+
true
|
|
782
|
+
end
|
|
783
|
+
|
|
784
|
+
def extdir?( dir )
|
|
785
|
+
File.exist? dir + '/MANIFEST'
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
### end base.rb
|
|
791
|
+
### begin toplevel.rb
|
|
792
|
+
|
|
793
|
+
class ToplevelInstaller < Installer
|
|
794
|
+
|
|
795
|
+
TASKS = [
|
|
796
|
+
[ 'config', 'saves your configurations' ],
|
|
797
|
+
[ 'show', 'shows current configuration' ],
|
|
798
|
+
[ 'setup', 'compiles extention or else' ],
|
|
799
|
+
[ 'install', 'installs files' ],
|
|
800
|
+
[ 'clean', "does `make clean' for each extention" ]
|
|
801
|
+
]
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
def initialize( root )
|
|
805
|
+
super nil, {'verbose' => true}, root, '.'
|
|
806
|
+
Installer.declear_toplevel_installer self
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
|
|
810
|
+
def execute
|
|
811
|
+
run_metaconfigs
|
|
812
|
+
|
|
813
|
+
case task = parsearg_global()
|
|
814
|
+
when 'config'
|
|
815
|
+
@config = ConfigTable.new
|
|
816
|
+
else
|
|
817
|
+
@config = ConfigTable.load
|
|
818
|
+
end
|
|
819
|
+
parsearg_TASK task
|
|
820
|
+
|
|
821
|
+
exectask task
|
|
822
|
+
end
|
|
823
|
+
|
|
824
|
+
|
|
825
|
+
def run_metaconfigs
|
|
826
|
+
MetaConfigEnvironment.eval_file "#{srcdir_root}/#{metaconfig}"
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
def metaconfig
|
|
830
|
+
'metaconfig'
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
def exectask( task )
|
|
835
|
+
if task == 'show' then
|
|
836
|
+
exec_show
|
|
837
|
+
else
|
|
838
|
+
try task
|
|
839
|
+
end
|
|
840
|
+
end
|
|
841
|
+
|
|
842
|
+
def try( task )
|
|
843
|
+
$stderr.printf "#{File.basename $0}: entering %s phase...\n", task if verbose?
|
|
844
|
+
begin
|
|
845
|
+
__send__ 'exec_' + task
|
|
846
|
+
rescue
|
|
847
|
+
$stderr.printf "%s failed\n", task
|
|
848
|
+
raise
|
|
849
|
+
end
|
|
850
|
+
$stderr.printf "#{File.basename $0}: %s done.\n", task if verbose?
|
|
851
|
+
end
|
|
852
|
+
|
|
853
|
+
#
|
|
854
|
+
# processing arguments
|
|
855
|
+
#
|
|
856
|
+
|
|
857
|
+
def parsearg_global
|
|
858
|
+
task_re = /\A(?:#{TASKS.collect {|i| i[0] }.join '|'})\z/
|
|
859
|
+
|
|
860
|
+
while arg = ARGV.shift do
|
|
861
|
+
case arg
|
|
862
|
+
when /\A\w+\z/
|
|
863
|
+
task_re === arg or raise InstallError, "wrong task: #{arg}"
|
|
864
|
+
return arg
|
|
865
|
+
|
|
866
|
+
when '-q', '--quiet'
|
|
867
|
+
@options['verbose'] = false
|
|
868
|
+
|
|
869
|
+
when '--verbose'
|
|
870
|
+
@options['verbose'] = true
|
|
871
|
+
|
|
872
|
+
when '-h', '--help'
|
|
873
|
+
print_usage $stdout
|
|
874
|
+
exit 0
|
|
875
|
+
|
|
876
|
+
when '-v', '--version'
|
|
877
|
+
puts "#{File.basename $0} version #{Version}"
|
|
878
|
+
exit 0
|
|
879
|
+
|
|
880
|
+
when '--copyright'
|
|
881
|
+
puts Copyright
|
|
882
|
+
exit 0
|
|
883
|
+
|
|
884
|
+
else
|
|
885
|
+
raise InstallError, "unknown global option '#{arg}'"
|
|
886
|
+
end
|
|
887
|
+
end
|
|
888
|
+
|
|
889
|
+
raise InstallError, 'no task or global option given'
|
|
890
|
+
end
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
def parsearg_TASK( task )
|
|
894
|
+
mid = "parsearg_#{task}"
|
|
895
|
+
if respond_to? mid, true then
|
|
896
|
+
__send__ mid
|
|
897
|
+
else
|
|
898
|
+
ARGV.empty? or
|
|
899
|
+
raise InstallError, "#{task}: unknown options: #{ARGV.join ' '}"
|
|
900
|
+
end
|
|
901
|
+
end
|
|
902
|
+
|
|
903
|
+
def parsearg_config
|
|
904
|
+
re = /\A--(#{ConfigTable.keys.join '|'})(?:=(.*))?\z/
|
|
905
|
+
@options['config-opt'] = []
|
|
906
|
+
|
|
907
|
+
while i = ARGV.shift do
|
|
908
|
+
if /\A--?\z/ === i then
|
|
909
|
+
@options['config-opt'] = ARGV.dup
|
|
910
|
+
break
|
|
911
|
+
end
|
|
912
|
+
m = re.match(i) or raise InstallError, "config: unknown option #{i}"
|
|
913
|
+
name, value = m.to_a[1,2]
|
|
914
|
+
if value then
|
|
915
|
+
if ConfigTable.bool_config?(name) then
|
|
916
|
+
/\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i === value or raise InstallError, "config: --#{name} allows only yes/no for argument"
|
|
917
|
+
value = (/\Ay(es)?|\At(rue)/i === value) ? 'yes' : 'no'
|
|
918
|
+
end
|
|
919
|
+
else
|
|
920
|
+
ConfigTable.bool_config?(name) or raise InstallError, "config: --#{name} requires argument"
|
|
921
|
+
value = 'yes'
|
|
922
|
+
end
|
|
923
|
+
@config[name] = value
|
|
924
|
+
end
|
|
925
|
+
end
|
|
926
|
+
|
|
927
|
+
def parsearg_install
|
|
928
|
+
@options['no-harm'] = false
|
|
929
|
+
@options['install-prefix'] = ''
|
|
930
|
+
while a = ARGV.shift do
|
|
931
|
+
case a
|
|
932
|
+
when /\A--no-harm\z/
|
|
933
|
+
@options['no-harm'] = true
|
|
934
|
+
when /\A--prefix=(.*)\z/
|
|
935
|
+
path = $1
|
|
936
|
+
path = File.expand_path(path) unless path[0,1] == '/'
|
|
937
|
+
@options['install-prefix'] = path
|
|
938
|
+
else
|
|
939
|
+
raise InstallError, "install: unknown option #{a}"
|
|
940
|
+
end
|
|
941
|
+
end
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
|
|
945
|
+
def print_usage( out )
|
|
946
|
+
out.puts
|
|
947
|
+
out.puts 'Usage:'
|
|
948
|
+
out.puts " ruby #{File.basename $0} <global option>"
|
|
949
|
+
out.puts " ruby #{File.basename $0} [<global options>] <task> [<task options>]"
|
|
950
|
+
|
|
951
|
+
fmt = " %-20s %s\n"
|
|
952
|
+
out.puts
|
|
953
|
+
out.puts 'Global options:'
|
|
954
|
+
out.printf fmt, '-q,--quiet', 'suppress message outputs'
|
|
955
|
+
out.printf fmt, ' --verbose', 'output messages verbosely'
|
|
956
|
+
out.printf fmt, '-h,--help', 'print this message'
|
|
957
|
+
out.printf fmt, '-v,--version', 'print version and quit'
|
|
958
|
+
out.printf fmt, '--copyright', 'print copyright and quit'
|
|
959
|
+
|
|
960
|
+
out.puts
|
|
961
|
+
out.puts 'Tasks:'
|
|
962
|
+
TASKS.each do |name, desc|
|
|
963
|
+
out.printf " %-10s %s\n", name, desc
|
|
964
|
+
end
|
|
965
|
+
|
|
966
|
+
out.puts
|
|
967
|
+
out.puts 'Options for config:'
|
|
968
|
+
ConfigTable.each_definition do |name, (default, arg, desc, default2)|
|
|
969
|
+
out.printf " %-20s %s [%s]\n",
|
|
970
|
+
'--'+ name + (ConfigTable.bool_config?(name) ? '' : '='+arg),
|
|
971
|
+
desc,
|
|
972
|
+
default2 || default
|
|
973
|
+
end
|
|
974
|
+
out.printf " %-20s %s [%s]\n",
|
|
975
|
+
'--rbconfig=path', 'your rbconfig.rb to load', "running ruby's"
|
|
976
|
+
|
|
977
|
+
out.puts
|
|
978
|
+
out.puts 'Options for install:'
|
|
979
|
+
out.printf " %-20s %s [%s]\n",
|
|
980
|
+
'--no-harm', 'only display what to do if given', 'off'
|
|
981
|
+
|
|
982
|
+
out.puts
|
|
983
|
+
end
|
|
984
|
+
|
|
985
|
+
#
|
|
986
|
+
# config
|
|
987
|
+
#
|
|
988
|
+
|
|
989
|
+
def exec_config
|
|
990
|
+
super
|
|
991
|
+
@config.save
|
|
992
|
+
end
|
|
993
|
+
|
|
994
|
+
#
|
|
995
|
+
# show
|
|
996
|
+
#
|
|
997
|
+
|
|
998
|
+
def exec_show
|
|
999
|
+
ConfigTable.each_name do |k|
|
|
1000
|
+
v = @config.get_raw(k)
|
|
1001
|
+
if not v or v.empty? then
|
|
1002
|
+
v = '(not specified)'
|
|
1003
|
+
end
|
|
1004
|
+
printf "%-10s %s\n", k, v
|
|
1005
|
+
end
|
|
1006
|
+
end
|
|
1007
|
+
|
|
1008
|
+
end
|
|
1009
|
+
|
|
1010
|
+
### end toplevel.rb
|
|
1011
|
+
|
|
1012
|
+
if $0 == __FILE__ then
|
|
1013
|
+
begin
|
|
1014
|
+
installer = ToplevelInstaller.new( File.dirname($0) )
|
|
1015
|
+
installer.execute
|
|
1016
|
+
rescue
|
|
1017
|
+
raise if $DEBUG
|
|
1018
|
+
$stderr.puts $!.message
|
|
1019
|
+
$stderr.puts "try 'ruby #{$0} --help' for usage"
|
|
1020
|
+
exit 1
|
|
1021
|
+
end
|
|
1022
|
+
end
|