carats 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +2 -0
- data/LICENSE +5 -0
- data/README +67 -0
- data/Reapfile +72 -0
- data/ToDo +24 -0
- data/bench/b_harray.rb +49 -0
- data/bench/b_range.rb +64 -0
- data/demo/ansicolor/cdiff.rb +20 -0
- data/demo/ansicolor/example.rb +82 -0
- data/demo/io-reactor/chatserver.rb +347 -0
- data/doc/classes/Array.html +172 -0
- data/doc/classes/BBCode.html +638 -0
- data/doc/classes/BinaryReader.html +675 -0
- data/doc/classes/Binding.html +223 -0
- data/doc/classes/ByteOrder.html +284 -0
- data/doc/classes/Class.html +189 -0
- data/doc/classes/Constant.html +785 -0
- data/doc/classes/Constant/CGS.html +609 -0
- data/doc/classes/Continuation.html +113 -0
- data/doc/classes/Coroutine.html +387 -0
- data/doc/classes/CountingSemaphore.html +337 -0
- data/doc/classes/CrossCase.html +561 -0
- data/doc/classes/DynamicMixin.html +185 -0
- data/doc/classes/EnumerableWithArgs.html +550 -0
- data/doc/classes/Expect.html +428 -0
- data/doc/classes/Expect/DefaultChain.html +113 -0
- data/doc/classes/Expect/SeparatedPattern.html +223 -0
- data/doc/classes/Expect/Timeout.html +167 -0
- data/doc/classes/Expect/UnmatchedMessage.html +160 -0
- data/doc/classes/FileList.html +833 -0
- data/doc/classes/FloatString.html +534 -0
- data/doc/classes/Functor.html +211 -0
- data/doc/classes/HArray.html +1872 -0
- data/doc/classes/HTML.html +328 -0
- data/doc/classes/Heap.html +683 -0
- data/doc/classes/Heap/EmptyHeapException.html +111 -0
- data/doc/classes/Heap/Max.html +176 -0
- data/doc/classes/Heap/Min.html +176 -0
- data/doc/classes/IO.html +108 -0
- data/doc/classes/IO/Reactor.html +790 -0
- data/doc/classes/IO/Redirect.html +289 -0
- data/doc/classes/Infinity.html +320 -0
- data/doc/classes/Interval.html +1014 -0
- data/doc/classes/InvalidNackError.html +161 -0
- data/doc/classes/Kernel.html +204 -0
- data/doc/classes/Lisp.html +1132 -0
- data/doc/classes/Lisp/DottedPair.html +379 -0
- data/doc/classes/Lisp/Format.html +178 -0
- data/doc/classes/Lisp/Format/ArgumentError.html +126 -0
- data/doc/classes/Lisp/Format/Directives.html +155 -0
- data/doc/classes/Lisp/Format/Directives/ArgJump.html +178 -0
- data/doc/classes/Lisp/Format/Directives/Ascii.html +119 -0
- data/doc/classes/Lisp/Format/Directives/BeginCaseConversion.html +185 -0
- data/doc/classes/Lisp/Format/Directives/BeginConditional.html +307 -0
- data/doc/classes/Lisp/Format/Directives/BeginIteration.html +338 -0
- data/doc/classes/Lisp/Format/Directives/Binary.html +157 -0
- data/doc/classes/Lisp/Format/Directives/Character.html +228 -0
- data/doc/classes/Lisp/Format/Directives/CharacterDirective.html +203 -0
- data/doc/classes/Lisp/Format/Directives/ClauseSeparator.html +166 -0
- data/doc/classes/Lisp/Format/Directives/Decimal.html +119 -0
- data/doc/classes/Lisp/Format/Directives/Directive.html +397 -0
- data/doc/classes/Lisp/Format/Directives/DollarFP.html +205 -0
- data/doc/classes/Lisp/Format/Directives/EndCaseConversion.html +174 -0
- data/doc/classes/Lisp/Format/Directives/EndConditional.html +159 -0
- data/doc/classes/Lisp/Format/Directives/EndIteration.html +163 -0
- data/doc/classes/Lisp/Format/Directives/ExpFP.html +252 -0
- data/doc/classes/Lisp/Format/Directives/FFFP.html +224 -0
- data/doc/classes/Lisp/Format/Directives/Factory.html +180 -0
- data/doc/classes/Lisp/Format/Directives/FreshLine.html +175 -0
- data/doc/classes/Lisp/Format/Directives/GeneralFP.html +265 -0
- data/doc/classes/Lisp/Format/Directives/Hexadecimal.html +157 -0
- data/doc/classes/Lisp/Format/Directives/Indirection.html +183 -0
- data/doc/classes/Lisp/Format/Directives/Literal.html +187 -0
- data/doc/classes/Lisp/Format/Directives/NewLine.html +158 -0
- data/doc/classes/Lisp/Format/Directives/NewPage.html +158 -0
- data/doc/classes/Lisp/Format/Directives/Number.html +243 -0
- data/doc/classes/Lisp/Format/Directives/Octal.html +157 -0
- data/doc/classes/Lisp/Format/Directives/Plural.html +177 -0
- data/doc/classes/Lisp/Format/Directives/Print.html +237 -0
- data/doc/classes/Lisp/Format/Directives/Radix.html +432 -0
- data/doc/classes/Lisp/Format/Directives/SExpression.html +157 -0
- data/doc/classes/Lisp/Format/Directives/SkipWhitespace.html +165 -0
- data/doc/classes/Lisp/Format/Directives/Tabulate.html +198 -0
- data/doc/classes/Lisp/Format/Directives/Tilde.html +158 -0
- data/doc/classes/Lisp/Format/Directives/UnknownDirectiveError.html +117 -0
- data/doc/classes/Lisp/Format/Formatter.html +193 -0
- data/doc/classes/Lisp/Format/IncompleteParameterError.html +119 -0
- data/doc/classes/Lisp/Format/IndexError.html +126 -0
- data/doc/classes/Lisp/Format/Lexer.html +479 -0
- data/doc/classes/Lisp/Format/MalformedError.html +119 -0
- data/doc/classes/Lisp/Format/MissingParameterError.html +119 -0
- data/doc/classes/Lisp/Format/ModifierError.html +119 -0
- data/doc/classes/Lisp/Format/Output.html +239 -0
- data/doc/classes/Lisp/Format/ParameterError.html +126 -0
- data/doc/classes/Lisp/Format/Parameters.html +123 -0
- data/doc/classes/Lisp/Format/Parameters/Argument.html +172 -0
- data/doc/classes/Lisp/Format/Parameters/ArgumentCount.html +159 -0
- data/doc/classes/Lisp/Format/Parameters/Character.html +119 -0
- data/doc/classes/Lisp/Format/Parameters/Default.html +120 -0
- data/doc/classes/Lisp/Format/Parameters/Integer.html +119 -0
- data/doc/classes/Lisp/Format/Parameters/Parameter.html +206 -0
- data/doc/classes/Lisp/Format/Parser.html +212 -0
- data/doc/classes/Lisp/Format/Positioned.html +166 -0
- data/doc/classes/Lisp/Format/State.html +455 -0
- data/doc/classes/Lisp/Format/SyntaxError.html +126 -0
- data/doc/classes/Method.html +274 -0
- data/doc/classes/Method/DuckHunter.html +281 -0
- data/doc/classes/Module.html +709 -0
- data/doc/classes/Multiton.html +284 -0
- data/doc/classes/Multiton/New.html +164 -0
- data/doc/classes/Multiton/Semi.html +155 -0
- data/doc/classes/NackClass.html +322 -0
- data/doc/classes/NilClass.html +231 -0
- data/doc/classes/NilComparable.html +179 -0
- data/doc/classes/NotCopyable.html +273 -0
- data/doc/classes/Object.html +261 -0
- data/doc/classes/OpenStructable.html +346 -0
- data/doc/classes/OrderedHash.html +939 -0
- data/doc/classes/Parser.html +515 -0
- data/doc/classes/Parser/Main.html +178 -0
- data/doc/classes/Parser/Marker.html +475 -0
- data/doc/classes/Parser/Registry.html +354 -0
- data/doc/classes/Parser/Token.html +399 -0
- data/doc/classes/Parser/UnitToken.html +222 -0
- data/doc/classes/Ref.html +230 -0
- data/doc/classes/SimpleStringIO.html +183 -0
- data/doc/classes/StaticHash.html +202 -0
- data/doc/classes/String.html +172 -0
- data/doc/classes/Struct.html +181 -0
- data/doc/classes/SuperStruct.html +382 -0
- data/doc/classes/Term.html +156 -0
- data/doc/classes/Term/ANSIColor.html +185 -0
- data/doc/classes/Text.html +138 -0
- data/doc/classes/Text/Soundex.html +222 -0
- data/doc/classes/TextTagIterator.html +911 -0
- data/doc/classes/Time.html +119 -0
- data/doc/classes/Time/Limit.html +303 -0
- data/doc/classes/Time/Limit/Dummy.html +181 -0
- data/doc/classes/Timer.html +351 -0
- data/doc/classes/TracePoint.html +532 -0
- data/doc/classes/Tuple.html +178 -0
- data/doc/classes/Uninheritable.html +213 -0
- data/doc/classes/Version.html +783 -0
- data/doc/created.rid +1 -0
- data/doc/files/LICENSE.html +113 -0
- data/doc/files/README.html +201 -0
- data/doc/files/lib/carat/1st_rb.html +107 -0
- data/doc/files/lib/carat/ansicolor_rb.html +146 -0
- data/doc/files/lib/carat/attr_rb.html +101 -0
- data/doc/files/lib/carat/bbcode_rb.html +152 -0
- data/doc/files/lib/carat/binaryreader_rb.html +114 -0
- data/doc/files/lib/carat/binding-of-caller_rb.html +108 -0
- data/doc/files/lib/carat/byteorder_rb.html +107 -0
- data/doc/files/lib/carat/constant_rb.html +167 -0
- data/doc/files/lib/carat/coroutine_rb.html +156 -0
- data/doc/files/lib/carat/crosscase_rb.html +224 -0
- data/doc/files/lib/carat/duckhunter_rb.html +165 -0
- data/doc/files/lib/carat/dynamic-mixin_rb.html +101 -0
- data/doc/files/lib/carat/enumerable-args_rb.html +140 -0
- data/doc/files/lib/carat/expect_rb.html +137 -0
- data/doc/files/lib/carat/filelist_rb.html +130 -0
- data/doc/files/lib/carat/floatstring_rb.html +126 -0
- data/doc/files/lib/carat/functor_rb.html +140 -0
- data/doc/files/lib/carat/harray_rb.html +128 -0
- data/doc/files/lib/carat/heap_rb.html +154 -0
- data/doc/files/lib/carat/html-helpers_rb.html +116 -0
- data/doc/files/lib/carat/infinity_rb.html +142 -0
- data/doc/files/lib/carat/init_rb.html +127 -0
- data/doc/files/lib/carat/interval_rb.html +162 -0
- data/doc/files/lib/carat/io-reactor_rb.html +211 -0
- data/doc/files/lib/carat/io-redirect_rb.html +132 -0
- data/doc/files/lib/carat/lisp-format_rb.html +187 -0
- data/doc/files/lib/carat/lisp_rb.html +152 -0
- data/doc/files/lib/carat/macro_rb.html +129 -0
- data/doc/files/lib/carat/multiton_rb.html +178 -0
- data/doc/files/lib/carat/nack_rb.html +193 -0
- data/doc/files/lib/carat/nil-comparable_rb.html +126 -0
- data/doc/files/lib/carat/nil-missing_rb.html +101 -0
- data/doc/files/lib/carat/notcopyable_rb.html +166 -0
- data/doc/files/lib/carat/orderedhash_rb.html +107 -0
- data/doc/files/lib/carat/ostructable_rb.html +157 -0
- data/doc/files/lib/carat/parser-old_rb.html +239 -0
- data/doc/files/lib/carat/parser_rb.html +244 -0
- data/doc/files/lib/carat/ref_rb.html +107 -0
- data/doc/files/lib/carat/semaphore_rb.html +132 -0
- data/doc/files/lib/carat/snapshot_rb.html +152 -0
- data/doc/files/lib/carat/soundex_rb.html +128 -0
- data/doc/files/lib/carat/sstruct_rb.html +142 -0
- data/doc/files/lib/carat/statichash_rb.html +150 -0
- data/doc/files/lib/carat/tagiter_rb.html +236 -0
- data/doc/files/lib/carat/timelimit_rb.html +136 -0
- data/doc/files/lib/carat/timer_rb.html +153 -0
- data/doc/files/lib/carat/tracepoint_rb.html +160 -0
- data/doc/files/lib/carat/tuple_rb.html +123 -0
- data/doc/files/lib/carat/uninheritable_rb.html +101 -0
- data/doc/files/lib/carat/version_rb.html +141 -0
- data/doc/fr_class_index.html +159 -0
- data/doc/fr_file_index.html +78 -0
- data/doc/fr_method_index.html +663 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/carat-dev/README +11 -0
- data/lib/carat-dev/access-blocks/access_blocks.rb +42 -0
- data/lib/carat-dev/association/association.rb +70 -0
- data/lib/carat-dev/blankslate/blankslate.rb +51 -0
- data/lib/carat-dev/breakpoint.rb +518 -0
- data/lib/carat-dev/class-constructor/constructor_methods.rb +78 -0
- data/lib/carat-dev/class-constructor/tc_constructor.rb +35 -0
- data/lib/carat-dev/closecall/closecall-test.rb +39 -0
- data/lib/carat-dev/closecall/closecall.rb +101 -0
- data/lib/carat-dev/commandrunner/commandrunner.rb +100 -0
- data/lib/carat-dev/conditional/conditionals.rb +106 -0
- data/lib/carat-dev/daemon/daemon.rb +70 -0
- data/lib/carat-dev/detach/detach.rb +363 -0
- data/lib/carat-dev/detach/tc_detach.rb +57 -0
- data/lib/carat-dev/import-module/import-module-0.81.tar.gz +0 -0
- data/lib/carat-dev/import-module/import-module-0.81/LICENSE +1 -0
- data/lib/carat-dev/import-module/import-module-0.81/Makefile +11 -0
- data/lib/carat-dev/import-module/import-module-0.81/README +4 -0
- data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-hash.rb +49 -0
- data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-pip.rb +71 -0
- data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-unbound-method.rb +36 -0
- data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.html +293 -0
- data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.rd +306 -0
- data/lib/carat-dev/import-module/import-module-0.81/doc/README.html +290 -0
- data/lib/carat-dev/import-module/import-module-0.81/doc/README.rd +303 -0
- data/lib/carat-dev/import-module/import-module-0.81/doc/style.css +85 -0
- data/lib/carat-dev/import-module/import-module-0.81/install.rb +99 -0
- data/lib/carat-dev/import-module/import-module-0.81/lib/import-module-single-thread.rb +84 -0
- data/lib/carat-dev/import-module/import-module-0.81/lib/import-module.rb +493 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/Makefile +2 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/test +91 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/test-import-module.rb +936 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/test-import_scope.rb +33 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/test-scope_import.rb +33 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/test-time.rb +184 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/test.sh +91 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/time.rb +135 -0
- data/lib/carat-dev/import-module/import-module-0.81/test/times-do.sh +10 -0
- data/lib/carat-dev/interface_work/SCRAP/i-contracts.rb +37 -0
- data/lib/carat-dev/interface_work/SCRAP/interface.rb +105 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0.zip +0 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/CHANGES +3 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/MANIFEST +15 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/README +32 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.rd +73 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.txt +94 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/install.rb +16 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/lib/interface.rb +50 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/tc_interface.rb +51 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test.rb +29 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_instance.rb +24 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_sub.rb +29 -0
- data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_unrequire.rb +28 -0
- data/lib/carat-dev/interface_work/contracts/contract.zip +0 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.html +376 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000001.html +23 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000002.html +18 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000003.html +19 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000004.html +29 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000005.html +18 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000006.html +18 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractError.html +142 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractException.html +153 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractMismatch.html +125 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.html +157 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.src/M000007.html +112 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/created.rid +1 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/assertions_rb.html +109 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/exception_rb.html +108 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/integration_rb.html +108 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/overrides_rb.html +109 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract_rb.html +114 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/fr_class_index.html +31 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/fr_file_index.html +31 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/fr_method_index.html +33 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/index.html +24 -0
- data/lib/carat-dev/interface_work/contracts/contract/doc/rdoc-style.css +208 -0
- data/lib/carat-dev/interface_work/contracts/contract/lib/contract.rb +88 -0
- data/lib/carat-dev/interface_work/contracts/contract/lib/contract/assertions.rb +37 -0
- data/lib/carat-dev/interface_work/contracts/contract/lib/contract/exception.rb +92 -0
- data/lib/carat-dev/interface_work/contracts/contract/lib/contract/integration.rb +132 -0
- data/lib/carat-dev/interface_work/contracts/contract/lib/contract/overrides.rb +32 -0
- data/lib/carat-dev/interface_work/must.rb +37 -0
- data/lib/carat-dev/interface_work/type.rb +232 -0
- data/lib/carat-dev/main/tc_toplevel.rb +23 -0
- data/lib/carat-dev/main/toplevel.rb +33 -0
- data/lib/carat-dev/main/toplevel_test.rb +24 -0
- data/lib/carat-dev/misc/1.rb +40 -0
- data/lib/carat-dev/misc/misc.rb +44 -0
- data/lib/carat-dev/misc/sys.rb +186 -0
- data/lib/carat-dev/misc/temp.rb +1 -0
- data/lib/carat-dev/misc/utils.rb +518 -0
- data/lib/carat-dev/predicate/predicate.rb +109 -0
- data/lib/carat-dev/predicate/predicate_test.rb +67 -0
- data/lib/carat-dev/premshree.rb +40 -0
- data/lib/carat-dev/priority-queue/pqueue.rb +183 -0
- data/lib/carat-dev/priority-queue/priorityqueue.rb +84 -0
- data/lib/carat-dev/quaternion/quaternion.rb +529 -0
- data/lib/carat-dev/range.rb +259 -0
- data/lib/carat-dev/system/rubyinfo.rb +75 -0
- data/lib/carat-dev/system/system.rb +105 -0
- data/lib/carat-dev/tc_range.rb +118 -0
- data/lib/carat-dev/timer/timer-doc/classes/Timer.html +291 -0
- data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000001.html +26 -0
- data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000002.html +19 -0
- data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000003.html +18 -0
- data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000004.html +18 -0
- data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000005.html +21 -0
- data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000006.html +23 -0
- data/lib/carat-dev/timer/timer-doc/created.rid +1 -0
- data/lib/carat-dev/timer/timer-doc/files/timer_rb.html +144 -0
- data/lib/carat-dev/timer/timer-doc/fr_class_index.html +27 -0
- data/lib/carat-dev/timer/timer-doc/fr_file_index.html +27 -0
- data/lib/carat-dev/timer/timer-doc/fr_method_index.html +32 -0
- data/lib/carat-dev/timer/timer-doc/index.html +24 -0
- data/lib/carat-dev/timer/timer-doc/rdoc-style.css +208 -0
- data/lib/carat-dev/timer/timer.rb +160 -0
- data/lib/carat-dev/vars/vars.rb +62 -0
- data/lib/carat/1st.rb +58 -0
- data/lib/carat/ansicolor.rb +122 -0
- data/lib/carat/attr.rb +342 -0
- data/lib/carat/bbcode.rb +352 -0
- data/lib/carat/binaryreader.rb +170 -0
- data/lib/carat/binding-of-caller.rb +83 -0
- data/lib/carat/byteorder.rb +34 -0
- data/lib/carat/constant.rb +287 -0
- data/lib/carat/coroutine.rb +102 -0
- data/lib/carat/crosscase.rb +309 -0
- data/lib/carat/duckhunter.rb +158 -0
- data/lib/carat/dynamic-mixin.rb +71 -0
- data/lib/carat/enumerable-args.rb +125 -0
- data/lib/carat/expect.rb +192 -0
- data/lib/carat/filelist.rb +277 -0
- data/lib/carat/floatstring.rb +153 -0
- data/lib/carat/functor.rb +41 -0
- data/lib/carat/harray.rb +507 -0
- data/lib/carat/heap.rb +193 -0
- data/lib/carat/html-helpers.rb +82 -0
- data/lib/carat/infinity.rb +61 -0
- data/lib/carat/init.rb +33 -0
- data/lib/carat/interval.rb +248 -0
- data/lib/carat/io-reactor.rb +657 -0
- data/lib/carat/io-redirect.rb +99 -0
- data/lib/carat/lisp-format.rb +1832 -0
- data/lib/carat/lisp.rb +336 -0
- data/lib/carat/macro.rb +68 -0
- data/lib/carat/multiton.rb +153 -0
- data/lib/carat/nack.rb +115 -0
- data/lib/carat/nil-comparable.rb +67 -0
- data/lib/carat/nil-missing.rb +12 -0
- data/lib/carat/notcopyable.rb +68 -0
- data/lib/carat/orderedhash.rb +249 -0
- data/lib/carat/ostructable.rb +138 -0
- data/lib/carat/parser-old.rb +350 -0
- data/lib/carat/parser.rb +393 -0
- data/lib/carat/ref.rb +31 -0
- data/lib/carat/semaphore.rb +69 -0
- data/lib/carat/snapshot.rb +94 -0
- data/lib/carat/soundex.rb +104 -0
- data/lib/carat/sstruct.rb +223 -0
- data/lib/carat/statichash.rb +49 -0
- data/lib/carat/tagiter.rb +345 -0
- data/lib/carat/timelimit.rb +114 -0
- data/lib/carat/timer.rb +99 -0
- data/lib/carat/tracepoint.rb +154 -0
- data/lib/carat/tuple.rb +31 -0
- data/lib/carat/uninheritable.rb +68 -0
- data/lib/carat/version.rb +147 -0
- data/pub/doc/sstruct.txt +204 -0
- data/pub/doc/tagiter.html +145 -0
- data/setup.rb +1361 -0
- data/test/fixtures/filelist/testfile.txt +1 -0
- data/test/fixtures/filelist/testfile2.txt +1 -0
- data/test/tc_1st.rb +16 -0
- data/test/tc_ansicolor.rb +23 -0
- data/test/tc_attr.rb +46 -0
- data/test/tc_bbcode.rb +20 -0
- data/test/tc_binaryreader.rb +14 -0
- data/test/tc_binding_of_caller.rb +2 -0
- data/test/tc_byteorder.rb +41 -0
- data/test/tc_constant.rb +12 -0
- data/test/tc_coroutine.rb +50 -0
- data/test/tc_crosscase.rb +33 -0
- data/test/tc_duckhunter.rb +37 -0
- data/test/tc_dynamic-mixin.rb +66 -0
- data/test/tc_enumerable-args.rb +66 -0
- data/test/tc_expect.rb +83 -0
- data/test/tc_filelist.rb +17 -0
- data/test/tc_floatstring.rb +22 -0
- data/test/tc_functor.rb +18 -0
- data/test/tc_harray.rb +280 -0
- data/test/tc_heap.rb +6 -0
- data/test/tc_infinity.rb +23 -0
- data/test/tc_init.rb +29 -0
- data/test/tc_interval.rb +153 -0
- data/test/tc_io-reactor.rb +5 -0
- data/test/tc_io-redirect.rb +5 -0
- data/test/tc_lisp-format.rb +24 -0
- data/test/tc_lisp.rb +32 -0
- data/test/tc_macro.rb +48 -0
- data/test/tc_multiton.rb +188 -0
- data/test/tc_nack.rb +31 -0
- data/test/tc_nil-as-emptiness.rb +19 -0
- data/test/tc_nil-comparable.rb +29 -0
- data/test/tc_nil-missing.rb +0 -0
- data/test/tc_notcopyable.rb +64 -0
- data/test/tc_orderedhash.rb +36 -0
- data/test/tc_ostructable.rb +31 -0
- data/test/tc_semaphore.rb +5 -0
- data/test/tc_snapshot.rb +20 -0
- data/test/tc_soundex.rb +19 -0
- data/test/tc_sstruct.rb +313 -0
- data/test/tc_statichash.rb +24 -0
- data/test/tc_tagiter.rb +80 -0
- data/test/tc_timelimit.rb +47 -0
- data/test/tc_timer.rb +35 -0
- data/test/tc_tracepoint.rb +10 -0
- data/test/tc_tuple.rb +25 -0
- data/test/tc_uninheritable.rb +33 -0
- data/test/tc_version.rb +90 -0
- metadata +531 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
=begin rdoc
|
|
2
|
+
|
|
3
|
+
= CrossCase
|
|
4
|
+
|
|
5
|
+
CrossCase - a mixin for making methods look the way you like 'em.
|
|
6
|
+
Or for making them look the way other people like 'em. Or something.
|
|
7
|
+
Let's try that again... CrossCase - A mixin for auto-generating
|
|
8
|
+
under_barred aliases for camelCased methods, and vice-versa. Better.
|
|
9
|
+
|
|
10
|
+
== Synopsis
|
|
11
|
+
|
|
12
|
+
class MyClass
|
|
13
|
+
include CrossCase
|
|
14
|
+
|
|
15
|
+
def underbarred_method; ...; end
|
|
16
|
+
def camelCasedMethod; ...; end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
obj = MyClass::new
|
|
20
|
+
obj.underbarredMethod
|
|
21
|
+
obj.camel_cased_method
|
|
22
|
+
|
|
23
|
+
# -or-
|
|
24
|
+
|
|
25
|
+
class MyClass
|
|
26
|
+
def underbarred_method; ...; end
|
|
27
|
+
def camelCasedMethod; ...; end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
MyClass.extend( CrossCase )
|
|
31
|
+
obj = MyClass::new
|
|
32
|
+
obj.underbarredMethod
|
|
33
|
+
obj.camel_cased_method
|
|
34
|
+
|
|
35
|
+
== Description
|
|
36
|
+
|
|
37
|
+
This module, when mixed into a Class or another Module, will provide
|
|
38
|
+
under_barred aliases for class or instance methods with names which follow the
|
|
39
|
+
camelCased naming conventions, and vice-versa. E.g., in a class which mixes in
|
|
40
|
+
CrossCase, defining a method which is called +foo_bar+ will also create an
|
|
41
|
+
alias for that method called +fooBar+.
|
|
42
|
+
|
|
43
|
+
I wrote this module because I prefer camelCased method names, but also wish to
|
|
44
|
+
respect the preferences of my fellow Rubyists for whom such practices are an
|
|
45
|
+
abomination. And I'm too lazy to type
|
|
46
|
+
alias :twinkle_twinkle :twinkleTwinkle
|
|
47
|
+
for every method. It's all about laziness. Or perhaps I'm catering to my
|
|
48
|
+
hubris. Or both; I'll shut up now.
|
|
49
|
+
|
|
50
|
+
== Caveats
|
|
51
|
+
|
|
52
|
+
This module uses the +method_added+ and +singleton_method_added+ hooks to
|
|
53
|
+
generate aliases for new methods. If either or both of these methods are
|
|
54
|
+
already defined, they will be preserved as aliases when the Class or Module is
|
|
55
|
+
extended. It's up to you to return the favor should you create your own hook
|
|
56
|
+
after this module is mixed in to your class.
|
|
57
|
+
|
|
58
|
+
== Author
|
|
59
|
+
|
|
60
|
+
* Michael Granger <ged@FaerieMUD.org>
|
|
61
|
+
|
|
62
|
+
== Thanks
|
|
63
|
+
|
|
64
|
+
* The denizens of irc://irc.freenode.net/#ruby-lang, and especially dblack,
|
|
65
|
+
oGMo, and rubyhacker1 for name suggestions.
|
|
66
|
+
|
|
67
|
+
== More Information
|
|
68
|
+
|
|
69
|
+
You can find more information about this module, including any updates, at its
|
|
70
|
+
project page:
|
|
71
|
+
|
|
72
|
+
http://www.deveiate.org/code/CrossCase.shtml
|
|
73
|
+
|
|
74
|
+
== Legal
|
|
75
|
+
|
|
76
|
+
Copyright (c) 2003 The FaerieMUD Consortium. All rights reserved.
|
|
77
|
+
|
|
78
|
+
This module is free software. You may use, modify, and/or redistribute this
|
|
79
|
+
software under the same terms as Ruby
|
|
80
|
+
|
|
81
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
82
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
83
|
+
FOR A PARTICULAR PURPOSE.
|
|
84
|
+
|
|
85
|
+
== History
|
|
86
|
+
|
|
87
|
+
$Id: crosscase.rb,v 1.2 2003/07/25 17:00:24 deveiant Exp $
|
|
88
|
+
|
|
89
|
+
=end
|
|
90
|
+
|
|
91
|
+
### A mixin which causes aliases for methods with either under_barred or
|
|
92
|
+
### camelCased naming conventions to be created in the opposing
|
|
93
|
+
### convention. E.g., in a class which mixes in CrossCase, defining a method
|
|
94
|
+
### which is called +foo_bar+ will also create an alias for that method called
|
|
95
|
+
### +fooBar+.
|
|
96
|
+
module CrossCase
|
|
97
|
+
|
|
98
|
+
### Versioning constants
|
|
99
|
+
Version = /([\d\.]+)/.match( %q{$Revision: 1.2 $} )[1]
|
|
100
|
+
Rcsid = %q$Id: crosscase.rb,v 1.2 2003/07/25 17:00:24 deveiant Exp $
|
|
101
|
+
|
|
102
|
+
### The inclusion callback -- uses the Ouroboros trick to extend including
|
|
103
|
+
### classes.
|
|
104
|
+
def self::included( mod )
|
|
105
|
+
mod.extend( self )
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
### Object-extension callback -- installs aliases for any currently-extant
|
|
110
|
+
### class or instance methods, and installs callbacks that will create
|
|
111
|
+
### aliases for any subsequently-defined methods. Raises an error if any
|
|
112
|
+
### object except a Class or Module is extended.
|
|
113
|
+
def self::extend_object( mod )
|
|
114
|
+
raise TypeError, "Expected a Module or a Class, got a " +
|
|
115
|
+
mod.class.name unless
|
|
116
|
+
mod.is_a?( Module )
|
|
117
|
+
|
|
118
|
+
self::transformClassMethods( mod )
|
|
119
|
+
self::transformInstanceMethods( mod )
|
|
120
|
+
self::installMethodHooks( mod )
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
### Install +method_added+ and +singleton_method_added+ hooks into the given
|
|
125
|
+
### Module +mod+ which auto-generate aliases for new methods.
|
|
126
|
+
def self::installMethodHooks( mod )
|
|
127
|
+
mod.module_eval {
|
|
128
|
+
class << self
|
|
129
|
+
if respond_to?( :singleton_method_added )
|
|
130
|
+
alias :__cc_sma :singleton_method_added
|
|
131
|
+
end
|
|
132
|
+
def singleton_method_added( id )
|
|
133
|
+
if aliasName = CrossCase::transform( id )
|
|
134
|
+
CrossCase::installClassAlias( self, id, aliasName )
|
|
135
|
+
end
|
|
136
|
+
if respond_to?( :__cc_sma )
|
|
137
|
+
__cc_sma( id )
|
|
138
|
+
else
|
|
139
|
+
super
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
if respond_to?( :method_added )
|
|
144
|
+
alias :__cc_ma :method_added
|
|
145
|
+
end
|
|
146
|
+
def method_added( id )
|
|
147
|
+
if aliasName = CrossCase::transform( id )
|
|
148
|
+
CrossCase::installAlias( self, id, aliasName )
|
|
149
|
+
end
|
|
150
|
+
if respond_to?( :__cc_ma )
|
|
151
|
+
__cc_ma( id )
|
|
152
|
+
else
|
|
153
|
+
super
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
}
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
### Search for and install aliases for either underbarred or camelCased
|
|
162
|
+
### class methods for +mod+ (a Class or Module).
|
|
163
|
+
def self::transformClassMethods( mod )
|
|
164
|
+
self::findTargetMethods( mod.singleton_methods(false) ) {|meth, aliasName|
|
|
165
|
+
self::installClassAlias( mod, meth, aliasName )
|
|
166
|
+
}
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
### Install an alias +aliasName+ for the given class method +meth+ of the
|
|
171
|
+
### Class or Module +mod+.
|
|
172
|
+
def self::installClassAlias( mod, meth, aliasName )
|
|
173
|
+
unless mod.respond_to?( aliasName )
|
|
174
|
+
code = %{
|
|
175
|
+
class << self; alias_method( :#{aliasName}, :#{meth} ); end
|
|
176
|
+
}
|
|
177
|
+
mod.module_eval( code, __FILE__, __LINE__ )
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
### Search for and install aliases for either underbarred or camelCased
|
|
183
|
+
### instance methods for +mod+ (a Class or Module).
|
|
184
|
+
def self::transformInstanceMethods( mod )
|
|
185
|
+
self::findTargetMethods( mod.instance_methods(false) ) {|meth, aliasName|
|
|
186
|
+
self::installAlias( mod, meth, aliasName )
|
|
187
|
+
}
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
### Install an alias +aliasName+ for the given instance method +meth+ of the
|
|
192
|
+
### Class or Module +mod+.
|
|
193
|
+
def self::installAlias( mod, meth, aliasName )
|
|
194
|
+
unless mod.instance_methods(true).include?( aliasName )
|
|
195
|
+
mod.module_eval %{alias_method :#{aliasName}, :#{meth}}
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
### Find methods in the given +methodList+ which are candidates for
|
|
201
|
+
### aliasing.
|
|
202
|
+
def self::findTargetMethods( *methodList )
|
|
203
|
+
methodList.flatten.each {|meth|
|
|
204
|
+
next if /(singleton_)?method_added/ =~ meth
|
|
205
|
+
transformedName = transform( meth ) or next
|
|
206
|
+
yield( meth, transformedName )
|
|
207
|
+
}
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
### Return an alternate name for the given method id +mid+. If the method id
|
|
212
|
+
### is an under_barred method, returns a camelCased version, and
|
|
213
|
+
### vice-versa. If no alternate is called for, returns +nil+.
|
|
214
|
+
def self::transform( mid )
|
|
215
|
+
methodName = mid.to_s
|
|
216
|
+
transformedName = ''
|
|
217
|
+
|
|
218
|
+
# camelCased methods
|
|
219
|
+
if /[A-Z]/.match( methodName ) && !/_/.match( methodName )
|
|
220
|
+
transformedName = methodName.gsub( /([a-z0-9])([A-Z])/ ) {|match|
|
|
221
|
+
$1 + '_' + $2
|
|
222
|
+
}.downcase
|
|
223
|
+
|
|
224
|
+
# underbarred_methods
|
|
225
|
+
elsif !/A-Z/.match( methodName ) && /[a-z0-9]_[a-z]/.match( methodName )
|
|
226
|
+
transformedName = methodName.gsub( /([a-z0-9])_([a-z])/ ) {|match|
|
|
227
|
+
$1 + $2.upcase
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
else
|
|
231
|
+
transformedName = nil
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
return transformedName
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
# --- test ---
|
|
241
|
+
|
|
242
|
+
if $0 == __FILE__
|
|
243
|
+
|
|
244
|
+
require 'raspberry/mix/utils'
|
|
245
|
+
include UtilityFunctions
|
|
246
|
+
$yaml = false
|
|
247
|
+
|
|
248
|
+
class Foo #:nodoc:
|
|
249
|
+
def self::singleton_method_added( id )
|
|
250
|
+
$stderr.puts "Original sma: Added #{id} to #{self.inspect}"
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def self::method_added( id )
|
|
254
|
+
$stderr.puts "Original ma: Added #{id} to #{self.inspect}"
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def self::classPreCamelMethod
|
|
258
|
+
"classPreCamelMethod"
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def self::class_pre_underbarred_method
|
|
262
|
+
"class_pre_underbarred_method"
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def preCamelCasedMethod
|
|
266
|
+
"preCamelCasedMethod"
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def pre_underbarred_method
|
|
270
|
+
"pre_underbarred_method"
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
extend CrossCase
|
|
274
|
+
|
|
275
|
+
def self::classCamelMethod
|
|
276
|
+
"classCamelMethod"
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def self::class_underbarred_method
|
|
280
|
+
"class_underbarred_method"
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def camelCasedMethod
|
|
284
|
+
"camelCasedMethod"
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def underbarred_method
|
|
288
|
+
"underbarred_method"
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
f = nil
|
|
293
|
+
try( "to instantiate Foo" ) { f = Foo::new }
|
|
294
|
+
|
|
295
|
+
m = %w{ classPreCamelMethod class_pre_camel_method
|
|
296
|
+
class_pre_underbarred_method classPreUnderbarredMethod
|
|
297
|
+
classCamelMethod class_camel_method
|
|
298
|
+
class_underbarred_method classUnderbarredMethod }
|
|
299
|
+
|
|
300
|
+
m.sort.each do |meth|
|
|
301
|
+
try( "to call #{meth} on Foo" ){ Foo.send( meth ) }
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
Foo.instance_methods(false).sort.each do |meth|
|
|
305
|
+
try( "to call #{meth} on the instance of Foo" ){ f.send( meth ) }
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
end
|
|
309
|
+
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
=begin rdoc
|
|
2
|
+
|
|
3
|
+
= DuckHunter
|
|
4
|
+
|
|
5
|
+
Method::DuckHunter is a method probe. It drop decoys into methods
|
|
6
|
+
which records the calls that are made against them. Of course it is
|
|
7
|
+
not perfect --as a matter of course for any internal probe. There are
|
|
8
|
+
a couple of issues related to conditionals. Since the method test for
|
|
9
|
+
a certain condition against the decoy, how is the decoy to respond?
|
|
10
|
+
Thus ceratin paths in the code may never get exceuted and so go unmapped.
|
|
11
|
+
If Ruby had better conditional reflection (i.e. if 'if', 'case', 'unless',
|
|
12
|
+
'when', etc. were true methods) then this could be fixed by making the
|
|
13
|
+
DuckHunter reentrant, mapping out variant true/false/nil replies. Of course
|
|
14
|
+
the final problem is the Halting problem. It should be rare enough, but it
|
|
15
|
+
can happen and little can be done about it (I think).
|
|
16
|
+
|
|
17
|
+
Note, the alternative to this is a program that examines, rather
|
|
18
|
+
then executes, source code. This would circumvent the above problems,
|
|
19
|
+
but run into difficulties with dynamic evals.
|
|
20
|
+
|
|
21
|
+
This script is provided for experimetnal purposes. On occasion it may find
|
|
22
|
+
an intersteing use. Please inform the author if you find ways to improve.
|
|
23
|
+
|
|
24
|
+
== Synopsis
|
|
25
|
+
|
|
26
|
+
require 'carat/duckhunter'
|
|
27
|
+
|
|
28
|
+
def amethod(x)
|
|
29
|
+
x + 1
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
p method(:amethod).signiture
|
|
33
|
+
p method(:amethod).signiture(:class)
|
|
34
|
+
p method(:amethod).signiture(:pretty)
|
|
35
|
+
|
|
36
|
+
produces
|
|
37
|
+
|
|
38
|
+
[["+"]]
|
|
39
|
+
[{"+"=>[["Fixnum"]]}]
|
|
40
|
+
[["+( Fixnum )"]]
|
|
41
|
+
|
|
42
|
+
== Authors(s)
|
|
43
|
+
|
|
44
|
+
* Thomas Sawyer
|
|
45
|
+
|
|
46
|
+
== Legal
|
|
47
|
+
|
|
48
|
+
Ruby License
|
|
49
|
+
Copyright (c)2005 Thomas Sawyer
|
|
50
|
+
|
|
51
|
+
== History
|
|
52
|
+
|
|
53
|
+
* 2005.04.12 Passed basic tests.
|
|
54
|
+
|
|
55
|
+
=end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class Method
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
# DuckHunter class
|
|
62
|
+
#
|
|
63
|
+
class DuckHunter
|
|
64
|
+
|
|
65
|
+
def DuckHunter.duckcall
|
|
66
|
+
begin
|
|
67
|
+
yield
|
|
68
|
+
rescue TypeError => e
|
|
69
|
+
self.send(e.message)
|
|
70
|
+
retry
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
attr_reader :ducks, :decoys
|
|
75
|
+
|
|
76
|
+
def initialize
|
|
77
|
+
@ducks, @decoys = {}, {}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def initialize_copy(from)
|
|
81
|
+
initialize
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def method_missing(aSym, *args)
|
|
85
|
+
aSymStr = aSym.to_s
|
|
86
|
+
|
|
87
|
+
# This will happen the first time
|
|
88
|
+
@ducks[aSymStr] ||= [] #unless @ducks[aSymStr]
|
|
89
|
+
@ducks[aSymStr] << args.collect { |a| "#{a.class}" }
|
|
90
|
+
|
|
91
|
+
decoy = self.dup
|
|
92
|
+
|
|
93
|
+
@decoys[aSymStr] ||= [] #unless @decoys[aSymStr]
|
|
94
|
+
@decoys[aSymStr] << decoy
|
|
95
|
+
|
|
96
|
+
# build proxy?
|
|
97
|
+
#begin
|
|
98
|
+
# d = <<-HERE
|
|
99
|
+
# def self.#{aSymStr}(*args)
|
|
100
|
+
# # This will happen the subsequent times
|
|
101
|
+
# @ducks["#{aSymStr}"] << args.collect { |a| #{'"#{a.class}"'} }
|
|
102
|
+
# @ducks["#{aSymStr}"].uniq!
|
|
103
|
+
# decoy = self.dup
|
|
104
|
+
# @decoys["#{aSymStr}"] = [] unless @decoys["#{aSymStr}"]
|
|
105
|
+
# @decoys["#{aSymStr}"] << decoy
|
|
106
|
+
# decoy
|
|
107
|
+
# end
|
|
108
|
+
# HERE
|
|
109
|
+
# instance_eval d
|
|
110
|
+
#rescue SyntaxError
|
|
111
|
+
# puts "This error may be avoidable by returning the failing duck type as the error message."
|
|
112
|
+
# raise
|
|
113
|
+
#end
|
|
114
|
+
|
|
115
|
+
decoy
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end #class DuckHunter
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
# Outputs migration information.
|
|
122
|
+
def migration
|
|
123
|
+
parameters = []; argc = self.arity
|
|
124
|
+
if argc > 0
|
|
125
|
+
argc.times { parameters << DuckHunter.new }
|
|
126
|
+
DuckHunter.duckcall { self.call(*parameters) }
|
|
127
|
+
elsif argc < 0
|
|
128
|
+
raise "(NYI) method takes unlimited arguments"
|
|
129
|
+
end
|
|
130
|
+
return parameters
|
|
131
|
+
end
|
|
132
|
+
private :migration
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
# Outputs signiture information.
|
|
136
|
+
def signature(detail=nil)
|
|
137
|
+
ds = []
|
|
138
|
+
case detail
|
|
139
|
+
when :complete, :all, :full
|
|
140
|
+
ds = migration
|
|
141
|
+
when :class, :with_class
|
|
142
|
+
migration.each { |dh| ds << dh.ducks }
|
|
143
|
+
when :pp, :pretty, :prettyprint, :pretty_print
|
|
144
|
+
migration.each do |dh|
|
|
145
|
+
responders = []
|
|
146
|
+
dh.ducks.each do |responder, argss|
|
|
147
|
+
argss.each { |args| responders << "#{responder}( #{args.join(',')} )" }
|
|
148
|
+
end
|
|
149
|
+
ds << responders
|
|
150
|
+
end
|
|
151
|
+
else
|
|
152
|
+
migration.each { |dh| ds << dh.ducks.keys }
|
|
153
|
+
end
|
|
154
|
+
return ds
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end #class DuckHunter
|
|
158
|
+
|