IOWA 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CONTRIBUTORS +14 -0
- data/README.md +23 -0
- data/RELEASE_NOTES +77 -0
- data/ToDo +21 -0
- data/components/CRUDList/CRUDList.html +13 -0
- data/components/CRUDList/CRUDList.iwa +136 -0
- data/components/Content/Content.html +0 -0
- data/components/Content/Content.iwa +143 -0
- data/components/Content/example/README +9 -0
- data/components/Content/example/cgi/iowa.cgi +10 -0
- data/components/Content/example/demo.rb +30 -0
- data/components/Content/example/doc/index.html +7 -0
- data/components/Content/example/iowa/Content.html +1 -0
- data/components/Content/example/iowa/Content.iwa +1 -0
- data/components/Content/example/iowa/Main.html +6 -0
- data/components/Content/example/iowa/Main.iwa +3 -0
- data/components/Content/example/iowa/_content/body +7 -0
- data/components/Content/example/iowa/_content/body2 +3 -0
- data/components/Content/example/iowa/_content/title +2 -0
- data/components/Content/example/iowa/app.cnf +8 -0
- data/components/Content/example/iowa/app.rb +8 -0
- data/components/Content/example/webrick.rb +38 -0
- data/components/Include/Include.html +1 -0
- data/components/Include/Include.iwa +30 -0
- data/components/Include/readme +5 -0
- data/components/JumpTo/JumpTo.html +8 -0
- data/components/JumpTo/JumpTo.iwa +8 -0
- data/components/JumpTo/readme +6 -0
- data/doc/Architecture.txt +6 -0
- data/doc/History.txt +33 -0
- data/doc/StandardDispatcher.txt +19 -0
- data/examples/blog/README +1 -0
- data/examples/hello_world/README +17 -0
- data/examples/hello_world/htdocs/hello_world_html.html +24 -0
- data/examples/hello_world/htdocs/hello_world_ruby.html +41 -0
- data/examples/hello_world/iowa/HelloWorld.html +14 -0
- data/examples/hello_world/iowa/HelloWorld.iwa +31 -0
- data/examples/hello_world/iowa/Index.html +16 -0
- data/examples/hello_world/iowa/Index.iwa +5 -0
- data/examples/hello_world/iowa/iowa_hello_world.cnf +19 -0
- data/examples/hello_world/iowa/iowa_hello_world.rb +5 -0
- data/examples/hello_world/iowa/mapfile.cnf +6 -0
- data/examples/hw1/iowa/Main.html +1 -0
- data/examples/hw1/iowa/README +9 -0
- data/examples/hw1/iowa/hw.rb +4 -0
- data/examples/hw2/iowa/Main.html +10 -0
- data/examples/hw2/iowa/Main.iwa +7 -0
- data/examples/hw2/iowa/README +16 -0
- data/examples/hw2/iowa/hw.rb +4 -0
- data/examples/hw3/iowa/Main.html +11 -0
- data/examples/hw3/iowa/Main.iwa +7 -0
- data/examples/hw3/iowa/README +22 -0
- data/examples/hw3/iowa/hw.rb +4 -0
- data/examples/hw4/iowa/Greetings.html +10 -0
- data/examples/hw4/iowa/Greetings.iwa +9 -0
- data/examples/hw4/iowa/Main.html +12 -0
- data/examples/hw4/iowa/Main.iwa +10 -0
- data/examples/hw4/iowa/README +28 -0
- data/examples/hw4/iowa/hw.rb +4 -0
- data/examples/hw5/iowa/Footer.html +2 -0
- data/examples/hw5/iowa/Greetings.html +4 -0
- data/examples/hw5/iowa/Greetings.iwa +12 -0
- data/examples/hw5/iowa/Header.html +6 -0
- data/examples/hw5/iowa/Main.html +12 -0
- data/examples/hw5/iowa/Main.iwa +13 -0
- data/examples/hw5/iowa/README +16 -0
- data/examples/hw5/iowa/hw.rb +4 -0
- data/examples/template_server/iowa/Content.iwa +121 -0
- data/examples/template_server/iowa/Content.view +0 -0
- data/examples/template_server/iowa/DBContentDispatcher.rb +112 -0
- data/examples/template_server/iowa/DBContentPage.html +3 -0
- data/examples/template_server/iowa/DBContentPage.iwa +85 -0
- data/examples/template_server/iowa/app.cnf +13 -0
- data/examples/template_server/iowa/app.rb +5 -0
- data/ext/Classifier/classifier.c +256 -0
- data/ext/Classifier/ext_help.h +14 -0
- data/ext/Classifier/extconf.rb +5 -0
- data/ext/Classifier/tst.h +40 -0
- data/ext/Classifier/tst_cleanup.c +24 -0
- data/ext/Classifier/tst_delete.c +146 -0
- data/ext/Classifier/tst_grow_node_free_list.c +38 -0
- data/ext/Classifier/tst_init.c +41 -0
- data/ext/Classifier/tst_insert.c +192 -0
- data/ext/Classifier/tst_search.c +68 -0
- data/ext/http11/README +11 -0
- data/ext/http11/ext_help.h +15 -0
- data/ext/http11/extconf.rb +5 -0
- data/ext/http11/http11.c +534 -0
- data/ext/http11/http11.c.dif +422 -0
- data/ext/http11/http11_parser.c +1243 -0
- data/ext/http11/http11_parser.c.dif +193 -0
- data/ext/http11/http11_parser.h +49 -0
- data/ext/http11/http11_parser.h.dif +20 -0
- data/ext/http11/http11_parser.rl +192 -0
- data/ext/httpmachine/Makefile +149 -0
- data/ext/httpmachine/extconf.rb +33 -0
- data/ext/httpmachine/http.cpp +430 -0
- data/ext/httpmachine/http.h +156 -0
- data/ext/httpmachine/rubyhttp.cpp +165 -0
- data/external/mime-types/LICENCE +18 -0
- data/external/mime-types/README +46 -0
- data/external/mime-types/doc/classes/MIME.html +120 -0
- data/external/mime-types/doc/classes/MIME/InvalidContentType.html +119 -0
- data/external/mime-types/doc/classes/MIME/Type.html +866 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000010.html +22 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000011.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000012.html +19 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000013.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000014.html +26 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000015.html +33 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000016.html +27 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000017.html +35 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000018.html +34 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000019.html +24 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000020.html +38 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000021.html +22 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000022.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000023.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000024.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000025.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000026.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000027.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000028.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000029.html +18 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000030.html +19 -0
- data/external/mime-types/doc/classes/MIME/Type.src/M000031.html +26 -0
- data/external/mime-types/doc/classes/MIME/Types.html +459 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000001.html +19 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000002.html +32 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000003.html +21 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000004.html +18 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000005.html +26 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000006.html +18 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000007.html +18 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000008.html +18 -0
- data/external/mime-types/doc/classes/MIME/Types.src/M000009.html +18 -0
- data/external/mime-types/doc/created.rid +1 -0
- data/external/mime-types/doc/files/ChangeLog.html +320 -0
- data/external/mime-types/doc/files/README.html +145 -0
- data/external/mime-types/doc/files/lib/mime/types_rb.html +101 -0
- data/external/mime-types/doc/fr_class_index.html +30 -0
- data/external/mime-types/doc/fr_file_index.html +29 -0
- data/external/mime-types/doc/fr_method_index.html +57 -0
- data/external/mime-types/doc/index.html +24 -0
- data/external/mime-types/doc/rdoc-style.css +208 -0
- data/external/mime-types/lib/mime/types.rb +1558 -0
- data/external/package.rb +672 -0
- data/external/test_support.rb +95 -0
- data/external/tmail/README +7 -0
- data/external/tmail/tmail.rb +4 -0
- data/external/tmail/tmail/address.rb +222 -0
- data/external/tmail/tmail/base64.rb +52 -0
- data/external/tmail/tmail/compat.rb +39 -0
- data/external/tmail/tmail/config.rb +50 -0
- data/external/tmail/tmail/encode.rb +447 -0
- data/external/tmail/tmail/header.rb +895 -0
- data/external/tmail/tmail/info.rb +14 -0
- data/external/tmail/tmail/loader.rb +1 -0
- data/external/tmail/tmail/mail.rb +869 -0
- data/external/tmail/tmail/mailbox.rb +386 -0
- data/external/tmail/tmail/mbox.rb +1 -0
- data/external/tmail/tmail/net.rb +260 -0
- data/external/tmail/tmail/obsolete.rb +123 -0
- data/external/tmail/tmail/parser.rb +1475 -0
- data/external/tmail/tmail/parser.y +372 -0
- data/external/tmail/tmail/port.rb +356 -0
- data/external/tmail/tmail/scanner.rb +17 -0
- data/external/tmail/tmail/scanner_r.rb +243 -0
- data/external/tmail/tmail/stringio.rb +256 -0
- data/external/tmail/tmail/textutils.rb +197 -0
- data/external/tmail/tmail/tmail.rb +1 -0
- data/external/tmail/tmail/utils.rb +23 -0
- data/external/win32-process/README +133 -0
- data/external/win32-process/lib/win32/process.rb +561 -0
- data/external/windows-pr/README +145 -0
- data/external/windows-pr/doc/conversion_guide.txt +25 -0
- data/external/windows-pr/lib/windows/clipboard.rb +72 -0
- data/external/windows-pr/lib/windows/console.rb +323 -0
- data/external/windows-pr/lib/windows/device_io.rb +88 -0
- data/external/windows-pr/lib/windows/directory.rb +80 -0
- data/external/windows-pr/lib/windows/error.rb +313 -0
- data/external/windows-pr/lib/windows/eventlog.rb +120 -0
- data/external/windows-pr/lib/windows/file.rb +349 -0
- data/external/windows-pr/lib/windows/filesystem.rb +16 -0
- data/external/windows-pr/lib/windows/handle.rb +31 -0
- data/external/windows-pr/lib/windows/library.rb +76 -0
- data/external/windows-pr/lib/windows/limits.rb +13 -0
- data/external/windows-pr/lib/windows/memory.rb +117 -0
- data/external/windows-pr/lib/windows/msvcrt/buffer.rb +48 -0
- data/external/windows-pr/lib/windows/msvcrt/file.rb +18 -0
- data/external/windows-pr/lib/windows/msvcrt/string.rb +46 -0
- data/external/windows-pr/lib/windows/national.rb +557 -0
- data/external/windows-pr/lib/windows/path.rb +296 -0
- data/external/windows-pr/lib/windows/pipe.rb +77 -0
- data/external/windows-pr/lib/windows/process.rb +171 -0
- data/external/windows-pr/lib/windows/registry.rb +238 -0
- data/external/windows-pr/lib/windows/security.rb +89 -0
- data/external/windows-pr/lib/windows/service.rb +183 -0
- data/external/windows-pr/lib/windows/shell.rb +88 -0
- data/external/windows-pr/lib/windows/sound.rb +52 -0
- data/external/windows-pr/lib/windows/synchronize.rb +161 -0
- data/external/windows-pr/lib/windows/system_info.rb +70 -0
- data/external/windows-pr/lib/windows/unicode.rb +138 -0
- data/external/windows-pr/lib/windows/window.rb +22 -0
- data/iowa.gemspec +45 -0
- data/microprojects/DiskCache/LICENSE +28 -0
- data/microprojects/DiskCache/README +17 -0
- data/microprojects/DiskCache/external/package.rb +608 -0
- data/microprojects/DiskCache/external/test_support.rb +8 -0
- data/microprojects/DiskCache/setup.rb +22 -0
- data/microprojects/DiskCache/src/iowa/Association.rb +67 -0
- data/microprojects/DiskCache/src/iowa/Constants.rb +159 -0
- data/microprojects/DiskCache/src/iowa/DiskStore.rb +377 -0
- data/microprojects/DiskCache/src/iowa/Hash.rb +63 -0
- data/microprojects/DiskCache/src/iowa/Lockfile.rb +575 -0
- data/microprojects/DiskCache/src/iowa/Mutex.rb +142 -0
- data/microprojects/DiskCache/src/iowa/caches/DiskCache.rb +605 -0
- data/microprojects/DiskCache/src/iowa/caches/LRUCache.rb +287 -0
- data/microprojects/DiskCache/test/TC_DiskCache.rb +218 -0
- data/microprojects/LRUCache/LICENSE +28 -0
- data/microprojects/LRUCache/README +13 -0
- data/microprojects/LRUCache/external/package.rb +608 -0
- data/microprojects/LRUCache/external/test_support.rb +8 -0
- data/microprojects/LRUCache/setup.rb +22 -0
- data/microprojects/LRUCache/src/iowa/Association.rb +57 -0
- data/microprojects/LRUCache/src/iowa/Constants.rb +159 -0
- data/microprojects/LRUCache/src/iowa/Hash.rb +63 -0
- data/microprojects/LRUCache/src/iowa/Mutex.rb +129 -0
- data/microprojects/LRUCache/src/iowa/caches/LRUCache.rb +287 -0
- data/microprojects/LRUCache/test/TC_LRUCache.rb +65 -0
- data/microprojects/LinkedList/LICENSE +28 -0
- data/microprojects/LinkedList/README +13 -0
- data/microprojects/LinkedList/external/package.rb +608 -0
- data/microprojects/LinkedList/external/test_support.rb +8 -0
- data/microprojects/LinkedList/setup.rb +22 -0
- data/microprojects/LinkedList/src/iowa/LinkedList.rb +165 -0
- data/microprojects/LinkedList/test/TC_LinkedList.rb +42 -0
- data/microprojects/README +8 -0
- data/setup.rb +116 -0
- data/share/iowa/app_skeleton/Main.html +8 -0
- data/share/iowa/app_skeleton/Main.iwa +15 -0
- data/share/iowa/app_skeleton/app.cnf +48 -0
- data/share/iowa/app_skeleton/app.rb +58 -0
- data/share/iowa/app_skeleton/models/model.rb +49 -0
- data/src/ihc.rb +223 -0
- data/src/iowa.cgi +29 -0
- data/src/iowa.rb +637 -0
- data/src/iowa/AbstractCache.rb +96 -0
- data/src/iowa/AcceptLanguage.rb +76 -0
- data/src/iowa/Application.rb +928 -0
- data/src/iowa/ApplicationStats.rb +72 -0
- data/src/iowa/Association.rb +67 -0
- data/src/iowa/BindingsParser.rb +62 -0
- data/src/iowa/Breakpoint.rb +273 -0
- data/src/iowa/CSS.rb +564 -0
- data/src/iowa/Client.rb +192 -0
- data/src/iowa/Component.rb +405 -0
- data/src/iowa/ComponentProxy.rb +26 -0
- data/src/iowa/Config.rb +21 -0
- data/src/iowa/Constants.rb +226 -0
- data/src/iowa/Context.rb +218 -0
- data/src/iowa/ContextLogger.rb +16 -0
- data/src/iowa/DbPool.rb +222 -0
- data/src/iowa/DetachedComponent.rb +18 -0
- data/src/iowa/Dispatcher.rb +27 -0
- data/src/iowa/DynamicElements.rb +471 -0
- data/src/iowa/Element.rb +100 -0
- data/src/iowa/Email.rb +287 -0
- data/src/iowa/Extensions/AllExtensions.rb +4 -0
- data/src/iowa/Extensions/Class.rb +94 -0
- data/src/iowa/Extensions/Date.rb +88 -0
- data/src/iowa/Extensions/DateTime.rb +88 -0
- data/src/iowa/Extensions/Hash.rb +22 -0
- data/src/iowa/Extensions/Kernel.rb +6 -0
- data/src/iowa/Extensions/Numeric.rb +47 -0
- data/src/iowa/Extensions/Object.rb +11 -0
- data/src/iowa/Extensions/String.rb +60 -0
- data/src/iowa/Extensions/Time.rb +89 -0
- data/src/iowa/Extensions/TimeExtensions.rb +6 -0
- data/src/iowa/Form.rb +368 -0
- data/src/iowa/Hash.rb +85 -0
- data/src/iowa/ISAAC.rb +175 -0
- data/src/iowa/ImageSize.rb +279 -0
- data/src/iowa/IowaComponentMixins.rb +7 -0
- data/src/iowa/JSON-lexer.rb +296 -0
- data/src/iowa/JSON-objects.rb +201 -0
- data/src/iowa/KeyValueCoding.rb +91 -0
- data/src/iowa/LinkedList.rb +175 -0
- data/src/iowa/Loader.rb +22 -0
- data/src/iowa/Lockfile.rb +575 -0
- data/src/iowa/Logger.rb +74 -0
- data/src/iowa/Monkey.rb +20 -0
- data/src/iowa/Mutex.rb +142 -0
- data/src/iowa/Policy.rb +70 -0
- data/src/iowa/Pool.rb +243 -0
- data/src/iowa/PrettyException.rb +1091 -0
- data/src/iowa/Request.rb +244 -0
- data/src/iowa/Response.rb +133 -0
- data/src/iowa/Session.rb +354 -0
- data/src/iowa/SessionStats.rb +78 -0
- data/src/iowa/String.rb +65 -0
- data/src/iowa/Tag.rb +101 -0
- data/src/iowa/TemplateParser.rb +236 -0
- data/src/iowa/Util.rb +314 -0
- data/src/iowa/Webcache.rb +122 -0
- data/src/iowa/caches/BiLevelCache.rb +65 -0
- data/src/iowa/caches/ClassLimitedCache.rb +67 -0
- data/src/iowa/caches/DiskCache.rb +609 -0
- data/src/iowa/caches/DiskStore.rb +380 -0
- data/src/iowa/caches/LRUCache-alternative.rb +155 -0
- data/src/iowa/caches/LRUCache.rb +290 -0
- data/src/iowa/caches/SimpleLRUCache.rb +112 -0
- data/src/iowa/dispatchers/StandardDispatcher.rb +396 -0
- data/src/iowa/dispatchers/StandardDispatcherWithClassifier.rb +93 -0
- data/src/iowa/js/iowa_jsonrpc.js +381 -0
- data/src/iowa/js/jsonrpc.js +187 -0
- data/src/iowa/js/jsonrpc_async.js +261 -0
- data/src/iowa/loaders/DiskLoader.rb +50 -0
- data/src/iowa/loggers/Analogger.rb +54 -0
- data/src/iowa/loggers/AsyncLogger.rb +54 -0
- data/src/iowa/loggers/BitBucket.rb +38 -0
- data/src/iowa/loggers/Log4R.rb +13 -0
- data/src/iowa/loggers/Log4rLogger.rb +48 -0
- data/src/iowa/loggers/Logger.rb +29 -0
- data/src/iowa/loggers/RubyLogger.rb +9 -0
- data/src/iowa/pools/DBConnectionPool.rb +53 -0
- data/src/iowa/request/Apache.rb +90 -0
- data/src/iowa/request/EMHybrid.rb +59 -0
- data/src/iowa/request/ENV.rb +80 -0
- data/src/iowa/request/FCGI.rb +68 -0
- data/src/iowa/request/HTTPMachine.rb +75 -0
- data/src/iowa/request/Mongrel.rb +68 -0
- data/src/iowa/request/WEBrick.rb +48 -0
- data/src/iowa/version.rb +3 -0
- data/src/iowa/webrick/HTTPServer.rb +43 -0
- data/src/iowa/webrick/WEBrickServlet.rb +28 -0
- data/src/iowa_fcgi_handler.rb +101 -0
- data/src/iowa_httpmachine.rb +141 -0
- data/src/iowa_hybrid.rb +193 -0
- data/src/iowa_hybrid_cluster.rb +231 -0
- data/src/iowa_mongrel.rb +136 -0
- data/src/iowa_webrick.rb +194 -0
- data/src/iowa_webrick_legacy.rb +104 -0
- data/src/mod_iowa.rb +104 -0
- data/tcss.rb +61 -0
- data/test/README.windows +12 -0
- data/test/TC_AcceptLanguage.rb +61 -0
- data/test/TC_AppConfig.rb +43 -0
- data/test/TC_AppConfig/cgi/iowa.cgi +7 -0
- data/test/TC_AppConfig/doc/index.html +1 -0
- data/test/TC_AppConfig/iowa/Main.html +4 -0
- data/test/TC_AppConfig/iowa/Main.iwa +17 -0
- data/test/TC_AppConfig/iowa/README +1 -0
- data/test/TC_AppConfig/iowa/app.cnf +19 -0
- data/test/TC_AppConfig/iowa/app.rb +8 -0
- data/test/TC_AppConfig/webrick.rb +38 -0
- data/test/TC_Association.rb +29 -0
- data/test/TC_BiLevelCache.rb +71 -0
- data/test/TC_CGI_Adaptor.rb +55 -0
- data/test/TC_CGI_Adaptor/cgi/iowa.cgi +7 -0
- data/test/TC_CGI_Adaptor/doc/index.html +1 -0
- data/test/TC_CGI_Adaptor/iowa/Main.html +8 -0
- data/test/TC_CGI_Adaptor/iowa/Main.iwa +14 -0
- data/test/TC_CGI_Adaptor/iowa/README +1 -0
- data/test/TC_CGI_Adaptor/iowa/app.cnf +8 -0
- data/test/TC_CGI_Adaptor/iowa/app.rb +8 -0
- data/test/TC_CGI_Adaptor/webrick.rb +38 -0
- data/test/TC_CSS.rb +660 -0
- data/test/TC_ClassLimitedCache.rb +89 -0
- data/test/TC_Classifier.rb +80 -0
- data/test/TC_DbPool.rb +127 -0
- data/test/TC_DiskCache.rb +218 -0
- data/test/TC_Hybrid.rb +58 -0
- data/test/TC_Hybrid/doc/thing.txt +1 -0
- data/test/TC_Hybrid/iowa/Main.html +3 -0
- data/test/TC_Hybrid/iowa/Main.iwa +7 -0
- data/test/TC_Hybrid/iowa/NewPage.html +1 -0
- data/test/TC_Hybrid/iowa/NewPage.iwa +5 -0
- data/test/TC_Hybrid/iowa/app.cnf +10 -0
- data/test/TC_Hybrid/iowa/app.rb +5 -0
- data/test/TC_IOWAFunctions/doc/Ajax1.html +1 -0
- data/test/TC_IOWAFunctions/doc/Ajax1.iwa +1 -0
- data/test/TC_IOWAFunctions/doc/index.html +1 -0
- data/test/TC_IOWAFunctions/doc/js/dojo.js +9686 -0
- data/test/TC_IOWAFunctions/iowa/Ajax1.html +40 -0
- data/test/TC_IOWAFunctions/iowa/Ajax1.iwa +23 -0
- data/test/TC_IOWAFunctions/iowa/AjaxWidget.iwa +19 -0
- data/test/TC_IOWAFunctions/iowa/AjaxWidget.view +22 -0
- data/test/TC_IOWAFunctions/iowa/DanielTest.html +9 -0
- data/test/TC_IOWAFunctions/iowa/DanielTest.iwa +10 -0
- data/test/TC_IOWAFunctions/iowa/IntervalWidget.html +1 -0
- data/test/TC_IOWAFunctions/iowa/IntervalWidget.iwa +14 -0
- data/test/TC_IOWAFunctions/iowa/Main.html +1 -0
- data/test/TC_IOWAFunctions/iowa/NestedRepeat1.html +12 -0
- data/test/TC_IOWAFunctions/iowa/NestedRepeat1.iwa +24 -0
- data/test/TC_IOWAFunctions/iowa/RPCResponse.iwa +7 -0
- data/test/TC_IOWAFunctions/iowa/RPCResponse.view +1 -0
- data/test/TC_IOWAFunctions/iowa/Repeat1.iwa +31 -0
- data/test/TC_IOWAFunctions/iowa/Repeat1.view +9 -0
- data/test/TC_IOWAFunctions/iowa/Repeat2.iwa +32 -0
- data/test/TC_IOWAFunctions/iowa/Repeat2.view +11 -0
- data/test/TC_IOWAFunctions/iowa/Repeat3.iwa +44 -0
- data/test/TC_IOWAFunctions/iowa/Repeat3.view +18 -0
- data/test/TC_IOWAFunctions/iowa/TesCon.html +1 -0
- data/test/TC_IOWAFunctions/iowa/TesCon.iwa +5 -0
- data/test/TC_IOWAFunctions/iowa/app.cnf +19 -0
- data/test/TC_IOWAFunctions/iowa/app.rb +9 -0
- data/test/TC_IOWAFunctions/iowa/mapfile.cnf +8 -0
- data/test/TC_ISAAC.rb +52 -0
- data/test/TC_ImageSize.rb +84 -0
- data/test/TC_ImageSize/img.bmp +0 -0
- data/test/TC_ImageSize/img.gif +0 -0
- data/test/TC_ImageSize/img.jpg +0 -0
- data/test/TC_ImageSize/img.pcx +0 -0
- data/test/TC_ImageSize/img.pgm +7144 -0
- data/test/TC_ImageSize/img.png +0 -0
- data/test/TC_ImageSize/img.ppm +0 -0
- data/test/TC_ImageSize/img.psd +0 -0
- data/test/TC_ImageSize/img.tiff +0 -0
- data/test/TC_ImageSize/img.xbm +22 -0
- data/test/TC_KeyValueCoding.rb +35 -0
- data/test/TC_LRUCache.rb +296 -0
- data/test/TC_LinkedList.rb +46 -0
- data/test/TC_Lockfile.rb +106 -0
- data/test/TC_Minimal.rb +45 -0
- data/test/TC_Minimal/app.cnf +8 -0
- data/test/TC_Minimal/cgi-bin/iowa.cgi +11 -0
- data/test/TC_Minimal/doc/index.html +1 -0
- data/test/TC_Minimal/iowa/Main.html +1 -0
- data/test/TC_Minimal/iowa/README +1 -0
- data/test/TC_Minimal/iowa/app.rb +3 -0
- data/test/TC_Minimal/webrick.rb +38 -0
- data/test/TC_Mongrel.rb +58 -0
- data/test/TC_Mongrel/doc/thing.txt +1 -0
- data/test/TC_Mongrel/iowa/Main.html +3 -0
- data/test/TC_Mongrel/iowa/Main.iwa +7 -0
- data/test/TC_Mongrel/iowa/NewPage.html +1 -0
- data/test/TC_Mongrel/iowa/NewPage.iwa +5 -0
- data/test/TC_Mongrel/iowa/app.cnf +10 -0
- data/test/TC_Mongrel/iowa/app.rb +5 -0
- data/test/TC_NoSubclass.rb +56 -0
- data/test/TC_NoSubclass/cgi/iowa.cgi +7 -0
- data/test/TC_NoSubclass/doc/index.html +1 -0
- data/test/TC_NoSubclass/iowa/Main.html +8 -0
- data/test/TC_NoSubclass/iowa/Main.iwa +14 -0
- data/test/TC_NoSubclass/iowa/README +1 -0
- data/test/TC_NoSubclass/iowa/app.cnf +8 -0
- data/test/TC_NoSubclass/iowa/app.rb +5 -0
- data/test/TC_NoSubclass/webrick.rb +38 -0
- data/test/TC_Pool.rb +139 -0
- data/test/TC_RenderedCache/doc/thing.txt +1 -0
- data/test/TC_RenderedCache/iowa/BigPage.html +1 -0
- data/test/TC_RenderedCache/iowa/BigPage.iwa +12 -0
- data/test/TC_RenderedCache/iowa/Main.html +3 -0
- data/test/TC_RenderedCache/iowa/Main.iwa +7 -0
- data/test/TC_RenderedCache/iowa/NewPage.html +1 -0
- data/test/TC_RenderedCache/iowa/NewPage.iwa +11 -0
- data/test/TC_RenderedCache/iowa/app.cnf +13 -0
- data/test/TC_RenderedCache/iowa/app.rb +5 -0
- data/test/TC_RenderedCache/iowa/mapfile.map +4 -0
- data/test/TC_ResourceURL.rb +73 -0
- data/test/TC_ResourceURL/iowa/Main.html +2 -0
- data/test/TC_ResourceURL/iowa/Main.iwa +10 -0
- data/test/TC_ResourceURL/iowa/app.cnf +10 -0
- data/test/TC_ResourceURL/iowa/app.rb +5 -0
- data/test/TC_SimpleDetached.rb +41 -0
- data/test/TC_StandardDispatcher.rb +362 -0
- data/test/TC_StandardDispatcherWithClassifier.rb +358 -0
- data/test/TC_String.rb +24 -0
- data/test/TC_Tag.rb +41 -0
- data/test/TC_Webrick.rb +56 -0
- data/test/TC_Webrick/doc/thing.txt +1 -0
- data/test/TC_Webrick/iowa/Main.html +3 -0
- data/test/TC_Webrick/iowa/Main.iwa +7 -0
- data/test/TC_Webrick/iowa/NewPage.html +1 -0
- data/test/TC_Webrick/iowa/NewPage.iwa +5 -0
- data/test/TC_Webrick/iowa/app.cnf +10 -0
- data/test/TC_Webrick/iowa/app.rb +5 -0
- data/test/tc_template.rb +15 -0
- data/test/tests.conf +19 -0
- data/utils/CVS/Entries +3 -0
- data/utils/CVS/Repository +1 -0
- data/utils/CVS/Root +1 -0
- data/utils/QuickCert-1.0.2.tar.gz +0 -0
- data/utils/QuickCert-1.0.2/InstalledFiles +7 -0
- data/utils/QuickCert-1.0.2/MANIFEST +10 -0
- data/utils/QuickCert-1.0.2/Makefile +15 -0
- data/utils/QuickCert-1.0.2/README +56 -0
- data/utils/QuickCert-1.0.2/bin/QuickCert +355 -0
- data/utils/QuickCert-1.0.2/config.save +12 -0
- data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/README +60 -0
- data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/drbssl_c.rb +26 -0
- data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/drbssl_s.rb +35 -0
- data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/qc_config +21 -0
- data/utils/QuickCert-1.0.2/lib/QuickCert/defaults.rb +28 -0
- data/utils/QuickCert-1.0.2/setup.rb +1312 -0
- data/utils/iowa_apps +422 -0
- data/utils/smtp_sink.rb +9 -0
- data/utils/startup_template.cnf +27 -0
- data/utils/startup_template.rb +73 -0
- metadata +551 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module Iowa
|
|
2
|
+
|
|
3
|
+
class ApplicationStats
|
|
4
|
+
|
|
5
|
+
def initialize(session_cache)
|
|
6
|
+
@creation_time = Time.now
|
|
7
|
+
@total_hits = 0
|
|
8
|
+
@rolling_interval = 60
|
|
9
|
+
@rolling_log = []
|
|
10
|
+
@session_cache = session_cache
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def creation_time
|
|
14
|
+
@creation_time
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def uptime
|
|
18
|
+
Time.now.to_i - creation_time.to_i
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def hits
|
|
22
|
+
@total_hits
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def hits_per_second
|
|
26
|
+
@total_hits > 0 ? (hits.to_f / uptime.to_f) : nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def sessions_maxsize
|
|
30
|
+
@session_cache.maxsize
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def sessions_size
|
|
34
|
+
@session_cache.size
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def sessions_queue
|
|
38
|
+
@session_cache.queue
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def session(k)
|
|
42
|
+
!@session_cache[k].nil? ? @session_cache[k].dup : nil
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def rolling_interval
|
|
46
|
+
@rolling_interval
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def rolling_interval=(i)
|
|
50
|
+
@rolling_interval = i
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def rolling_hits_total
|
|
54
|
+
@rolling_log.length
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def rolling_hits_per_second
|
|
58
|
+
(rolling_hits_total.to_f / rolling_interval.to_f)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def hit
|
|
62
|
+
@total_hits += 1
|
|
63
|
+
n = Time.now.to_i
|
|
64
|
+
@rolling_log.push n
|
|
65
|
+
|
|
66
|
+
while (@rolling_log[0] < (n - @rolling_interval) and @rolling_log.length > 0)
|
|
67
|
+
@rolling_log.shift
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module Iowa
|
|
2
|
+
class Association
|
|
3
|
+
|
|
4
|
+
def initialize(association)
|
|
5
|
+
@association = association
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def association
|
|
9
|
+
@association
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test(object)
|
|
13
|
+
true
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class PathAssociation < Association
|
|
18
|
+
def get(object,cache = false,stack_key = C_empty)
|
|
19
|
+
oca_key = "#{stack_key}/#{@association.hash}"
|
|
20
|
+
myval = object.cached_associations[oca_key]
|
|
21
|
+
if cache
|
|
22
|
+
usecache = myval ? true : false
|
|
23
|
+
usecache = false if myval.respond_to?(:empty?) and myval.empty?
|
|
24
|
+
end
|
|
25
|
+
if cache and usecache
|
|
26
|
+
myval
|
|
27
|
+
else
|
|
28
|
+
object.cached_associations[oca_key] = object.valueForKeyPath(@association)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def set(object, val)
|
|
33
|
+
object.takeValueForKeyPath(val, @association)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test(object)
|
|
37
|
+
object.existsKeyPath?(@association)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class LiteralAssociation < Association
|
|
42
|
+
|
|
43
|
+
def get(object = nil, cache = false, stack_key = nil)
|
|
44
|
+
unless @association.is_a?(Proc)
|
|
45
|
+
@association
|
|
46
|
+
else
|
|
47
|
+
@association.call(object.send(:binding))
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def set(object, val)
|
|
52
|
+
@association = val
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class FlexibleAssociation < Association
|
|
57
|
+
def FlexibleAssociation.new(association)
|
|
58
|
+
if association[0] == 123
|
|
59
|
+
association.sub!(/^\{/,C_empty)
|
|
60
|
+
association.sub!(/\}\s*$/,C_empty)
|
|
61
|
+
LiteralAssociation.new(Proc.new {|*ns| ns = ns[0] || binding ; eval(association,ns)})
|
|
62
|
+
else
|
|
63
|
+
PathAssociation.new(association)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Iowa
|
|
2
|
+
|
|
3
|
+
# Parse through binding declarations to resolve bindings.
|
|
4
|
+
# Resolved bindings are stored within an object variable,
|
|
5
|
+
# @bindings.
|
|
6
|
+
|
|
7
|
+
class BindingsParser
|
|
8
|
+
|
|
9
|
+
MainPattern = /([\w.]+)\s*(:\s*(\w+)\s*)?[{](.*?)^\s*[}]/m
|
|
10
|
+
|
|
11
|
+
BodyPattern = /(\w+)\s*=\s*(.+)/
|
|
12
|
+
|
|
13
|
+
TrimPattern = /\s*$/
|
|
14
|
+
|
|
15
|
+
# Apply the MainPattern to the binding data, passing matched
|
|
16
|
+
# information to processMatch().
|
|
17
|
+
|
|
18
|
+
def initialize(data, namespace_class = nil)
|
|
19
|
+
@bindings = {}
|
|
20
|
+
@namespace_class = namespace_class
|
|
21
|
+
while data.sub!(MainPattern, "")
|
|
22
|
+
processMatch($1, $3, $4)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Create the defined binding.
|
|
27
|
+
|
|
28
|
+
def processMatch(id, klass, data)
|
|
29
|
+
bindingHash = {}
|
|
30
|
+
|
|
31
|
+
if klass
|
|
32
|
+
bindingHash[Cklass] = klass
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
while data.sub!(BodyPattern, C_empty)
|
|
36
|
+
key, value = $1, $2
|
|
37
|
+
value.sub!(TrimPattern,C_empty)
|
|
38
|
+
# Just to make sure it is clear, if the binding value either
|
|
39
|
+
# starts with a digit, a quote character, or a colon, then
|
|
40
|
+
# it is assumed to be literal binding. The value will be
|
|
41
|
+
# ran through eval, and whatever is returned will be used
|
|
42
|
+
# as the value of the binding.
|
|
43
|
+
if /^[a-zA-Z]/.match(value)
|
|
44
|
+
bindingHash[key] = PathAssociation.new(value)
|
|
45
|
+
else
|
|
46
|
+
value.sub!(/^\{/,C_empty)
|
|
47
|
+
value.sub!(/\}\s*$/,C_empty)
|
|
48
|
+
bindingHash[key] = LiteralAssociation.new(Proc.new {|*ns| ns = ns[0] || binding ; eval(value,ns)})
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
@bindings[id] = bindingHash
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Return the Hash of bindings.
|
|
56
|
+
|
|
57
|
+
def bindings
|
|
58
|
+
@bindings
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
require 'iowa/binding_of_caller'
|
|
2
|
+
require 'irb'
|
|
3
|
+
require 'drb'
|
|
4
|
+
|
|
5
|
+
module Breakpoint
|
|
6
|
+
extend self
|
|
7
|
+
|
|
8
|
+
# This will pop up an interactive ruby session at a
|
|
9
|
+
# pre-defined break point in a Ruby application. In
|
|
10
|
+
# this session you can examine the environment of
|
|
11
|
+
# the break point.
|
|
12
|
+
#
|
|
13
|
+
# You can get a list of variables in the context using
|
|
14
|
+
# local_variables via +local_variables+. You can then
|
|
15
|
+
# examine their values by typing their names.
|
|
16
|
+
#
|
|
17
|
+
# You can have a look at the call stack via +caller+.
|
|
18
|
+
#
|
|
19
|
+
# breakpoints can also return a value. They will execute
|
|
20
|
+
# a supplied block for getting a default return value.
|
|
21
|
+
# A custom value can be returned from the session by doing
|
|
22
|
+
# +throw(:debug_return, value)+.
|
|
23
|
+
#
|
|
24
|
+
# You can also give names to break points which will be
|
|
25
|
+
# used in the message that is displayed upon execution
|
|
26
|
+
# of them.
|
|
27
|
+
#
|
|
28
|
+
# Here's a sample of how breakpoints should be placed:
|
|
29
|
+
#
|
|
30
|
+
# class Person
|
|
31
|
+
# def initialize(name, age)
|
|
32
|
+
# @name, @age = name, age
|
|
33
|
+
# breakpoint("Person#initialize")
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
# attr_reader :age
|
|
37
|
+
# def name
|
|
38
|
+
# breakpoint("Person#name") { @name }
|
|
39
|
+
# end
|
|
40
|
+
# end
|
|
41
|
+
#
|
|
42
|
+
# person = Person.new("Random Person", 23)
|
|
43
|
+
# puts "Name: #{person.name}"
|
|
44
|
+
#
|
|
45
|
+
# And here is a sample debug session:
|
|
46
|
+
#
|
|
47
|
+
# Executing break point "Person#initialize" at file.rb:4 in `initialize'
|
|
48
|
+
# irb(#<Person:0x292fbe8>):001:0> local_variables
|
|
49
|
+
# => ["name", "age", "_", "__"]
|
|
50
|
+
# irb(#<Person:0x292fbe8>):002:0> [name, age]
|
|
51
|
+
# => ["Random Person", 23]
|
|
52
|
+
# irb(#<Person:0x292fbe8>):003:0> [@name, @age]
|
|
53
|
+
# => ["Random Person", 23]
|
|
54
|
+
# irb(#<Person:0x292fbe8>):004:0> self
|
|
55
|
+
# => #<Person:0x292fbe8 @age=23, @name="Random Person">
|
|
56
|
+
# irb(#<Person:0x292fbe8>):005:0> @age += 1; self
|
|
57
|
+
# => #<Person:0x292fbe8 @age=24, @name="Random Person">
|
|
58
|
+
# irb(#<Person:0x292fbe8>):006:0> exit
|
|
59
|
+
# Executing break point "Person#name" at file.rb:9 in `name'
|
|
60
|
+
# irb(#<Person:0x292fbe8>):001:0> throw(:debug_return, "Overriden name")
|
|
61
|
+
# Name: Overriden name
|
|
62
|
+
def breakpoint(id = nil, context = nil, &block)
|
|
63
|
+
callstack = caller
|
|
64
|
+
callstack.slice!(0, 3) if callstack.first["breakpoint"]
|
|
65
|
+
file, line, method = *callstack.first.match(/^(.+?):(\d+)(?::in `(.*?)')?/).captures
|
|
66
|
+
|
|
67
|
+
message = "Executing break point " + (id ? "#{id.inspect} " : "") +
|
|
68
|
+
"at #{file}:#{line}" + (method ? " in `#{method}'" : "")
|
|
69
|
+
|
|
70
|
+
if context then
|
|
71
|
+
return handle_breakpoint(context, message, &block)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
Binding.of_caller do |binding_context|
|
|
75
|
+
handle_breakpoint(binding_context, message, &block)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def handle_breakpoint(context, message, &block) # :nodoc:
|
|
80
|
+
catch(:debug_return) do |value|
|
|
81
|
+
if not use_drb? then
|
|
82
|
+
puts message
|
|
83
|
+
IRB.start(nil, IRB::WorkSpace.new(context))
|
|
84
|
+
else
|
|
85
|
+
@drb_service.add_breakpoint(context, message)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
block.call if block
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
private :handle_breakpoint
|
|
92
|
+
|
|
93
|
+
# This asserts that the block evaluates to true.
|
|
94
|
+
# If it doesn't evaluate to true a breakpoint will
|
|
95
|
+
# automatically be created at that execution point.
|
|
96
|
+
#
|
|
97
|
+
# You can disable assert checking by setting
|
|
98
|
+
# Breakpoint.optimize_asserts to true before
|
|
99
|
+
# loading the breakpoint.rb library. (It will still
|
|
100
|
+
# be enabled when Ruby is run via the -d argument.)
|
|
101
|
+
#
|
|
102
|
+
# Example:
|
|
103
|
+
# person_name = "Foobar"
|
|
104
|
+
# assert { not person_name.nil? }
|
|
105
|
+
def assert(context = nil, &condition)
|
|
106
|
+
return if Breakpoint.optimize_asserts and not $DEBUG
|
|
107
|
+
return if yield
|
|
108
|
+
|
|
109
|
+
callstack = caller
|
|
110
|
+
callstack.slice!(0, 3) if callstack.first["assert"]
|
|
111
|
+
file, line, method = *callstack.first.match(/^(.+?):(\d+)(?::in `(.*?)')?/).captures
|
|
112
|
+
|
|
113
|
+
message = "Assert failed at #{file}:#{line}#{" in `#{method}'" if method}. " +
|
|
114
|
+
"Executing implicit breakpoint."
|
|
115
|
+
|
|
116
|
+
if context then
|
|
117
|
+
return handle_breakpoint(context, message)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
Binding.of_caller do |context|
|
|
121
|
+
handle_breakpoint(context, message)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Whether asserts should be ignored if not in debug mode.
|
|
126
|
+
# Debug mode can be enabled by running ruby with the -d
|
|
127
|
+
# switch or by setting $DEBUG to true.
|
|
128
|
+
attr_accessor :optimize_asserts
|
|
129
|
+
self.optimize_asserts = false
|
|
130
|
+
|
|
131
|
+
class DRbService
|
|
132
|
+
class FinishedException < Exception; end
|
|
133
|
+
|
|
134
|
+
include DRbUndumped
|
|
135
|
+
|
|
136
|
+
def initialize
|
|
137
|
+
@breakpoint = @result = nil
|
|
138
|
+
@has_breakpoint = @is_done = false
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def add_breakpoint(context, message)
|
|
142
|
+
workspace = IRB::WorkSpace.new(context)
|
|
143
|
+
workspace.extend(DRbUndumped)
|
|
144
|
+
|
|
145
|
+
@breakpoint = [workspace, message]
|
|
146
|
+
@has_breakpoint = true
|
|
147
|
+
|
|
148
|
+
until @is_done; end
|
|
149
|
+
@is_done = false
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def handle_breakpoint(&block)
|
|
153
|
+
until @has_breakpoint; end
|
|
154
|
+
@has_breakpoint = false
|
|
155
|
+
|
|
156
|
+
#begin
|
|
157
|
+
yield(@breakpoint)
|
|
158
|
+
#rescue FinishedException
|
|
159
|
+
#end
|
|
160
|
+
|
|
161
|
+
@is_done = true
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Will run Breakpoint in DRb mode. This will spawn a server
|
|
166
|
+
# that can be attached to via the [ TODO: command ] command
|
|
167
|
+
# whenever a breakpoint is executed. This is useful when you
|
|
168
|
+
# are debugging CGI applications or other applications where
|
|
169
|
+
# you can't access debug sessions via the standard input and
|
|
170
|
+
# output of your application.
|
|
171
|
+
#
|
|
172
|
+
# You can specify an URI where the DRb server will run at.
|
|
173
|
+
# This way you can specify the port the server runs on. The
|
|
174
|
+
# default URI is druby://localhost:42531.
|
|
175
|
+
#
|
|
176
|
+
# Please note that breakpoints will be skipped silently in
|
|
177
|
+
# case the DRb server can not spawned. (This can happen if
|
|
178
|
+
# the port is already used by another instance of your
|
|
179
|
+
# application on CGI or another application.)
|
|
180
|
+
def activate_drb(uri = 'druby://localhost:42531')
|
|
181
|
+
@use_drb = true
|
|
182
|
+
@drb_service = DRbService.new
|
|
183
|
+
DRb.start_service(uri, @drb_service)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def use_drb?
|
|
187
|
+
@use_drb == true
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
module IRB
|
|
192
|
+
def IRB.start(ap_path = nil, main_context = nil, workspace = nil)
|
|
193
|
+
$0 = File::basename(ap_path, ".rb") if ap_path
|
|
194
|
+
|
|
195
|
+
# suppress some warnings about redefined constants
|
|
196
|
+
old_verbose, $VERBOSE = $VERBOSE, nil
|
|
197
|
+
IRB.setup(ap_path)
|
|
198
|
+
$VERBOSE = old_verbose
|
|
199
|
+
|
|
200
|
+
if @CONF[:SCRIPT] then
|
|
201
|
+
irb = Irb.new(main_context, @CONF[:SCRIPT])
|
|
202
|
+
else
|
|
203
|
+
irb = Irb.new(main_context)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
if workspace then
|
|
207
|
+
irb.context.workspace = workspace
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
|
|
211
|
+
@CONF[:MAIN_CONTEXT] = irb.context
|
|
212
|
+
|
|
213
|
+
trap("SIGINT") do
|
|
214
|
+
irb.signal_handle
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
catch(:IRB_EXIT) do
|
|
218
|
+
irb.eval_input
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
class << self; alias :old_CurrentContext :CurrentContext; end
|
|
223
|
+
def IRB.CurrentContext
|
|
224
|
+
if old_CurrentContext.nil? and Breakpoint.use_drb? then
|
|
225
|
+
result = Object.new
|
|
226
|
+
def result.last_value; end
|
|
227
|
+
return result
|
|
228
|
+
else
|
|
229
|
+
old_CurrentContext
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
class Context
|
|
234
|
+
alias :old_evaluate :evaluate
|
|
235
|
+
def evaluate(line, line_no)
|
|
236
|
+
if line.chomp == "exit" then
|
|
237
|
+
exit
|
|
238
|
+
else
|
|
239
|
+
old_evaluate(line, line_no)
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
class WorkSpace
|
|
245
|
+
alias :old_evaluate :evaluate
|
|
246
|
+
|
|
247
|
+
def evaluate(*args)
|
|
248
|
+
if Breakpoint.use_drb? then
|
|
249
|
+
result = old_evaluate(*args)
|
|
250
|
+
result.extend(DRbUndumped) rescue nil
|
|
251
|
+
return result
|
|
252
|
+
else
|
|
253
|
+
old_evaluate(*args)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
class DRb::DRbObject
|
|
260
|
+
undef :inspect
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def breakpoint(id = nil, &block)
|
|
264
|
+
Binding.of_caller do |context|
|
|
265
|
+
Breakpoint.breakpoint(id, context, &block)
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def assert(&block)
|
|
270
|
+
Binding.of_caller do |context|
|
|
271
|
+
Breakpoint.assert(context, &block)
|
|
272
|
+
end
|
|
273
|
+
end
|