narf 0.6.2 → 0.6.3
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 +22 -0
- data/lib/web/htmltools/xmltree.rb +2 -2
- data/lib/web/htmltools/xpath.rb +1 -1
- data/narf.gemspec +1 -1
- metadata +2 -460
- data/InstalledFiles +0 -2227
- data/config.save +0 -12
- data/doc/apache_cgi.txt~ +0 -17
- data/doc/fastcgi.txt~ +0 -19
- data/doc/rdoc/classes/Web.html +0 -369
- data/doc/rdoc/classes/Web.src/M000002.html +0 -15
- data/doc/rdoc/classes/Web.src/M000003.html +0 -15
- data/doc/rdoc/classes/Web.src/M000004.html +0 -15
- data/doc/rdoc/classes/Web.src/M000005.html +0 -15
- data/doc/rdoc/classes/Web.src/M000006.html +0 -20
- data/doc/rdoc/classes/Web.src/M000007.html +0 -18
- data/doc/rdoc/classes/Web.src/M000008.html +0 -18
- data/doc/rdoc/classes/Web.src/M000009.html +0 -18
- data/doc/rdoc/classes/Web.src/M000010.html +0 -15
- data/doc/rdoc/classes/Web.src/M000011.html +0 -15
- data/doc/rdoc/classes/Web.src/M000012.html +0 -15
- data/doc/rdoc/classes/Web/CGD.html +0 -173
- data/doc/rdoc/classes/Web/CGD.src/M000037.html +0 -24
- data/doc/rdoc/classes/Web/CGD.src/M000038.html +0 -24
- data/doc/rdoc/classes/Web/CGD.src/M000039.html +0 -15
- data/doc/rdoc/classes/Web/CGD.src/M000040.html +0 -15
- data/doc/rdoc/classes/Web/CGD.src/M000041.html +0 -23
- data/doc/rdoc/classes/Web/CGI.html +0 -946
- data/doc/rdoc/classes/Web/CGI.src/M000051.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000052.html +0 -24
- data/doc/rdoc/classes/Web/CGI.src/M000053.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000054.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000055.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000056.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000057.html +0 -17
- data/doc/rdoc/classes/Web/CGI.src/M000058.html +0 -34
- data/doc/rdoc/classes/Web/CGI.src/M000059.html +0 -22
- data/doc/rdoc/classes/Web/CGI.src/M000060.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000061.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000062.html +0 -19
- data/doc/rdoc/classes/Web/CGI.src/M000063.html +0 -18
- data/doc/rdoc/classes/Web/CGI.src/M000064.html +0 -19
- data/doc/rdoc/classes/Web/CGI.src/M000065.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000066.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000067.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000068.html +0 -13
- data/doc/rdoc/classes/Web/CGI.src/M000069.html +0 -13
- data/doc/rdoc/classes/Web/CGI.src/M000070.html +0 -13
- data/doc/rdoc/classes/Web/CGI.src/M000071.html +0 -13
- data/doc/rdoc/classes/Web/CGI.src/M000072.html +0 -19
- data/doc/rdoc/classes/Web/CGI.src/M000073.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000074.html +0 -19
- data/doc/rdoc/classes/Web/CGI.src/M000075.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000076.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000077.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000078.html +0 -20
- data/doc/rdoc/classes/Web/CGI.src/M000079.html +0 -36
- data/doc/rdoc/classes/Web/CGI.src/M000080.html +0 -19
- data/doc/rdoc/classes/Web/CGI.src/M000081.html +0 -18
- data/doc/rdoc/classes/Web/CGI.src/M000082.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000083.html +0 -17
- data/doc/rdoc/classes/Web/CGI.src/M000084.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000085.html +0 -16
- data/doc/rdoc/classes/Web/CGI.src/M000086.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000087.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000088.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000089.html +0 -16
- data/doc/rdoc/classes/Web/CGI.src/M000090.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000091.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000092.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000093.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000094.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000095.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000096.html +0 -19
- data/doc/rdoc/classes/Web/CGI.src/M000097.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000098.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000099.html +0 -43
- data/doc/rdoc/classes/Web/CGI.src/M000100.html +0 -18
- data/doc/rdoc/classes/Web/CGI.src/M000101.html +0 -20
- data/doc/rdoc/classes/Web/CGI.src/M000102.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000103.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000104.html +0 -15
- data/doc/rdoc/classes/Web/CGI.src/M000105.html +0 -24
- data/doc/rdoc/classes/Web/CGI.src/M000106.html +0 -24
- data/doc/rdoc/classes/Web/CGI.src/M000107.html +0 -22
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +0 -104
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +0 -15
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +0 -15
- data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +0 -15
- data/doc/rdoc/classes/Web/Mime.html +0 -122
- data/doc/rdoc/classes/Web/Mime.src/M000118.html +0 -15
- data/doc/rdoc/classes/Web/Mime.src/M000119.html +0 -15
- data/doc/rdoc/classes/Web/Mime.src/M000120.html +0 -23
- data/doc/rdoc/classes/Web/Mime.src/M000121.html +0 -15
- data/doc/rdoc/classes/Web/Mime.src/M000122.html +0 -15
- data/doc/rdoc/classes/Web/Mime.src/M000123.html +0 -23
- data/doc/rdoc/classes/Web/Mime.src/M000124.html +0 -15
- data/doc/rdoc/classes/Web/Narflates.html +0 -134
- data/doc/rdoc/classes/Web/Parser.html +0 -219
- data/doc/rdoc/classes/Web/Parser.src/M000013.html +0 -21
- data/doc/rdoc/classes/Web/Parser.src/M000014.html +0 -19
- data/doc/rdoc/classes/Web/Parser.src/M000015.html +0 -21
- data/doc/rdoc/classes/Web/Parser.src/M000016.html +0 -15
- data/doc/rdoc/classes/Web/Parser.src/M000017.html +0 -30
- data/doc/rdoc/classes/Web/Parser.src/M000018.html +0 -15
- data/doc/rdoc/classes/Web/Parser.src/M000019.html +0 -19
- data/doc/rdoc/classes/Web/Parser.src/M000020.html +0 -27
- data/doc/rdoc/classes/Web/Parser.src/M000021.html +0 -15
- data/doc/rdoc/classes/Web/Parser.src/M000022.html +0 -16
- data/doc/rdoc/classes/Web/Parser.src/M000023.html +0 -18
- data/doc/rdoc/classes/Web/Session.html +0 -178
- data/doc/rdoc/classes/Web/Session.src/M000042.html +0 -20
- data/doc/rdoc/classes/Web/Session.src/M000043.html +0 -19
- data/doc/rdoc/classes/Web/Session.src/M000044.html +0 -21
- data/doc/rdoc/classes/Web/Session.src/M000045.html +0 -21
- data/doc/rdoc/classes/Web/Session.src/M000046.html +0 -15
- data/doc/rdoc/classes/Web/Session.src/M000047.html +0 -17
- data/doc/rdoc/classes/Web/Session.src/M000048.html +0 -15
- data/doc/rdoc/classes/Web/Session.src/M000049.html +0 -15
- data/doc/rdoc/classes/Web/Session.src/M000050.html +0 -16
- data/doc/rdoc/classes/Web/Testing.html +0 -474
- data/doc/rdoc/classes/Web/Testing.src/M000024.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000025.html +0 -25
- data/doc/rdoc/classes/Web/Testing.src/M000026.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000027.html +0 -25
- data/doc/rdoc/classes/Web/Testing.src/M000028.html +0 -57
- data/doc/rdoc/classes/Web/Testing.src/M000029.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000030.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000031.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000032.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000033.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000034.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000035.html +0 -15
- data/doc/rdoc/classes/Web/Testing.src/M000036.html +0 -18
- data/doc/rdoc/classes/Web/Upload.html +0 -160
- data/doc/rdoc/classes/Web/Upload.src/M000108.html +0 -25
- data/doc/rdoc/classes/Web/Upload.src/M000109.html +0 -18
- data/doc/rdoc/classes/Web/Upload.src/M000110.html +0 -16
- data/doc/rdoc/classes/Web/Upload.src/M000111.html +0 -16
- data/doc/rdoc/classes/Web/Wiki.html +0 -249
- data/doc/rdoc/classes/Web/Wiki.src/M000112.html +0 -25
- data/doc/rdoc/classes/Web/Wiki.src/M000113.html +0 -15
- data/doc/rdoc/classes/Web/Wiki.src/M000114.html +0 -26
- data/doc/rdoc/classes/Web/Wiki.src/M000115.html +0 -21
- data/doc/rdoc/classes/Web/Wiki.src/M000116.html +0 -18
- data/doc/rdoc/classes/Web/Wiki.src/M000117.html +0 -19
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/README.html +0 -230
- data/doc/rdoc/files/doc/apache_cgi_txt.html +0 -76
- data/doc/rdoc/files/doc/fastcgi_txt.html +0 -82
- data/doc/rdoc/files/doc/mod_ruby_txt.html +0 -62
- data/doc/rdoc/files/doc/webrick_txt.html +0 -79
- data/doc/rdoc/files/examples/examples_rdoc.html +0 -73
- data/doc/rdoc/files/lib/web/cgi_rb.html +0 -75
- data/doc/rdoc/files/lib/web/mime_rb.html +0 -67
- data/doc/rdoc/files/lib/web/parser_rb.html +0 -73
- data/doc/rdoc/files/lib/web/session_rb.html +0 -73
- data/doc/rdoc/files/lib/web/template_rb.html +0 -73
- data/doc/rdoc/files/lib/web/testing_rb.html +0 -67
- data/doc/rdoc/files/lib/web/upload_rb.html +0 -73
- data/doc/rdoc/files/lib/web/wiki_rb.html +0 -79
- data/doc/rdoc/files/lib/web_rb.html +0 -116
- data/doc/rdoc/files/lib/web_rb.src/M000001.html +0 -15
- data/doc/rdoc/fr_class_index.html +0 -47
- data/doc/rdoc/fr_file_index.html +0 -52
- data/doc/rdoc/fr_method_index.html +0 -158
- data/doc/rdoc/index.html +0 -22
- data/doc/rdoc/rdoc-style.css +0 -99
- data/examples/admin.rb~ +0 -5
- data/examples/cookbook.rdoc~ +0 -238
- data/examples/examples.rdoc~ +0 -17
- data/examples/hello.world.rb~ +0 -3
- data/examples/session.rb~ +0 -31
- data/examples/test/test.hello.world.rb~ +0 -9
- data/examples/test/test.session.rb~ +0 -37
- data/examples/wiki.rb~ +0 -5
- data/lib/web.rb~ +0 -290
- data/lib/web/#assertinclude.rb# +0 -110
- data/lib/web/assertinclude.rb~ +0 -110
- data/lib/web/cgi.rb~ +0 -640
- data/lib/web/htmlparser/html-parser.rb~ +0 -429
- data/lib/web/htmlparser/sgml-parser.rb~ +0 -332
- data/lib/web/htmltools/element.rb~ +0 -296
- data/lib/web/htmltools/stparser.rb~ +0 -276
- data/lib/web/htmltools/tags.rb~ +0 -286
- data/lib/web/htmltools/tree.rb~ +0 -139
- data/lib/web/htmltools/xmltree.rb~ +0 -160
- data/lib/web/htmltools/xpath.rb~ +0 -71
- data/lib/web/parser.rb~ +0 -288
- data/lib/web/request.rb~ +0 -238
- data/lib/web/runner.rb~ +0 -26
- data/lib/web/sapi/fastcgi.rb~ +0 -25
- data/lib/web/sapi/mod_ruby.rb~ +0 -46
- data/lib/web/sapi/webrick.rb~ +0 -89
- data/lib/web/session.rb~ +0 -75
- data/lib/web/tagparser.rb~ +0 -96
- data/lib/web/template.rb~ +0 -613
- data/lib/web/testing.rb~ +0 -546
- data/lib/web/unit/response.rb~ +0 -461
- data/lib/web/unit/ui/cui/testrunner.rb~ +0 -50
- data/lib/web/upload.rb~ +0 -262
- data/lib/web/wiki.rb~ +0 -517
- data/lib/web/wiki/linker.rb~ +0 -72
- data/lib/web/wiki/mime.rb~ +0 -68
- data/lib/web/wiki/page.rb~ +0 -192
- data/lib/web/wiki/resources/#edit.html# +0 -65
- data/lib/web/wiki/resources/admin.html~ +0 -13
- data/lib/web/wiki/resources/default-content_editor.html~ +0 -1
- data/lib/web/wiki/resources/edit.html~ +0 -2
- data/lib/web/wiki/resources/home.html~ +0 -10
- data/lib/web/wiki/resources/htmlarea/ChangeLog +0 -1185
- data/lib/web/wiki/resources/htmlarea/dialog.js +0 -72
- data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +0 -16
- data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +0 -158
- data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +0 -95
- data/lib/web/wiki/resources/htmlarea/examples/core.html +0 -184
- data/lib/web/wiki/resources/htmlarea/examples/css.html +0 -88
- data/lib/web/wiki/resources/htmlarea/examples/custom.css +0 -29
- data/lib/web/wiki/resources/htmlarea/examples/full-page.html +0 -75
- data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +0 -248
- data/lib/web/wiki/resources/htmlarea/examples/index.html +0 -40
- data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +0 -132
- data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +0 -116
- data/lib/web/wiki/resources/htmlarea/examples/test.cgi +0 -21
- data/lib/web/wiki/resources/htmlarea/htmlarea.css +0 -180
- data/lib/web/wiki/resources/htmlarea/htmlarea.js +0 -2175
- 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 +0 -199
- data/lib/web/wiki/resources/htmlarea/lang/b5.js +0 -36
- data/lib/web/wiki/resources/htmlarea/lang/cz.js +0 -63
- data/lib/web/wiki/resources/htmlarea/lang/da.js +0 -38
- data/lib/web/wiki/resources/htmlarea/lang/de.js +0 -54
- data/lib/web/wiki/resources/htmlarea/lang/ee.js +0 -63
- data/lib/web/wiki/resources/htmlarea/lang/el.js +0 -75
- data/lib/web/wiki/resources/htmlarea/lang/en.js +0 -88
- data/lib/web/wiki/resources/htmlarea/lang/es.js +0 -51
- data/lib/web/wiki/resources/htmlarea/lang/fi.js +0 -46
- data/lib/web/wiki/resources/htmlarea/lang/fr.js +0 -61
- data/lib/web/wiki/resources/htmlarea/lang/gb.js +0 -36
- data/lib/web/wiki/resources/htmlarea/lang/he.js +0 -63
- data/lib/web/wiki/resources/htmlarea/lang/hu.js +0 -63
- data/lib/web/wiki/resources/htmlarea/lang/it.js +0 -54
- data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +0 -37
- data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +0 -37
- data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +0 -37
- data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +0 -37
- data/lib/web/wiki/resources/htmlarea/lang/lt.js +0 -55
- data/lib/web/wiki/resources/htmlarea/lang/lv.js +0 -55
- data/lib/web/wiki/resources/htmlarea/lang/nb.js +0 -36
- data/lib/web/wiki/resources/htmlarea/lang/nl.js +0 -90
- data/lib/web/wiki/resources/htmlarea/lang/no.js +0 -79
- data/lib/web/wiki/resources/htmlarea/lang/pl.js +0 -36
- data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +0 -37
- data/lib/web/wiki/resources/htmlarea/lang/ro.js +0 -80
- data/lib/web/wiki/resources/htmlarea/lang/ru.js +0 -63
- data/lib/web/wiki/resources/htmlarea/lang/se.js +0 -38
- data/lib/web/wiki/resources/htmlarea/lang/si.js +0 -63
- data/lib/web/wiki/resources/htmlarea/lang/vn.js +0 -51
- data/lib/web/wiki/resources/htmlarea/license.txt +0 -30
- data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +0 -116
- data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +0 -2
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +0 -416
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +0 -59
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +0 -57
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +0 -66
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +0 -66
- data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +0 -64
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +0 -143
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +0 -25
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +0 -25
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +0 -131
- data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +0 -89
- 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 +0 -37
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +0 -37
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +0 -28
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +0 -38
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +0 -37
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +0 -28
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +0 -37
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +0 -114
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +0 -210
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +0 -10
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +0 -122
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +0 -397
- data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +0 -79
- 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 +0 -90
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +0 -90
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +0 -81
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +0 -81
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +0 -90
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +0 -66
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +0 -63
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +0 -81
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +0 -90
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +0 -91
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +0 -90
- data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +0 -1160
- data/lib/web/wiki/resources/htmlarea/popupdiv.js +0 -369
- data/lib/web/wiki/resources/htmlarea/popups/about.html +0 -378
- data/lib/web/wiki/resources/htmlarea/popups/blank.html +0 -2
- data/lib/web/wiki/resources/htmlarea/popups/custom2.html +0 -35
- data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +0 -16
- data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +0 -133
- data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +0 -191
- data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +0 -174
- data/lib/web/wiki/resources/htmlarea/popups/link.html +0 -142
- data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +0 -131
- data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +0 -206
- data/lib/web/wiki/resources/htmlarea/popups/popup.js +0 -109
- data/lib/web/wiki/resources/htmlarea/popups/select_color.html +0 -347
- data/lib/web/wiki/resources/htmlarea/popupwin.js +0 -139
- data/lib/web/wiki/resources/htmlarea/reference.html +0 -523
- data/lib/web/wiki/resources/htmlarea/release-notes.html +0 -165
- data/lib/web/wiki/resources/illustration.html~ +0 -1
- data/lib/web/wiki/resources/index.html~ +0 -4
- data/lib/web/wiki/resources/more_news.html~ +0 -5
- data/lib/web/wiki/resources/more_news_rss_0.91.html +0 -23
- data/lib/web/wiki/resources/page_history.html~ +0 -19
- data/lib/web/wiki/resources/template.html~ +0 -13
- data/narf.gemspec~ +0 -40
- data/sapi/apache_cgi/INSTALL.txt~ +0 -9
- data/sapi/apache_cgi/README~ +0 -0
- data/sapi/fastcgi/INSTALL.txt~ +0 -17
- data/sapi/mod_ruby/INSTALL.txt~ +0 -5
- data/sapi/webrick/INSTALL.txt~ +0 -21
- data/sapi/webrick/run_webrick.rb~ +0 -16
- data/scripts/makedist.rb~ +0 -49
- data/test/mod_ruby_stub.rb~ +0 -38
- data/test/test.action.rb~ +0 -142
- data/test/test.assertinclude.rb~ +0 -109
- data/test/test.narf.cgi.rb~ +0 -105
- data/test/test.request.rb~ +0 -328
- data/test/test.response.rb~ +0 -556
- data/test/test.template.rb~ +0 -832
- data/test/test.web.test.rb~ +0 -461
- data/test/webunit/test_cookie.rb~ +0 -128
- data/test/webunit/test_form.rb~ +0 -43
- data/test/webunit/test_multipart.rb~ +0 -53
- data/test/webunit/test_params.rb~ +0 -211
- data/test/webunit/test_response.rb~ +0 -145
- data/test/webunit/test_site/assert.html~ +0 -1
- data/test/webunit/test_site/auth/index.html~ +0 -1
- data/test/webunit/test_site/badtags.html~ +0 -1
- data/test/webunit/test_site/cookie.cgi~ +0 -35
- data/test/webunit/test_site/document.xml~ +0 -1
- data/test/webunit/test_site/form.html~ +0 -1
- data/test/webunit/test_site/frame-0.html~ +0 -1
- data/test/webunit/test_site/frame-1.html~ +0 -1
- data/test/webunit/test_site/frame.html~ +0 -1
- data/test/webunit/test_site/image.html~ +0 -1
- data/test/webunit/test_site/include.cgi~ +0 -10
- data/test/webunit/test_site/jscript-0.html~ +0 -1
- data/test/webunit/test_site/jscript-1.html~ +0 -1
- data/test/webunit/test_site/jscript.html~ +0 -1
- data/test/webunit/test_site/link.html~ +0 -1
- data/test/webunit/test_site/multipart.cgi~ +0 -25
- data/test/webunit/test_site/multipart.html~ +0 -1
- data/test/webunit/test_site/params.html~ +0 -1
- data/test/webunit/test_site/redirect.cgi~ +0 -14
- data/test/webunit/test_site/response.html~ +0 -1
- data/test/webunit/test_site/simple.cgi~ +0 -17
- data/test/webunit/test_site/stock.cgi~ +0 -34
- data/test/webunit/test_site/table.html~ +0 -1
- data/test/webunit/test_site/test.cgi~ +0 -25
- data/test/wiki/test.history.rb~ +0 -254
- data/test/wiki/test.illustration_page.rb~ +0 -287
- data/test/wiki/test.tarpit.rb~ +0 -40
- data/test/wiki/test.wiki.rb~ +0 -295
data/examples/admin.rb~
DELETED
data/examples/cookbook.rdoc~
DELETED
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
Narf offers a set of methods for testing. This document explains the
|
|
2
|
-
use of these methods.
|
|
3
|
-
|
|
4
|
-
=== Using cgi.assert_content
|
|
5
|
-
|
|
6
|
-
1. The simplest form of testing is to use assert methods on the cgi:
|
|
7
|
-
|
|
8
|
-
class TestHello < Test::Unit::TestCase
|
|
9
|
-
def test_hello
|
|
10
|
-
cgi = Web.process{ |cgi|
|
|
11
|
-
handle_request( cgi )
|
|
12
|
-
}
|
|
13
|
-
cgi.assert_content "Hello, World"
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def handle_request cgi
|
|
18
|
-
cgi.write "Hello, World"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
2. Narf provides a Web::App stub to wrap these methods:
|
|
22
|
-
|
|
23
|
-
class TestHello < Test::Unit::TestCase
|
|
24
|
-
def test_hello
|
|
25
|
-
cgi = HelloApp.run
|
|
26
|
-
cgi.assert_content "Hello, World"
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
class HelloApp < Web::App
|
|
31
|
-
def handle_request cgi
|
|
32
|
-
cgi.write "Hello, World"
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
3. You can pass parameters into the process / run methods to mock a form
|
|
37
|
-
submission:
|
|
38
|
-
|
|
39
|
-
class TestHello < Test::Unit::TestCase
|
|
40
|
-
def test_hello
|
|
41
|
-
cgi = HelloApp.run( :params => { "greeting" => "Welcome" } )
|
|
42
|
-
cgi.assert_content "Welcome, World"
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
class HelloApp < Web::App
|
|
47
|
-
def handle_request cgi
|
|
48
|
-
cgi.write cgi["greeting"] + ", World"
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
=== A Simple Test Case using a Template
|
|
54
|
-
|
|
55
|
-
Explaining the use of assert_content is simple, but using
|
|
56
|
-
assert_content is frustrating on a typical project. Imagine if the
|
|
57
|
-
expected results for the previous example was an HTML page:
|
|
58
|
-
|
|
59
|
-
<html>
|
|
60
|
-
<head>
|
|
61
|
-
<title>HelloApp</title>
|
|
62
|
-
</head>
|
|
63
|
-
<body>
|
|
64
|
-
<h1>Welcome, World</h1>
|
|
65
|
-
</body>
|
|
66
|
-
</html>
|
|
67
|
-
|
|
68
|
-
Just writing this example shows the need. Most of the HTML doesn't
|
|
69
|
-
change often, but it still needs to be typed twice to make
|
|
70
|
-
assert_content work. As a result, more time is spent matching tabs and
|
|
71
|
-
spaces between potential large strings of HTML than on improving the
|
|
72
|
-
utility and quality of the web pages.
|
|
73
|
-
|
|
74
|
-
We don't want to test the values of the constants on the page, we want
|
|
75
|
-
to test what changes. This is the purpose of Narf's templating
|
|
76
|
-
functions. Writing a testcase is only slightly more complicated than
|
|
77
|
-
the normal test-case.
|
|
78
|
-
|
|
79
|
-
class TestHello < Test::Unit::TestCase
|
|
80
|
-
def test_hello
|
|
81
|
-
cgi = HelloApp.run(:params => { "greeting" => "foo"} )
|
|
82
|
-
cgi.assert_template_used "hello_template.html"
|
|
83
|
-
cgi.assert_vars_includes { "var" => "foo" }
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
class HelloApp < Web::App
|
|
88
|
-
def handle_request cgi
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
Now the tests will fail giving an error saying that the
|
|
93
|
-
template hello_template.html hasn't been displayed. So, we create it.
|
|
94
|
-
The template contains a parameter which we expect to be replaced:
|
|
95
|
-
|
|
96
|
-
<html>
|
|
97
|
-
<head>
|
|
98
|
-
<title>HelloApp</title>
|
|
99
|
-
</head>
|
|
100
|
-
<body>
|
|
101
|
-
<h1>{$var}, World</h1>
|
|
102
|
-
</body>
|
|
103
|
-
</html>
|
|
104
|
-
|
|
105
|
-
We also need to change the application to print this template:
|
|
106
|
-
|
|
107
|
-
class HelloApp < Web::App
|
|
108
|
-
def handle_request cgi
|
|
109
|
-
print_template "hello_template.html"
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
Now, the first assertion will pass, but the second will fail
|
|
114
|
-
complaining that the field var has not been set.
|
|
115
|
-
|
|
116
|
-
In order to resolve this, we now need to modify the code to
|
|
117
|
-
actually set the values, We do this by passing a hash defining
|
|
118
|
-
the values we want printed in the template. The keys in the hash
|
|
119
|
-
correspond to the embedded variables in the template, allowing
|
|
120
|
-
us to print the hashed values in the template.
|
|
121
|
-
|
|
122
|
-
class TestDisplay < Test::Unit::TestCase
|
|
123
|
-
def test_hello
|
|
124
|
-
cgi = HelloApp.run(:params => {"greeting" => "foo"})
|
|
125
|
-
cgi.assert_template_used "hello_template.html"
|
|
126
|
-
cgi.assert_vars_includes { "var" => "foo" }
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
class HelloApp < Web::App
|
|
131
|
-
def handle_request cgi
|
|
132
|
-
print_template "hello_template.html", { "var" => "foo" }
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
Now the tests all pass, but the application is not responding to
|
|
137
|
-
the parameter being passed in. To make it respond to this, we need
|
|
138
|
-
to add one more test and make one final change to the code.
|
|
139
|
-
|
|
140
|
-
class TestHello < Test::Unit::TestCase
|
|
141
|
-
def test_template1
|
|
142
|
-
....
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def test_template2
|
|
146
|
-
cgi = HelloApp.run(:params => {"greeting" => "Hola"})
|
|
147
|
-
cgi.assert_template_used "hello_template.html"
|
|
148
|
-
cgi.assert_vars_includes { "var" => "Hola" }
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
class MyWebApp < WebApplication
|
|
153
|
-
def handle_request cgi
|
|
154
|
-
print_template "hello_template.html", { "var" => cgi["Hola"] }
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
Running the tests, we have completed this trivial application.
|
|
159
|
-
|
|
160
|
-
=== More Complex Examples
|
|
161
|
-
|
|
162
|
-
Now we can try to build a slightly more complicated form
|
|
163
|
-
structure. By adding some repeating elements. For this we now
|
|
164
|
-
want to check
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
Testing with forms
|
|
168
|
-
|
|
169
|
-
In addition to the presentation of data, many web
|
|
170
|
-
applications also interact with the user using forms. NARF
|
|
171
|
-
includes features for this as well - those who have used the
|
|
172
|
-
Java HTTPUnit will find some of this API familiar. Using this
|
|
173
|
-
API it is possible to test the correct displaying of forms and
|
|
174
|
-
their interactions. In the following example we test that a form
|
|
175
|
-
is displayed with the correct values.
|
|
176
|
-
|
|
177
|
-
class TestDisplay < Test::Unit::TestCase
|
|
178
|
-
def test_default_form_value
|
|
179
|
-
cgi = HelloApp.run()
|
|
180
|
-
application.run
|
|
181
|
-
application.assert_template_used "mytemplatename.html"
|
|
182
|
-
application.assert_form_value "item", "foo"
|
|
183
|
-
end
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
This can be implemented with the following code:
|
|
187
|
-
|
|
188
|
-
class MyWebApp < WebApplication
|
|
189
|
-
def handle_request cgi
|
|
190
|
-
print_template "test.template.html", { "item" => "foo" }
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
<html>
|
|
195
|
-
<body>
|
|
196
|
-
<h1>Page Displaying Form</h1>
|
|
197
|
-
|
|
198
|
-
{form name="test"}
|
|
199
|
-
{input name=item value="foo"}
|
|
200
|
-
{submit name=submitbutton value="Submit"}
|
|
201
|
-
{/form}
|
|
202
|
-
|
|
203
|
-
</body>
|
|
204
|
-
</html>
|
|
205
|
-
|
|
206
|
-
The following test checks that the form had a particular value,
|
|
207
|
-
and then makes use of the templating library to make sure it was
|
|
208
|
-
displayed correctly.
|
|
209
|
-
|
|
210
|
-
class TestDisplay < Test::Unit::TestCase
|
|
211
|
-
.....
|
|
212
|
-
|
|
213
|
-
def test_submitting_form_displays_thankyou
|
|
214
|
-
cgi = HelloApp.run()
|
|
215
|
-
application.run
|
|
216
|
-
application.submit! "foo", { name => "Tom" }
|
|
217
|
-
application.assert_template_used "display_thankyou.html"
|
|
218
|
-
application.assert_includes { "name" => "Tom" }
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
class MyWebApp < WebApplication
|
|
223
|
-
def handle_request cgi
|
|
224
|
-
if cgi.has_key?("submitbutton")
|
|
225
|
-
print_template "display_thankyou.html", { "item" => cgi["name"] }
|
|
226
|
-
else
|
|
227
|
-
print_template "test.template.html", { "item" => "foo" }
|
|
228
|
-
end
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
=== Dynamically Created Forms
|
|
233
|
-
|
|
234
|
-
=== Using Sessions
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
data/examples/examples.rdoc~
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
These directories contains examples of the narf api's.
|
|
2
|
-
|
|
3
|
-
=== Tested examples:
|
|
4
|
-
|
|
5
|
-
hello.world.rb:: the classic
|
|
6
|
-
wiki.rb:: The NARF libary includes the wiki. Preview it at http://www.narf-lib.org
|
|
7
|
-
|
|
8
|
-
=== Untested examples
|
|
9
|
-
|
|
10
|
-
* session.rb - Illustrates using the session api
|
|
11
|
-
|
|
12
|
-
=== Examples to be written
|
|
13
|
-
|
|
14
|
-
* cookie.rb
|
|
15
|
-
* params.rb
|
|
16
|
-
* multipart.rb
|
|
17
|
-
* template.rb
|
data/examples/hello.world.rb~
DELETED
data/examples/session.rb~
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/narf
|
|
2
|
-
|
|
3
|
-
require 'web'
|
|
4
|
-
|
|
5
|
-
# Add session values
|
|
6
|
-
unless Web["key"].empty?
|
|
7
|
-
Web.session[ Web["key"] ] = Web["value"]
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# Delete session values
|
|
11
|
-
Web["delete[]"].each { |key|
|
|
12
|
-
Web.session.delete key
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
# Printing the form
|
|
16
|
-
Web.puts '<html><body>'
|
|
17
|
-
Web.puts '<form name="session_test">'
|
|
18
|
-
Web.puts '<h3>Session Values:</h3>'
|
|
19
|
-
|
|
20
|
-
Web.session.each { |key, val|
|
|
21
|
-
Web.puts "<b>#{key}</b> => <i>#{val}</i><br>"
|
|
22
|
-
Web.puts "Delete #{key}? <input type=\"checkbox\" name=\"delete[]\" value=\"#{key}\"><br>"
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
Web.print <<-HTML
|
|
26
|
-
<h3>Enter new value:</h3>
|
|
27
|
-
Key: <input type="text" name="key"> => Value:<input type="text" name="value">
|
|
28
|
-
<p><input type="submit" value="Save"></p>
|
|
29
|
-
</form>
|
|
30
|
-
</body></html>
|
|
31
|
-
HTML
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
class TestSession < Test::Unit::TestCase
|
|
2
|
-
include Web::Testing
|
|
3
|
-
|
|
4
|
-
def test_session
|
|
5
|
-
do_request "session.rb"
|
|
6
|
-
|
|
7
|
-
assert_form_includes( "session_test",
|
|
8
|
-
"key" => nil,
|
|
9
|
-
"value" => nil )
|
|
10
|
-
|
|
11
|
-
do_submit( "session_test",
|
|
12
|
-
"key" => "patrick",
|
|
13
|
-
"value" => "a person of dubious motives" )
|
|
14
|
-
|
|
15
|
-
assert_equal( { "patrick" => "a person of dubious motives" },
|
|
16
|
-
Web.session )
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
do_submit( "session_test",
|
|
20
|
-
"key" => "tom",
|
|
21
|
-
"value" => "a speedy programmer" )
|
|
22
|
-
|
|
23
|
-
assert_equal( { "patrick" => "a person of dubious motives",
|
|
24
|
-
"tom" => "a speedy programmer" },
|
|
25
|
-
Web.session )
|
|
26
|
-
|
|
27
|
-
assert_form_includes( "session_test", "delete[]" => select([ ],
|
|
28
|
-
"patrick",
|
|
29
|
-
"tom" ) )
|
|
30
|
-
|
|
31
|
-
do_submit( "session_test", "delete[]" => "patrick" )
|
|
32
|
-
|
|
33
|
-
#assert_equal( { "tom" => "a speedy programmer" },
|
|
34
|
-
# Web.session )
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
end
|
data/examples/wiki.rb~
DELETED
data/lib/web.rb~
DELETED
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
require 'test/unit/assertions'
|
|
2
|
-
|
|
3
|
-
require 'web/strscanparser'
|
|
4
|
-
require 'web/action'
|
|
5
|
-
require 'web/buffer'
|
|
6
|
-
require 'web/upload'
|
|
7
|
-
require 'web/parser'
|
|
8
|
-
require 'web/session'
|
|
9
|
-
require 'web/writableio'
|
|
10
|
-
require 'web/template'
|
|
11
|
-
require 'web/assertinclude'
|
|
12
|
-
require 'web/forms'
|
|
13
|
-
require 'web/tagparser'
|
|
14
|
-
require 'web/testing'
|
|
15
|
-
require 'web/formreader.rb'
|
|
16
|
-
require 'web/simpledispatcher'
|
|
17
|
-
require 'web/traceoutput'
|
|
18
|
-
require 'web/mime'
|
|
19
|
-
require 'web/cgi'
|
|
20
|
-
|
|
21
|
-
require 'web/htmltools/tree'
|
|
22
|
-
|
|
23
|
-
# Write output to client. Replaces Kernel.puts;
|
|
24
|
-
# use that or $stderr.puts if you want the standard puts.
|
|
25
|
-
def puts( *args )
|
|
26
|
-
Web.puts args
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
begin
|
|
30
|
-
require('stringio')
|
|
31
|
-
rescue LoadError
|
|
32
|
-
module Web
|
|
33
|
-
class StringIO # :nodoc:
|
|
34
|
-
def initialize
|
|
35
|
-
@___content___ = ""
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def read
|
|
39
|
-
@___content___
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def clear
|
|
43
|
-
@___content___ = ""
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def string
|
|
47
|
-
@___content___
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def puts(*args)
|
|
51
|
-
@___content___ << args.join("\n") << "\n"
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def << var
|
|
55
|
-
@___content___ << var.to_s
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def write var
|
|
59
|
-
@___content___ << var.to_s
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def print var
|
|
63
|
-
@___content___ << var.to_s
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
unless Kernel.const_defined? "StringIO"
|
|
69
|
-
StringIO = Web::StringIO.clone
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# == Purpose
|
|
74
|
-
# Web provides an infrastructure for building and testing
|
|
75
|
-
# web applications.
|
|
76
|
-
#
|
|
77
|
-
# == Usage
|
|
78
|
-
# Use the Web module to interact with the client. The module
|
|
79
|
-
# delegates to a Web::CGI object, which does the actual work.
|
|
80
|
-
#
|
|
81
|
-
# #!/usr/bin/narf
|
|
82
|
-
# Web["field"] # access parameters
|
|
83
|
-
# Web.cookies["muppet"] # access cookies
|
|
84
|
-
# Web.session["key"] ||= "value" # get and set session values
|
|
85
|
-
# Web.set_cookie( "muppet", "cookie monster" ) # set cookies
|
|
86
|
-
# Web.puts "something" # print 'something' out
|
|
87
|
-
#
|
|
88
|
-
# If the request contained multipart/form-data, uploaded files are returned as
|
|
89
|
-
# Web::Upload objects. Other parameters are treated as strings.
|
|
90
|
-
#
|
|
91
|
-
# == Output
|
|
92
|
-
#
|
|
93
|
-
# You write output as if it were an IO:
|
|
94
|
-
# Web << "<h1>Hello World!</h1>"
|
|
95
|
-
# Web.print "<p>We have lots of tricks for you.<br>"
|
|
96
|
-
# Web.write "From kungfu to jiujitsu<br>"
|
|
97
|
-
# Web.puts "anything and everything works</p>."
|
|
98
|
-
# or even:
|
|
99
|
-
# puts "hello world"
|
|
100
|
-
#
|
|
101
|
-
# Narf buffers output by default. Buffered output allows you to set headers
|
|
102
|
-
# (cookies, redirects, status, etc.) at any point before the cgi is flushed.
|
|
103
|
-
# You can force this by calling:
|
|
104
|
-
# Web.flush
|
|
105
|
-
#
|
|
106
|
-
# Once the headers are sent to the client, you cannot set any more headers.
|
|
107
|
-
#
|
|
108
|
-
# == Error Handling
|
|
109
|
-
#
|
|
110
|
-
# For cgi-scripts under Apache, one can use the 'bin/narf'
|
|
111
|
-
# script instead of using the ruby executable. This little c program
|
|
112
|
-
# doesn't do much fancy, but it can trap syntax errors and send them
|
|
113
|
-
# back to the browser. <i>I would especially appreciate security-related
|
|
114
|
-
# feedback; narf.c is contributed and I am not a c programmer.</i>
|
|
115
|
-
#
|
|
116
|
-
# == Sessions:
|
|
117
|
-
#
|
|
118
|
-
# Sessions provide a way of storing data between Web
|
|
119
|
-
# requests. Anything that can be marshalled can be stored in the
|
|
120
|
-
# session.
|
|
121
|
-
#
|
|
122
|
-
# === Getting and Setting values in a session
|
|
123
|
-
#
|
|
124
|
-
# Web.session["key"] = "value"
|
|
125
|
-
# Web.session["key"] # => "value"
|
|
126
|
-
#
|
|
127
|
-
# === Deleting session values
|
|
128
|
-
#
|
|
129
|
-
# Web.session["key"] = "value"
|
|
130
|
-
# Web.session["key"].delete # => "value"
|
|
131
|
-
# Web.session["key"] # => "nil"
|
|
132
|
-
#
|
|
133
|
-
# === Iterating through session keys
|
|
134
|
-
#
|
|
135
|
-
# Web.session.each do |key, val|
|
|
136
|
-
# Web.puts "#{key} => #{val}<br>"
|
|
137
|
-
# end
|
|
138
|
-
#
|
|
139
|
-
# === Resetting the Session
|
|
140
|
-
#
|
|
141
|
-
# Reseting the session to an empty hash is simple:
|
|
142
|
-
# Web.session.reset
|
|
143
|
-
#
|
|
144
|
-
# === Testing
|
|
145
|
-
#
|
|
146
|
-
# Narf takes testing very seriously. I consider supporting
|
|
147
|
-
# testing to be part of the contract when writing a IO library.
|
|
148
|
-
# See Web::Testing for more details.
|
|
149
|
-
#
|
|
150
|
-
module Web
|
|
151
|
-
class << self
|
|
152
|
-
# Web delegates to the current
|
|
153
|
-
# cgi object. This is the recommended
|
|
154
|
-
# way to use narf:
|
|
155
|
-
#
|
|
156
|
-
# Web["param"]
|
|
157
|
-
# Web << "hello world"
|
|
158
|
-
# Web.set_redirect( "http://www.narf-lib.org" )
|
|
159
|
-
# ...
|
|
160
|
-
#
|
|
161
|
-
# The documentation for these methods is on the Web::CGI object.
|
|
162
|
-
def method_missing(method, *args, &block)
|
|
163
|
-
CGI.get_cgi.send(method,*args, &block)
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def set_cgi( cgi )
|
|
167
|
-
CGI.set_cgi( cgi )
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def get_cgi
|
|
171
|
-
CGI.get_cgi
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def process(options={}, &block)
|
|
175
|
-
CGI.process(options, &block)
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
# this is a bit incomplete -- only encodes ampersands
|
|
180
|
-
def Web::html_encode(string)
|
|
181
|
-
return nil unless string
|
|
182
|
-
newstring = string.dup
|
|
183
|
-
{ /&/ => '&' }.each{ |char, entity|
|
|
184
|
-
newstring.gsub!( char, entity )
|
|
185
|
-
}
|
|
186
|
-
newstring
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
# Escape URL encode
|
|
190
|
-
# url_encoded_string = Web::escape("string")
|
|
191
|
-
def Web::escape(string)
|
|
192
|
-
return nil unless string
|
|
193
|
-
string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
|
|
194
|
-
'%' + $1.unpack('H2' * $1.size).join('%').upcase
|
|
195
|
-
end.tr(' ', '+')
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
# Unescape URL encoded
|
|
199
|
-
# string = Web::unescape("url encoded string")
|
|
200
|
-
def Web::unescape(string)
|
|
201
|
-
return nil unless string
|
|
202
|
-
string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
|
|
203
|
-
[$1.delete('%')].pack('H*')
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]
|
|
208
|
-
RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
|
|
209
|
-
# Make RFC1123 date string
|
|
210
|
-
# Web::rfc1123_date(Time.now) # => Sat, 01 Jan 2000 00:00:00 GMT
|
|
211
|
-
def Web::rfc1123_date(time)
|
|
212
|
-
t = time.clone.gmtime
|
|
213
|
-
return format("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT",
|
|
214
|
-
RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
|
|
215
|
-
t.hour, t.min, t.sec)
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
HTTP_STATUS = {"200" => "OK",
|
|
219
|
-
"206" => "Partial Content",
|
|
220
|
-
"300" => "Multiple Choices",
|
|
221
|
-
"301" => "Moved Permanently",
|
|
222
|
-
"302" => "Found",
|
|
223
|
-
"304" => "Not Modified",
|
|
224
|
-
"400" => "Bad Request",
|
|
225
|
-
"401" => "Authorization Required",
|
|
226
|
-
"403" => "Forbidden",
|
|
227
|
-
"404" => "Not Found",
|
|
228
|
-
"405" => "Method Not Allowed",
|
|
229
|
-
"406" => "Not Acceptable",
|
|
230
|
-
"411" => "Length Required",
|
|
231
|
-
"412" => "Precondition Failed",
|
|
232
|
-
"500" => "Internal Server Error",
|
|
233
|
-
"501" => "Method Not Implemented",
|
|
234
|
-
"502" => "Bad Gateway",
|
|
235
|
-
"506" => "Variant Also Negotiates"
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
TRACE_STYLESHEET=<<-EOF
|
|
240
|
-
<style type="text/css">
|
|
241
|
-
span.tracecontent { background-color:white; color:black;font: 10pt verdana, arial; }
|
|
242
|
-
span.tracecontent table { font: 10pt verdana, arial; cellspacing:0; cellpadding:0; margin-bottom:25}
|
|
243
|
-
span.tracecontent tr.subhead { background-color:cccccc;}
|
|
244
|
-
span.tracecontent th { padding:0,3,0,3 }
|
|
245
|
-
span.tracecontent th.alt { background-color:black; color:white; padding:3,3,2,3; }
|
|
246
|
-
span.tracecontent td { padding:0,3,0,3 }
|
|
247
|
-
span.tracecontent tr.alt { background-color:eeeeee }
|
|
248
|
-
span.tracecontent h1 { font: 24pt verdana, arial; margin:0,0,0,0}
|
|
249
|
-
span.tracecontent h2 { font: 18pt verdana, arial; margin:0,0,0,0}
|
|
250
|
-
span.tracecontent h3 { font: 12pt verdana, arial; margin:0,0,0,0}
|
|
251
|
-
span.tracecontent th a { color:darkblue; font: 8pt verdana, arial; }
|
|
252
|
-
span.tracecontent a { color:darkblue;text-decoration:none }
|
|
253
|
-
span.tracecontent a:hover { color:darkblue;text-decoration:underline; }
|
|
254
|
-
span.tracecontent div.outer { width:90%; margin:15,15,15,15}
|
|
255
|
-
span.tracecontent table.viewmenu td { background-color:006699; color:white; padding:0,5,0,5; }
|
|
256
|
-
span.tracecontent table.viewmenu td.end { padding:0,0,0,0; }
|
|
257
|
-
span.tracecontent table.viewmenu a {color:white; font: 8pt verdana, arial; }
|
|
258
|
-
span.tracecontent table.viewmenu a:hover {color:white; font: 8pt verdana, arial; }
|
|
259
|
-
span.tracecontent a.tinylink {color:darkblue; font: 8pt verdana, arial;text-decoration:underline;}
|
|
260
|
-
span.tracecontent a.link {color:darkblue; text-decoration:underline;}
|
|
261
|
-
span.tracecontent div.buffer {padding-top:7; padding-bottom:17;}
|
|
262
|
-
span.tracecontent .small { font: 8pt verdana, arial }
|
|
263
|
-
span.tracecontent table td { padding-right:20 }
|
|
264
|
-
span.tracecontent table td.nopad { padding-right:5 }
|
|
265
|
-
</style>
|
|
266
|
-
EOF
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
# wrapper for web errors
|
|
270
|
-
class Error < Exception # :nodoc:
|
|
271
|
-
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
module HTMLTree # :nodoc: all
|
|
277
|
-
module TreeElement
|
|
278
|
-
def get_elements aname, elements=[]
|
|
279
|
-
children.each { |element|
|
|
280
|
-
if element.tag == aname
|
|
281
|
-
elements.push element
|
|
282
|
-
else
|
|
283
|
-
element.get_elements aname, elements
|
|
284
|
-
end
|
|
285
|
-
}
|
|
286
|
-
elements
|
|
287
|
-
end
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
|