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,62 @@
|
|
|
1
|
+
#
|
|
2
|
+
#class Symbol
|
|
3
|
+
# def ~@
|
|
4
|
+
# return self, "#{self}=".intern
|
|
5
|
+
# end
|
|
6
|
+
#end
|
|
7
|
+
|
|
8
|
+
class Object
|
|
9
|
+
def iv; @iv; end
|
|
10
|
+
private :iv
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Module
|
|
14
|
+
|
|
15
|
+
def var(*vars)
|
|
16
|
+
vars.flatten.each do |v|
|
|
17
|
+
s = v.to_s
|
|
18
|
+
case s[-1..-1]
|
|
19
|
+
when '='
|
|
20
|
+
s = s[0..-2]
|
|
21
|
+
class_eval <<-EOS
|
|
22
|
+
def #{s}=(arg)
|
|
23
|
+
iv[:#{s}] = arg
|
|
24
|
+
iv[:#{s}]
|
|
25
|
+
end
|
|
26
|
+
EOS
|
|
27
|
+
else
|
|
28
|
+
class_eval <<-EOS
|
|
29
|
+
def #{v}(*args)
|
|
30
|
+
iv[:#{v}] = args[0] if !args.empty?
|
|
31
|
+
iv[:#{v}]
|
|
32
|
+
end
|
|
33
|
+
EOS
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
return *vars
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class Class
|
|
41
|
+
alias_method :new_orig, :new
|
|
42
|
+
def new(*args, &block)
|
|
43
|
+
o = new_orig(*args, &block)
|
|
44
|
+
o.instance_variable_set('@iv',{})
|
|
45
|
+
o
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class Module
|
|
50
|
+
PVars = {}
|
|
51
|
+
#def var(*vars)
|
|
52
|
+
# vars.each do |v|
|
|
53
|
+
# class_eval <<-EOS
|
|
54
|
+
# def #{v}(*args)
|
|
55
|
+
# PVars[self] ||= {}
|
|
56
|
+
# PVars[self][#{v}] = args[0] if !args.empty?
|
|
57
|
+
# PVars[self][#{v}]
|
|
58
|
+
# end
|
|
59
|
+
# EOS
|
|
60
|
+
# end
|
|
61
|
+
#end
|
|
62
|
+
end
|
data/lib/carat/1st.rb
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# $Id: 1st.rb, v0.2 2004/08/21 transami Exp $
|
|
2
|
+
|
|
3
|
+
=begin rdoc
|
|
4
|
+
|
|
5
|
+
= 1st Class Methods
|
|
6
|
+
|
|
7
|
+
Easy access to method as objects. And they retain state!
|
|
8
|
+
|
|
9
|
+
=== Example
|
|
10
|
+
|
|
11
|
+
def hello
|
|
12
|
+
puts "Hello World!"
|
|
13
|
+
end
|
|
14
|
+
p method(:hello) #=> <Method: #hello>
|
|
15
|
+
|
|
16
|
+
== Comments
|
|
17
|
+
|
|
18
|
+
I think the best solution would be using the notation
|
|
19
|
+
<tt>::ameth</tt>. This would require some minor changes
|
|
20
|
+
to Ruby, but with few backward incompatabilites if
|
|
21
|
+
parantheticals revert back to the actual method invocation.
|
|
22
|
+
Although this later stipulation means capitalized methods
|
|
23
|
+
would not be accessible in this way b/c they would intefere with
|
|
24
|
+
constant lookup. It's a trade off.
|
|
25
|
+
|
|
26
|
+
# Current Proposed Alternative
|
|
27
|
+
Foo.Bar() # method call method call method call
|
|
28
|
+
Foo.Bar # method call method call method call
|
|
29
|
+
Foo.bar() # method call method call method call
|
|
30
|
+
Foo.bar # method call method call method call
|
|
31
|
+
Foo::Bar() # method call method call 1st class method
|
|
32
|
+
Foo::Bar # constant lookup constant lookup constant lookup
|
|
33
|
+
Foo::bar() # method call method call 1st class method
|
|
34
|
+
Foo::bar # method call 1st class method 1st class method
|
|
35
|
+
|
|
36
|
+
Then again this dosen't address bound versus unbound.
|
|
37
|
+
|
|
38
|
+
Which do you prefer?
|
|
39
|
+
|
|
40
|
+
== Legal
|
|
41
|
+
|
|
42
|
+
Ruby License Copyright (c) 2004 Thomas Sawyer
|
|
43
|
+
|
|
44
|
+
=end
|
|
45
|
+
|
|
46
|
+
class Object
|
|
47
|
+
alias_method :method_pre1st, :method
|
|
48
|
+
def method(s)
|
|
49
|
+
( @__methods__ ||= {} )[s] ||= method_pre1st(s)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
# not needed
|
|
53
|
+
#class Module
|
|
54
|
+
# alias_method :instance_method_pre1st, :instance_method
|
|
55
|
+
# def instance_method(s)
|
|
56
|
+
# ( @__instance_methods__ ||= {} )[s] ||= instance_method_pre1st(s)
|
|
57
|
+
# end
|
|
58
|
+
#end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
=begin rdoc
|
|
2
|
+
|
|
3
|
+
= ANSIColor
|
|
4
|
+
|
|
5
|
+
== Synopsis
|
|
6
|
+
|
|
7
|
+
require 'trix/ansicolor'
|
|
8
|
+
include Term::ANSIColor
|
|
9
|
+
|
|
10
|
+
p red, "Hello", blue "World"
|
|
11
|
+
=> "\e[31mHello\e[34mWorld"
|
|
12
|
+
|
|
13
|
+
p red { "Hello" } + blue { "World" }
|
|
14
|
+
=> "\e[31mHello\e[0m\e[34mWorld\e[0m"
|
|
15
|
+
|
|
16
|
+
== Author
|
|
17
|
+
|
|
18
|
+
* Florian Frank <flori@ping.de>
|
|
19
|
+
|
|
20
|
+
== Legal
|
|
21
|
+
|
|
22
|
+
Copyright (c)2002-2004 Florian Frank
|
|
23
|
+
|
|
24
|
+
GNU General Public License (GPL)
|
|
25
|
+
|
|
26
|
+
== History
|
|
27
|
+
|
|
28
|
+
2004-11-30 v0.5 * Ported to Trix collection (transami)
|
|
29
|
+
|
|
30
|
+
2004-09-28 v0.4 * First release on Rubyforge
|
|
31
|
+
* Supports Rubygems now
|
|
32
|
+
|
|
33
|
+
2003-10-09 v0.3 * Added uncolored method as suggested by
|
|
34
|
+
Thomas Husterer <Thomas.Husterer@heidelberg.com>
|
|
35
|
+
* Added attribute methods with string arguments
|
|
36
|
+
* Deleted now unused files
|
|
37
|
+
|
|
38
|
+
2002-07-27 v0.2 * Minor Code Cleanup
|
|
39
|
+
* Added cdiff.rb
|
|
40
|
+
|
|
41
|
+
2002-06-12 v0.1 * Initial Release
|
|
42
|
+
|
|
43
|
+
=end
|
|
44
|
+
|
|
45
|
+
module Term
|
|
46
|
+
|
|
47
|
+
module ANSIColor
|
|
48
|
+
|
|
49
|
+
@@attributes = [
|
|
50
|
+
[ :clear , 0 ],
|
|
51
|
+
[ :reset , 0 ], # synonym for :clear
|
|
52
|
+
[ :bold , 1 ],
|
|
53
|
+
[ :dark , 2 ],
|
|
54
|
+
[ :italic , 3 ], # not widely implemented
|
|
55
|
+
[ :underline , 4 ],
|
|
56
|
+
[ :underscore , 4 ], # synonym for :underline
|
|
57
|
+
[ :blink , 5 ],
|
|
58
|
+
[ :rapid_blink , 6 ], # not widely implemented
|
|
59
|
+
[ :negative , 7 ], # no reverse because of String#reverse
|
|
60
|
+
[ :concealed , 8 ],
|
|
61
|
+
[ :strikethrough, 9 ], # not widely implemented
|
|
62
|
+
[ :black , 30 ],
|
|
63
|
+
[ :red , 31 ],
|
|
64
|
+
[ :green , 32 ],
|
|
65
|
+
[ :yellow , 33 ],
|
|
66
|
+
[ :blue , 34 ],
|
|
67
|
+
[ :magenta , 35 ],
|
|
68
|
+
[ :cyan , 36 ],
|
|
69
|
+
[ :white , 37 ],
|
|
70
|
+
[ :on_black , 40 ],
|
|
71
|
+
[ :on_red , 41 ],
|
|
72
|
+
[ :on_green , 42 ],
|
|
73
|
+
[ :on_yellow , 43 ],
|
|
74
|
+
[ :on_blue , 44 ],
|
|
75
|
+
[ :on_magenta , 45 ],
|
|
76
|
+
[ :on_cyan , 46 ],
|
|
77
|
+
[ :on_white , 47 ],
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
@@attributes.each do |c, v|
|
|
81
|
+
eval %Q{
|
|
82
|
+
def #{c.to_s}(string = nil)
|
|
83
|
+
result = "\e[#{v}m"
|
|
84
|
+
if block_given?
|
|
85
|
+
result << yield
|
|
86
|
+
result << "\e[0m"
|
|
87
|
+
elsif string
|
|
88
|
+
result << string
|
|
89
|
+
result << "\e[0m"
|
|
90
|
+
elsif respond_to?(:to_str)
|
|
91
|
+
result << self
|
|
92
|
+
result << "\e[0m"
|
|
93
|
+
end
|
|
94
|
+
return result
|
|
95
|
+
end
|
|
96
|
+
}
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
ColoredRegexp = /\e\[([34][0-7]|[0-9])m/
|
|
100
|
+
|
|
101
|
+
def uncolored(string = nil)
|
|
102
|
+
if block_given?
|
|
103
|
+
yield.gsub(ColoredRegexp, '')
|
|
104
|
+
elsif string
|
|
105
|
+
string.gsub(ColoredRegexp, '')
|
|
106
|
+
elsif respond_to?(:to_str)
|
|
107
|
+
gsub(ColoredRegexp, '')
|
|
108
|
+
else
|
|
109
|
+
''
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
module_function
|
|
114
|
+
|
|
115
|
+
def attributes
|
|
116
|
+
@@attributes.map { |c| c[0] }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
|
data/lib/carat/attr.rb
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
|
|
3
|
+
$Title: Accessors $
|
|
4
|
+
$Author: transami $
|
|
5
|
+
$Date: 2004-10-06 13:56:57 $
|
|
6
|
+
|
|
7
|
+
= Description
|
|
8
|
+
|
|
9
|
+
The Bill wants more from attributes.
|
|
10
|
+
|
|
11
|
+
= Usage
|
|
12
|
+
|
|
13
|
+
== Using Cast Attribute Accessors
|
|
14
|
+
|
|
15
|
+
# simple type casting
|
|
16
|
+
attr_reader :a => :to_s
|
|
17
|
+
|
|
18
|
+
# fancy type casting
|
|
19
|
+
attr_reader :a => 'to_s.capitalize'
|
|
20
|
+
|
|
21
|
+
# a powerful reader!
|
|
22
|
+
attr_reader :a => fn{ |x| eval x }
|
|
23
|
+
|
|
24
|
+
# a writer that type checks (use type.rb)
|
|
25
|
+
attr_writer :a => fn{ |x| big4 x }
|
|
26
|
+
|
|
27
|
+
# backwards compatible, cast attributes go at the end
|
|
28
|
+
attr_accessor :x, :y, :a => :to_s
|
|
29
|
+
|
|
30
|
+
# they can also be grouped
|
|
31
|
+
attr_accessor [:x, :y] => :to_s
|
|
32
|
+
|
|
33
|
+
== Using Accessor Shorthand
|
|
34
|
+
|
|
35
|
+
A nice shorthand is provided.
|
|
36
|
+
|
|
37
|
+
attr :r, :a, :a=, :w=
|
|
38
|
+
|
|
39
|
+
This is the same as doing
|
|
40
|
+
|
|
41
|
+
attr_reader :r
|
|
42
|
+
attr_accessor :a
|
|
43
|
+
attr_writer :w
|
|
44
|
+
|
|
45
|
+
Also
|
|
46
|
+
|
|
47
|
+
attr :b?, :b!
|
|
48
|
+
|
|
49
|
+
creating
|
|
50
|
+
|
|
51
|
+
def b?
|
|
52
|
+
@b ? true : @b
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def b!(x)
|
|
56
|
+
@b.replace(x)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
The shorthand notation can be used with casting too.
|
|
60
|
+
|
|
61
|
+
attr :a => :to_s
|
|
62
|
+
|
|
63
|
+
== Using Return Value
|
|
64
|
+
|
|
65
|
+
Attribute methods now return a list of the methods created.
|
|
66
|
+
This can then be passed to other useful methods.
|
|
67
|
+
|
|
68
|
+
private attr :a
|
|
69
|
+
|
|
70
|
+
= Authenticate
|
|
71
|
+
|
|
72
|
+
Copyright (C) 2002 T. Sawyer
|
|
73
|
+
Ruby Distribute License
|
|
74
|
+
|
|
75
|
+
This program is free software.
|
|
76
|
+
You can distribute/modify this program under
|
|
77
|
+
the terms of the Ruby Distribute License.
|
|
78
|
+
|
|
79
|
+
=end
|
|
80
|
+
|
|
81
|
+
#require 'facet/hash/update_each'
|
|
82
|
+
|
|
83
|
+
# Modify module attribute methods.
|
|
84
|
+
# *add define_attribute
|
|
85
|
+
# *redefine old attr_* methods
|
|
86
|
+
# *add attr_setter
|
|
87
|
+
|
|
88
|
+
class Module
|
|
89
|
+
|
|
90
|
+
# Create an attribute method for reading an
|
|
91
|
+
# instance variable. This is the same as the built
|
|
92
|
+
# in method, which it replaces, but adds casting.
|
|
93
|
+
#
|
|
94
|
+
# Casting allows the addition of a method invocation
|
|
95
|
+
# on the instance variable. It is defined using a hash
|
|
96
|
+
# parameter, so all castings must come at the end of a
|
|
97
|
+
# call to attr_reader.
|
|
98
|
+
#
|
|
99
|
+
# require 'carat/attr'
|
|
100
|
+
#
|
|
101
|
+
# attr_reader :a => :to_s
|
|
102
|
+
#
|
|
103
|
+
# _is equivalent to_
|
|
104
|
+
#
|
|
105
|
+
# def a
|
|
106
|
+
# @a.to_s
|
|
107
|
+
# end
|
|
108
|
+
#
|
|
109
|
+
def attr_reader(*args)
|
|
110
|
+
made = []
|
|
111
|
+
if Hash === args.last
|
|
112
|
+
args.concat( args.pop.to_a )
|
|
113
|
+
end
|
|
114
|
+
#hargs = (Hash === args.last ? args.pop : {})
|
|
115
|
+
args.each { |a,c|
|
|
116
|
+
a = a.to_s.strip
|
|
117
|
+
c = ".#{c.to_s.strip}".chomp('.')
|
|
118
|
+
module_eval %Q{ def #{a}; @#{a}#{c} ; end }
|
|
119
|
+
made << "#{a}".to_sym
|
|
120
|
+
}
|
|
121
|
+
(@__atributes__ ||= []).concat( made )
|
|
122
|
+
return *made
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Create an attribute method for writing to an
|
|
126
|
+
# instance variable. This is the same as the built
|
|
127
|
+
# in method, which it replaces, but adds casting.
|
|
128
|
+
#
|
|
129
|
+
# Casting allows the addition of a method invocation
|
|
130
|
+
# on the instance variable. It is defined using a hash
|
|
131
|
+
# parameter, so all castings must come at the end of a
|
|
132
|
+
# call to attr_writer.
|
|
133
|
+
#
|
|
134
|
+
# require 'carat/attr'
|
|
135
|
+
#
|
|
136
|
+
# attr_writer :a => :to_s
|
|
137
|
+
#
|
|
138
|
+
# _is equivalent to_
|
|
139
|
+
#
|
|
140
|
+
# def a=(x)
|
|
141
|
+
# @a = x.to_s
|
|
142
|
+
# end
|
|
143
|
+
#
|
|
144
|
+
def attr_writer(*args)
|
|
145
|
+
made = []
|
|
146
|
+
if Hash === args.last
|
|
147
|
+
args.concat( args.pop.to_a )
|
|
148
|
+
end
|
|
149
|
+
#hargs = (Hash === args.last ? args.pop : {})
|
|
150
|
+
args.each { |a,c|
|
|
151
|
+
a = a.to_s.strip.chomp('=').chomp('!')
|
|
152
|
+
c = ".#{c.to_s.strip}".chomp('.')
|
|
153
|
+
module_eval %Q{ def #{a}=(x); @#{a}=x#{c}; end }
|
|
154
|
+
made << "#{a}=".to_sym
|
|
155
|
+
}
|
|
156
|
+
(@__atributes__ ||= []).concat( made )
|
|
157
|
+
return *made
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Create an attribute method for writing to an
|
|
161
|
+
# instance variable. This is the same as the built
|
|
162
|
+
# in method, which it replaces, but adds casting.
|
|
163
|
+
#
|
|
164
|
+
# Casting allows the addition of a method invocation
|
|
165
|
+
# on the instance variable. It is defined using a hash
|
|
166
|
+
# parameter, so all castings must come at the end of a
|
|
167
|
+
# call to attr_writer.
|
|
168
|
+
#
|
|
169
|
+
# require 'carat/attr'
|
|
170
|
+
#
|
|
171
|
+
# attr_accessor :a => :to_s
|
|
172
|
+
#
|
|
173
|
+
# _is equivalent to_
|
|
174
|
+
#
|
|
175
|
+
# def a
|
|
176
|
+
# @a.to_s
|
|
177
|
+
# end
|
|
178
|
+
#
|
|
179
|
+
# def a=(x)
|
|
180
|
+
# @a = x.to_s
|
|
181
|
+
# end
|
|
182
|
+
#
|
|
183
|
+
def attr_accessor(*args)
|
|
184
|
+
made = []
|
|
185
|
+
if Hash === args.last
|
|
186
|
+
args.concat( args.pop.to_a )
|
|
187
|
+
end
|
|
188
|
+
#hargs = (Hash === args.last ? args.pop : {})
|
|
189
|
+
args.each { |a,c|
|
|
190
|
+
a = a.to_s.strip.chomp('=')
|
|
191
|
+
c = ".#{c.to_s.strip}".chomp('.')
|
|
192
|
+
module_eval %Q{ def #{a}; @#{a}#{c} ; end }
|
|
193
|
+
module_eval %Q{ def #{a}=(x); @#{a}=x#{c}; end }
|
|
194
|
+
made << "#{a}".to_sym
|
|
195
|
+
made << "#{a}=".to_sym
|
|
196
|
+
}
|
|
197
|
+
(@__atributes__ ||= []).concat( made )
|
|
198
|
+
return *made
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Create an attribute method for boolean testing
|
|
202
|
+
# of an instance variable in the form of _var?_.
|
|
203
|
+
#
|
|
204
|
+
# require 'facet/module/attr_tester'
|
|
205
|
+
#
|
|
206
|
+
# attr_tester :a
|
|
207
|
+
#
|
|
208
|
+
# _is equivalent to_
|
|
209
|
+
#
|
|
210
|
+
# def a?
|
|
211
|
+
# @a ? true : @a
|
|
212
|
+
# end
|
|
213
|
+
#
|
|
214
|
+
# Casting is also supported (see attr_reader).
|
|
215
|
+
#
|
|
216
|
+
# attr_tester :a => :evaluate
|
|
217
|
+
#
|
|
218
|
+
# _is equivalent to_
|
|
219
|
+
#
|
|
220
|
+
# def a?
|
|
221
|
+
# @a.evaluate ? true : @a
|
|
222
|
+
# end
|
|
223
|
+
#
|
|
224
|
+
def attr_tester(*args)
|
|
225
|
+
made = []
|
|
226
|
+
if Hash === args.last
|
|
227
|
+
args.concat( args.pop.to_a )
|
|
228
|
+
end
|
|
229
|
+
#hargs = (Hash === args.last ? args.pop : {})
|
|
230
|
+
args.each { |a,c|
|
|
231
|
+
a = a.to_s.strip.chomp('?')
|
|
232
|
+
c = ".#{c.to_s.strip}".chomp('.')
|
|
233
|
+
module_eval %Q{ def #{a}?; @#{a}#{c} ? true : @#{a}#{c}; end }
|
|
234
|
+
made << "#{a}?".to_sym
|
|
235
|
+
}
|
|
236
|
+
(@__atributes__ ||= []).concat made
|
|
237
|
+
return *made
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# Create an attribute method for getting and setting an
|
|
241
|
+
# instance variable.
|
|
242
|
+
#
|
|
243
|
+
# require 'carat/attr'
|
|
244
|
+
#
|
|
245
|
+
# attr_setter :a
|
|
246
|
+
#
|
|
247
|
+
# _is equivalent to_
|
|
248
|
+
#
|
|
249
|
+
# def a(*args)
|
|
250
|
+
# if args.size > 0
|
|
251
|
+
# @a = args[0]
|
|
252
|
+
# self
|
|
253
|
+
# else
|
|
254
|
+
# @a
|
|
255
|
+
# end
|
|
256
|
+
# end
|
|
257
|
+
#
|
|
258
|
+
# Casting is supported on both getting and setting.
|
|
259
|
+
#
|
|
260
|
+
# attr_setter :a => :to_s
|
|
261
|
+
#
|
|
262
|
+
# _is equivalent to_
|
|
263
|
+
#
|
|
264
|
+
# def a(*args)
|
|
265
|
+
# @a = args[0].to_s if args.size > 0
|
|
266
|
+
# @a.to_s
|
|
267
|
+
# end
|
|
268
|
+
#
|
|
269
|
+
def attr_setter(*args)
|
|
270
|
+
made = []
|
|
271
|
+
if Hash === args.last
|
|
272
|
+
args.concat( args.pop.to_a )
|
|
273
|
+
end
|
|
274
|
+
#hargs = (Hash === args.last ? args.pop : {})
|
|
275
|
+
args.each { |a,c|
|
|
276
|
+
a = a.to_s.strip
|
|
277
|
+
c = ".#{c.to_s.strip}".chomp('.')
|
|
278
|
+
module_eval %Q{
|
|
279
|
+
def #{a}(*args)
|
|
280
|
+
args.size > 0 ? ( @#{a}=args[0]#{c} ; self ) : @#{a}#{c}
|
|
281
|
+
end
|
|
282
|
+
}
|
|
283
|
+
made << "#{a}".to_sym
|
|
284
|
+
}
|
|
285
|
+
(@__atributes__ ||= []).concat( made )
|
|
286
|
+
return *made
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# DOES ANYONE USE THIS OLD THING?
|
|
290
|
+
#alias attribute attr
|
|
291
|
+
|
|
292
|
+
# The wondrful shortcut.
|
|
293
|
+
def attr(*args)
|
|
294
|
+
# Allows compatibility with old definition, while also
|
|
295
|
+
# extending the capabilites to allow multiple parameters.
|
|
296
|
+
# This form does not allow casting though.
|
|
297
|
+
if TrueClass === args.last or FalseClass === args.last or NilClass === args.last
|
|
298
|
+
if args.pop
|
|
299
|
+
args.concat( args.collect{ |a|
|
|
300
|
+
a = a.to_s.strip
|
|
301
|
+
case a[-1,1]
|
|
302
|
+
when '='
|
|
303
|
+
a[0..-2]
|
|
304
|
+
when '?'
|
|
305
|
+
"#{a[0..-2]}="
|
|
306
|
+
else
|
|
307
|
+
"#{a}="
|
|
308
|
+
end
|
|
309
|
+
} )
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
#
|
|
313
|
+
made = []
|
|
314
|
+
readers = []
|
|
315
|
+
writers = []
|
|
316
|
+
testers = []
|
|
317
|
+
if Hash === args.last
|
|
318
|
+
args.concat( args.pop.to_a )
|
|
319
|
+
end
|
|
320
|
+
args.each do |a,c|
|
|
321
|
+
a = a.to_s.strip
|
|
322
|
+
t = a.slice(-1,1)
|
|
323
|
+
m = a.chomp('!').chomp('=').chomp('?')
|
|
324
|
+
case t
|
|
325
|
+
when '='
|
|
326
|
+
readers << [m,c]
|
|
327
|
+
writers << [m,c]
|
|
328
|
+
when '?'
|
|
329
|
+
testers << [m,c]
|
|
330
|
+
when '!'
|
|
331
|
+
writers << [m,c]
|
|
332
|
+
else
|
|
333
|
+
readers << [m,c]
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
made.concat( [ attr_reader( *readers ) ] )
|
|
337
|
+
made.concat( [ attr_writer( *writers ) ] )
|
|
338
|
+
made.concat( [ attr_tester( *testers ) ] )
|
|
339
|
+
return *made
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
end
|