facets 1.3.3 → 1.4.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/{doc/AUTHORS → AUTHORS} +12 -3
- data/README +35 -29
- data/WARNING +56 -0
- data/demo/annotation/demo_annotation.rb +22 -0
- data/demo/ansicolor/cdiff.rb +20 -0
- data/demo/ansicolor/example.rb +82 -0
- data/demo/io-reactor/chatserver.rb +347 -0
- data/demo/lisp/game.rb +47 -0
- data/lib/facet/all.rb +1 -0
- data/lib/facet/annattr.rb +1 -0
- data/lib/facet/class/to_proc.rb +1 -0
- data/lib/facet/cookie.rb +1 -0
- data/lib/facet/dir/self/descend.rb +1 -0
- data/lib/facet/enumerable/count.rb +1 -0
- data/lib/facet/hash/to_proc.rb +1 -0
- data/lib/facet/hashbuilder.rb +1 -0
- data/lib/facet/http.rb +1 -0
- data/lib/facet/httpaccess.rb +1 -0
- data/lib/facet/kernel/__get__.rb +1 -0
- data/lib/facet/kernel/__set__.rb +1 -0
- data/lib/facet/kernel/cache.rb +1 -0
- data/lib/facet/kernel/respond.rb +1 -0
- data/lib/facet/lazy.rb +1 -0
- data/lib/facet/module/class.rb +1 -0
- data/lib/facet/module/nodef.rb +1 -0
- data/lib/facet/opencascade.rb +1 -0
- data/lib/facet/pqueue.rb +1 -0
- data/lib/facet/taskable.rb +1 -0
- data/lib/facets.rb +98 -37
- data/lib/facets/core/all.rb +5 -0
- data/lib/facets/core/class/to_proc.rb +25 -0
- data/lib/facets/core/dir/self/ascend.rb +2 -1
- data/lib/facets/core/dir/self/descend.rb +11 -0
- data/lib/facets/core/enumerable/accumulate.rb +2 -2
- data/lib/facets/core/enumerable/count.rb +54 -0
- data/lib/facets/core/enumerable/cross.rb +3 -0
- data/lib/facets/core/enumerable/graph.rb +8 -4
- data/lib/facets/core/enumerable/self/cross.rb +11 -5
- data/lib/facets/core/hash/to_proc.rb +34 -0
- data/lib/facets/core/hash/traverse.rb +10 -5
- data/lib/facets/core/kernel/__class__.rb +1 -1
- data/lib/facets/core/kernel/__get__.rb +5 -0
- data/lib/facets/core/kernel/__set__.rb +2 -0
- data/lib/facets/core/kernel/assign_from.rb +1 -1
- data/lib/facets/core/kernel/assign_with.rb +11 -3
- data/lib/facets/core/kernel/bool.rb +1 -1
- data/lib/facets/core/kernel/cache.rb +31 -0
- data/lib/facets/core/kernel/demo.rb +4 -0
- data/lib/facets/core/kernel/get_by_id.rb +1 -0
- data/lib/facets/core/kernel/in.rb +1 -1
- data/lib/facets/core/kernel/instance_assign.rb +2 -3
- data/lib/facets/core/kernel/method.rb +25 -7
- data/lib/facets/core/kernel/methods.rb +1 -1
- data/lib/facets/core/kernel/new.rb +1 -1
- data/lib/facets/core/kernel/object_class.rb +1 -1
- data/lib/facets/core/kernel/object_hexid.rb +1 -1
- data/lib/facets/core/kernel/own.rb +1 -1
- data/lib/facets/core/kernel/require_all.rb +1 -0
- data/lib/facets/core/kernel/require_esc.rb +4 -2
- data/lib/facets/core/kernel/require_facet.rb +2 -0
- data/lib/facets/core/kernel/require_local.rb +1 -0
- data/lib/facets/core/kernel/respond.rb +14 -0
- data/lib/facets/core/kernel/send_as.rb +1 -1
- data/lib/facets/core/kernel/silence_warnings.rb +1 -1
- data/lib/facets/core/kernel/singleton.rb +3 -1
- data/lib/facets/core/matchdata/matchtree.rb +13 -3
- data/lib/facets/core/module/class.rb +3 -0
- data/lib/facets/core/module/integrate.rb +31 -4
- data/lib/facets/core/module/{undef.rb → nodef.rb} +8 -3
- data/lib/facets/core/module/revisal.rb +5 -5
- data/lib/facets/more/annattr.rb +147 -0
- data/lib/facets/more/annotation.rb +32 -136
- data/lib/facets/more/ansicode.rb +89 -100
- data/lib/facets/more/aspects.rb +28 -0
- data/lib/facets/more/association.rb +88 -47
- data/lib/facets/more/basicobject.rb +51 -33
- data/lib/facets/more/bbcode.rb +21 -34
- data/lib/facets/more/binaryreader.rb +62 -33
- data/lib/facets/more/bitmask.rb +24 -24
- data/lib/facets/more/blankslate.rb +4 -0
- data/lib/facets/more/builderobject.rb +16 -20
- data/lib/facets/more/bytes.rb +43 -24
- data/lib/facets/more/classinherit.rb +15 -31
- data/lib/facets/more/classmethods.rb +19 -29
- data/lib/facets/more/cloneable.rb +42 -30
- data/lib/facets/more/consoleapp.rb +42 -22
- data/lib/facets/more/cookie.rb +565 -0
- data/lib/facets/more/coroutine.rb +17 -21
- data/lib/facets/more/crypt.rb +33 -12
- data/lib/facets/more/dictionary.rb +27 -36
- data/lib/facets/more/downloader.rb +21 -17
- data/lib/facets/more/elementor.rb +22 -0
- data/lib/facets/more/enumerablepass.rb +19 -27
- data/lib/facets/more/expirable.rb +18 -28
- data/lib/facets/more/filelist.rb +33 -32
- data/lib/facets/more/floatstring.rb +31 -40
- data/lib/facets/more/functor.rb +15 -25
- data/lib/facets/more/hashbuilder.rb +76 -0
- data/lib/facets/more/heap.rb +29 -36
- data/lib/facets/more/htmlbuilder.rb +22 -24
- data/lib/facets/more/htmlhelper.rb +89 -0
- data/lib/facets/more/http.rb +570 -0
- data/lib/facets/more/httpaccess.rb +1608 -0
- data/lib/facets/more/inheritor.rb +29 -21
- data/lib/facets/more/interval.rb +21 -25
- data/lib/facets/more/ioredirect.rb +21 -25
- data/lib/facets/more/json.rb +27 -17
- data/lib/facets/more/lazy.rb +238 -0
- data/lib/facets/more/lisp.rb +24 -27
- data/lib/facets/more/lisp_format.rb +93 -85
- data/lib/facets/more/lrucache.rb +17 -27
- data/lib/facets/more/mathconstants.rb +22 -40
- data/lib/facets/more/methodprobe.rb +56 -61
- data/lib/facets/more/mock.rb +24 -17
- data/lib/facets/more/multipliers.rb +21 -17
- data/lib/facets/more/multiton.rb +18 -24
- data/lib/facets/more/nackclass.rb +17 -21
- data/lib/facets/more/nilcomparable.rb +28 -30
- data/lib/facets/more/nullclass.rb +16 -15
- data/lib/facets/more/one.rb +94 -58
- data/lib/facets/more/opencascade.rb +187 -0
- data/lib/facets/more/openobject.rb +89 -66
- data/lib/facets/more/orderedhash.rb +4 -0
- data/lib/facets/more/ormsupport.rb +18 -29
- data/lib/facets/more/overload.rb +39 -3
- data/lib/facets/more/paramix.rb +16 -24
- data/lib/facets/more/pathlist.rb +17 -23
- data/lib/facets/more/pool.rb +21 -29
- data/lib/facets/more/pqueue.rb +190 -0
- data/lib/facets/more/preinitialize.rb +17 -18
- data/lib/facets/more/progressbar.rb +19 -15
- data/lib/facets/more/promoteself.rb +17 -21
- data/lib/facets/more/quaternion.rb +379 -346
- data/lib/facets/more/recorder.rb +15 -20
- data/lib/facets/more/reference.rb +25 -22
- data/lib/facets/more/rexmlbuilder.rb +21 -6
- data/lib/facets/more/rtals.rb +27 -24
- data/lib/facets/more/semaphore.rb +15 -28
- data/lib/facets/more/snapshot.rb +45 -41
- data/lib/facets/more/stateparser.rb +25 -35
- data/lib/facets/more/statichash.rb +37 -29
- data/lib/facets/more/syncarray.rb +18 -26
- data/lib/facets/more/synchash.rb +17 -26
- data/lib/facets/more/system.rb +25 -17
- data/lib/facets/more/tagiterator.rb +15 -39
- data/lib/facets/more/taskable.rb +417 -0
- data/lib/facets/more/timer.rb +22 -26
- data/lib/facets/more/times.rb +23 -23
- data/lib/facets/more/tracepoint.rb +25 -24
- data/lib/facets/more/tuple.rb +25 -42
- data/lib/facets/more/typecast.rb +27 -29
- data/lib/facets/more/uninheritable.rb +15 -22
- data/lib/facets/more/units.rb +23 -29
- data/lib/facets/more/xmlbuilder.rb +20 -22
- data/lib/facets/more/xmlhelper.rb +18 -21
- data/lib/facets/more/xoxo.rb +23 -11
- data/lib/facets/more/yamlstruct.rb +25 -22
- data/test/lib/facets/core/array/test_at_rand.rb +1 -1
- data/test/lib/facets/core/array/test_delete_unless.rb +1 -1
- data/test/lib/facets/core/array/test_delete_values.rb +1 -1
- data/test/lib/facets/core/array/test_delete_values_at.rb +1 -1
- data/test/lib/facets/core/array/test_first.rb +1 -1
- data/test/lib/facets/core/array/test_head.rb +1 -1
- data/test/lib/facets/core/array/test_last_index.rb +1 -1
- data/test/lib/facets/core/array/test_merge.rb +1 -1
- data/test/lib/facets/core/array/test_mid.rb +1 -1
- data/test/lib/facets/core/array/test_middle.rb +1 -1
- data/test/lib/facets/core/array/test_op_fetch.rb +1 -1
- data/test/lib/facets/core/array/test_op_store.rb +1 -1
- data/test/lib/facets/core/array/test_pick.rb +1 -1
- data/test/lib/facets/core/array/test_pos.rb +1 -1
- data/test/lib/facets/core/array/test_pot.rb +1 -1
- data/test/lib/facets/core/array/test_pull.rb +1 -1
- data/test/lib/facets/core/array/test_rand_index.rb +1 -1
- data/test/lib/facets/core/array/test_rand_subset.rb +1 -1
- data/test/lib/facets/core/array/test_range.rb +1 -1
- data/test/lib/facets/core/array/test_rotate.rb +1 -1
- data/test/lib/facets/core/array/test_select.rb +1 -1
- data/test/lib/facets/core/array/test_shuffle.rb +1 -1
- data/test/lib/facets/core/array/test_thru.rb +1 -1
- data/test/lib/facets/core/array/test_to_b.rb +1 -1
- data/test/lib/facets/core/array/test_to_h.rb +1 -1
- data/test/lib/facets/core/array/test_to_hash.rb +1 -1
- data/test/lib/facets/core/binding/self/test_of_caller.rb +1 -1
- data/test/lib/facets/core/binding/test___LINE__.rb +1 -1
- data/test/lib/facets/core/binding/test_call_stack.rb +1 -1
- data/test/lib/facets/core/binding/test_called.rb +1 -1
- data/test/lib/facets/core/binding/test_caller.rb +1 -1
- data/test/lib/facets/core/binding/test_defined.rb +1 -1
- data/test/lib/facets/core/binding/test_eval.rb +1 -1
- data/test/lib/facets/core/binding/test_local_variables.rb +1 -1
- data/test/lib/facets/core/binding/test_method_name.rb +1 -1
- data/test/lib/facets/core/binding/test_op_fetch.rb +1 -1
- data/test/lib/facets/core/binding/test_op_store.rb +1 -1
- data/test/lib/facets/core/binding/test_self.rb +1 -1
- data/test/lib/facets/core/class/test_cattr.rb +1 -1
- data/test/lib/facets/core/class/test_descendents.rb +1 -1
- data/test/lib/facets/core/class/test_method_name.rb +1 -1
- data/test/lib/facets/core/class/test_remove_descendents.rb +1 -1
- data/test/lib/facets/core/class/test_unix_path.rb +1 -1
- data/test/lib/facets/core/comparable/test_at_least.rb +1 -1
- data/test/lib/facets/core/comparable/test_clip.rb +1 -1
- data/test/lib/facets/core/comparable/test_cmp.rb +1 -1
- data/test/lib/facets/core/continuation/self/test_create.rb +1 -1
- data/test/lib/facets/core/date/test_days_in_month.rb +1 -1
- data/test/lib/facets/core/date/test_days_of_month.rb +1 -1
- data/test/lib/facets/core/date/test_stamp.rb +1 -1
- data/test/lib/facets/core/date/test_to_date.rb +1 -1
- data/test/lib/facets/core/date/test_to_s.rb +1 -1
- data/test/lib/facets/core/date/test_to_time.rb +1 -1
- data/test/lib/facets/core/dir/self/test_ancestor.rb +1 -1
- data/test/lib/facets/core/dir/self/test_ascend.rb +1 -1
- data/test/lib/facets/core/enumerable/self/test_combinations.rb +1 -1
- data/test/lib/facets/core/enumerable/self/test_cross.rb +1 -1
- data/test/lib/facets/core/enumerable/test_collect_with_index.rb +1 -1
- data/test/lib/facets/core/enumerable/test_commonality.rb +1 -1
- data/test/lib/facets/core/enumerable/test_compact_collect.rb +1 -1
- data/test/lib/facets/core/enumerable/test_count.rb +38 -0
- data/test/lib/facets/core/enumerable/test_cross.rb +1 -1
- data/test/lib/facets/core/enumerable/test_each_combination.rb +1 -1
- data/test/lib/facets/core/enumerable/test_each_pair.rb +1 -1
- data/test/lib/facets/core/enumerable/test_each_slice.rb +1 -1
- data/test/lib/facets/core/enumerable/test_each_unique_pair.rb +1 -1
- data/test/lib/facets/core/enumerable/test_entropy.rb +1 -1
- data/test/lib/facets/core/enumerable/test_every.rb +1 -1
- data/test/lib/facets/core/enumerable/test_ew.rb +1 -1
- data/test/lib/facets/core/enumerable/test_filter_collect.rb +1 -1
- data/test/lib/facets/core/enumerable/test_find_collisions.rb +1 -1
- data/test/lib/facets/core/enumerable/test_frequency.rb +1 -1
- data/test/lib/facets/core/enumerable/test_graph.rb +1 -1
- data/test/lib/facets/core/enumerable/test_ideal_entropy.rb +1 -1
- data/test/lib/facets/core/enumerable/test_none.rb +1 -1
- data/test/lib/facets/core/enumerable/test_occur.rb +1 -1
- data/test/lib/facets/core/enumerable/test_one.rb +1 -1
- data/test/lib/facets/core/enumerable/test_op_pow.rb +1 -1
- data/test/lib/facets/core/enumerable/test_partition_by.rb +1 -1
- data/test/lib/facets/core/enumerable/test_permute.rb +1 -1
- data/test/lib/facets/core/enumerable/test_probability.rb +1 -1
- data/test/lib/facets/core/enumerable/test_to_h.rb +1 -1
- data/test/lib/facets/core/enumerable/test_uniq_by.rb +1 -1
- data/test/lib/facets/core/file/self/test_create.rb +1 -1
- data/test/lib/facets/core/file/self/test_open_as_string.rb +1 -1
- data/test/lib/facets/core/file/self/test_read_list.rb +1 -1
- data/test/lib/facets/core/file/self/test_sanitize.rb +1 -1
- data/test/lib/facets/core/file/self/test_split_all.rb +1 -1
- data/test/lib/facets/core/float/test_round_at.rb +1 -1
- data/test/lib/facets/core/float/test_round_to.rb +1 -1
- data/test/lib/facets/core/hash/self/test_zipnew.rb +1 -1
- data/test/lib/facets/core/hash/test_alias.rb +1 -1
- data/test/lib/facets/core/hash/test_assert_has_keys.rb +1 -1
- data/test/lib/facets/core/hash/test_assert_has_only_keys.rb +1 -1
- data/test/lib/facets/core/hash/test_at.rb +1 -1
- data/test/lib/facets/core/hash/test_collate.rb +1 -1
- data/test/lib/facets/core/hash/test_each.rb +1 -1
- data/test/lib/facets/core/hash/test_each_with_index.rb +1 -1
- data/test/lib/facets/core/hash/test_each_with_key.rb +1 -1
- data/test/lib/facets/core/hash/test_graph.rb +1 -1
- data/test/lib/facets/core/hash/test_has_keys.rb +1 -1
- data/test/lib/facets/core/hash/test_has_only_keys.rb +1 -1
- data/test/lib/facets/core/hash/test_inverse.rb +1 -1
- data/test/lib/facets/core/hash/test_keys_to_s.rb +1 -1
- data/test/lib/facets/core/hash/test_keys_to_sym.rb +1 -1
- data/test/lib/facets/core/hash/test_op_fetch.rb +1 -1
- data/test/lib/facets/core/hash/test_op_lshift.rb +1 -1
- data/test/lib/facets/core/hash/test_rand_key.rb +1 -1
- data/test/lib/facets/core/hash/test_rand_pair.rb +1 -1
- data/test/lib/facets/core/hash/test_rand_value.rb +1 -1
- data/test/lib/facets/core/hash/test_replace_each.rb +1 -1
- data/test/lib/facets/core/hash/test_shuffle.rb +1 -1
- data/test/lib/facets/core/hash/test_slice.rb +1 -1
- data/test/lib/facets/core/hash/test_swap.rb +1 -1
- data/test/lib/facets/core/hash/test_swapkey.rb +1 -1
- data/test/lib/facets/core/hash/test_to_h.rb +1 -1
- data/test/lib/facets/core/hash/test_to_ostruct.rb +1 -1
- data/test/lib/facets/core/hash/test_to_ostruct_recurse.rb +1 -1
- data/test/lib/facets/core/hash/test_traverse.rb +1 -1
- data/test/lib/facets/core/hash/test_update_each.rb +1 -1
- data/test/lib/facets/core/hash/test_update_keys.rb +1 -1
- data/test/lib/facets/core/hash/test_update_values.rb +1 -1
- data/test/lib/facets/core/hash/test_weave.rb +1 -1
- data/test/lib/facets/core/integer/test_factorial.rb +1 -1
- data/test/lib/facets/core/integer/test_multiple.rb +1 -1
- data/test/lib/facets/core/integer/test_ordinal.rb +1 -1
- data/test/lib/facets/core/integer/test_times_collect.rb +1 -1
- data/test/lib/facets/core/kernel/test___class__.rb +1 -1
- data/test/lib/facets/core/kernel/test_as.rb +1 -1
- data/test/lib/facets/core/kernel/test_assign_from.rb +1 -1
- data/test/lib/facets/core/kernel/test_assign_with.rb +1 -1
- data/test/lib/facets/core/kernel/test_bool.rb +1 -1
- data/test/lib/facets/core/kernel/test_bug.rb +1 -1
- data/test/lib/facets/core/kernel/test_call_stack.rb +1 -1
- data/test/lib/facets/core/kernel/test_called.rb +1 -1
- data/test/lib/facets/core/kernel/test_constant.rb +1 -1
- data/test/lib/facets/core/kernel/test_copy.rb +1 -1
- data/test/lib/facets/core/kernel/test_deep_copy.rb +1 -1
- data/test/lib/facets/core/kernel/test_demo.rb +1 -1
- data/test/lib/facets/core/kernel/test_fn.rb +1 -1
- data/test/lib/facets/core/kernel/test_generate_method_name.rb +1 -1
- data/test/lib/facets/core/kernel/test_get_by_id.rb +1 -1
- data/test/lib/facets/core/kernel/test_here.rb +1 -1
- data/test/lib/facets/core/kernel/test_in.rb +1 -1
- data/test/lib/facets/core/kernel/test_maybe.rb +1 -1
- data/test/lib/facets/core/kernel/test_metaclass.rb +1 -1
- data/test/lib/facets/core/kernel/test_method.rb +1 -1
- data/test/lib/facets/core/kernel/test_methodname.rb +1 -1
- data/test/lib/facets/core/kernel/test_methods.rb +1 -1
- data/test/lib/facets/core/kernel/test_new.rb +1 -1
- data/test/lib/facets/core/kernel/test_object_class.rb +1 -1
- data/test/lib/facets/core/kernel/test_object_hexid.rb +1 -1
- data/test/lib/facets/core/kernel/test_require_all.rb +1 -1
- data/test/lib/facets/core/kernel/test_require_esc.rb +1 -1
- data/test/lib/facets/core/kernel/test_require_facet.rb +1 -1
- data/test/lib/facets/core/kernel/test_resc.rb +1 -1
- data/test/lib/facets/core/kernel/test_returning.rb +1 -1
- data/test/lib/facets/core/kernel/test_send_as.rb +1 -1
- data/test/lib/facets/core/kernel/test_set_from.rb +1 -1
- data/test/lib/facets/core/kernel/test_set_with.rb +1 -1
- data/test/lib/facets/core/kernel/test_silently.rb +1 -1
- data/test/lib/facets/core/kernel/test_singleton.rb +1 -1
- data/test/lib/facets/core/kernel/test_superior.rb +1 -1
- data/test/lib/facets/core/kernel/test_supermethod.rb +1 -1
- data/test/lib/facets/core/kernel/test_this.rb +1 -1
- data/test/lib/facets/core/kernel/test_to_b.rb +1 -1
- data/test/lib/facets/core/kernel/test_to_bool.rb +1 -1
- data/test/lib/facets/core/kernel/test_uri.rb +1 -1
- data/test/lib/facets/core/kernel/test_val.rb +1 -1
- data/test/lib/facets/core/kernel/test_with_accessor.rb +1 -1
- data/test/lib/facets/core/matchdata/test_match.rb +1 -1
- data/test/lib/facets/core/matchdata/test_matchtree.rb +7 -2
- data/test/lib/facets/core/module/test_abstract.rb +1 -1
- data/test/lib/facets/core/module/test_alias_module_function.rb +1 -1
- data/test/lib/facets/core/module/test_ancestor.rb +1 -1
- data/test/lib/facets/core/module/test_basename.rb +1 -1
- data/test/lib/facets/core/module/test_by_name.rb +1 -1
- data/test/lib/facets/core/module/test_clone_using.rb +1 -1
- data/test/lib/facets/core/module/test_dirname.rb +1 -1
- data/test/lib/facets/core/module/test_equate_on.rb +1 -1
- data/test/lib/facets/core/module/test_generate_instance_method_name.rb +1 -1
- data/test/lib/facets/core/module/test_include_as.rb +1 -1
- data/test/lib/facets/core/module/test_inherit.rb +1 -1
- data/test/lib/facets/core/module/test_initializer.rb +1 -1
- data/test/lib/facets/core/module/test_instance_methods.rb +1 -1
- data/test/lib/facets/core/module/test_integrate.rb +1 -1
- data/test/lib/facets/core/module/test_memoize.rb +1 -1
- data/test/lib/facets/core/module/test_modspace.rb +1 -1
- data/test/lib/facets/core/module/test_namespace.rb +1 -1
- data/test/lib/facets/core/module/test_nesting.rb +1 -1
- data/test/lib/facets/core/module/{test_undef.rb → test_nodef.rb} +5 -5
- data/test/lib/facets/core/module/test_on_included.rb +1 -1
- data/test/lib/facets/core/module/test_redef.rb +1 -1
- data/test/lib/facets/core/module/test_redefine_method.rb +1 -1
- data/test/lib/facets/core/module/test_redirect.rb +1 -1
- data/test/lib/facets/core/module/test_redirect_method.rb +1 -1
- data/test/lib/facets/core/module/test_remove.rb +1 -1
- data/test/lib/facets/core/module/test_rename.rb +1 -1
- data/test/lib/facets/core/module/test_rename_method.rb +1 -1
- data/test/lib/facets/core/module/test_revisal.rb +1 -1
- data/test/lib/facets/core/module/test_shadow_method.rb +1 -1
- data/test/lib/facets/core/module/test_sort_on.rb +1 -1
- data/test/lib/facets/core/module/test_this.rb +1 -1
- data/test/lib/facets/core/module/test_wrap.rb +1 -1
- data/test/lib/facets/core/module/test_wrap_method.rb +1 -1
- data/test/lib/facets/core/nilclass/test_blank.rb +1 -1
- data/test/lib/facets/core/nilclass/test_empty.rb +1 -1
- data/test/lib/facets/core/nilclass/test_include.rb +1 -1
- data/test/lib/facets/core/nilclass/test_op_fetch.rb +1 -1
- data/test/lib/facets/core/nilclass/test_size.rb +1 -1
- data/test/lib/facets/core/nilclass/test_to_h.rb +1 -1
- data/test/lib/facets/core/numeric/test_approx.rb +1 -1
- data/test/lib/facets/core/numeric/test_ceil_multiple.rb +1 -1
- data/test/lib/facets/core/numeric/test_succ.rb +1 -1
- data/test/lib/facets/core/numeric/test_to_b.rb +1 -1
- data/test/lib/facets/core/ostruct/test___merge__.rb +1 -1
- data/test/lib/facets/core/ostruct/test___update__.rb +1 -1
- data/test/lib/facets/core/ostruct/test_op_fetch.rb +1 -1
- data/test/lib/facets/core/ostruct/test_op_store.rb +1 -1
- data/test/lib/facets/core/proc/test_compose.rb +1 -1
- data/test/lib/facets/core/proc/test_to_method.rb +1 -1
- data/test/lib/facets/core/range/test_to_r.rb +1 -1
- data/test/lib/facets/core/range/test_to_range.rb +1 -1
- data/test/lib/facets/core/range/test_umbrella.rb +1 -1
- data/test/lib/facets/core/range/test_within.rb +1 -1
- data/test/lib/facets/core/regexp/test_arity.rb +1 -1
- data/test/lib/facets/core/regexp/test_to_re.rb +1 -1
- data/test/lib/facets/core/regexp/test_to_regexp.rb +1 -1
- data/test/lib/facets/core/string/self/test_interpolate.rb +1 -1
- data/test/lib/facets/core/string/self/test_patterns.rb +1 -1
- data/test/lib/facets/core/string/self/test_rand_letter.rb +1 -1
- data/test/lib/facets/core/string/test_align_center.rb +1 -1
- data/test/lib/facets/core/string/test_at_rand.rb +1 -1
- data/test/lib/facets/core/string/test_basename.rb +1 -1
- data/test/lib/facets/core/string/test_blank.rb +1 -1
- data/test/lib/facets/core/string/test_bracket.rb +1 -1
- data/test/lib/facets/core/string/test_camelcase.rb +1 -1
- data/test/lib/facets/core/string/test_camelize.rb +1 -1
- data/test/lib/facets/core/string/test_capitalized.rb +1 -1
- data/test/lib/facets/core/string/test_chars.rb +1 -1
- data/test/lib/facets/core/string/test_cmp.rb +1 -1
- data/test/lib/facets/core/string/test_demodulize.rb +1 -1
- data/test/lib/facets/core/string/test_downcase.rb +1 -1
- data/test/lib/facets/core/string/test_dresner.rb +1 -1
- data/test/lib/facets/core/string/test_each_char.rb +1 -1
- data/test/lib/facets/core/string/test_each_word.rb +1 -1
- data/test/lib/facets/core/string/test_first.rb +1 -1
- data/test/lib/facets/core/string/test_fold.rb +1 -1
- data/test/lib/facets/core/string/test_frequency.rb +1 -1
- data/test/lib/facets/core/string/test_humanize.rb +1 -1
- data/test/lib/facets/core/string/test_indent.rb +1 -1
- data/test/lib/facets/core/string/test_index_all.rb +1 -1
- data/test/lib/facets/core/string/test_last.rb +1 -1
- data/test/lib/facets/core/string/test_line_wrap.rb +1 -1
- data/test/lib/facets/core/string/test_lines.rb +1 -1
- data/test/lib/facets/core/string/test_lowercase.rb +1 -1
- data/test/lib/facets/core/string/test_margin.rb +1 -1
- data/test/lib/facets/core/string/test_methodize.rb +1 -1
- data/test/lib/facets/core/string/test_modulize.rb +1 -1
- data/test/lib/facets/core/string/test_mscan.rb +1 -1
- data/test/lib/facets/core/string/test_natcmp.rb +1 -1
- data/test/lib/facets/core/string/test_nchar.rb +1 -1
- data/test/lib/facets/core/string/test_pathize.rb +1 -1
- data/test/lib/facets/core/string/test_pop.rb +1 -1
- data/test/lib/facets/core/string/test_pot.rb +1 -1
- data/test/lib/facets/core/string/test_probability.rb +1 -1
- data/test/lib/facets/core/string/test_push.rb +1 -1
- data/test/lib/facets/core/string/test_quote.rb +1 -1
- data/test/lib/facets/core/string/test_rand_byte.rb +1 -1
- data/test/lib/facets/core/string/test_rand_index.rb +1 -1
- data/test/lib/facets/core/string/test_range.rb +1 -1
- data/test/lib/facets/core/string/test_range_all.rb +1 -1
- data/test/lib/facets/core/string/test_range_of_line.rb +1 -1
- data/test/lib/facets/core/string/test_regesc.rb +1 -1
- data/test/lib/facets/core/string/test_shatter.rb +1 -1
- data/test/lib/facets/core/string/test_shift.rb +1 -1
- data/test/lib/facets/core/string/test_shuffle.rb +1 -1
- data/test/lib/facets/core/string/test_similarity.rb +1 -1
- data/test/lib/facets/core/string/test_singular.rb +1 -1
- data/test/lib/facets/core/string/test_soundex.rb +1 -1
- data/test/lib/facets/core/string/test_succ.rb +1 -1
- data/test/lib/facets/core/string/test_to_a.rb +1 -1
- data/test/lib/facets/core/string/test_to_b.rb +1 -1
- data/test/lib/facets/core/string/test_to_const.rb +1 -1
- data/test/lib/facets/core/string/test_to_date.rb +1 -1
- data/test/lib/facets/core/string/test_to_proc.rb +1 -1
- data/test/lib/facets/core/string/test_to_re.rb +1 -1
- data/test/lib/facets/core/string/test_to_time.rb +1 -1
- data/test/lib/facets/core/string/test_unix_crypt.rb +1 -1
- data/test/lib/facets/core/string/test_unpack.rb +1 -1
- data/test/lib/facets/core/string/test_unshift.rb +1 -1
- data/test/lib/facets/core/string/test_upcase.rb +1 -1
- data/test/lib/facets/core/string/test_whitespace.rb +1 -1
- data/test/lib/facets/core/string/test_word_filter.rb +1 -1
- data/test/lib/facets/core/string/test_word_wrap.rb +1 -1
- data/test/lib/facets/core/string/test_words.rb +1 -1
- data/test/lib/facets/core/symbol/test_camelcase.rb +1 -1
- data/test/lib/facets/core/symbol/test_camelize.rb +1 -1
- data/test/lib/facets/core/symbol/test_capitalize.rb +1 -1
- data/test/lib/facets/core/symbol/test_capitalized.rb +1 -1
- data/test/lib/facets/core/symbol/test_downcase.rb +1 -1
- data/test/lib/facets/core/symbol/test_not.rb +1 -1
- data/test/lib/facets/core/symbol/test_pad.rb +1 -1
- data/test/lib/facets/core/symbol/test_succ.rb +1 -1
- data/test/lib/facets/core/symbol/test_to_const.rb +1 -1
- data/test/lib/facets/core/symbol/test_to_proc.rb +1 -1
- data/test/lib/facets/core/symbol/test_to_str.rb +1 -1
- data/test/lib/facets/core/symbol/test_underscore.rb +1 -1
- data/test/lib/facets/core/symbol/test_upcase.rb +1 -1
- data/test/lib/facets/core/time/test_change.rb +1 -1
- data/test/lib/facets/core/time/test_elapse.rb +1 -1
- data/test/lib/facets/core/time/test_stamp.rb +1 -1
- data/test/lib/facets/core/time/test_to_date.rb +1 -1
- data/test/lib/facets/core/time/test_to_s.rb +1 -1
- data/test/lib/facets/core/time/test_to_time.rb +1 -1
- data/test/lib/facets/more/test_annattr.rb +39 -0
- data/test/lib/facets/more/test_annotatedattr.rb +39 -0
- data/test/lib/facets/more/test_annotation.rb +1 -22
- data/test/lib/facets/more/test_ansicode.rb +1 -1
- data/test/lib/facets/more/test_association.rb +6 -1
- data/test/lib/facets/more/test_basicobject.rb +1 -1
- data/test/lib/facets/more/test_bbcode.rb +1 -1
- data/test/lib/facets/more/test_binaryreader.rb +64 -0
- data/test/lib/facets/more/test_bitmask.rb +1 -1
- data/test/lib/facets/more/test_bytes.rb +1 -1
- data/test/lib/facets/more/test_classinherit.rb +1 -1
- data/test/lib/facets/more/test_classmethods.rb +1 -1
- data/test/lib/facets/more/test_coroutine.rb +1 -1
- data/test/lib/facets/more/test_crypt.rb +1 -1
- data/test/lib/facets/more/test_dictionary.rb +1 -1
- data/test/lib/facets/more/test_elementor.rb +1 -1
- data/test/lib/facets/more/test_enumerablepass.rb +1 -1
- data/test/lib/facets/more/test_floatstring.rb +1 -1
- data/test/lib/facets/more/test_functor.rb +1 -1
- data/test/lib/facets/more/test_htmlbuilder.rb +1 -1
- data/test/lib/facets/more/test_inheritor.rb +1 -1
- data/test/lib/facets/more/test_interval.rb +1 -1
- data/test/lib/facets/more/test_json.rb +1 -1
- data/test/lib/facets/more/test_lisp.rb +1 -1
- data/test/lib/facets/more/test_lisp_format.rb +1 -1
- data/test/lib/facets/more/test_lrucache.rb +1 -1
- data/test/lib/facets/more/test_mathconstants.rb +1 -1
- data/test/lib/facets/more/test_methodprobe.rb +1 -1
- data/test/lib/facets/more/test_multipliers.rb +1 -1
- data/test/lib/facets/more/test_multiton.rb +1 -1
- data/test/lib/facets/more/test_nackclass.rb +1 -1
- data/test/lib/facets/more/test_nilcomparable.rb +1 -1
- data/test/lib/facets/more/test_opencascade.rb +66 -0
- data/test/lib/facets/more/test_openobject.rb +14 -2
- data/test/lib/facets/more/test_overload.rb +1 -1
- data/test/lib/facets/more/test_paramix.rb +1 -1
- data/test/lib/facets/more/test_pqueue.rb +39 -0
- data/test/lib/facets/more/test_preinitialize.rb +1 -1
- data/test/lib/facets/more/test_promoteself.rb +1 -1
- data/test/lib/facets/more/test_recorder.rb +1 -1
- data/test/lib/facets/more/test_snapshot.rb +1 -1
- data/test/lib/facets/more/test_statichash.rb +11 -11
- data/test/lib/facets/more/test_syncarray.rb +1 -1
- data/test/lib/facets/more/test_synchash.rb +1 -1
- data/test/lib/facets/more/test_tagiterator.rb +1 -1
- data/test/lib/facets/more/test_taskable.rb +151 -0
- data/test/lib/facets/more/test_timer.rb +1 -1
- data/test/lib/facets/more/test_times.rb +1 -1
- data/test/lib/facets/more/test_tuple.rb +1 -1
- data/test/lib/facets/more/test_typecast.rb +1 -1
- data/test/lib/facets/more/test_uninheritable.rb +1 -1
- data/test/lib/facets/more/test_units.rb +1 -1
- data/test/lib/facets/more/test_xmlbuilder.rb +1 -1
- data/test/lib/facets/more/test_xmlhelper.rb +1 -1
- data/test/lib/facets/more/test_xoxo.rb +1 -1
- data/test/lib/facets/more/test_yamlstruct.rb +1 -1
- metadata +1243 -1247
- data/ProjectInfo +0 -89
- data/Rakefile +0 -181
- data/doc/CHANGELOG +0 -284
- data/doc/TODO +0 -73
- data/doc/noauto +0 -63
- data/lib/facet/array.rb +0 -1
- data/lib/facet/class.rb +0 -1
- data/lib/facet/comparable.rb +0 -1
- data/lib/facet/continuation.rb +0 -1
- data/lib/facet/date.rb +0 -1
- data/lib/facet/dir.rb +0 -1
- data/lib/facet/enumerable.rb +0 -1
- data/lib/facet/file.rb +0 -1
- data/lib/facet/fileutils.rb +0 -1
- data/lib/facet/float.rb +0 -1
- data/lib/facet/gem.rb +0 -1
- data/lib/facet/hash.rb +0 -1
- data/lib/facet/integer.rb +0 -1
- data/lib/facet/kernel.rb +0 -1
- data/lib/facet/logger.rb +0 -1
- data/lib/facet/matchdata.rb +0 -1
- data/lib/facet/module.rb +0 -1
- data/lib/facet/module/undef.rb +0 -1
- data/lib/facet/nilclass.rb +0 -1
- data/lib/facet/numeric.rb +0 -1
- data/lib/facet/pathname.rb +0 -1
- data/lib/facet/proc.rb +0 -1
- data/lib/facet/range.rb +0 -1
- data/lib/facet/regexp.rb +0 -1
- data/lib/facet/string.rb +0 -1
- data/lib/facet/symbol.rb +0 -1
- data/lib/facet/time.rb +0 -1
- data/lib/facet/unboundmethod.rb +0 -1
- data/lib/facets/core/array.rb +0 -35
- data/lib/facets/core/class.rb +0 -11
- data/lib/facets/core/comparable.rb +0 -5
- data/lib/facets/core/continuation.rb +0 -1
- data/lib/facets/core/date.rb +0 -6
- data/lib/facets/core/dir.rb +0 -4
- data/lib/facets/core/enumerable.rb +0 -42
- data/lib/facets/core/file.rb +0 -8
- data/lib/facets/core/fileutils.rb +0 -8
- data/lib/facets/core/float.rb +0 -4
- data/lib/facets/core/gem.rb +0 -4
- data/lib/facets/core/hash.rb +0 -40
- data/lib/facets/core/integer.rb +0 -9
- data/lib/facets/core/kernel.rb +0 -69
- data/lib/facets/core/logger.rb +0 -2
- data/lib/facets/core/matchdata.rb +0 -3
- data/lib/facets/core/module.rb +0 -43
- data/lib/facets/core/nilclass.rb +0 -9
- data/lib/facets/core/numeric.rb +0 -6
- data/lib/facets/core/pathname.rb +0 -2
- data/lib/facets/core/proc.rb +0 -3
- data/lib/facets/core/range.rb +0 -4
- data/lib/facets/core/regexp.rb +0 -3
- data/lib/facets/core/string.rb +0 -91
- data/lib/facets/core/symbol.rb +0 -13
- data/lib/facets/core/time.rb +0 -8
- data/lib/facets/core/unboundmethod.rb +0 -1
data/lib/facets/more/one.rb
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
# One
|
|
1
|
+
# = one.rb
|
|
3
2
|
#
|
|
4
|
-
# Copyright (c) 2005
|
|
3
|
+
# == Copyright (c) 2005 Thomas Sawyer
|
|
5
4
|
#
|
|
6
|
-
#
|
|
5
|
+
# Ruby License
|
|
7
6
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
7
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
|
8
|
+
# software under the same terms as Ruby.
|
|
10
9
|
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
11
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
12
|
+
# FOR A PARTICULAR PURPOSE.
|
|
14
13
|
#
|
|
15
|
-
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
# == Special Thanks
|
|
15
|
+
#
|
|
16
|
+
# Big shout-out to all the authors of fabulous one-liners!
|
|
17
|
+
#
|
|
18
|
+
# == Author(s)
|
|
19
|
+
#
|
|
20
|
+
# * Thomas Sawyer
|
|
21
|
+
|
|
22
|
+
# Author:: Thomas Sawyer
|
|
23
|
+
# Copyright:: Copyright (c) 2005 Thomas Sawyer
|
|
24
|
+
# License:: Ruby License
|
|
25
|
+
|
|
26
|
+
require 'yaml'
|
|
27
|
+
|
|
28
|
+
# = One
|
|
23
29
|
#
|
|
24
30
|
# One liners helper library provides one letter
|
|
25
31
|
# alias for a number of classes, modules and
|
|
@@ -27,19 +33,18 @@
|
|
|
27
33
|
# This this bit of a "gag" library, but it can also
|
|
28
34
|
# be used for code obsfuscation and includes examples
|
|
29
35
|
# of some neat one liners.
|
|
30
|
-
#
|
|
31
|
-
# == Author(s)
|
|
32
|
-
#
|
|
33
|
-
# * Thomas Sawyer
|
|
34
|
-
#
|
|
35
36
|
|
|
37
|
+
# Alias Kernel
|
|
36
38
|
K=Kernel
|
|
39
|
+
|
|
40
|
+
# Alias Object
|
|
37
41
|
O=Object
|
|
42
|
+
|
|
43
|
+
# Alias Class
|
|
38
44
|
C=Class
|
|
39
45
|
|
|
40
46
|
module Kernel
|
|
41
|
-
alias
|
|
42
|
-
alias p print
|
|
47
|
+
alias pr print
|
|
43
48
|
alias ps puts
|
|
44
49
|
alias s sleep
|
|
45
50
|
alias l loop
|
|
@@ -63,55 +68,86 @@ class Integer
|
|
|
63
68
|
alias t times
|
|
64
69
|
end
|
|
65
70
|
|
|
71
|
+
# This module contains a number of historic one-liners.
|
|
72
|
+
#
|
|
73
|
+
# NOTE Most of these one-liners do not use the one.rb
|
|
74
|
+
# shortcut aliases.
|
|
66
75
|
|
|
67
|
-
module
|
|
76
|
+
module RubyOneLiners
|
|
68
77
|
extend self
|
|
69
78
|
|
|
70
|
-
ONELINERS =
|
|
79
|
+
ONELINERS = YAML::load(DATA)
|
|
71
80
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
ONELINERS[name.to_sym] = code
|
|
75
|
-
define_method( name )
|
|
76
|
-
eval ONELINERS[name.to_sym]
|
|
77
|
-
end
|
|
81
|
+
ONELINERS.each do |name, code|
|
|
82
|
+
define_method( name, &eval("lambda { #{code} }") )
|
|
78
83
|
end
|
|
79
84
|
|
|
80
85
|
def oneliner(name)
|
|
81
|
-
ONELINERS[name.
|
|
86
|
+
ONELINERS[name.to_s]
|
|
82
87
|
end
|
|
83
88
|
|
|
84
89
|
def oneliners
|
|
85
90
|
ONELINERS.keys
|
|
86
91
|
end
|
|
87
92
|
|
|
88
|
-
|
|
93
|
+
end
|
|
94
|
+
|
|
89
95
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
1;40m ";$&.each_byte{|z|print" #"[z-?0,1]*2}};puts"\e[0m"}
|
|
94
|
-
HERE
|
|
95
|
-
end
|
|
96
|
+
if $0 == __FILE__
|
|
97
|
+
RubyOneLiners.color_ruby
|
|
98
|
+
end
|
|
96
99
|
|
|
97
|
-
define_oneliner :quack do <<-HERE
|
|
98
|
-
s="\e[2J\e[0;0H _\nQuack! >(*)____,\n (` =~~/\n^v^v^v^v^`---'v^v^v^v^\n";i=0;
|
|
99
|
-
l{s[21,6]=i&1>0?'Quack!':' '*6;s.tr!(t='*.>v^<,"',t.r);$><<s;i+=s 1}
|
|
100
|
-
HERE
|
|
101
|
-
end
|
|
102
100
|
|
|
103
|
-
|
|
104
|
-
s="\e[2J\e[0;0H _\nQuack! >(*)____,\n (` =~~/\n^v^v^v^v^`---'v^v^v^v^\n";i=0;
|
|
105
|
-
loop{s[21,6]=i&1>0?'Quack!':' '*6;s.tr!(t='*.>v^<,"',t.reverse);$><<s;i+=sleep 1}
|
|
106
|
-
HERE
|
|
107
|
-
end
|
|
101
|
+
__END__
|
|
108
102
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
sleep([5,3,3,4,5,1,4][i]/6.0)}}
|
|
114
|
-
HERE
|
|
115
|
-
end
|
|
103
|
+
color_ruby: |
|
|
104
|
+
"jp6iSZmkLp5ISZlEiW5C".unpack("m")[0].unpack("C*").map{|x|x.chr}.join.
|
|
105
|
+
unpack("B*")[0].scan(/.{24}/){i=7;$&.scan(/..../){print"\e[3#{i-=1};1;40m ";
|
|
106
|
+
$&.each_byte{|z|print" #"[z-?0,1]*2}};puts"\e[0m"}
|
|
116
107
|
|
|
117
|
-
|
|
108
|
+
quack: |
|
|
109
|
+
s="\e[2J\e[0;0H _\nQuack! >(*)____,\n (` =~~/\n^v^v^v^v^`---'v^v^v^v^\n";
|
|
110
|
+
i=0;l{s[21,6]=i&1>0?'Quack!':' '*6;s.tr!(t='*.>v^<,"',t.r);$><<s;i+=s 1}
|
|
111
|
+
|
|
112
|
+
quack2: |
|
|
113
|
+
s="\e[2J\e[0;0H _\nQuack! >(*)____,\n (` =~~/\n^v^v^v^v^`---'v^v^v^v^\n";i=0;
|
|
114
|
+
loop{s[21,6]=i&1>0?'Quack!':' '*6;s.tr!(t='*.>v^<,"',t.reverse);$><<s;i+=sleep 1}
|
|
115
|
+
|
|
116
|
+
santa: |
|
|
117
|
+
loop{7.times{|i|puts"\e[2J\e[0;3H_...\n / _ '.\n|.'(@@@@@)\n(*)/ %s \\
|
|
118
|
+
| .o. | \n ( %s ) %s"%[i==5?"- -":"e e",(i+3)%7<4?"=":"o",i>0?"-"+
|
|
119
|
+
(" Ho"*i)[0,9]+"!":""];puts" ( )\n"*2," ( )\n"*3,' "-"';
|
|
120
|
+
sleep([5,3,3,4,5,1,4][i]/6.0)}}
|
|
121
|
+
|
|
122
|
+
# This one can take two parameter but block aren't nice about defaults :(
|
|
123
|
+
fractree: |
|
|
124
|
+
n||=32;l||="A";
|
|
125
|
+
#n.times{|y|print" "*(n-1-y);(y+1).times{|x|print~y&x>0?" .":" #{l[0.1]}"};puts}
|
|
126
|
+
n.times{|y|print" "*(n-1-y),(0..y).map{|x|~y&x>0?" .":" #{l}"},$/}
|
|
127
|
+
|
|
128
|
+
fractree2: |
|
|
129
|
+
a=[];10.times{|n|a<<1;puts" "*(9-n)*3+"%6d"*(n+1)%a;n.times{|i|a[n]+=a[n-=1]}}
|
|
130
|
+
|
|
131
|
+
fractree3: |
|
|
132
|
+
a=[];10.times{|n|a<<1;puts" "*(9-n)*3+"%6d"*-~n%a;n.times{|i|a[n]+=a[n-=1]}}
|
|
133
|
+
|
|
134
|
+
duck: |
|
|
135
|
+
s="\033[2J\033[0;0H _\n Quack! >(')____,\n (` =~~/\n~^~^~^~^~^`---'~^~^~^~^";
|
|
136
|
+
(1..(1/0.0)).each{|i|s[23,6]=(i%2)==0?"Quack!":" "*6;s.tr!('>~^^~<','<^~~^>');puts s;sleep 1}
|
|
137
|
+
|
|
138
|
+
duck2: |
|
|
139
|
+
s="\e[2J\e[0;0H _\nQuack! >(*)____,\n (` =~~/\n^v^v^v^v^`---'v^v^v^v^\n";
|
|
140
|
+
i=0;loop{s[21,6]=i&1>0?'Quack!':' '*6;s.tr!(t='*.>v^<,"',t.reverse);$><<s;i+=sleep 1}
|
|
141
|
+
|
|
142
|
+
duck3: |
|
|
143
|
+
q,w='Quack! >','~^'*11;t="\e[2J\e[0;0H _\n%8s(')____,\n (` =^^/\n%20s\n";
|
|
144
|
+
i=0;loop{s=t%[i&1>0?q:'<',w[i%2,20]];$><<s;i+=sleep 1}
|
|
145
|
+
|
|
146
|
+
duck4: |
|
|
147
|
+
i=1;loop{puts"\e[2J\e[0;0H#{' '*10}_\n %8s(*)____,\n#{' '*9}
|
|
148
|
+
(` =~~/\n#{'~^~'[i%2,2]*9}"%(i&1>0?'<':'Quack! >');i+=sleep 1}
|
|
149
|
+
|
|
150
|
+
ruby_quiz: |
|
|
151
|
+
"bp6siZmijp5CiZlCiW5CgAAChpbiiZYiiZZCi5aCZ2bs".unpack("m")[0].unpack("C*").map{|x|
|
|
152
|
+
x.chr}.join.unpack("B*")[0].scan(/.{24}/){i=7;$&.scan(/..../){
|
|
153
|
+
print"\e[3#{i-=1};1;40m ";$&.each_byte{|z|print" #"[z-?0,1]*2}};puts"\e[0m"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# = opencascade.rb
|
|
2
|
+
#
|
|
3
|
+
# == Copyright (c) 2006 Thomas Sawyer
|
|
4
|
+
#
|
|
5
|
+
# Ruby License
|
|
6
|
+
#
|
|
7
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
|
8
|
+
# software under the same terms as Ruby.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
11
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
12
|
+
# FOR A PARTICULAR PURPOSE.
|
|
13
|
+
#
|
|
14
|
+
# == Author(s)
|
|
15
|
+
#
|
|
16
|
+
# * Thomas Sawyer
|
|
17
|
+
#
|
|
18
|
+
# == Developer Notes
|
|
19
|
+
#
|
|
20
|
+
# TODO Think about this more!
|
|
21
|
+
#
|
|
22
|
+
# What about parent when descending downward?
|
|
23
|
+
# Should parent even be part of OpenObject?
|
|
24
|
+
# Maybe that should be in a differnt class?
|
|
25
|
+
#
|
|
26
|
+
# Should cascading work via hash on the fly like this?
|
|
27
|
+
# Or perhaps converted all at once?
|
|
28
|
+
#
|
|
29
|
+
# Returning nil doesn't work if assigning!
|
|
30
|
+
|
|
31
|
+
# Author:: Thomas Sawyer
|
|
32
|
+
# Copyright:: Copyright (c) 2006 Thomas Sawyer
|
|
33
|
+
# License:: Ruby License
|
|
34
|
+
|
|
35
|
+
require 'facets/core/kernel/bool.rb'
|
|
36
|
+
require 'facets/more/openobject.rb'
|
|
37
|
+
#require 'facets/more/nullclass'
|
|
38
|
+
|
|
39
|
+
# = OpenCascade
|
|
40
|
+
#
|
|
41
|
+
# OpenCascade is subclass of OpenObject, but differs in a few
|
|
42
|
+
# significant ways.
|
|
43
|
+
#
|
|
44
|
+
# Mainly, and why it's labeled a "cascade", every internal Hash
|
|
45
|
+
# is trandformed into an OpenCascade dynamically upon access.
|
|
46
|
+
# This makes it easy to create "cascading" references.
|
|
47
|
+
#
|
|
48
|
+
# h = { :a => { :b => { :c => 1 } } }
|
|
49
|
+
# o = OpenCascade.new(h)
|
|
50
|
+
# o.a.b.c #=> 1
|
|
51
|
+
#
|
|
52
|
+
# OpenCascade also has an inheritance feature which allows lookup
|
|
53
|
+
# to be passed on to a "parent" if a key is not found. Simple use
|
|
54
|
+
# the keyword option ++:inherit++ (or ++:parent++).
|
|
55
|
+
#
|
|
56
|
+
# p = { :a => 1 }
|
|
57
|
+
# o = OpenCascade.new( {}, :inherit => p }
|
|
58
|
+
# o.a #=> 1
|
|
59
|
+
#
|
|
60
|
+
# OpenCascade also supports acquisition which applies inheritance
|
|
61
|
+
# to every sub-access. Eg.
|
|
62
|
+
#
|
|
63
|
+
# o = OpenCascade.new( { :a => 1, :q => {} }, :acquisition => true }
|
|
64
|
+
# o.q.a #=> 1
|
|
65
|
+
#
|
|
66
|
+
# The two can, of course, be used together.
|
|
67
|
+
#--
|
|
68
|
+
# Last, when an entry is not found, 'null' is returned rather then 'nil'.
|
|
69
|
+
# This allows for run-on entries withuot error. Eg.
|
|
70
|
+
#
|
|
71
|
+
# o = OpenCascade.new
|
|
72
|
+
# o.a.b.c #=> null
|
|
73
|
+
#
|
|
74
|
+
# Unfortuately this requires an explict test for of nil? in 'if' conditions,
|
|
75
|
+
#
|
|
76
|
+
# if o.a.b.c.null? # True if null
|
|
77
|
+
# if o.a.b.c.nil? # True if nil or null
|
|
78
|
+
# if o.a.b.c.not? # True if nil or null or false
|
|
79
|
+
#
|
|
80
|
+
# So be sure to take that into account.
|
|
81
|
+
#++
|
|
82
|
+
|
|
83
|
+
class OpenCascade < OpenObject
|
|
84
|
+
|
|
85
|
+
def initialize( init=nil, opt={} )
|
|
86
|
+
super( init )
|
|
87
|
+
@parent = opt[:inherit] || opt[:parent]
|
|
88
|
+
@acquire = opt[:acquisition] ? true : false
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def method_missing( sym, *args )
|
|
92
|
+
type = sym.to_s[-1,1]
|
|
93
|
+
name = sym.to_s.gsub(/[=!?]$/, '').to_sym
|
|
94
|
+
if type == '='
|
|
95
|
+
@table[name] = args[0]
|
|
96
|
+
elsif type == '!' and args.size > 0
|
|
97
|
+
@table[name] = args[0]
|
|
98
|
+
self
|
|
99
|
+
else
|
|
100
|
+
if @table.key?(name)
|
|
101
|
+
if Hash === @table[name]
|
|
102
|
+
if @acquire
|
|
103
|
+
self.__class__.new( @table[name], :inherit => self, :acquisition => true )
|
|
104
|
+
else
|
|
105
|
+
self.__class__.new( @table[name] )
|
|
106
|
+
end
|
|
107
|
+
else
|
|
108
|
+
@table[name]
|
|
109
|
+
end
|
|
110
|
+
elsif @parent
|
|
111
|
+
# error catch?
|
|
112
|
+
@parent.__send__(name)
|
|
113
|
+
else
|
|
114
|
+
nil
|
|
115
|
+
# Kernel.null
|
|
116
|
+
# @table[name] = instance.class.new
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def __parent__ ; @parent ; end
|
|
122
|
+
def __parent__=(x) ; @parent = x ; end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
# _____ _
|
|
129
|
+
# |_ _|__ ___| |_
|
|
130
|
+
# | |/ _ \/ __| __|
|
|
131
|
+
# | | __/\__ \ |_
|
|
132
|
+
# |_|\___||___/\__|
|
|
133
|
+
#
|
|
134
|
+
|
|
135
|
+
=begin testing
|
|
136
|
+
|
|
137
|
+
require 'test/unit'
|
|
138
|
+
|
|
139
|
+
class TC01 < Test::Unit::TestCase
|
|
140
|
+
|
|
141
|
+
def test_01_001
|
|
142
|
+
f0 = OpenCascade.new
|
|
143
|
+
f0[:a] = 1
|
|
144
|
+
assert_equal( [1], f0.to_a )
|
|
145
|
+
assert_equal( {:a=>1}, f0.to_h )
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_01_002
|
|
149
|
+
f0 = OpenCascade.new( {:a=>1} )
|
|
150
|
+
f0[:b] = 2
|
|
151
|
+
assert_equal( {:a=>1,:b=>2}, f0.to_h )
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
class TC02 < Test::Unit::TestCase
|
|
156
|
+
|
|
157
|
+
def test_02_001
|
|
158
|
+
f0 = OpenCascade.new( :f0=>"f0" )
|
|
159
|
+
h0 = { :h0=>"h0" }
|
|
160
|
+
assert_equal( OpenCascade.new( :f0=>"f0", :h0=>"h0" ), f0.__merge__( h0 ) )
|
|
161
|
+
assert_equal( {:f0=>"f0", :h0=>"h0"}, h0.merge( f0 ) )
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_02_002
|
|
165
|
+
f1 = OpenCascade.new( :f1=>"f1" )
|
|
166
|
+
h1 = { :h1=>"h1" }
|
|
167
|
+
f1.__update__( h1 )
|
|
168
|
+
h1.update( f1 )
|
|
169
|
+
assert_equal( OpenCascade.new( :f1=>"f1", :h1=>"h1" ), f1 )
|
|
170
|
+
assert_equal( {:f1=>"f1", :h1=>"h1"}, h1 )
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
class TC03 < Test::Unit::TestCase
|
|
176
|
+
|
|
177
|
+
def test_01_001
|
|
178
|
+
fo = OpenCascade.new
|
|
179
|
+
99.times{ |i| fo.__send__( "n#{i}=", 1 ) }
|
|
180
|
+
99.times{ |i|
|
|
181
|
+
assert_equal( 1, fo.__send__( "n#{i}" ) )
|
|
182
|
+
}
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
=end
|
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
# OpenObject
|
|
1
|
+
# = openobject.rb
|
|
3
2
|
#
|
|
4
|
-
# Copyright (c) 2005 Thomas Sawyer
|
|
3
|
+
# == Copyright (c) 2005 Thomas Sawyer, George Moschovitis
|
|
5
4
|
#
|
|
6
|
-
#
|
|
5
|
+
# Ruby License
|
|
7
6
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
7
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
|
8
|
+
# software under the same terms as Ruby.
|
|
10
9
|
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
11
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
12
|
+
# FOR A PARTICULAR PURPOSE.
|
|
14
13
|
#
|
|
15
|
-
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
# == Authors and Contributors
|
|
15
|
+
#
|
|
16
|
+
# * Thomas Sawyer
|
|
17
|
+
# * George Moschovitis
|
|
18
|
+
|
|
19
|
+
# Author:: Thomas Sawyer, George Moschovitis
|
|
20
|
+
# Copyright:: Copyright (c) 2005 Thomas Sawyer, George Moschovitis
|
|
21
|
+
# License:: Ruby License
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
require 'facets/core/hash/keys_to_sym'
|
|
24
|
+
require 'facets/core/hash/to_proc'
|
|
25
|
+
require 'facets/more/basicobject'
|
|
26
|
+
#require 'facets/more/nullclass'
|
|
27
|
+
|
|
28
|
+
# = OpenObject
|
|
24
29
|
#
|
|
25
30
|
# OpenObject is similar to OpenStruct, but differs in a few
|
|
26
31
|
# significant ways.
|
|
@@ -32,27 +37,15 @@
|
|
|
32
37
|
# but rather strictly uses a hash. OpenStruct creates methods, but is
|
|
33
38
|
# actaully inconsitant in their use --try #dup on an OpenStruct and
|
|
34
39
|
# all the methods disappear. Morevoer, I beleive this feature was added
|
|
35
|
-
# to OpenStruct for speed
|
|
40
|
+
# to OpenStruct for speed, but I have not been able to find this
|
|
36
41
|
# advantage in benchmark tests.
|
|
37
42
|
#
|
|
38
43
|
#--
|
|
39
|
-
#
|
|
40
44
|
# Third, when an entry is not found 'null' is returned rather then 'nil'.
|
|
41
45
|
# This allows for run-on entries withuot error. Eg.
|
|
42
46
|
#
|
|
43
47
|
# OpenObject.new.a.b.c #=> null
|
|
44
|
-
#
|
|
45
48
|
#++
|
|
46
|
-
#
|
|
47
|
-
# == Author(s)
|
|
48
|
-
#
|
|
49
|
-
# * George Moschovitis
|
|
50
|
-
# * Thomas Sawyer
|
|
51
|
-
#
|
|
52
|
-
|
|
53
|
-
require 'facets/core/hash/keys_to_sym'
|
|
54
|
-
require 'facets/more/basicobject'
|
|
55
|
-
#require 'facets/more/nullclass'
|
|
56
49
|
|
|
57
50
|
class OpenObject < BasicObject
|
|
58
51
|
|
|
@@ -71,10 +64,24 @@ class OpenObject < BasicObject
|
|
|
71
64
|
end
|
|
72
65
|
end
|
|
73
66
|
|
|
67
|
+
def to_openobject ; self ; end
|
|
68
|
+
|
|
74
69
|
def to_a ; @table.values ; end
|
|
75
70
|
def to_h ; @table.dup ; end
|
|
76
71
|
def to_hash ; @table.dup ; end
|
|
77
72
|
|
|
73
|
+
# OpenObejct can be converted to an assignment Proc.
|
|
74
|
+
#
|
|
75
|
+
# o = OpenObject.new( :a=>1 )
|
|
76
|
+
# p = o.to_proc
|
|
77
|
+
# x = OpenObject.new
|
|
78
|
+
# p[x]
|
|
79
|
+
# x.a #=> 1
|
|
80
|
+
#
|
|
81
|
+
def to_proc
|
|
82
|
+
@table.to_proc
|
|
83
|
+
end
|
|
84
|
+
|
|
78
85
|
# duplicate
|
|
79
86
|
def initialize_copy( orig )
|
|
80
87
|
super
|
|
@@ -113,11 +120,10 @@ class OpenObject < BasicObject
|
|
|
113
120
|
else
|
|
114
121
|
if @table.key?(name)
|
|
115
122
|
@table[name]
|
|
116
|
-
elsif @parent
|
|
117
|
-
|
|
123
|
+
#elsif @parent
|
|
124
|
+
# @parent.__send__(name)
|
|
118
125
|
else
|
|
119
126
|
nil
|
|
120
|
-
# Kernel.null #@table[name] = instance.class.new
|
|
121
127
|
end
|
|
122
128
|
end
|
|
123
129
|
end
|
|
@@ -136,23 +142,28 @@ class OpenObject < BasicObject
|
|
|
136
142
|
end
|
|
137
143
|
|
|
138
144
|
# For compatibility with other types of hash-like objects.
|
|
145
|
+
# Also make OpenObject usable via Enumerator.
|
|
139
146
|
def each(&yld)
|
|
140
147
|
@table.each( &yld )
|
|
141
148
|
end
|
|
142
149
|
|
|
143
|
-
#
|
|
150
|
+
# Shadow methods
|
|
144
151
|
|
|
152
|
+
# Access to internal table.
|
|
145
153
|
def __table__ ; @table ; end
|
|
146
154
|
|
|
147
|
-
|
|
148
|
-
|
|
155
|
+
#--
|
|
156
|
+
# TODO Parent feature? Or better only for OpenCascade?
|
|
157
|
+
#++
|
|
158
|
+
#def __parent__ ; @parent ; end
|
|
159
|
+
#def __parent__=(x) ; @parent = x ; end
|
|
149
160
|
|
|
150
|
-
#def
|
|
151
|
-
def
|
|
152
|
-
def
|
|
161
|
+
#def __fetch__(k) ; @table.key?(k.to_sym) ? @table[k.to_sym] : null ; end
|
|
162
|
+
def __fetch__(k) ; @table[k.to_sym] ; end
|
|
163
|
+
def __store__(k) ; @table[k.to_sym]=v ; end
|
|
153
164
|
|
|
154
165
|
def __key__?(k) ; @table.key?(k.to_sym) ; end
|
|
155
|
-
def __keys__
|
|
166
|
+
def __keys__ ; @table.keys ; end
|
|
156
167
|
|
|
157
168
|
def __update__( other )
|
|
158
169
|
other = Hash[*other] if other.is_a?(Array)
|
|
@@ -165,33 +176,33 @@ class OpenObject < BasicObject
|
|
|
165
176
|
o
|
|
166
177
|
end
|
|
167
178
|
|
|
168
|
-
|
|
179
|
+
# Core Extensions
|
|
169
180
|
|
|
181
|
+
class ::Hash
|
|
182
|
+
# Convert a Hash into an OpenObject.
|
|
183
|
+
def to_openobject
|
|
184
|
+
OpenObject.new( self )
|
|
185
|
+
end
|
|
186
|
+
end
|
|
170
187
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
elsif @parent
|
|
190
|
-
@parent.__send__(name)
|
|
191
|
-
else
|
|
192
|
-
nil
|
|
193
|
-
# Kernel.null #@table[name] = instance.class.new
|
|
194
|
-
end
|
|
188
|
+
class ::Proc
|
|
189
|
+
# Translates a Proc into an OpenObject. By droping an OpenObject into
|
|
190
|
+
# the Proc, the resulting assignments incured as the procedure is
|
|
191
|
+
# evaluated produce the OpenObject. This technique is simlar to that
|
|
192
|
+
# of MethodProbe.
|
|
193
|
+
#
|
|
194
|
+
# p = lambda { |x|
|
|
195
|
+
# x.word = "Hello"
|
|
196
|
+
# }
|
|
197
|
+
# o = p.to_openobject
|
|
198
|
+
# o.word #=> "Hello"
|
|
199
|
+
#
|
|
200
|
+
# NOTE The Proc must have an arity of one --no more and no less.
|
|
201
|
+
def to_openobject
|
|
202
|
+
raise ArgumentError, 'bad arity for converting Proc to openobject' if arity != 1
|
|
203
|
+
o = OpenObject.new
|
|
204
|
+
self.call( o )
|
|
205
|
+
o
|
|
195
206
|
end
|
|
196
207
|
end
|
|
197
208
|
|
|
@@ -247,7 +258,7 @@ end
|
|
|
247
258
|
|
|
248
259
|
class TC03 < Test::Unit::TestCase
|
|
249
260
|
|
|
250
|
-
def
|
|
261
|
+
def test_03_001
|
|
251
262
|
fo = OpenObject.new
|
|
252
263
|
99.times{ |i| fo.__send__( "n#{i}=", 1 ) }
|
|
253
264
|
99.times{ |i|
|
|
@@ -257,4 +268,16 @@ end
|
|
|
257
268
|
|
|
258
269
|
end
|
|
259
270
|
|
|
271
|
+
class TC04 < Test::Unit::TestCase
|
|
272
|
+
|
|
273
|
+
def test_04_001
|
|
274
|
+
p = lambda { |x|
|
|
275
|
+
x.word = "Hello"
|
|
276
|
+
}
|
|
277
|
+
o = p.to_openobject
|
|
278
|
+
assert_equal( "Hello", o.word )
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
end
|
|
282
|
+
|
|
260
283
|
=end
|