facets 2.8.4 → 2.9.0.pre.1
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/AUTHORS +2 -0
- data/HISTORY.rdoc +233 -94
- data/NOTICE +27 -0
- data/README.rdoc +131 -49
- data/Rakefile +190 -97
- data/lib/core/facets/applique/file_helpers.rb +33 -0
- data/lib/core/facets/array/after.rb +1 -0
- data/lib/core/facets/array/before.rb +39 -0
- data/lib/core/facets/{enumerable → array}/collapse.rb +0 -0
- data/lib/core/facets/array/collisions.rb +1 -0
- data/lib/core/facets/array/combination.rb +0 -16
- data/lib/core/facets/{enumerable → array}/commonality.rb +8 -6
- data/lib/core/facets/array/conjoin.rb +48 -17
- data/lib/core/facets/{string → array}/contains.rb +0 -0
- data/lib/core/facets/array/delete_unless.rb +1 -1
- data/lib/core/facets/array/divide.rb +20 -0
- data/lib/core/facets/array/duplicates.rb +1 -0
- data/lib/core/facets/{enumerable → array}/entropy.rb +8 -6
- data/lib/core/facets/array/extract_options.rb +31 -0
- data/lib/core/facets/array/from.rb +33 -0
- data/lib/core/facets/array/index.rb +2 -4
- data/lib/core/facets/array/indexable.rb +4 -46
- data/lib/core/facets/array/merge.rb +3 -2
- data/lib/core/facets/array/mode.rb +22 -0
- data/lib/core/facets/array/nonuniq.rb +37 -0
- data/lib/core/facets/array/only.rb +9 -3
- data/lib/core/facets/array/peek.rb +1 -0
- data/lib/core/facets/array/permutation.rb +2 -0
- data/lib/core/facets/array/poke.rb +1 -0
- data/lib/core/facets/{enumerable → array}/probability.rb +9 -6
- data/lib/core/facets/array/product.rb +1 -2
- data/lib/core/facets/array/pull.rb +30 -0
- data/lib/core/facets/array/recurse.rb +29 -0
- data/lib/core/facets/array/recursively.rb +39 -22
- data/lib/core/facets/array/rotate.rb +40 -32
- data/lib/core/facets/array/select.rb +14 -10
- data/lib/core/facets/array/splice.rb +2 -5
- data/lib/core/facets/{enumerable → array}/split.rb +2 -2
- data/lib/core/facets/array/store.rb +12 -0
- data/lib/core/facets/array/thru.rb +1 -0
- data/lib/core/facets/array/traverse.rb +10 -5
- data/lib/core/facets/array/uniq_by.rb +6 -8
- data/lib/core/facets/binding/__callee__.rb +1 -0
- data/lib/core/facets/binding/__method__.rb +1 -0
- data/lib/core/facets/binding/call_stack.rb +1 -0
- data/lib/core/facets/binding/caller.rb +6 -5
- data/lib/core/facets/binding/callstack.rb +1 -1
- data/lib/core/facets/binding/eval.rb +2 -6
- data/lib/core/facets/binding/local_variables.rb +5 -3
- data/lib/core/facets/binding/{opvars.rb → op.rb} +0 -0
- data/lib/core/facets/boolean.rb +27 -59
- data/lib/core/facets/class/descendants.rb +21 -34
- data/lib/core/facets/class/methodize.rb +6 -1
- data/lib/core/facets/class/pathize.rb +6 -1
- data/lib/core/facets/class/subclasses.rb +27 -1
- data/lib/core/facets/class/to_proc.rb +4 -1
- data/lib/core/facets/comparable/bound.rb +1 -1
- data/lib/core/facets/comparable/cmp.rb +3 -0
- data/lib/core/facets/comparable/op_get.rb +45 -0
- data/lib/core/facets/dir/ascend.rb +8 -12
- data/lib/core/facets/dir/each_child.rb +16 -0
- data/lib/core/facets/dir/multiglob.rb +15 -27
- data/lib/core/facets/dir/parent.rb +4 -1
- data/lib/core/facets/dir/recurse.rb +6 -3
- data/lib/core/facets/enumerable/accumulate.rb +47 -9
- data/lib/core/facets/enumerable/cluster_by.rb +1 -4
- data/lib/core/facets/enumerable/compact_map.rb +3 -5
- data/lib/core/facets/enumerable/count.rb +42 -30
- data/lib/core/facets/enumerable/defer.rb +1 -2
- data/lib/core/facets/enumerable/each_with_object.rb +2 -2
- data/lib/core/facets/enumerable/every.rb +16 -11
- data/lib/core/facets/enumerable/ewise.rb +11 -19
- data/lib/core/facets/enumerable/exclude.rb +4 -1
- data/lib/core/facets/enumerable/expand.rb +15 -0
- data/lib/core/facets/enumerable/filter.rb +9 -11
- data/lib/core/facets/enumerable/find_yield.rb +14 -9
- data/lib/core/facets/enumerable/frequency.rb +12 -6
- data/lib/core/facets/enumerable/graph.rb +2 -2
- data/lib/core/facets/enumerable/group_by.rb +13 -7
- data/lib/core/facets/enumerable/map_by.rb +35 -0
- data/lib/core/facets/enumerable/map_send.rb +12 -10
- data/lib/core/facets/enumerable/modulate.rb +1 -1
- data/lib/core/facets/enumerable/none.rb +5 -5
- data/lib/core/facets/enumerable/occur.rb +9 -7
- data/lib/core/facets/enumerable/one.rb +6 -6
- data/lib/core/facets/enumerable/per.rb +35 -13
- data/lib/core/facets/enumerable/recursively.rb +66 -0
- data/lib/core/facets/enumerable/take.rb +11 -15
- data/lib/core/facets/enumerable/uniq_by.rb +1 -4
- data/lib/core/facets/enumerable/visit.rb +4 -4
- data/lib/core/facets/enumerator.rb +17 -12
- data/lib/core/facets/enumerator/fx.rb +24 -8
- data/lib/core/facets/exception/detail.rb +1 -1
- data/lib/core/facets/exception/raised.rb +1 -1
- data/lib/core/facets/exception/suppress.rb +3 -1
- data/lib/core/facets/file/append.rb +2 -2
- data/lib/core/facets/file/create.rb +1 -1
- data/lib/core/facets/file/ext.rb +7 -7
- data/lib/core/facets/file/read_binary.rb +18 -0
- data/lib/core/facets/file/read_list.rb +34 -0
- data/lib/core/facets/file/rewrite.rb +9 -7
- data/lib/core/facets/file/rootname.rb +2 -12
- data/lib/core/facets/file/sanitize.rb +18 -0
- data/lib/core/facets/file/split_all.rb +1 -1
- data/lib/core/facets/file/write.rb +16 -14
- data/lib/core/facets/file/writelines.rb +5 -1
- data/lib/core/facets/functor.rb +53 -52
- data/lib/core/facets/hash/alias.rb +3 -3
- data/lib/core/facets/hash/argumentize.rb +10 -4
- data/lib/core/facets/hash/autonew.rb +10 -12
- data/lib/core/facets/hash/collate.rb +35 -49
- data/lib/core/facets/hash/count.rb +0 -2
- data/lib/core/facets/hash/data.rb +31 -4
- data/lib/core/facets/hash/{recursive_merge.rb → deep_merge.rb} +4 -10
- data/lib/core/facets/hash/delete.rb +4 -47
- data/lib/core/facets/hash/delete_at.rb +7 -0
- data/lib/core/facets/hash/delete_unless.rb +17 -0
- data/lib/core/facets/hash/delete_values.rb +32 -0
- data/lib/core/facets/hash/diff.rb +7 -1
- data/lib/core/facets/hash/except.rb +15 -17
- data/lib/core/facets/hash/inverse.rb +7 -4
- data/lib/core/facets/hash/join.rb +6 -3
- data/lib/core/facets/hash/new_with.rb +1 -1
- data/lib/core/facets/hash/op_and.rb +2 -2
- data/lib/core/facets/hash/op_mul.rb +4 -4
- data/lib/core/facets/hash/recurse.rb +29 -0
- data/lib/core/facets/hash/recursively.rb +50 -18
- data/lib/core/facets/hash/rekey.rb +50 -34
- data/lib/core/facets/hash/{merge.rb → reverse_merge.rb} +0 -0
- data/lib/core/facets/hash/select.rb +10 -6
- data/lib/core/facets/hash/slice.rb +24 -25
- data/lib/core/facets/hash/symbolize_keys.rb +74 -76
- data/lib/core/facets/hash/to_mod.rb +33 -0
- data/lib/core/facets/hash/to_proc.rb +11 -10
- data/lib/core/facets/hash/traverse.rb +4 -4
- data/lib/core/facets/hash/update.rb +1 -1
- data/lib/core/facets/hash/update_values.rb +2 -2
- data/lib/core/facets/hash/weave.rb +2 -7
- data/lib/core/facets/indexable.rb +59 -40
- data/lib/core/facets/{kernel/instance.rb → instance.rb} +3 -2
- data/lib/core/facets/integer/bit.rb +1 -0
- data/lib/core/facets/{bitmask.rb → integer/bitmask.rb} +9 -11
- data/lib/core/facets/integer/factorial.rb +1 -10
- data/lib/core/facets/integer/odd.rb +2 -4
- data/lib/core/facets/integer/of.rb +1 -1
- data/lib/core/facets/kernel/__dir__.rb +10 -6
- data/lib/core/facets/kernel/__get__.rb +8 -3
- data/lib/core/facets/kernel/__method__.rb +12 -6
- data/lib/core/facets/kernel/as.rb +61 -46
- data/lib/core/facets/kernel/ask.rb +11 -11
- data/lib/core/facets/kernel/assign.rb +40 -27
- data/lib/core/facets/kernel/assign_from.rb +1 -45
- data/lib/core/facets/kernel/attr_singleton.rb +22 -25
- data/lib/core/facets/kernel/blank.rb +84 -0
- data/lib/core/facets/kernel/call_stack.rb +56 -0
- data/lib/core/facets/kernel/callstack.rb +1 -52
- data/lib/core/facets/kernel/case.rb +8 -0
- data/lib/core/facets/kernel/clone.rb +1 -0
- data/lib/core/facets/kernel/complete.rb +10 -2
- data/lib/core/facets/kernel/constant.rb +4 -8
- data/lib/core/facets/kernel/d.rb +12 -8
- data/lib/core/facets/kernel/deep_clone.rb +1 -0
- data/lib/core/facets/kernel/deep_copy.rb +27 -2
- data/lib/core/facets/kernel/disable_warnings.rb +26 -0
- data/lib/core/facets/kernel/dup.rb +33 -0
- data/lib/core/facets/kernel/enable_warnings.rb +1 -0
- data/lib/core/facets/kernel/equate.rb +8 -5
- data/lib/core/facets/kernel/ergo.rb +4 -3
- data/lib/core/facets/kernel/extend.rb +17 -1
- data/lib/core/facets/kernel/extension.rb +3 -0
- data/lib/core/facets/kernel/here.rb +1 -2
- data/lib/core/facets/kernel/instance_class.rb +2 -1
- data/lib/core/facets/kernel/load_all.rb +1 -0
- data/lib/core/facets/kernel/load_relative.rb +1 -0
- data/lib/core/facets/kernel/maybe.rb +3 -2
- data/lib/core/facets/kernel/meta_alias.rb +9 -4
- data/lib/core/facets/kernel/meta_class.rb +4 -4
- data/lib/core/facets/kernel/meta_def.rb +0 -2
- data/lib/core/facets/kernel/meta_eval.rb +7 -5
- data/lib/core/facets/kernel/method.rb +5 -4
- data/lib/core/facets/kernel/not.rb +37 -0
- data/lib/core/facets/kernel/not_nil.rb +3 -2
- data/lib/core/facets/kernel/object_hexid.rb +9 -7
- data/lib/core/facets/kernel/object_send.rb +11 -10
- data/lib/core/facets/kernel/object_state.rb +21 -4
- data/lib/core/facets/kernel/p.rb +3 -3
- data/lib/core/facets/kernel/presence.rb +1 -0
- data/lib/core/facets/kernel/present.rb +1 -0
- data/lib/core/facets/kernel/qua_class.rb +15 -3
- data/lib/core/facets/kernel/replace.rb +1 -0
- data/lib/core/facets/kernel/require_all.rb +33 -17
- data/lib/core/facets/kernel/require_relative.rb +10 -10
- data/lib/core/facets/kernel/respond.rb +26 -7
- data/lib/core/facets/kernel/returning.rb +5 -1
- data/lib/core/facets/kernel/silence.rb +39 -41
- data/lib/core/facets/kernel/silence_warnings.rb +1 -0
- data/lib/core/facets/kernel/singleton_class.rb +2 -13
- data/lib/core/facets/kernel/super_method.rb +11 -0
- data/lib/core/facets/kernel/tap.rb +16 -7
- data/lib/core/facets/kernel/temporarily.rb +23 -0
- data/lib/core/facets/kernel/try.rb +43 -10
- data/lib/core/facets/kernel/try_dup.rb +19 -9
- data/lib/core/facets/kernel/writers.rb +91 -0
- data/lib/core/facets/matchdata/matchset.rb +4 -4
- data/lib/core/facets/method.rb +6 -0
- data/lib/core/facets/module/abstract.rb +10 -7
- data/lib/core/facets/module/alias_method_chain.rb +22 -4
- data/lib/core/facets/module/alias_module_function.rb +4 -4
- data/lib/core/facets/module/all_instance_methods.rb +19 -0
- data/lib/core/facets/module/ancestor.rb +1 -1
- data/lib/core/facets/module/anonymous.rb +25 -0
- data/lib/core/facets/module/attr_setter.rb +8 -13
- data/lib/core/facets/module/basename.rb +6 -6
- data/lib/core/facets/module/can.rb +8 -2
- data/lib/core/facets/module/class_method_defined.rb +1 -0
- data/lib/core/facets/module/extend.rb +1 -10
- data/lib/core/facets/module/instance_method.rb +3 -2
- data/lib/core/facets/module/instance_method_defined.rb +23 -0
- data/lib/core/facets/module/integrate.rb +48 -1
- data/lib/core/facets/module/is.rb +5 -5
- data/lib/core/facets/module/method_clash.rb +58 -0
- data/lib/core/facets/module/methodize.rb +7 -1
- data/lib/core/facets/module/modname.rb +22 -0
- data/lib/core/facets/module/nodef.rb +13 -0
- data/lib/core/facets/module/op.rb +37 -22
- data/lib/core/facets/module/op_add.rb +1 -0
- data/lib/core/facets/module/op_mul.rb +1 -0
- data/lib/core/facets/module/op_sub.rb +1 -0
- data/lib/core/facets/module/pathize.rb +8 -10
- data/lib/core/facets/module/redirect_method.rb +5 -5
- data/lib/core/facets/module/remove.rb +1 -0
- data/lib/core/facets/module/rename_method.rb +12 -2
- data/lib/core/facets/module/revise.rb +20 -41
- data/lib/core/facets/module/set.rb +1 -1
- data/lib/core/facets/module/singleton_method_defined.rb +1 -0
- data/lib/core/facets/module/spacename.rb +4 -4
- data/lib/core/facets/module/to_obj.rb +20 -0
- data/lib/core/facets/module/wrap_method.rb +16 -9
- data/lib/core/facets/na.rb +15 -0
- data/lib/core/facets/numeric/round.rb +4 -4
- data/lib/core/facets/numeric/round_at.rb +1 -0
- data/lib/core/facets/numeric/round_to.rb +1 -0
- data/lib/core/facets/object.rb +6 -0
- data/lib/core/facets/objectspace/reflect.rb +26 -11
- data/lib/core/facets/proc/bind.rb +7 -5
- data/lib/core/facets/proc/bind_to.rb +8 -0
- data/lib/{more/facets → core/facets/proc}/partial.rb +9 -15
- data/lib/core/facets/proc/to_method.rb +10 -5
- data/lib/core/facets/process.rb +6 -0
- data/lib/core/facets/process/daemon.rb +32 -0
- data/lib/core/facets/range/combine.rb +1 -1
- data/lib/core/facets/range/within.rb +1 -1
- data/lib/core/facets/regexp/multiline.rb +13 -0
- data/lib/core/facets/regexp/op_add.rb +18 -0
- data/lib/core/facets/regexp/op_or.rb +18 -0
- data/lib/core/facets/string/align.rb +24 -6
- data/lib/core/facets/string/bracket.rb +9 -50
- data/lib/core/facets/string/camelcase.rb +32 -23
- data/lib/core/facets/string/capitalized.rb +7 -4
- data/lib/core/facets/string/characters.rb +13 -0
- data/lib/core/facets/string/cleanlines.rb +3 -13
- data/lib/core/facets/string/cmp.rb +1 -0
- data/lib/core/facets/string/compress_lines.rb +4 -4
- data/lib/core/facets/string/divide.rb +1 -4
- data/lib/core/facets/string/each_char.rb +17 -15
- data/lib/core/facets/string/each_word.rb +5 -1
- data/lib/core/facets/string/edit_distance.rb +64 -2
- data/lib/core/facets/string/file.rb +21 -5
- data/lib/core/facets/string/indent.rb +46 -4
- data/lib/core/facets/string/interpolate.rb +3 -4
- data/lib/core/facets/string/{chomp.rb → lchomp.rb} +0 -0
- data/lib/core/facets/string/line_wrap.rb +2 -5
- data/lib/core/facets/string/lines.rb +1 -1
- data/lib/core/facets/string/methodize.rb +3 -2
- data/lib/core/facets/string/modulize.rb +3 -1
- data/lib/core/facets/string/natcmp.rb +35 -36
- data/lib/core/facets/string/nchar.rb +11 -5
- data/lib/core/facets/string/newlines.rb +10 -13
- data/lib/core/facets/string/op_div.rb +2 -2
- data/lib/core/facets/string/op_sub.rb +1 -1
- data/lib/core/facets/string/pathize.rb +12 -10
- data/lib/core/facets/string/quote.rb +93 -0
- data/lib/core/facets/string/range.rb +11 -7
- data/lib/core/facets/string/rewrite.rb +6 -10
- data/lib/core/facets/string/similarity.rb +24 -27
- data/lib/core/facets/string/splice.rb +6 -10
- data/lib/core/facets/string/squish.rb +22 -0
- data/lib/core/facets/string/start_with.rb +31 -8
- data/lib/core/facets/string/store.rb +7 -0
- data/lib/core/facets/string/titlecase.rb +1 -1
- data/lib/core/facets/string/unbracket.rb +1 -0
- data/lib/core/facets/string/underscore.rb +1 -0
- data/lib/core/facets/string/unindent.rb +1 -0
- data/lib/core/facets/string/unquote.rb +1 -0
- data/lib/core/facets/string/word_wrap.rb +2 -2
- data/lib/core/facets/string/xor.rb +4 -6
- data/lib/core/facets/symbol/as_s.rb +17 -0
- data/lib/core/facets/symbol/bang.rb +1 -0
- data/lib/core/facets/symbol/generate.rb +3 -3
- data/lib/core/facets/symbol/not.rb +1 -1
- data/lib/core/facets/symbol/op_div.rb +8 -6
- data/lib/core/facets/symbol/plain.rb +27 -1
- data/lib/core/facets/symbol/succ.rb +7 -3
- data/lib/core/facets/symbol/thrown.rb +2 -4
- data/lib/core/facets/symbol/to_proc.rb +8 -13
- data/lib/core/facets/symbol/variablize.rb +7 -5
- data/lib/core/facets/time/ago.rb +1 -1
- data/lib/core/facets/time/change.rb +19 -14
- data/lib/core/facets/time/dst_adjustment.rb +24 -0
- data/lib/core/facets/time/elapse.rb +3 -1
- data/lib/core/facets/time/future.rb +4 -4
- data/lib/core/facets/time/hence.rb +1 -97
- data/lib/core/facets/time/in.rb +93 -0
- data/lib/core/facets/time/round_to.rb +21 -0
- data/lib/core/facets/time/set.rb +9 -3
- data/lib/core/facets/time/stamp.rb +2 -1
- data/lib/core/facets/time/to_time.rb +2 -2
- data/lib/core/facets/time/trunc.rb +3 -3
- data/lib/core/facets/to_hash.rb +16 -12
- data/lib/core/facets/unboundmethod/name.rb +3 -3
- data/lib/more/facets/argvector.rb +23 -33
- data/lib/more/facets/atomicfile.rb +51 -0
- data/lib/more/facets/basicobject.rb +6 -6
- data/lib/more/facets/cgi.rb +3 -9
- data/lib/more/facets/continuation.rb +2 -2
- data/lib/more/facets/date.rb +56 -54
- data/lib/more/facets/erb.rb +15 -12
- data/lib/more/facets/fileutils.rb +1 -20
- data/lib/more/facets/fileutils/cp_rx.rb +1 -1
- data/lib/more/facets/fileutils/safe_ln.rb +1 -2
- data/lib/more/facets/fileutils/slice.rb +11 -99
- data/lib/more/facets/fileutils/wc.rb +5 -56
- data/lib/more/facets/fileutils/whereis.rb +8 -6
- data/lib/more/facets/fileutils/which.rb +5 -48
- data/lib/more/facets/find.rb +16 -0
- data/lib/more/facets/getoptlong.rb +11 -23
- data/lib/more/facets/main.rb +27 -40
- data/lib/more/facets/memoizable.rb +141 -0
- data/lib/{core → more}/facets/metaid.rb +2 -2
- data/lib/more/facets/multipliers.rb +6 -38
- data/lib/more/facets/multiton.rb +14 -13
- data/lib/more/facets/nullclass.rb +3 -39
- data/lib/more/facets/opesc.rb +42 -23
- data/lib/more/facets/ostruct.rb +32 -59
- data/lib/more/facets/pathname.rb +53 -43
- data/lib/more/facets/platform.rb +87 -100
- data/lib/more/facets/random.rb +129 -172
- data/lib/more/facets/rbconfig.rb +130 -25
- data/lib/more/facets/reference.rb +7 -23
- data/lib/more/facets/set.rb +5 -0
- data/lib/more/facets/shellwords.rb +22 -4
- data/lib/more/facets/thread.rb +48 -25
- data/lib/more/facets/timer.rb +50 -117
- data/lib/more/facets/tuple.rb +31 -74
- data/lib/more/facets/uri.rb +29 -67
- data/lib/more/facets/yaml.rb +28 -44
- data/lib/more/facets/zlib.rb +3 -3
- data/lib/tour/facets/array/median.rb +14 -0
- data/lib/tour/facets/array/percentile.rb +29 -0
- data/lib/{core/facets/class/prepend.rb → tour/facets/class/preallocate.rb} +10 -10
- data/lib/{more/facets → tour/facets/integer}/roman.rb +8 -7
- data/lib/{core → tour}/facets/kernel/demo.rb +3 -2
- data/lib/{core → tour}/facets/kernel/eigenclass.rb +1 -3
- data/lib/{core → tour}/facets/kernel/instance_exec.rb +3 -6
- data/lib/tour/facets/kernel/memo.rb +38 -0
- data/lib/tour/facets/kernel/trap_chain.rb +20 -0
- data/lib/tour/facets/method/memoize.rb +10 -0
- data/lib/tour/facets/module/attr_class_accessor.rb +33 -0
- data/lib/tour/facets/module/attr_inheritor.rb +13 -0
- data/lib/{more → tour}/facets/module/attr_tester.rb +0 -3
- data/lib/{more → tour}/facets/module/attr_validator.rb +0 -0
- data/lib/tour/facets/module/cattr.rb +240 -0
- data/lib/tour/facets/module/class_accessor.rb +27 -0
- data/lib/tour/facets/module/class_extend.rb +82 -0
- data/lib/{more/facets/inheritor.rb → tour/facets/module/class_inheritor.rb} +12 -38
- data/lib/tour/facets/module/copy_inheritor.rb +39 -0
- data/lib/tour/facets/module/enclosure.rb +62 -0
- data/lib/tour/facets/module/enclosures.rb +1 -0
- data/lib/tour/facets/module/include_as.rb +1 -0
- data/lib/{more/facets → tour/facets/module}/instance_function.rb +26 -16
- data/lib/tour/facets/module/memoize.rb +12 -0
- data/lib/tour/facets/module/method_space.rb +94 -0
- data/lib/{core → tour}/facets/module/module_load.rb +0 -0
- data/lib/{core → tour}/facets/module/prepend.rb +4 -4
- data/lib/tour/facets/regexp/op_or.rb +11 -0
- data/lib/tour/facets/string/crypt.rb +16 -0
- data/lib/tour/facets/string/roman.rb +1 -0
- data/meta/data.rb +29 -0
- data/meta/gemfile +10 -0
- data/meta/profile +24 -0
- data/qed/applique/file_helpers.rb +24 -0
- data/qed/core/array/combination.rdoc +19 -0
- data/qed/core/array/delete.rdoc +23 -0
- data/qed/core/array/index.rdoc +14 -0
- data/qed/core/array/merge.rdoc +15 -0
- data/qed/core/array/only.rdoc +9 -0
- data/qed/core/array/pad.rdoc +28 -0
- data/qed/core/array/permutation.rdoc +10 -0
- data/qed/core/array/product.rdoc +26 -0
- data/qed/core/array/recursively.rdoc +16 -0
- data/qed/core/array/rotate.rdoc +30 -0
- data/qed/core/array/select.rdoc +8 -0
- data/qed/core/array/uniq_by.rdoc +9 -0
- data/qed/core/binding/caller.rdoc +59 -0
- data/qed/core/binding/defined.rdoc +10 -0
- data/qed/core/binding/eval.rdoc +8 -0
- data/qed/core/binding/local_variables.rdoc +26 -0
- data/qed/core/binding/opvars.rdoc +16 -0
- data/qed/core/binding/self.rdoc +6 -0
- data/qed/core/class/descendants.rdoc +10 -0
- data/qed/core/class/to_proc.rdoc +8 -0
- data/qed/core/comparable/cap.rdoc +20 -0
- data/qed/core/comparable/clip.rdoc +37 -0
- data/qed/core/comparable/cmp.rdoc +18 -0
- data/qed/core/comparable/op_get.rdoc +29 -0
- data/qed/core/dir/ascend.rdoc +24 -0
- data/qed/core/dir/descend.rdoc +14 -0
- data/qed/core/dir/multiglob.rdoc +41 -0
- data/qed/core/dir/parent.rdoc +6 -0
- data/qed/core/dir/recurse.rdoc +41 -0
- data/qed/core/exception/detail.rdoc +12 -0
- data/qed/core/facets.rdoc +6 -0
- data/qed/core/filetest/root.rdoc +6 -0
- data/qed/core/hash/recursively.rdoc +21 -0
- data/qed/core/indexable.rdoc +95 -0
- data/qed/core/integer/bitmask.rdoc +46 -0
- data/qed/core/integer/even.rdoc +12 -0
- data/qed/core/integer/factorial.rdoc +10 -0
- data/qed/core/integer/length.rdoc +7 -0
- data/qed/core/integer/multiple.rdoc +10 -0
- data/qed/core/integer/odd.rdoc +12 -0
- data/qed/core/integer/of.rdoc +14 -0
- data/qed/core/integer/ordinal.rdoc +9 -0
- data/qed/core/matchdata/match.rdoc +7 -0
- data/qed/core/matchdata/matchset.rdoc +15 -0
- data/qed/core/string/align.rdoc +34 -0
- data/qed/core/string/bracket.rdoc +35 -0
- data/qed/core/string/bytes.rdoc +8 -0
- data/qed/core/string/camelcase.rdoc +67 -0
- data/qed/core/string/capitalized.rdoc +27 -0
- data/qed/core/string/characters.rdoc +11 -0
- data/qed/core/string/cleanlines.rdoc +10 -0
- data/qed/core/string/cleave.rdoc +49 -0
- data/qed/core/string/divide.rdoc +9 -0
- data/qed/core/string/each_char.rdoc +9 -0
- data/qed/core/string/each_word.rdoc +9 -0
- data/qed/core/string/end_with.rdoc +6 -0
- data/qed/core/string/expand_tabs.rdoc +69 -0
- data/qed/core/string/fold.rdoc +14 -0
- data/qed/core/string/indent.rdoc +65 -0
- data/qed/core/string/interpolate.rdoc +7 -0
- data/qed/core/string/lchomp.rdoc +14 -0
- data/qed/core/string/line_wrap.rdoc +7 -0
- data/qed/core/string/lines.rdoc +8 -0
- data/qed/core/string/margin.rdoc +92 -0
- data/qed/core/string/methodize.rdoc +22 -0
- data/qed/core/string/modulize.rdoc +22 -0
- data/qed/core/string/mscan.rdoc +10 -0
- data/qed/core/string/natcmp.rdoc +10 -0
- data/qed/core/string/nchar.rdoc +9 -0
- data/qed/core/string/newlines.rdoc +9 -0
- data/qed/core/string/op_sub.rdoc +7 -0
- data/qed/core/string/pathize.rdoc +22 -0
- data/qed/core/string/quote.rdoc +20 -0
- data/qed/core/string/range.rdoc +19 -0
- data/qed/core/string/rewrite.rdoc +9 -0
- data/qed/core/string/shatter.rdoc +9 -0
- data/qed/core/string/snakecase.rdoc +9 -0
- data/qed/core/string/splice.rdoc +28 -0
- data/qed/core/string/start_with.rdoc +7 -0
- data/qed/core/string/subtract.rdoc +8 -0
- data/qed/core/string/tab.rdoc +16 -0
- data/qed/core/string/tabto.rdoc +29 -0
- data/qed/core/string/titlecase.rdoc +8 -0
- data/qed/core/string/to_re.rdoc +22 -0
- data/qed/core/string/unfold.rdoc +9 -0
- data/qed/core/string/unindent.rdoc +65 -0
- data/qed/core/string/unquote.rdoc +6 -0
- data/qed/core/string/variablize.rdoc +7 -0
- data/qed/core/string/word_wrap.rdoc +54 -0
- data/qed/core/string/words.rdoc +13 -0
- data/qed/core/string/xor.rdoc +8 -0
- data/qed/more/basic_object.rdoc +22 -0
- data/qed/more/memoizable.rdoc +134 -0
- data/qed/more/mulititon.rdoc +156 -0
- data/qed/tour/module/cattr.rdoc +43 -0
- data/qed/tour/module/class_extend.rdoc +64 -0
- data/qed/tour/module/class_inheritor.rdoc +126 -0
- data/qed/tour/module/copy_inheritor.rdoc +30 -0
- data/qed/tour/module/method_space.rdoc +55 -0
- data/test/core/array/test_after.rb +17 -0
- data/test/core/array/test_before.rb +17 -0
- data/test/core/array/test_collapse.rb +10 -0
- data/test/core/array/test_combination.rb +9 -17
- data/test/core/array/test_commonality.rb +27 -0
- data/test/core/array/test_conjoin.rb +46 -0
- data/test/core/array/test_contains.rb +10 -0
- data/test/core/array/test_delete.rb +12 -15
- data/test/core/array/test_divide.rb +10 -0
- data/test/core/array/test_duplicates.rb +11 -0
- data/test/core/array/test_entropy.rb +15 -0
- data/test/core/array/test_extract_options.rb +20 -0
- data/test/core/array/test_first.rb +13 -0
- data/test/core/array/test_index.rb +6 -7
- data/test/core/array/test_last.rb +13 -0
- data/test/core/array/test_merge.rb +6 -9
- data/test/core/array/test_mode.rb +13 -0
- data/test/core/array/test_nonuniq.rb +17 -0
- data/test/core/array/test_not_empty.rb +13 -0
- data/test/core/array/test_only.rb +7 -15
- data/test/core/array/test_pad.rb +10 -11
- data/test/core/array/test_peek.rb +24 -0
- data/test/core/array/test_permutation.rb +11 -9
- data/test/core/array/test_poke.rb +17 -0
- data/test/core/array/test_probability.rb +11 -0
- data/test/core/array/test_product.rb +25 -12
- data/test/core/array/test_pull.rb +11 -0
- data/test/core/array/test_recurse.rb +17 -0
- data/test/core/array/test_recursively.rb +29 -0
- data/test/core/array/test_rotate.rb +17 -10
- data/test/core/array/test_select.rb +4 -9
- data/test/core/array/test_splice.rb +17 -0
- data/test/core/array/test_split.rb +18 -0
- data/test/core/array/test_store.rb +20 -0
- data/test/core/array/test_traverse.rb +18 -0
- data/test/core/array/test_uniq_by.rb +13 -0
- data/test/core/binding/test_caller.rb +31 -30
- data/test/core/binding/test_defined.rb +9 -11
- data/test/core/binding/test_eval.rb +6 -9
- data/test/core/binding/test_local_variables.rb +24 -16
- data/test/core/binding/test_op.rb +20 -0
- data/test/core/binding/test_self.rb +6 -11
- data/test/core/class/test_descendents.rb +9 -8
- data/test/core/class/test_subclasses.rb +17 -0
- data/test/core/class/test_to_proc.rb +7 -8
- data/test/core/comparable/test_bound.rb +28 -0
- data/test/core/comparable/test_cap.rb +14 -15
- data/test/core/comparable/test_clip.rb +22 -17
- data/test/core/comparable/test_cmp.rb +6 -29
- data/test/core/comparable/{test_comparable.rb → test_op_get.rb} +19 -15
- data/test/core/denumerable_tc.rb +154 -0
- data/test/core/dir/test_ascend.rb +11 -19
- data/test/core/dir/test_descend.rb +7 -12
- data/test/core/dir/test_each_child.rb +18 -0
- data/test/core/dir/test_multiglob.rb +11 -36
- data/test/core/dir/test_parent.rb +4 -5
- data/test/core/dir/test_recurse.rb +10 -34
- data/test/core/enumerable/test_accumulate.rb +36 -0
- data/test/core/enumerable/test_cluster_by.rb +14 -10
- data/test/core/enumerable/test_compact_map.rb +19 -15
- data/test/core/enumerable/test_count.rb +9 -12
- data/test/core/enumerable/test_defer.rb +13 -78
- data/test/core/enumerable/test_each_by.rb +29 -39
- data/test/core/enumerable/test_each_with_object.rb +14 -0
- data/test/core/enumerable/test_every.rb +11 -12
- data/test/core/enumerable/test_ewise.rb +15 -16
- data/test/core/enumerable/test_exclude.rb +11 -0
- data/test/core/enumerable/test_expand.rb +11 -0
- data/test/core/enumerable/test_filter.rb +15 -0
- data/test/core/enumerable/test_find_yield.rb +43 -29
- data/test/core/enumerable/test_frequency.rb +6 -6
- data/test/core/enumerable/test_graph.rb +38 -0
- data/test/core/enumerable/test_group_by.rb +18 -17
- data/test/core/enumerable/test_map_by.rb +23 -0
- data/test/core/enumerable/test_map_send.rb +10 -0
- data/test/core/enumerable/test_map_with_index.rb +9 -5
- data/test/core/enumerable/test_mash.rb +5 -30
- data/test/core/enumerable/test_modulate.rb +4 -5
- data/test/core/enumerable/test_none.rb +6 -4
- data/test/core/enumerable/test_occur.rb +7 -8
- data/test/core/enumerable/test_one.rb +7 -4
- data/test/core/enumerable/test_per.rb +7 -10
- data/test/core/enumerable/test_purge.rb +18 -0
- data/test/core/enumerable/test_recursively.rb +29 -0
- data/test/core/enumerable/test_sum.rb +9 -0
- data/test/core/enumerable/test_take.rb +5 -7
- data/test/core/enumerable/test_uniq_by.rb +13 -7
- data/test/core/enumerable/test_visit.rb +10 -0
- data/test/core/enumerator/test_fx.rb +12 -0
- data/test/core/enumerator/test_new.rb +17 -0
- data/test/core/enumerator_tc.rb +28 -0
- data/test/core/exception/test_detail.rb +16 -0
- data/test/core/exception/test_raised.rb +13 -0
- data/test/core/exception/test_suppress.rb +14 -0
- data/test/core/file/test_append.rb +19 -0
- data/test/core/file/test_create.rb +8 -26
- data/test/core/file/test_ext.rb +15 -19
- data/test/core/file/test_null.rb +4 -6
- data/test/core/file/test_read_binary.rb +15 -0
- data/test/core/file/test_read_list.rb +12 -0
- data/test/core/file/test_rewrite.rb +18 -27
- data/test/core/file/test_rootname.rb +9 -0
- data/test/core/file/test_sanitize.rb +28 -0
- data/test/core/file/test_split_all.rb +5 -27
- data/test/core/file/test_write.rb +10 -23
- data/test/core/file/test_writelines.rb +10 -15
- data/test/core/filetest/test_root.rb +10 -0
- data/test/core/functor_tc.rb +29 -0
- data/test/core/hash/test_alias.rb +8 -7
- data/test/core/hash/test_argumentize.rb +19 -0
- data/test/core/hash/test_at.rb +5 -6
- data/test/core/hash/test_autonew.rb +12 -5
- data/test/core/hash/test_collate.rb +41 -23
- data/test/core/hash/test_count.rb +10 -0
- data/test/core/hash/test_data.rb +31 -0
- data/test/core/hash/test_dearray_values.rb +7 -8
- data/test/core/hash/test_deep_merge.rb +23 -0
- data/test/core/hash/test_delete_at.rb +14 -0
- data/test/core/hash/test_delete_unless.rb +14 -0
- data/test/core/hash/test_delete_values.rb +22 -0
- data/test/core/hash/test_diff.rb +12 -0
- data/test/core/hash/test_expect.rb +16 -0
- data/test/core/hash/test_graph.rb +32 -0
- data/test/core/hash/test_insert.rb +10 -7
- data/test/core/hash/test_inverse.rb +8 -7
- data/test/core/hash/test_join.rb +28 -0
- data/test/core/hash/test_keys.rb +21 -12
- data/test/core/hash/test_new_with.rb +13 -0
- data/test/core/hash/test_op_add.rb +5 -6
- data/test/core/hash/test_op_and.rb +11 -12
- data/test/core/hash/test_op_mul.rb +5 -6
- data/test/core/hash/test_op_or.rb +5 -6
- data/test/core/hash/test_op_push.rb +18 -18
- data/test/core/hash/test_op_sub.rb +8 -9
- data/test/core/hash/test_recurse.rb +18 -0
- data/test/core/hash/test_recursively.rb +67 -0
- data/test/core/hash/test_rekey.rb +46 -48
- data/test/core/hash/test_replace_each.rb +5 -6
- data/test/core/hash/test_reverse_merge.rb +27 -0
- data/test/core/hash/test_select.rb +23 -18
- data/test/core/hash/test_slice.rb +7 -10
- data/test/core/hash/test_stringify_keys.rb +8 -11
- data/test/core/hash/test_swap.rb +5 -5
- data/test/core/hash/test_symbolize_keys.rb +9 -11
- data/test/core/hash/test_to_mod.rb +20 -0
- data/test/core/hash/test_to_proc.rb +19 -0
- data/test/core/hash/test_to_struct.rb +18 -0
- data/test/core/hash/test_traverse.rb +11 -12
- data/test/core/hash/test_update_each.rb +5 -6
- data/test/core/hash/test_update_keys.rb +6 -7
- data/test/core/hash/test_update_values.rb +6 -6
- data/test/core/hash/test_weave.rb +5 -9
- data/test/core/hash/test_zipnew.rb +4 -5
- data/test/core/indexable_tc.rb +177 -0
- data/test/core/integer/test_bitmask.rb +34 -27
- data/test/core/integer/test_even.rb +7 -6
- data/test/core/integer/test_factorial.rb +16 -9
- data/test/core/integer/test_multiple.rb +3 -4
- data/test/core/integer/test_odd.rb +7 -6
- data/test/core/integer/test_of.rb +12 -7
- data/test/core/integer/test_ordinal.rb +14 -8
- data/test/core/kernel/test_as.rb +48 -39
- data/test/core/kernel/test_ask.rb +8 -0
- data/test/core/kernel/test_assign.rb +29 -30
- data/test/core/kernel/test_assign_from.rb +31 -11
- data/test/core/kernel/test_attr_singleton.rb +16 -18
- data/test/core/kernel/test_blank.rb +83 -0
- data/test/core/kernel/test_callstack.rb +8 -5
- data/test/core/kernel/test_class.rb +10 -0
- data/test/core/kernel/test_complete.rb +15 -0
- data/test/core/kernel/test_constant.rb +7 -11
- data/test/core/kernel/test_d.rb +10 -0
- data/test/core/kernel/test_deep_copy.rb +33 -0
- data/test/core/kernel/test_dir.rb +16 -0
- data/test/core/kernel/test_disable_warnings.rb +26 -0
- data/test/core/kernel/test_dup.rb +66 -0
- data/test/core/kernel/test_ergo.rb +23 -0
- data/test/core/kernel/test_extension.rb +14 -0
- data/test/core/kernel/test_get.rb +34 -0
- data/test/core/kernel/test_here.rb +4 -10
- data/test/core/kernel/test_in.rb +5 -6
- data/test/core/kernel/test_instance_assign.rb +7 -8
- data/test/core/kernel/test_instance_class.rb +4 -5
- data/test/core/kernel/test_instance_send.rb +22 -0
- data/test/core/kernel/test_maybe.rb +9 -0
- data/test/core/kernel/test_meta_alias.rb +14 -0
- data/test/core/kernel/test_meta_class.rb +25 -0
- data/test/core/kernel/test_meta_def.rb +11 -0
- data/test/core/kernel/test_meta_eval.rb +14 -0
- data/test/core/kernel/test_method.rb +10 -10
- data/test/core/kernel/test_not.rb +44 -0
- data/test/core/kernel/test_not_nil.rb +16 -8
- data/test/core/kernel/test_object_class.rb +7 -8
- data/test/core/kernel/test_object_hexid.rb +4 -5
- data/test/core/kernel/test_object_send.rb +21 -0
- data/test/core/kernel/test_object_state.rb +72 -0
- data/test/core/kernel/test_presence.rb +29 -0
- data/test/core/kernel/test_qua_class.rb +19 -0
- data/test/core/kernel/test_replace.rb +64 -0
- data/test/core/kernel/test_require_all.rb +11 -0
- data/test/core/kernel/test_require_relative.rb +12 -0
- data/test/core/kernel/test_respond.rb +32 -0
- data/test/core/kernel/test_returning.rb +4 -7
- data/test/core/kernel/test_silence.rb +17 -8
- data/test/core/kernel/test_singleton_class.rb +11 -0
- data/test/core/kernel/test_source_location.rb +18 -0
- data/test/core/kernel/test_super_method.rb +20 -0
- data/test/core/kernel/test_tap.rb +24 -9
- data/test/core/kernel/test_temporarily.rb +21 -0
- data/test/core/kernel/test_true.rb +23 -0
- data/test/core/kernel/test_try.rb +27 -0
- data/test/core/kernel/test_try_dup.rb +46 -0
- data/test/core/kernel/test_val.rb +11 -12
- data/test/core/kernel/test_with.rb +14 -0
- data/test/core/kernel/test_writers.rb +49 -0
- data/test/core/matchdata/test_match.rb +4 -8
- data/test/core/matchdata/test_matchset.rb +8 -10
- data/test/core/module/test_abstract.rb +13 -16
- data/test/core/module/test_alias_accessor.rb +14 -13
- data/test/core/module/test_alias_method_chain.rb +21 -20
- data/test/core/module/test_alias_module_function.rb +14 -12
- data/test/core/module/test_all_instance_methods.rb +23 -0
- data/test/core/module/test_ancestor.rb +6 -5
- data/test/core/module/test_anonymous.rb +14 -0
- data/test/core/module/test_attr_setter.rb +24 -0
- data/test/core/module/test_basename.rb +4 -5
- data/test/core/module/test_can.rb +10 -11
- data/test/core/module/test_class.rb +10 -13
- data/test/core/module/test_class_def.rb +18 -0
- data/test/core/module/test_instance_method.rb +16 -0
- data/test/core/module/test_instance_method_defined.rb +26 -0
- data/test/core/module/test_integrate.rb +15 -14
- data/test/core/module/test_is.rb +34 -10
- data/test/core/module/test_method_clash.rb +50 -0
- data/test/core/module/test_methodize.rb +12 -5
- data/test/core/module/test_modname.rb +9 -0
- data/test/core/module/test_module_def.rb +18 -0
- data/test/core/module/test_nodef.rb +15 -0
- data/test/core/module/test_op.rb +23 -25
- data/test/core/module/test_pathize.rb +11 -9
- data/test/core/module/test_redefine_method.rb +14 -19
- data/test/core/module/test_redirect_method.rb +14 -15
- data/test/core/module/test_remove.rb +15 -0
- data/test/core/module/test_rename_method.rb +16 -17
- data/test/core/module/test_revise.rb +33 -34
- data/test/core/module/test_set.rb +26 -0
- data/test/core/module/test_spacename.rb +5 -8
- data/test/core/module/test_to_obj.rb +16 -0
- data/test/core/module/test_wrap_method.rb +15 -15
- data/test/core/nilclass/test_to_f.rb +4 -5
- data/test/core/numeric/test_approx.rb +4 -4
- data/test/core/numeric/test_distance.rb +6 -7
- data/test/core/numeric/test_length.rb +12 -0
- data/test/core/numeric/test_round.rb +42 -33
- data/test/core/numeric/test_spacing.rb +8 -7
- data/test/core/proc/test_bind.rb +7 -7
- data/test/core/proc/test_bind_to.rb +13 -0
- data/test/core/proc/test_compose.rb +8 -9
- data/test/core/proc/test_curry.rb +11 -13
- data/test/core/proc/test_partial.rb +23 -0
- data/test/core/proc/test_to_method.rb +28 -15
- data/test/core/proc/test_update.rb +11 -0
- data/test/core/range/test_combine.rb +13 -7
- data/test/core/range/test_overlap.rb +3 -7
- data/test/core/range/test_to_r.rb +6 -7
- data/test/core/range/test_umbrella.rb +28 -0
- data/test/core/range/test_within.rb +3 -27
- data/test/core/regexp/test_arity.rb +11 -8
- data/test/core/regexp/test_multiline.rb +15 -0
- data/test/core/regexp/test_op_add.rb +11 -0
- data/test/core/regexp/test_op_or.rb +12 -0
- data/test/core/regexp/test_to_re.rb +6 -7
- data/test/core/string/test_align.rb +13 -11
- data/test/core/string/test_bracket.rb +21 -52
- data/test/core/string/test_bytes.rb +4 -5
- data/test/core/string/test_camelcase.rb +43 -35
- data/test/core/string/test_capitalized.rb +14 -15
- data/test/core/string/test_characters.rb +11 -0
- data/test/core/string/test_cleanlines.rb +4 -5
- data/test/core/string/test_cleave.rb +17 -26
- data/test/core/string/test_cmp.rb +14 -0
- data/test/core/string/test_compress_lines.rb +14 -0
- data/test/core/string/test_divide.rb +4 -5
- data/test/core/string/test_each_char.rb +4 -5
- data/test/core/string/test_each_word.rb +4 -5
- data/test/core/string/test_edit_distance.rb +16 -0
- data/test/core/string/test_end_with.rb +9 -5
- data/test/core/string/test_exclude.rb +19 -0
- data/test/core/string/test_expand_tabs.rb +39 -26
- data/test/core/string/test_file.rb +11 -0
- data/test/core/string/test_fold.rb +6 -7
- data/test/core/string/test_indent.rb +51 -45
- data/test/core/string/test_index_all.rb +10 -0
- data/test/core/string/test_interpolate.rb +4 -8
- data/test/core/string/test_lchomp.rb +6 -7
- data/test/core/string/test_line_wrap.rb +5 -6
- data/test/core/string/test_lines.rb +4 -5
- data/test/core/string/test_lowercase.rb +14 -0
- data/test/core/string/test_margin.rb +17 -18
- data/test/core/string/test_methodize.rb +8 -9
- data/test/core/string/test_modulize.rb +8 -9
- data/test/core/string/test_mscan.rb +6 -7
- data/test/core/string/test_natcmp.rb +8 -12
- data/test/core/string/test_nchar.rb +7 -8
- data/test/core/string/test_newlines.rb +4 -5
- data/test/core/string/test_op_div.rb +11 -0
- data/test/core/string/test_op_sub.rb +4 -5
- data/test/core/string/test_pathize.rb +11 -12
- data/test/core/string/test_quote.rb +38 -0
- data/test/core/string/test_range.rb +12 -12
- data/test/core/string/test_rewrite.rb +5 -6
- data/test/core/string/test_shatter.rb +6 -7
- data/test/core/string/test_similarity.rb +10 -0
- data/test/core/string/test_snakecase.rb +7 -8
- data/test/core/string/test_splice.rb +13 -14
- data/test/core/string/test_squish.rb +23 -0
- data/test/core/string/test_start_with.rb +9 -5
- data/test/core/string/test_store.rb +12 -0
- data/test/core/string/test_subtract.rb +6 -7
- data/test/core/string/test_tab.rb +5 -6
- data/test/core/string/test_tabto.rb +5 -6
- data/test/core/string/test_titlecase.rb +4 -5
- data/test/core/string/test_to_re.rb +15 -15
- data/test/core/string/test_unbracket.rb +26 -0
- data/test/core/string/test_underscore.rb +17 -0
- data/test/core/string/test_unfold.rb +4 -5
- data/test/core/string/test_unindent.rb +100 -0
- data/test/core/string/test_unquote.rb +9 -0
- data/test/core/string/test_uppercase.rb +18 -0
- data/test/core/string/test_variablize.rb +4 -5
- data/test/core/string/test_word_wrap.rb +50 -27
- data/test/core/string/test_words.rb +7 -22
- data/test/core/string/test_xor.rb +4 -5
- data/test/core/symbol/test_as_s.rb +11 -0
- data/test/core/symbol/test_bang.rb +11 -0
- data/test/core/symbol/test_chomp.rb +6 -7
- data/test/core/symbol/test_generate.rb +8 -12
- data/test/core/symbol/test_not.rb +7 -5
- data/test/core/symbol/test_op_div.rb +11 -0
- data/test/core/symbol/test_plain.rb +4 -5
- data/test/core/symbol/test_query.rb +3 -4
- data/test/core/symbol/test_setter.rb +3 -4
- data/test/core/symbol/test_succ.rb +6 -7
- data/test/core/symbol/test_to_proc.rb +13 -13
- data/test/core/symbol/test_variablize.rb +10 -0
- data/test/core/time/test_ago.rb +127 -0
- data/test/core/time/test_change.rb +6 -8
- data/test/core/time/test_dst_adjustment.rb +10 -0
- data/test/core/time/test_elapse.rb +3 -5
- data/test/core/time/test_future.rb +21 -0
- data/test/core/time/test_hence.rb +9 -121
- data/test/core/time/test_in.rb +126 -0
- data/test/core/time/test_past.rb +21 -0
- data/test/core/time/test_round_to.rb +28 -0
- data/test/core/time/test_set.rb +39 -0
- data/test/core/time/test_stamp.rb +19 -14
- data/test/core/time/test_to_time.rb +5 -6
- data/test/core/time/test_trunc.rb +13 -16
- data/test/core/to_hash_tc.rb +163 -0
- data/test/core/unboundmethod/test_arguments.rb +8 -8
- data/test/core/unboundmethod/test_name.rb +6 -6
- data/test/more/test_argvector.rb +27 -27
- data/test/more/test_date.rb +28 -32
- data/test/more/test_memoizable.rb +38 -0
- data/test/more/test_multipliers.rb +45 -48
- data/test/more/test_ostruct.rb +91 -93
- data/test/more/test_random.rb +97 -90
- data/test/more/test_shellwords.rb +46 -11
- data/test/more/test_thread.rb +8 -9
- data/test/more/test_timer.rb +17 -32
- data/test/more/test_tuple.rb +29 -23
- data/test/more/test_uri.rb +10 -13
- data/test/tour/array/test_median.rb +10 -0
- data/test/tour/array/test_percentile.rb +10 -0
- data/test/tour/class/test_preallocate.rb +27 -0
- data/test/tour/module/test_cattr.rb +45 -0
- data/test/tour/module/test_class_extend.rb +66 -0
- data/test/tour/module/test_class_inheritor.rb +148 -0
- data/test/tour/module/test_copy_inheritor.rb +32 -0
- data/test/tour/module/test_enclosure.rb +20 -0
- data/test/tour/module/test_instance_function.rb +26 -0
- data/test/tour/module/test_memoize.rb +30 -0
- data/test/tour/module/test_method_space.rb +64 -0
- data/test/tour/module/test_module_load.rb +19 -0
- data/test/tour/module/test_prepend.rb +24 -0
- metadata +658 -278
- data/NOTES +0 -143
- data/demo/hook.rdoc +0 -49
- data/demo/scenario_require.rdoc +0 -7
- data/lib/core/facets-live.rb +0 -19
- data/lib/core/facets-load.rb +0 -12
- data/lib/core/facets/array/recursive.rb +0 -91
- data/lib/core/facets/array/stackable.rb +0 -33
- data/lib/core/facets/blank.rb +0 -60
- data/lib/core/facets/cattr.rb +0 -2
- data/lib/core/facets/class/cattr.rb +0 -112
- data/lib/core/facets/class/cattr_accessor.rb +0 -1
- data/lib/core/facets/class/cattr_reader.rb +0 -1
- data/lib/core/facets/class/cattr_writer.rb +0 -1
- data/lib/core/facets/class/descendents.rb +0 -1
- data/lib/core/facets/comparable/comparable.rb +0 -42
- data/lib/core/facets/duplicable.rb +0 -32
- data/lib/core/facets/enumerable/collisions.rb +0 -1
- data/lib/core/facets/enumerable/divide.rb +0 -33
- data/lib/core/facets/enumerable/duplicates.rb +0 -38
- data/lib/core/facets/enumerable/mode.rb +0 -16
- data/lib/core/facets/enumerable/recursive.rb +0 -75
- data/lib/core/facets/file/read.rb +0 -41
- data/lib/core/facets/hash/group_by_value.rb +0 -65
- data/lib/core/facets/hash/recursive.rb +0 -180
- data/lib/core/facets/hash/to_module.rb +0 -26
- data/lib/core/facets/kernel/__here__.rb +0 -14
- data/lib/core/facets/kernel/populate.rb +0 -2
- data/lib/core/facets/kernel/require_local.rb +0 -31
- data/lib/core/facets/kernel/resc.rb +0 -16
- data/lib/core/facets/kernel/set_from.rb +0 -2
- data/lib/core/facets/module/conflict.rb +0 -62
- data/lib/core/facets/module/instance_methods.rb +0 -38
- data/lib/core/facets/module/modspace.rb +0 -22
- data/lib/core/facets/module/module_require.rb +0 -1
- data/lib/core/facets/module/nesting.rb +0 -18
- data/lib/core/facets/stackable.rb +0 -86
- data/lib/core/facets/string/chars.rb +0 -20
- data/lib/core/facets/symbol/re_s.rb +0 -18
- data/lib/core/facets/time/advance.rb +0 -18
- data/lib/core/facets/time/round.rb +0 -17
- data/lib/more/facets/ansicode.rb +0 -306
- data/lib/more/facets/autoarray.rb +0 -34
- data/lib/more/facets/autoreload.rb +0 -150
- data/lib/more/facets/blankslate.rb +0 -10
- data/lib/more/facets/casting_hash.rb +0 -172
- data/lib/more/facets/class_extend.rb +0 -126
- data/lib/more/facets/cloneable.rb +0 -76
- data/lib/more/facets/daemonize.rb +0 -44
- data/lib/more/facets/dictionary.rb +0 -430
- data/lib/more/facets/duration.rb +0 -286
- data/lib/more/facets/enumargs.rb +0 -192
- data/lib/more/facets/equitable.rb +0 -120
- data/lib/more/facets/expirable.rb +0 -54
- data/lib/more/facets/filelist.rb +0 -497
- data/lib/more/facets/hashbuilder.rb +0 -101
- data/lib/more/facets/hook.rb +0 -38
- data/lib/more/facets/ini.rb +0 -267
- data/lib/more/facets/instantiable.rb +0 -47
- data/lib/more/facets/linkedlist.rb +0 -195
- data/lib/more/facets/matcher.rb +0 -140
- data/lib/more/facets/memoize.rb +0 -1
- data/lib/more/facets/memoizer.rb +0 -64
- data/lib/more/facets/methodspace.rb +0 -146
- data/lib/more/facets/module/attr.rb +0 -83
- data/lib/more/facets/module/attr_toggler.rb +0 -59
- data/lib/more/facets/module/class_extend.rb +0 -3
- data/lib/more/facets/once.rb +0 -59
- data/lib/more/facets/opencascade.rb +0 -94
- data/lib/more/facets/opencollection.rb +0 -43
- data/lib/more/facets/openhash.rb +0 -39
- data/lib/more/facets/openmodule.rb +0 -16
- data/lib/more/facets/openobject.rb +0 -267
- data/lib/more/facets/orderedhash.rb +0 -5
- data/lib/more/facets/ostructable.rb +0 -209
- data/lib/more/facets/pathlist.rb +0 -105
- data/lib/more/facets/preinitialize.rb +0 -157
- data/lib/more/facets/prepend.rb +0 -57
- data/lib/more/facets/rbsystem.rb +0 -222
- data/lib/more/facets/registerable.rb +0 -35
- data/lib/more/facets/semaphore.rb +0 -92
- data/lib/more/facets/stash.rb +0 -181
- data/lib/more/facets/succ.rb +0 -44
- data/lib/more/facets/version.rb +0 -136
- data/meta/authors +0 -1
- data/meta/collection +0 -1
- data/meta/contact +0 -1
- data/meta/contributors +0 -48
- data/meta/created +0 -1
- data/meta/description +0 -13
- data/meta/homepage +0 -1
- data/meta/license +0 -1
- data/meta/loadpath +0 -2
- data/meta/name +0 -1
- data/meta/released +0 -1
- data/meta/repository +0 -1
- data/meta/sitemap +0 -4
- data/meta/slogan +0 -1
- data/meta/summary +0 -1
- data/meta/version +0 -1
- data/script/conflicts +0 -63
- data/script/methods +0 -49
- data/test/core/array/test_indexable.rb +0 -118
- data/test/core/array/test_recursive.rb +0 -18
- data/test/core/array/test_stackable.rb +0 -22
- data/test/core/binding/test_opvars.rb +0 -24
- data/test/core/class/test_cattr.rb +0 -47
- data/test/core/class/test_cattr_accessor.rb +0 -2
- data/test/core/class/test_cattr_reader.rb +0 -1
- data/test/core/class/test_cattr_writer.rb +0 -1
- data/test/core/enumerable/test_commonality.rb +0 -15
- data/test/core/enumerable/test_entropy.rb +0 -15
- data/test/core/enumerable/test_inject.rb +0 -18
- data/test/core/enumerable/test_probability.rb +0 -11
- data/test/core/enumerable/test_recursive.rb +0 -18
- data/test/core/enumerable/test_split.rb +0 -19
- data/test/core/exception/test_exception.rb +0 -17
- data/test/core/file/test_file.rb +0 -85
- data/test/core/filetest/test_filetest.rb +0 -10
- data/test/core/hash/test_delete.rb +0 -28
- data/test/core/hash/test_mash.rb +0 -20
- data/test/core/hash/test_merge.rb +0 -14
- data/test/core/hash/test_op.rb +0 -1
- data/test/core/hash/test_recursive.rb +0 -23
- data/test/core/hash/test_to_module.rb +0 -21
- data/test/core/integer/test_length.rb +0 -12
- data/test/core/kernel/test_deepcopy.rb +0 -27
- data/test/core/kernel/test_resc.rb +0 -12
- data/test/core/module/test_conflict.rb +0 -24
- data/test/core/module/test_modspace.rb +0 -13
- data/test/core/module/test_nesting.rb +0 -21
- data/test/core/module/test_prepend.rb +0 -29
- data/test/core/string/test_chars.rb +0 -12
- data/test/core/string/test_outdent.rb +0 -65
- data/test/core/test_blank.rb +0 -12
- data/test/core/test_boolean.rb +0 -89
- data/test/core/test_functor.rb +0 -26
- data/test/core/test_metaid.rb +0 -39
- data/test/core/test_to_hash.rb +0 -244
- data/test/core/time/test_round.rb +0 -31
- data/test/more/test_ansicode.rb +0 -20
- data/test/more/test_autoarray.rb +0 -18
- data/test/more/test_basicobject.rb +0 -34
- data/test/more/test_class_extend.rb +0 -64
- data/test/more/test_cloneable.rb +0 -41
- data/test/more/test_continuation.rb +0 -15
- data/test/more/test_dictionary.rb +0 -145
- data/test/more/test_enumargs.rb +0 -70
- data/test/more/test_equitable.rb +0 -42
- data/test/more/test_getoptlong.rb +0 -26
- data/test/more/test_inheritor.rb +0 -148
- data/test/more/test_instance_function.rb +0 -31
- data/test/more/test_instantiable.rb +0 -37
- data/test/more/test_memoize.rb +0 -38
- data/test/more/test_methodspace.rb +0 -78
- data/test/more/test_multiton.rb +0 -184
- data/test/more/test_opencascade.rb +0 -61
- data/test/more/test_openobject.rb +0 -112
- data/test/more/test_partial.rb +0 -27
- data/test/more/test_prepend.rb +0 -28
- data/test/more/test_succ.rb +0 -35
@@ -0,0 +1,141 @@
|
|
1
|
+
# Memoization is an optimization technique used primarily to speed up
|
2
|
+
# programs by having function calls avoid repeating the calculation
|
3
|
+
# of results for previously-processed inputs.
|
4
|
+
#
|
5
|
+
# When you "memoize" a method/function using Memoizable its results are cached
|
6
|
+
# so that later calls return results from the cache instead of recalculating
|
7
|
+
# them.
|
8
|
+
#
|
9
|
+
# class T
|
10
|
+
# include Memoizable
|
11
|
+
#
|
12
|
+
# def initialize(a)
|
13
|
+
# @a = a
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# def a
|
17
|
+
# "#{@a ^ 3 + 4}"
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# memoize :a
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# t = T.new(10)
|
24
|
+
# (t.a.__id__ == t.a.__id__) #=> true
|
25
|
+
#
|
26
|
+
# This method can also be used at the instance level to cache singleton
|
27
|
+
# (qua class) methods by including it in the singleton class.
|
28
|
+
#
|
29
|
+
#--
|
30
|
+
# TODO: It would be very cool if Memoizable could set-up default parameters
|
31
|
+
# via #[] method, e.g. `include Memoizable[:freeze=>true]`.
|
32
|
+
#++
|
33
|
+
|
34
|
+
module Memoizable
|
35
|
+
|
36
|
+
@cache = Hash.new{|h,k|h[k]=Hash.new{|h,k|h[k]={}}}
|
37
|
+
|
38
|
+
#
|
39
|
+
def self.cache
|
40
|
+
@cache
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
def self.append_features(base)
|
45
|
+
Module == base ? super(base) : base.extend(self)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Directive for making your functions faster by trading space for time.
|
49
|
+
# When you "memoize" a method/function using #memoize its results are
|
50
|
+
# cached so that later calls with the same arguments return results from
|
51
|
+
# the cache instead of recalculating them.
|
52
|
+
#
|
53
|
+
# The #memoize method also handles a few options to alter
|
54
|
+
# behavior of the memoization:
|
55
|
+
#
|
56
|
+
# :class => true cache per-class not per-object
|
57
|
+
# :freeze => true freeze the memoized return values
|
58
|
+
# :arguments => false do not index cache by arguments
|
59
|
+
#
|
60
|
+
def memoize(*method_names)
|
61
|
+
options = Hash === method_names.last ? method_names.pop : {}
|
62
|
+
|
63
|
+
options[:arguments] = true if options[:arguments].nil? # default to true
|
64
|
+
|
65
|
+
ref = options[:class] ? 'self.class.name' : 'self'
|
66
|
+
frz = options[:freeze] ? '.freeze' : ''
|
67
|
+
arg = options[:arguments] ? '[__a__, block_given?]' : 'nil'
|
68
|
+
|
69
|
+
code = ""
|
70
|
+
method_names.each do |m|
|
71
|
+
code << <<-code
|
72
|
+
alias_method '#{ m }:memo', '#{ m }'
|
73
|
+
private '#{ m }:memo'
|
74
|
+
def #{ m }(*__a__,&__b__)
|
75
|
+
c = Memoizable.cache[#{ref}][:'#{ m }']
|
76
|
+
k = #{arg}
|
77
|
+
if c.has_key?(k)
|
78
|
+
c[k]
|
79
|
+
else
|
80
|
+
c[k] = __send__('#{ m }:memo',*__a__,&__b__)#{frz}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
code
|
84
|
+
end
|
85
|
+
module_eval(code)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Remove the memoized value from the memoization cache.
|
89
|
+
# The next time a memoized methos is called if will be
|
90
|
+
# remomoized.
|
91
|
+
def rememoize(*method_names)
|
92
|
+
if Memoizable.cache[self]
|
93
|
+
if method_names.empty?
|
94
|
+
Memoizable.cache.delete(self)
|
95
|
+
else
|
96
|
+
method_names.each do |m|
|
97
|
+
Memoizable.cache[self].delete(m.to_sym)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
if Memoizable.cache[self.class.name]
|
102
|
+
if method_names.empty?
|
103
|
+
Memoizable.cache.delete(self.class.name)
|
104
|
+
else
|
105
|
+
method_names.each do |m|
|
106
|
+
Memoizable.cache[self.class.name].delete(m.to_sym)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
#
|
113
|
+
def unmemoize(*method_names)
|
114
|
+
rememoize(*method_names)
|
115
|
+
method_names.each do |m|
|
116
|
+
alias_method name, "#{ m }:memo"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Include Memoizable alone with an #initialize_copy method that
|
121
|
+
# will copy the memoization cache when #dup or #clone is used.
|
122
|
+
#
|
123
|
+
# TODO: Is this best approach? Perhaps a method to easily create
|
124
|
+
# the #initialize_copy method would suffice?
|
125
|
+
module Copy
|
126
|
+
|
127
|
+
#
|
128
|
+
def self.included(base)
|
129
|
+
base.extend(Memoizable)
|
130
|
+
end
|
131
|
+
|
132
|
+
#
|
133
|
+
def initialize_copy(original)
|
134
|
+
if Memoizable.cache.key?(original)
|
135
|
+
Memoizable.cache[self] = Memoizable.cache[original].dup
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
@@ -2,6 +2,6 @@ require 'facets/kernel/meta_alias'
|
|
2
2
|
require 'facets/kernel/meta_class'
|
3
3
|
require 'facets/kernel/meta_def'
|
4
4
|
require 'facets/kernel/meta_eval'
|
5
|
-
require 'facets/kernel/eigenclass'
|
6
|
-
require 'facets/module/class_def'
|
7
5
|
|
6
|
+
# in remberence of _why
|
7
|
+
require 'facets/kernel/eigenclass'
|
@@ -1,41 +1,6 @@
|
|
1
|
-
# = Multipliers
|
2
|
-
#
|
3
|
-
# == Synopsis
|
4
|
-
#
|
5
|
-
# Adds methods to Numeric to make working with magnitudes
|
6
|
-
# (kilo, mega, giga, milli, micro, etc.)
|
7
|
-
#
|
8
|
-
# == History
|
9
|
-
#
|
10
|
-
# Thanks to Rich Kilmer and bytes.rb which inspired this library.
|
11
|
-
#
|
12
|
-
# == Notes
|
13
|
-
#
|
14
|
-
# * This library is not compatible with STICK's units.rb (an spin-off
|
15
|
-
# of Facets old units.rb library). Do not attempt to use both at
|
16
|
-
# the same time.
|
17
|
-
#
|
18
|
-
# == Authors
|
19
|
-
#
|
20
|
-
# * Thomas Sawyer
|
21
|
-
#
|
22
|
-
# == Copying
|
23
|
-
#
|
24
|
-
# Copyright (c) 2005 Thomas Sawyer
|
25
|
-
#
|
26
|
-
# Ruby License
|
27
|
-
#
|
28
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
29
|
-
# software under the same terms as Ruby.
|
30
|
-
#
|
31
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
32
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
33
|
-
# FOR A PARTICULAR PURPOSE.
|
34
|
-
|
35
|
-
#
|
36
1
|
class Numeric
|
37
2
|
|
38
|
-
# = Multipliers
|
3
|
+
# = Numeric::Multipliers
|
39
4
|
#
|
40
5
|
# Adds methods to Numeric to make working with
|
41
6
|
# magnitudes (kilo, mega, giga, milli, micro, etc.)
|
@@ -48,9 +13,11 @@ class Numeric
|
|
48
13
|
# perform the inverse operation by placing the
|
49
14
|
# multiplier called on unit (1) in the denominator.
|
50
15
|
#
|
51
|
-
# 1000 / 1.kilo #=> 1
|
52
|
-
# 1024 / 1.kibi #=> 1
|
16
|
+
# (1000 / 1.kilo) #=> 1
|
17
|
+
# (1024 / 1.kibi) #=> 1
|
53
18
|
#
|
19
|
+
# Thanks to Rich Kilmer and bytes.rb which inspired this library.
|
20
|
+
|
54
21
|
module Multipliers
|
55
22
|
|
56
23
|
# SI Multipliers
|
@@ -95,3 +62,4 @@ class Numeric
|
|
95
62
|
include Multipliers
|
96
63
|
end
|
97
64
|
|
65
|
+
# Copyright (c) 2005 Thomas Sawyer
|
data/lib/more/facets/multiton.rb
CHANGED
@@ -60,7 +60,7 @@
|
|
60
60
|
# the uniqueness of an object. To workaround this, define the _class_
|
61
61
|
# method ::multiton_id.
|
62
62
|
#
|
63
|
-
# def
|
63
|
+
# def SomeMultitonClass.multiton_id(*args, &block)
|
64
64
|
# # ...
|
65
65
|
# end
|
66
66
|
#
|
@@ -121,7 +121,7 @@ require 'thread'
|
|
121
121
|
# the uniqueness of an object. To workaround this, define the _class_
|
122
122
|
# method ::multiton_id.
|
123
123
|
#
|
124
|
-
# def
|
124
|
+
# def SomeMultitonClass.multiton_id(*args, &block)
|
125
125
|
# # ...
|
126
126
|
# end
|
127
127
|
#
|
@@ -130,19 +130,19 @@ require 'thread'
|
|
130
130
|
|
131
131
|
module Multiton
|
132
132
|
|
133
|
-
#
|
133
|
+
# Disable build-in copying methods.
|
134
134
|
|
135
135
|
def clone
|
136
136
|
raise TypeError, "can't clone Multiton #{self}"
|
137
|
-
|
137
|
+
##self
|
138
138
|
end
|
139
139
|
|
140
140
|
def dup
|
141
141
|
raise TypeError, "can't dup Multiton #{self}"
|
142
|
-
|
142
|
+
##self
|
143
143
|
end
|
144
144
|
|
145
|
-
#
|
145
|
+
# Default marshalling strategy.
|
146
146
|
|
147
147
|
protected
|
148
148
|
|
@@ -170,13 +170,13 @@ module Multiton
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
173
|
-
# Multiton can be included in another module, in which case that module
|
174
|
-
# a multiton behavior distributor too. This is why we
|
175
|
-
# by putting it in another module.
|
173
|
+
# Multiton can be included in another module, in which case that module
|
174
|
+
# effectively becomes a multiton behavior distributor too. This is why we
|
175
|
+
# propogate #included to the base module by putting it in another module.
|
176
176
|
#
|
177
177
|
#--
|
178
178
|
# def append_features(mod)
|
179
|
-
# #
|
179
|
+
# # help out people counting on transitive mixins
|
180
180
|
# unless mod.instance_of?(Class)
|
181
181
|
# raise TypeError, "Inclusion of Multiton in module #{mod}"
|
182
182
|
# end
|
@@ -188,8 +188,8 @@ module Multiton
|
|
188
188
|
private
|
189
189
|
def included(base)
|
190
190
|
class << base
|
191
|
-
|
192
|
-
|
191
|
+
##alias_method(:new!, :new) unless method_defined?(:new!)
|
192
|
+
## gracefully handle multiple inclusions of Multiton
|
193
193
|
unless include?(Multiton::MetaMethods)
|
194
194
|
alias_method :new!, :new
|
195
195
|
private :allocate #, :new
|
@@ -275,7 +275,7 @@ end
|
|
275
275
|
|
276
276
|
|
277
277
|
=begin
|
278
|
-
# TODO Convert this into a real test and/or benchmark.
|
278
|
+
# TODO: Convert this into a real test and/or benchmark.
|
279
279
|
|
280
280
|
if $0 == __FILE__
|
281
281
|
|
@@ -384,3 +384,4 @@ if $0 == __FILE__
|
|
384
384
|
|
385
385
|
end
|
386
386
|
=end
|
387
|
+
|
@@ -1,27 +1,3 @@
|
|
1
|
-
# = NullClass
|
2
|
-
#
|
3
|
-
# NullClass is essentially NilClass but it differs in one
|
4
|
-
# important way. When a method is called against it that it
|
5
|
-
# deoesn't have, it will simply return null value rather then
|
6
|
-
# raise an error.s
|
7
|
-
#
|
8
|
-
# == Authors
|
9
|
-
#
|
10
|
-
# * Thomas Sawyer
|
11
|
-
#
|
12
|
-
# = Copying
|
13
|
-
#
|
14
|
-
# Copyright (c) 2005 Thomas Sawyer
|
15
|
-
#
|
16
|
-
# Ruby License
|
17
|
-
#
|
18
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
19
|
-
# software under the same terms as Ruby.
|
20
|
-
#
|
21
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
22
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
23
|
-
# FOR A PARTICULAR PURPOSE.
|
24
|
-
|
25
1
|
# = Nullclass
|
26
2
|
#
|
27
3
|
# NullClass is essentially NilClass but it differs in one
|
@@ -29,8 +5,8 @@
|
|
29
5
|
# deoesn't have, it will simply return null value rather then
|
30
6
|
# raise an error.
|
31
7
|
#
|
32
|
-
# TODO: Perhaps NullClass
|
33
|
-
|
8
|
+
# TODO: Perhaps NullClass should be called NackClass?
|
9
|
+
|
34
10
|
class NullClass #< NilClass
|
35
11
|
class << self
|
36
12
|
def new
|
@@ -59,16 +35,4 @@ class Object
|
|
59
35
|
end
|
60
36
|
end
|
61
37
|
|
62
|
-
|
63
|
-
|
64
|
-
# _____ _
|
65
|
-
# |_ _|__ ___| |_
|
66
|
-
# | |/ _ \/ __| __|
|
67
|
-
# | | __/\__ \ |_
|
68
|
-
# |_|\___||___/\__|
|
69
|
-
#
|
70
|
-
|
71
|
-
# TODO
|
72
|
-
|
73
|
-
=begin #testing
|
74
|
-
=end
|
38
|
+
# Copyright (c) 2005 Thomas Sawyer
|
data/lib/more/facets/opesc.rb
CHANGED
@@ -1,25 +1,40 @@
|
|
1
1
|
# = OpEsc
|
2
2
|
#
|
3
|
+
# NOTE: As of v3.0 of Facets these have been renamed:
|
4
|
+
#
|
5
|
+
# op_plus_self -> op_plus
|
6
|
+
# op_minus_self -> op_minus
|
7
|
+
# op_plus -> op_add
|
8
|
+
# op_minus -> op_sub
|
9
|
+
# op_case_eq -> op_case
|
10
|
+
#
|
11
|
+
# TODO: In the future we might also rename:
|
12
|
+
#
|
13
|
+
# op_lshift -> op_push
|
14
|
+
# op_rshift -> op_pull
|
15
|
+
# op_store -> op_index
|
16
|
+
# op_fetch -> op_index (b/c [] and []= in same file)
|
17
|
+
|
3
18
|
module OpEsc
|
4
19
|
|
5
20
|
OPERATORS = %w{ +@ -@ + - ** * / % ~ <=> << >> < > === == =~ <= >= | & ^ []= [] }
|
6
21
|
OPERATORS_REGEXP = Regexp.new( '(' << OPERATORS.collect{ |k| Regexp.escape(k) }.join('|') << ')' )
|
7
22
|
OPERATORS_ESC_TABLE = {
|
8
|
-
"+@" => "
|
9
|
-
"-@" => "
|
10
|
-
"+" => "
|
11
|
-
"-" => "
|
23
|
+
"+@" => "op_plus",
|
24
|
+
"-@" => "op_minus",
|
25
|
+
"+" => "op_add",
|
26
|
+
"-" => "op_sub",
|
12
27
|
"**" => "op_pow",
|
13
28
|
"*" => "op_mul",
|
14
29
|
"/" => "op_div",
|
15
30
|
"%" => "op_mod",
|
16
31
|
"~" => "op_tilde",
|
17
32
|
"<=>" => "op_cmp",
|
18
|
-
"<<" => "op_lshift",
|
19
|
-
">>" => "op_rshift",
|
33
|
+
"<<" => "op_lshift", #push?
|
34
|
+
">>" => "op_rshift", #pull?
|
20
35
|
"<" => "op_lt",
|
21
36
|
">" => "op_gt",
|
22
|
-
"===" => "
|
37
|
+
"===" => "op_case",
|
23
38
|
"==" => "op_equal",
|
24
39
|
"=~" => "op_apply",
|
25
40
|
"<=" => "op_lt_eq",
|
@@ -33,28 +48,32 @@ module OpEsc
|
|
33
48
|
|
34
49
|
# Applies operator escape's according to OPERATORS_ESCAPE_TABLE.
|
35
50
|
#
|
36
|
-
#
|
51
|
+
# OpEsc.escape('-') #=> "op_sub"
|
37
52
|
#
|
38
53
|
# CREDIT: Trans
|
39
54
|
|
40
55
|
def self.escape(str)
|
41
|
-
str.gsub(OPERATORS_REGEXP){ OPERATORS_ESC_TABLE[$1] }
|
56
|
+
str.to_s.gsub(OPERATORS_REGEXP){ OPERATORS_ESC_TABLE[$1] }
|
42
57
|
end
|
43
58
|
|
44
|
-
# NOTE: op_esc used to support the method require_esc.
|
45
59
|
#
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
60
|
+
def self.method_to_filename(name)
|
61
|
+
fname = escape(name)
|
62
|
+
fname = fname[0...-1] if fname =~ /[\!\=\?]$/
|
63
|
+
fname
|
64
|
+
end
|
65
|
+
|
66
|
+
## Require a file with puncuation marks escaped.
|
67
|
+
##
|
68
|
+
## require_esc '[].rb'
|
69
|
+
##
|
70
|
+
## in actuality requires the file 'op_fetch.rb'.
|
71
|
+
##
|
72
|
+
## def require_esc( fpath )
|
73
|
+
## fdir, fname = File.split(fpath)
|
74
|
+
## fname = method_to_filename(fname)
|
75
|
+
## path = File.join(fdir, fname)
|
76
|
+
## require(path)
|
77
|
+
## end
|
59
78
|
|
60
79
|
end
|
data/lib/more/facets/ostruct.rb
CHANGED
@@ -1,29 +1,3 @@
|
|
1
|
-
# = OpenStruct
|
2
|
-
#
|
3
|
-
# Ruby's standard OpenStruct with a few extensions added-in.
|
4
|
-
#
|
5
|
-
# == Auhtors
|
6
|
-
#
|
7
|
-
# * Thomas Sawyer
|
8
|
-
#
|
9
|
-
# == Copying
|
10
|
-
#
|
11
|
-
# Copyright (c) 2005 Thomas Sawyer, George Moschovitis
|
12
|
-
#
|
13
|
-
# Ruby License
|
14
|
-
#
|
15
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
16
|
-
# software under the same terms as Ruby.
|
17
|
-
#
|
18
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
19
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
20
|
-
# FOR A PARTICULAR PURPOSE.
|
21
|
-
#
|
22
|
-
# == History
|
23
|
-
#
|
24
|
-
# * 2006-11-04 trans Deprecate #instance in favor of #instance_delegate.
|
25
|
-
# * 2007-04-15 trans Filled out with actual methods, used "ostruct_" for some accessors.
|
26
|
-
|
27
1
|
require 'ostruct'
|
28
2
|
|
29
3
|
class OpenStruct
|
@@ -54,7 +28,6 @@ class OpenStruct
|
|
54
28
|
# the block. You can not provide both at the same time.
|
55
29
|
#
|
56
30
|
# CREDIT: Noah Gibbs, Gavin Sinclair
|
57
|
-
#
|
58
31
|
def initialize(hash=nil, &block)
|
59
32
|
if block && block.arity==2
|
60
33
|
@table = Hash.new(&block)
|
@@ -106,37 +79,30 @@ class OpenStruct
|
|
106
79
|
@table[key]=val
|
107
80
|
end
|
108
81
|
|
109
|
-
# CREDIT: Robert J. Berger <rberger AT ibd.com>
|
110
|
-
# Thanks for reporting issues that this method resolved.
|
111
|
-
|
112
82
|
# Provides access to an OpenStruct's inner table.
|
113
83
|
#
|
114
84
|
# o = OpenStruct.new
|
115
85
|
# o.a = 1
|
116
86
|
# o.b = 2
|
117
|
-
# o.instance_delegate.
|
118
|
-
#
|
119
|
-
# produces
|
120
|
-
#
|
121
|
-
# a 1
|
122
|
-
# b 2
|
123
|
-
#
|
87
|
+
# o.instance_delegate.map { |k, v| "#{k} #{v}" }
|
88
|
+
# #=> ["a 1", "b 2"]
|
124
89
|
#
|
125
90
|
def instance_delegate
|
126
91
|
@table
|
127
92
|
end
|
128
93
|
|
94
|
+
#
|
129
95
|
alias ostruct_delegate instance_delegate
|
130
96
|
|
131
97
|
# Insert/update hash data on the fly.
|
132
98
|
#
|
133
99
|
# o = OpenStruct.new
|
134
|
-
# o.ostruct_update
|
100
|
+
# o.ostruct_update(:a => 2)
|
135
101
|
# o.a #=> 2
|
136
102
|
#
|
137
103
|
def ostruct_update(other)
|
138
104
|
raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
|
139
|
-
|
105
|
+
##other = other.to_hash #to_h ?
|
140
106
|
for k,v in other
|
141
107
|
@table[k.to_sym] = v
|
142
108
|
end
|
@@ -146,8 +112,8 @@ class OpenStruct
|
|
146
112
|
# Merge hash data creating a new OpenStruct object.
|
147
113
|
#
|
148
114
|
# o = OpenStruct.new
|
149
|
-
# o.ostruct_merge
|
150
|
-
#
|
115
|
+
# x = o.ostruct_merge(:a => 2)
|
116
|
+
# x.a #=> 2
|
151
117
|
#
|
152
118
|
def ostruct_merge(other)
|
153
119
|
o = dup
|
@@ -155,21 +121,21 @@ class OpenStruct
|
|
155
121
|
o
|
156
122
|
end
|
157
123
|
|
158
|
-
|
124
|
+
#--
|
159
125
|
# TO BE DEPRECATED
|
160
126
|
# Must consider that accessing instance_delegate instead can be dangerous.
|
161
127
|
# Might we us a Functor to ensure the table keys are always symbols?
|
162
|
-
|
128
|
+
#++
|
163
129
|
|
164
130
|
# Insert/update hash data on the fly.
|
165
131
|
#
|
166
132
|
# o = OpenStruct.new
|
167
|
-
# o.ostruct_update
|
133
|
+
# o.ostruct_update(:a => 2)
|
168
134
|
# o.a #=> 2
|
169
135
|
#
|
170
136
|
def __update__(other)
|
171
137
|
raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
|
172
|
-
|
138
|
+
##other = other.to_hash #to_h?
|
173
139
|
for k,v in other
|
174
140
|
@table[k.to_sym] = v
|
175
141
|
end
|
@@ -179,14 +145,20 @@ class OpenStruct
|
|
179
145
|
# Merge hash data creating a new OpenStruct object.
|
180
146
|
#
|
181
147
|
# o = OpenStruct.new
|
182
|
-
# o.ostruct_merge
|
183
|
-
#
|
148
|
+
# x = o.ostruct_merge(:a => 2)
|
149
|
+
# x.a #=> 2
|
184
150
|
#
|
185
151
|
def __merge__(other)
|
186
152
|
o = dup
|
187
153
|
o.__update__(other)
|
188
154
|
o
|
189
155
|
end
|
156
|
+
|
157
|
+
#
|
158
|
+
def to_ostruct
|
159
|
+
self
|
160
|
+
end
|
161
|
+
|
190
162
|
end
|
191
163
|
|
192
164
|
|
@@ -194,7 +166,7 @@ class Hash
|
|
194
166
|
|
195
167
|
# Turns a hash into a generic object using an OpenStruct.
|
196
168
|
#
|
197
|
-
# o = {
|
169
|
+
# o = {'a' => 1}.to_ostruct
|
198
170
|
# o.a #=> 1
|
199
171
|
#
|
200
172
|
def to_ostruct
|
@@ -203,8 +175,8 @@ class Hash
|
|
203
175
|
|
204
176
|
# Like to_ostruct but recusively objectifies all hash elements as well.
|
205
177
|
#
|
206
|
-
#
|
207
|
-
#
|
178
|
+
# o = {'a' => { 'b' => 1 }}.to_ostruct_recurse
|
179
|
+
# o.a.b #=> 1
|
208
180
|
#
|
209
181
|
# The +exclude+ parameter is used internally to prevent infinite
|
210
182
|
# recursion and is not intended to be utilized by the end-user.
|
@@ -212,12 +184,11 @@ class Hash
|
|
212
184
|
# would like to prevent from being converted to an OpoenStruct
|
213
185
|
# then include it in the +exclude+ hash referencing itself. Eg.
|
214
186
|
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
#
|
187
|
+
# h = { 'a' => { 'b' => 1 } }
|
188
|
+
# o = h.to_ostruct_recurse( { h['a'] => h['a'] } )
|
189
|
+
# o.a['b'] #=> 1
|
218
190
|
#
|
219
191
|
# CREDIT: Alison Rowland, Jamie Macey, Mat Schaffer
|
220
|
-
|
221
192
|
def to_ostruct_recurse(exclude={})
|
222
193
|
return exclude[self] if exclude.key?( self )
|
223
194
|
o = exclude[self] = OpenStruct.new
|
@@ -227,11 +198,13 @@ class Hash
|
|
227
198
|
end
|
228
199
|
o.__update__(h)
|
229
200
|
end
|
201
|
+
end
|
230
202
|
|
231
|
-
|
232
|
-
#
|
233
|
-
|
234
|
-
|
235
|
-
|
203
|
+
class NilClass
|
204
|
+
# Create an empty OpenStruct object.
|
205
|
+
def to_ostruct
|
206
|
+
OpenStruct.new
|
207
|
+
end
|
236
208
|
end
|
237
209
|
|
210
|
+
# Copyright (c) 2005 Thomas Sawyer (Ruby License)
|