facets 2.9.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.index +76 -0
- data/CONTRIBUTE.md +78 -0
- data/HISTORY.md +2459 -0
- data/{RUBY.txt → LICENSE.txt} +0 -0
- data/README.rdoc +29 -7
- data/demo/applique/assertion_framework.rb +1 -0
- data/{qed → demo}/applique/file_helpers.rb +0 -0
- data/{qed → demo}/core/array/combination.rdoc +0 -0
- data/{qed → demo}/core/array/delete.rdoc +0 -0
- data/{qed → demo}/core/array/index.rdoc +0 -0
- data/{qed → demo}/core/array/merge.rdoc +0 -0
- data/{qed → demo}/core/array/only.rdoc +0 -0
- data/{qed → demo}/core/array/pad.rdoc +0 -0
- data/{qed → demo}/core/array/permutation.rdoc +0 -0
- data/{qed → demo}/core/array/product.rdoc +0 -0
- data/{qed → demo}/core/array/recursively.rdoc +0 -0
- data/{qed → demo}/core/array/rotate.rdoc +0 -0
- data/{qed → demo}/core/array/select.rdoc +0 -0
- data/{qed → demo}/core/array/uniq_by.rdoc +0 -0
- data/{qed → demo}/core/binding/caller.rdoc +0 -0
- data/{qed → demo}/core/binding/defined.rdoc +0 -0
- data/{qed → demo}/core/binding/eval.rdoc +0 -0
- data/{qed → demo}/core/binding/local_variables.rdoc +0 -0
- data/{qed → demo}/core/binding/opvars.rdoc +0 -0
- data/{qed → demo}/core/binding/self.rdoc +0 -0
- data/{qed → demo}/core/class/descendants.rdoc +0 -0
- data/{qed → demo}/core/class/to_proc.rdoc +0 -0
- data/{qed → demo}/core/comparable/cap.rdoc +0 -0
- data/{qed → demo}/core/comparable/clip.rdoc +0 -0
- data/{qed → demo}/core/comparable/cmp.rdoc +0 -0
- data/{qed → demo}/core/comparable/op_get.rdoc +0 -0
- data/{qed → demo}/core/dir/ascend.rdoc +0 -0
- data/{qed → demo}/core/dir/descend.rdoc +0 -0
- data/{qed → demo}/core/dir/multiglob.rdoc +0 -0
- data/{qed → demo}/core/dir/parent.rdoc +0 -0
- data/{qed → demo}/core/dir/recurse.rdoc +0 -0
- data/{qed → demo}/core/exception/detail.rdoc +0 -0
- data/{qed → demo}/core/facets.rdoc +0 -0
- data/{qed → demo}/core/filetest/root.rdoc +0 -0
- data/{qed → demo}/core/hash/recursively.rdoc +0 -0
- data/{qed → demo}/core/indexable.rdoc +0 -0
- data/{qed → demo}/core/integer/bitmask.rdoc +0 -0
- data/{qed → demo}/core/integer/even.rdoc +0 -0
- data/{qed → demo}/core/integer/factorial.rdoc +0 -0
- data/{qed → demo}/core/integer/length.rdoc +0 -0
- data/{qed → demo}/core/integer/multiple.rdoc +0 -0
- data/{qed → demo}/core/integer/odd.rdoc +0 -0
- data/{qed → demo}/core/integer/of.rdoc +0 -0
- data/{qed → demo}/core/integer/ordinal.rdoc +0 -0
- data/{qed → demo}/core/matchdata/match.rdoc +0 -0
- data/{qed → demo}/core/matchdata/matchset.rdoc +0 -0
- data/{qed → demo}/core/module/cattr.rdoc +0 -0
- data/{qed → demo}/core/module/class_extend.rdoc +0 -0
- data/{qed → demo}/core/module/class_inheritor.rdoc +0 -0
- data/{qed → demo}/core/module/copy_inheritor.rdoc +0 -0
- data/{qed → demo}/core/module/method_space.rdoc +0 -0
- data/{qed → demo}/core/string/align.rdoc +0 -0
- data/{qed → demo}/core/string/bracket.rdoc +0 -0
- data/{qed → demo}/core/string/bytes.rdoc +0 -0
- data/{qed → demo}/core/string/camelcase.rdoc +0 -0
- data/{qed → demo}/core/string/capitalized.rdoc +0 -0
- data/{qed → demo}/core/string/characters.rdoc +0 -0
- data/{qed → demo}/core/string/cleanlines.rdoc +0 -0
- data/{qed → demo}/core/string/cleave.rdoc +0 -0
- data/{qed → demo}/core/string/divide.rdoc +0 -0
- data/{qed → demo}/core/string/each_char.rdoc +0 -0
- data/{qed → demo}/core/string/each_word.rdoc +0 -0
- data/{qed → demo}/core/string/end_with.rdoc +0 -0
- data/{qed → demo}/core/string/expand_tabs.rdoc +0 -0
- data/{qed → demo}/core/string/fold.rdoc +0 -0
- data/{qed → demo}/core/string/indent.rdoc +0 -0
- data/{qed → demo}/core/string/interpolate.rdoc +0 -0
- data/{qed → demo}/core/string/lchomp.rdoc +0 -0
- data/{qed → demo}/core/string/line_wrap.rdoc +0 -0
- data/{qed → demo}/core/string/lines.rdoc +0 -0
- data/{qed → demo}/core/string/margin.rdoc +0 -0
- data/{qed → demo}/core/string/methodize.rdoc +0 -0
- data/{qed → demo}/core/string/modulize.rdoc +0 -0
- data/{qed → demo}/core/string/mscan.rdoc +0 -0
- data/{qed → demo}/core/string/natcmp.rdoc +0 -0
- data/{qed → demo}/core/string/nchar.rdoc +0 -0
- data/{qed → demo}/core/string/newlines.rdoc +0 -0
- data/{qed → demo}/core/string/op_sub.rdoc +0 -0
- data/{qed → demo}/core/string/pathize.rdoc +0 -0
- data/{qed → demo}/core/string/quote.rdoc +0 -0
- data/{qed → demo}/core/string/range.rdoc +0 -0
- data/{qed → demo}/core/string/rewrite.rdoc +0 -0
- data/{qed → demo}/core/string/shatter.rdoc +0 -0
- data/{qed → demo}/core/string/snakecase.rdoc +0 -0
- data/{qed → demo}/core/string/splice.rdoc +0 -0
- data/{qed → demo}/core/string/start_with.rdoc +0 -0
- data/{qed → demo}/core/string/subtract.rdoc +0 -0
- data/{qed → demo}/core/string/tab.rdoc +0 -0
- data/{qed → demo}/core/string/tabto.rdoc +0 -0
- data/{qed → demo}/core/string/titlecase.rdoc +0 -0
- data/{qed → demo}/core/string/to_re.rdoc +0 -0
- data/{qed → demo}/core/string/unfold.rdoc +0 -0
- data/{qed → demo}/core/string/unindent.rdoc +0 -0
- data/{qed → demo}/core/string/unquote.rdoc +0 -0
- data/{qed → demo}/core/string/variablize.rdoc +0 -0
- data/{qed → demo}/core/string/word_wrap.rdoc +0 -0
- data/{qed → demo}/core/string/words.rdoc +0 -0
- data/{qed → demo}/core/string/xor.rdoc +0 -0
- data/{qed → demo}/standard/02_cloneable.rdoc +0 -0
- data/{qed → demo}/standard/03_enumargs.rdoc +0 -0
- data/{qed → demo}/standard/04_equitable.rdoc +0 -0
- data/{qed → demo}/standard/05_instantiable.rdoc +0 -0
- data/{qed → demo}/standard/basic_object.rdoc +0 -0
- data/{qed → demo}/standard/memoizable.rdoc +0 -0
- data/{qed → demo}/standard/mulititon.rdoc +0 -0
- data/lib/core/facets.rb +1 -2
- data/lib/core/facets.yml +61 -42
- data/lib/core/facets/array.rb +8 -28
- data/lib/core/facets/array/arrange.rb +42 -0
- data/lib/core/facets/array/before.rb +2 -0
- data/lib/core/facets/array/collapse.rb +2 -0
- data/lib/core/facets/array/commonality.rb +24 -12
- data/lib/core/facets/array/duplicates.rb +22 -1
- data/lib/core/facets/array/each_overlap.rb +25 -0
- data/lib/core/facets/array/intersection.rb +25 -0
- data/lib/core/facets/array/missing.rb +29 -0
- data/lib/core/facets/array/nonuniq.rb +7 -53
- data/lib/core/facets/array/occur.rb +38 -0
- data/lib/core/facets/array/occurrence.rb +28 -0
- data/lib/core/facets/array/only.rb +12 -1
- data/lib/core/facets/array/recursively.rb +11 -5
- data/lib/core/facets/array/reject_values.rb +21 -0
- data/lib/core/facets/array/splice.rb +5 -1
- data/lib/core/facets/array/split.rb +5 -2
- data/lib/core/facets/array/squeeze.rb +23 -0
- data/lib/core/facets/array/step.rb +31 -0
- data/lib/core/facets/array/store.rb +4 -0
- data/lib/core/facets/array/to_h.rb +22 -0
- data/lib/core/facets/array/traverse.rb +11 -5
- data/lib/core/facets/array/uniq_by.rb +5 -1
- data/lib/core/facets/array/unique_permutation.rb +29 -0
- data/lib/core/facets/array/zip.rb +21 -0
- data/lib/core/facets/binding.rb +0 -3
- data/lib/core/facets/binding/call_stack.rb +1 -1
- data/lib/core/facets/binding/caller.rb +1 -3
- data/lib/core/facets/binding/callstack.rb +1 -1
- data/lib/core/facets/binding/defined.rb +0 -2
- data/lib/core/facets/binding/local_variables.rb +0 -2
- data/lib/core/facets/binding/op_get.rb +0 -2
- data/lib/core/facets/binding/self.rb +1 -3
- data/lib/core/facets/cattr.rb +1 -0
- data/lib/core/facets/class.rb +0 -2
- data/lib/core/facets/class/cattr.rb +1 -0
- data/lib/core/facets/class/singleton.rb +1 -13
- data/lib/core/facets/class/singleton_class.rb +16 -0
- data/lib/core/facets/comparable.rb +0 -2
- data/lib/core/facets/dir.rb +0 -2
- data/lib/core/facets/dir/ascend.rb +2 -2
- data/lib/core/facets/dir/lookup.rb +20 -0
- data/lib/core/facets/enumerable.rb +10 -9
- data/lib/core/facets/enumerable/accumulate.rb +18 -16
- data/lib/core/facets/enumerable/apply.rb +20 -0
- data/lib/core/facets/enumerable/associate.rb +6 -0
- data/lib/core/facets/enumerable/cluster.rb +24 -0
- data/lib/core/facets/enumerable/every.rb +1 -1
- data/lib/core/facets/enumerable/ewise.rb +2 -0
- data/lib/core/facets/enumerable/graph.rb +0 -3
- data/lib/core/facets/enumerable/hashify.rb +222 -19
- data/lib/core/facets/enumerable/hinge.rb +18 -0
- data/lib/core/facets/enumerable/key_by.rb +27 -0
- data/lib/core/facets/enumerable/map_to.rb +13 -0
- data/lib/core/facets/enumerable/mash.rb +34 -1
- data/lib/core/facets/enumerable/occur.rb +12 -9
- data/lib/core/facets/enumerable/only.rb +56 -0
- data/lib/core/facets/enumerable/{cluster_by.rb → organize_by.rb} +5 -4
- data/lib/core/facets/enumerable/pair.rb +20 -0
- data/lib/core/facets/enumerable/per.rb +27 -35
- data/lib/core/facets/enumerable/recursively.rb +3 -3
- data/lib/core/facets/enumerable/squeeze.rb +36 -0
- data/lib/core/facets/enumerable/sum.rb +18 -6
- data/lib/core/facets/enumerable/unassociate.rb +23 -0
- data/lib/core/facets/enumerable/value_by.rb +25 -0
- data/lib/core/facets/enumerator/fx.rb +16 -25
- data/lib/core/facets/enumerator/lazy/squeeze.rb +33 -0
- data/lib/core/facets/essentials.rb +65 -0
- data/lib/core/facets/exception.rb +0 -2
- data/lib/core/facets/exception/set_message.rb +10 -0
- data/lib/core/facets/file.rb +1 -2
- data/lib/core/facets/file/common_path.rb +17 -0
- data/lib/core/facets/file/rootname.rb +1 -1
- data/lib/core/facets/filetest.rb +0 -2
- data/lib/core/facets/filetest/relative.rb +1 -1
- data/lib/core/facets/filetest/safe.rb +14 -10
- data/lib/core/facets/float.rb +1 -3
- data/lib/core/facets/float/round_to.rb +1 -0
- data/lib/core/facets/functor.rb +8 -10
- data/lib/core/facets/hash.rb +2 -5
- data/lib/core/facets/hash/collate.rb +22 -8
- data/lib/core/facets/hash/count.rb +8 -4
- data/lib/core/facets/hash/data.rb +5 -2
- data/lib/core/facets/hash/dearray_values.rb +1 -1
- data/lib/core/facets/hash/deep_rekey.rb +54 -0
- data/lib/core/facets/hash/each_with_key.rb +12 -0
- data/lib/core/facets/hash/fetch_nested.rb +20 -0
- data/lib/core/facets/hash/keys.rb +4 -13
- data/lib/core/facets/hash/only_keys.rb +1 -0
- data/lib/core/facets/hash/op_push.rb +9 -1
- data/lib/core/facets/hash/op_sub.rb +1 -1
- data/lib/core/facets/hash/recursively.rb +6 -6
- data/lib/core/facets/hash/rekey.rb +26 -34
- data/lib/core/facets/hash/revalue.rb +61 -0
- data/lib/core/facets/hash/slice.rb +16 -3
- data/lib/core/facets/hash/subset.rb +11 -8
- data/lib/core/facets/hash/update_each.rb +1 -1
- data/lib/core/facets/hash/weave.rb +1 -1
- data/lib/core/facets/indexable.rb +6 -6
- data/lib/core/facets/integer.rb +0 -4
- data/lib/core/facets/kernel.rb +4 -7
- data/lib/core/facets/kernel/__dir__.rb +2 -0
- data/lib/core/facets/kernel/as.rb +2 -1
- data/lib/core/facets/kernel/call_stack.rb +1 -56
- data/lib/core/facets/kernel/callstack.rb +56 -1
- data/lib/core/facets/kernel/constant.rb +2 -0
- data/lib/core/facets/kernel/deep_clone.rb +27 -1
- data/lib/core/facets/kernel/deep_copy.rb +0 -24
- data/lib/core/facets/kernel/eigen.rb +2 -33
- data/lib/core/facets/kernel/eigenclass.rb +1 -1
- data/lib/core/facets/kernel/ergo.rb +1 -1
- data/lib/core/facets/kernel/extend.rb +4 -6
- data/lib/core/facets/kernel/instance_assign.rb +8 -6
- data/lib/core/facets/kernel/instance_extract.rb +22 -0
- data/lib/core/facets/kernel/instance_replace.rb +40 -0
- data/lib/core/facets/kernel/{equate.rb → like.rb} +7 -4
- data/lib/core/facets/kernel/load_relative.rb +25 -1
- data/lib/core/facets/kernel/meta.rb +35 -0
- data/lib/core/facets/kernel/meta_def.rb +4 -0
- data/lib/core/facets/kernel/object_send.rb +11 -14
- data/lib/core/facets/kernel/respond.rb +3 -13
- data/lib/core/facets/kernel/tap.rb +27 -39
- data/lib/core/facets/load_path.rb +1 -0
- data/lib/core/facets/load_path/search.rb +16 -0
- data/lib/core/facets/matchdata.rb +0 -2
- data/lib/core/facets/method.rb +0 -2
- data/lib/core/facets/method/composition.rb +32 -16
- data/lib/core/facets/method/curry.rb +13 -0
- data/lib/core/facets/method/partial.rb +10 -0
- data/lib/core/facets/method/public.rb +33 -0
- data/lib/core/facets/module.rb +0 -2
- data/lib/core/facets/module/alias_class_method.rb +11 -0
- data/lib/core/facets/module/basename.rb +1 -31
- data/lib/core/facets/module/cattr.rb +1 -0
- data/lib/core/facets/module/lastname.rb +30 -0
- data/lib/core/facets/module/mattr.rb +4 -4
- data/lib/core/facets/nilclass.rb +0 -3
- data/lib/core/facets/numeric.rb +0 -4
- data/lib/core/facets/numeric/approx.rb +3 -2
- data/lib/core/facets/numeric/range.rb +12 -0
- data/lib/core/facets/numeric/round_to.rb +32 -1
- data/lib/core/facets/object.rb +2 -3
- data/lib/core/facets/object/itself.rb +16 -0
- data/lib/core/facets/objectspace.rb +0 -3
- data/lib/core/facets/proc.rb +0 -3
- data/lib/core/facets/proc/bind_to.rb +3 -3
- data/lib/core/facets/proc/wrap.rb +17 -0
- data/lib/core/facets/process.rb +0 -2
- data/lib/core/facets/range.rb +4 -4
- data/lib/core/facets/range/op_add.rb +15 -0
- data/lib/core/facets/range/op_sub.rb +45 -0
- data/lib/core/facets/range/{to_r.rb → to_rng.rb} +1 -1
- data/lib/core/facets/regexp.rb +0 -2
- data/lib/core/facets/regexp/to_proc.rb +13 -0
- data/lib/core/facets/string.rb +8 -9
- data/lib/core/facets/string/ascii_only.rb +52 -0
- data/lib/core/facets/string/each_match.rb +1 -0
- data/lib/core/facets/string/ends_with.rb +1 -0
- data/lib/core/facets/string/file.rb +6 -20
- data/lib/core/facets/string/fold.rb +5 -5
- data/lib/core/facets/string/indent.rb +37 -20
- data/lib/core/facets/string/indexable.rb +7 -0
- data/lib/core/facets/string/interpolate.rb +6 -2
- data/lib/core/facets/string/linear.rb +19 -0
- data/lib/core/facets/string/margin.rb +47 -19
- data/lib/core/facets/string/mscan.rb +3 -0
- data/lib/core/facets/string/number.rb +14 -0
- data/lib/core/facets/string/op_sub.rb +1 -14
- data/lib/core/facets/string/random.rb +34 -0
- data/lib/core/facets/string/remove.rb +30 -0
- data/lib/core/facets/string/rotate.rb +24 -0
- data/lib/core/facets/string/similarity.rb +2 -2
- data/lib/core/facets/string/starts_with.rb +5 -0
- data/lib/core/facets/string/tab.rb +2 -17
- data/lib/core/facets/string/tabto.rb +2 -19
- data/lib/core/facets/string/to_rx.rb +1 -0
- data/lib/core/facets/string/trim.rb +45 -0
- data/lib/core/facets/string/unfold.rb +7 -2
- data/lib/core/facets/struct.rb +1 -2
- data/lib/core/facets/struct/replace.rb +8 -0
- data/lib/core/facets/symbol.rb +1 -3
- data/lib/core/facets/symbol/as_s.rb +3 -1
- data/lib/core/facets/symbol/call.rb +29 -0
- data/lib/core/facets/symbol/thrown.rb +9 -5
- data/lib/core/facets/time.rb +0 -2
- data/lib/core/facets/time/future.rb +6 -4
- data/lib/core/facets/unboundmethod.rb +0 -3
- data/lib/core/facets/version.rb +5 -5
- data/lib/standard/facets/against.rb +53 -0
- data/lib/standard/facets/binding/block_exec.rb +44 -0
- data/lib/standard/facets/cgi.rb +2 -40
- data/lib/standard/facets/cgi/esc.rb +11 -0
- data/lib/standard/facets/cgi/escape_html.rb +63 -0
- data/lib/standard/facets/cgi/marshal.rb +20 -0
- data/lib/standard/facets/cli.rb +54 -0
- data/lib/standard/facets/cloneable.rb +12 -9
- data/lib/standard/facets/enumargs.rb +159 -168
- data/lib/standard/facets/find.rb +1 -15
- data/lib/standard/facets/find/select.rb +16 -0
- data/lib/standard/facets/gem/search.rb +18 -0
- data/lib/standard/facets/gem/specification/current_specs.rb +21 -0
- data/lib/standard/facets/gem/specification/find_requireable_file.rb +21 -0
- data/lib/standard/facets/hash_builder.rb +46 -0
- data/lib/standard/facets/load_monitor.rb +26 -0
- data/lib/standard/facets/math.rb +57 -57
- data/lib/standard/facets/math/acosec.rb +1 -0
- data/lib/standard/facets/math/acsc.rb +6 -1
- data/lib/standard/facets/math/beta.rb +8 -3
- data/lib/standard/facets/math/cosec.rb +1 -0
- data/lib/standard/facets/math/cosech.rb +1 -0
- data/lib/standard/facets/math/csc.rb +6 -1
- data/lib/standard/facets/math/csch.rb +6 -1
- data/lib/standard/facets/math/distance.rb +19 -0
- data/lib/standard/facets/math/ec.rb +5 -0
- data/lib/standard/facets/math/lgamma.rb +21 -21
- data/lib/standard/facets/math/lngamma.rb +18 -0
- data/lib/standard/facets/math/pow.rb +6 -1
- data/lib/standard/facets/math/root.rb +1 -1
- data/lib/standard/facets/math/sign.rb +15 -4
- data/lib/standard/facets/math/tau.rb +5 -0
- data/lib/standard/facets/math/tgamma.rb +1 -1
- data/lib/standard/facets/memoizer.rb +63 -0
- data/lib/standard/facets/ostruct.rb +37 -156
- data/lib/standard/facets/ostruct/each.rb +11 -0
- data/lib/standard/facets/ostruct/initialize.rb +48 -0
- data/lib/standard/facets/ostruct/merge.rb +21 -0
- data/lib/standard/facets/ostruct/op_fetch.rb +29 -0
- data/lib/standard/facets/ostruct/op_store.rb +1 -0
- data/lib/standard/facets/ostruct/to_h.rb +10 -0
- data/lib/standard/facets/ostruct/to_ostruct.rb +65 -0
- data/lib/standard/facets/pathname.rb +18 -215
- data/lib/standard/facets/pathname/chdir.rb +15 -0
- data/lib/standard/facets/pathname/empty.rb +10 -0
- data/lib/standard/facets/pathname/exists.rb +6 -0
- data/lib/standard/facets/pathname/glob.rb +57 -0
- data/lib/standard/facets/pathname/home.rb +12 -0
- data/lib/standard/facets/pathname/null.rb +20 -0
- data/lib/standard/facets/pathname/op_div.rb +15 -0
- data/lib/standard/facets/pathname/op_fetch.rb +13 -0
- data/lib/standard/facets/pathname/outofdate.rb +13 -0
- data/lib/standard/facets/pathname/readline.rb +13 -0
- data/lib/standard/facets/pathname/root.rb +10 -0
- data/lib/standard/facets/pathname/rootname.rb +10 -0
- data/lib/standard/facets/pathname/safe.rb +15 -0
- data/lib/standard/facets/pathname/split_root.rb +9 -0
- data/lib/standard/facets/pathname/to_path.rb +28 -0
- data/lib/standard/facets/pathname/to_str.rb +8 -0
- data/lib/standard/facets/pathname/uptodate.rb +11 -0
- data/lib/standard/facets/pathname/visit.rb +38 -0
- data/lib/standard/facets/pathname/work.rb +10 -0
- data/lib/standard/facets/platform.rb +2 -2
- data/lib/standard/facets/random.rb +32 -2
- data/lib/standard/facets/shellwords.rb +5 -2
- data/lib/standard/facets/thread.rb +2 -2
- data/lib/standard/facets/uri.rb +7 -178
- data/lib/standard/facets/uri/cgi_escape.rb +46 -0
- data/lib/standard/facets/uri/cgi_parse.rb +1 -0
- data/lib/standard/facets/uri/cgi_unescape.rb +1 -0
- data/lib/standard/facets/uri/decode.rb +32 -0
- data/lib/standard/facets/uri/parameters.rb +63 -0
- data/lib/standard/facets/uri/query.rb +148 -0
- data/lib/standard/facets/yaml.rb +3 -56
- data/lib/standard/facets/yaml/file.rb +41 -0
- data/lib/standard/facets/yaml/kernel.rb +29 -0
- data/lib/standard/facets/yaml/read.rb +12 -0
- data/test/core/array/test_arrange.rb +37 -0
- data/test/core/array/test_each_overlap.rb +31 -0
- data/test/core/array/test_intersection.rb +19 -0
- data/test/core/array/test_missing.rb +12 -0
- data/test/core/array/test_occur.rb +52 -0
- data/test/core/array/test_occurrence.rb +20 -0
- data/test/core/array/test_reject_values.rb +17 -0
- data/test/core/array/test_squeeze.rb +22 -0
- data/test/core/array/test_step.rb +28 -0
- data/test/core/array/test_unique_permutation.rb +23 -0
- data/test/core/enumerable/test_key_by.rb +22 -0
- data/test/core/enumerable/test_occur.rb +18 -5
- data/test/core/enumerable/test_only.rb +40 -0
- data/test/core/enumerable/test_squeeze.rb +35 -0
- data/test/core/enumerable/test_sum.rb +8 -3
- data/test/core/enumerator/lazy/test_squeeze.rb +33 -0
- data/test/core/hash/test_count.rb +10 -1
- data/test/core/hash/test_deep_rekey.rb +131 -0
- data/test/core/hash/test_each_with_key.rb +16 -0
- data/test/core/hash/test_fetch_nested.rb +24 -0
- data/test/core/hash/test_keys.rb +0 -11
- data/test/core/hash/test_rekey.rb +41 -1
- data/test/core/hash/test_revalue.rb +98 -0
- data/test/core/hash/test_slice.rb +12 -1
- data/test/core/kernel/test_deep_clone.rb +31 -0
- data/test/core/kernel/test_deep_copy.rb +2 -28
- data/test/core/kernel/test_instance_extract.rb +28 -0
- data/test/core/method/test_composition.rb +42 -0
- data/test/core/range/test_op_add.rb +24 -0
- data/test/core/range/test_op_sub.rb +34 -0
- data/test/core/string/test_ascii_only.rb +30 -0
- data/test/core/string/test_margin.rb +4 -104
- data/test/core/string/test_number.rb +44 -0
- data/test/core/string/test_remove.rb +36 -0
- data/test/core/string/test_rotate.rb +31 -0
- data/test/core/string/test_trim.rb +116 -0
- data/test/core/symbol/test_thrown.rb +22 -0
- data/test/standard/binding/test_block_exec.rb +21 -0
- data/test/standard/math/test_acot.rb +23 -0
- data/test/standard/math/test_acoth.rb +22 -0
- data/test/standard/math/test_beta.rb +19 -0
- data/test/standard/math/test_ceil.rb +22 -0
- data/test/standard/math/test_cosec.rb +19 -0
- data/test/standard/math/test_cosech.rb +19 -0
- data/test/standard/math/test_cot.rb +13 -0
- data/test/standard/math/test_coth.rb +13 -0
- data/test/standard/math/test_distance.rb +16 -0
- data/test/standard/math/test_exp10.rb +14 -0
- data/test/standard/math/test_exp2.rb +14 -0
- data/test/standard/math/test_factorial.rb +13 -0
- data/test/standard/math/test_floor.rb +23 -0
- data/test/standard/math/test_gcd.rb +18 -0
- data/test/standard/math/test_lcm.rb +13 -0
- data/test/standard/math/test_pow.rb +30 -0
- data/test/standard/math/test_root.rb +15 -0
- data/test/standard/math/test_sec.rb +19 -0
- data/test/standard/math/test_sech.rb +19 -0
- data/test/standard/math/test_sign.rb +6 -0
- data/test/standard/math/test_sinc.rb +15 -0
- data/test/standard/math/test_srq.rb +20 -0
- data/test/standard/pathname/test_chdir.rb +16 -0
- data/test/standard/pathname/test_readline.rb +23 -0
- data/test/standard/test_enumargs.rb +1 -1
- data/test/standard/test_math.rb +3 -0
- data/test/standard/test_ostruct.rb +26 -21
- data/test/standard/test_uri.rb +9 -0
- metadata +802 -183
- data/.ruby +0 -54
- data/HISTORY.rdoc +0 -2386
- data/lib/core/facets/array/combination.rb +0 -43
- data/lib/core/facets/array/index.rb +0 -23
- data/lib/core/facets/array/occurent.rb +0 -1
- data/lib/core/facets/array/permutation.rb +0 -32
- data/lib/core/facets/array/product.rb +0 -30
- data/lib/core/facets/array/rotate.rb +0 -48
- data/lib/core/facets/array/select.rb +0 -20
- data/lib/core/facets/binding/eval.rb +0 -14
- data/lib/core/facets/enumerable/count.rb +0 -53
- data/lib/core/facets/enumerable/each_with_object.rb +0 -38
- data/lib/core/facets/enumerable/group_by.rb +0 -33
- data/lib/core/facets/enumerable/none.rb +0 -32
- data/lib/core/facets/enumerable/one.rb +0 -39
- data/lib/core/facets/enumerable/take.rb +0 -16
- data/lib/core/facets/float/round.rb +0 -2
- data/lib/core/facets/hash/select.rb +0 -17
- data/lib/core/facets/hash/to_h.rb +0 -1
- data/lib/core/facets/hash/url_params.rb +0 -21
- data/lib/core/facets/instance.rb +0 -157
- data/lib/core/facets/integer/even.rb +0 -1
- data/lib/core/facets/integer/odd.rb +0 -37
- data/lib/core/facets/kernel/__callee__.rb +0 -1
- data/lib/core/facets/kernel/__method__.rb +0 -48
- data/lib/core/facets/kernel/require_relative.rb +0 -52
- data/lib/core/facets/kernel/source_location.rb +0 -13
- data/lib/core/facets/nilclass/to_f.rb +0 -17
- data/lib/core/facets/numeric/round.rb +0 -69
- data/lib/core/facets/numeric/round_at.rb +0 -1
- data/lib/core/facets/object/replace.rb +0 -43
- data/lib/core/facets/objectspace/reflect.rb +0 -62
- data/lib/core/facets/proc/curry.rb +0 -32
- data/lib/core/facets/string/bytes.rb +0 -21
- data/lib/core/facets/string/each_char.rb +0 -31
- data/lib/core/facets/string/end_with.rb +0 -1
- data/lib/core/facets/string/lines.rb +0 -19
- data/lib/core/facets/string/random_binary.rb +0 -10
- data/lib/core/facets/string/start_with.rb +0 -60
- data/lib/core/facets/symbol/to_proc.rb +0 -33
- data/lib/core/facets/to_hash.rb +0 -336
- data/lib/core/facets/unboundmethod/name.rb +0 -28
- data/lib/standard/facets/math/gamma.rb +0 -12
- data/test/core/array/test_occurent.rb +0 -33
- data/test/core/kernel/test_source_location.rb +0 -25
- data/test/core/string/test_tabto.rb +0 -16
@@ -4,20 +4,23 @@
|
|
4
4
|
# Cloneable was originally ported from Jim Weirich's Rake.
|
5
5
|
# The current version is the work of Ken Bloom.
|
6
6
|
#
|
7
|
+
# DEPRECATED: A better approach is to provide a #deep_dup and and a #deep_clone,
|
8
|
+
# then if a class needs these for #dup and #clone they can just alias them.
|
9
|
+
#
|
7
10
|
# CREDIT: Ken Bloom
|
8
11
|
|
9
12
|
module Cloneable
|
10
13
|
|
11
14
|
def initialize_copy(sibling)
|
12
|
-
#
|
13
|
-
#instance variables, this will be overwritten, but this is important
|
14
|
-
#because we could be dealing with a C extension with state hidden from
|
15
|
-
#the Ruby interpreter
|
15
|
+
# First duplicate my superclass' state. Note that if it's duplicating
|
16
|
+
# instance variables, this will be overwritten, but this is important
|
17
|
+
# because we could be dealing with a C extension with state hidden from
|
18
|
+
# the Ruby interpreter.
|
16
19
|
super
|
17
20
|
|
18
|
-
#
|
19
|
-
#preserve the state of our internals the same way our state is being
|
20
|
-
#preserved. (If we can't figure it out, we'll just use #dup.)
|
21
|
+
# We want to know if we're being dup'ed or clone'd, because we want to
|
22
|
+
# preserve the state of our internals the same way our state is being
|
23
|
+
# preserved. (If we can't figure it out, we'll just use #dup.)
|
21
24
|
operation = (
|
22
25
|
copy_call = caller.find{|x| x !~ /'initialize_copy'/}
|
23
26
|
copy_match = copy_call.match(/`(dup|clone)'/)
|
@@ -27,8 +30,8 @@ module Cloneable
|
|
27
30
|
sibling.instance_variables.each do |ivar|
|
28
31
|
value = sibling.instance_variable_get(ivar)
|
29
32
|
|
30
|
-
#
|
31
|
-
#or my sibling, depending on what's happening to me right now
|
33
|
+
# Set my instance variable to be a #dup or #clone
|
34
|
+
# or my sibling, depending on what's happening to me right now.
|
32
35
|
instance_variable_set(ivar, value.send(operation))
|
33
36
|
end
|
34
37
|
end
|
@@ -1,195 +1,186 @@
|
|
1
|
-
# Enumerable::Arguments
|
2
|
-
#
|
3
|
-
# Copyright (c) 2004 Thomas Sawyer
|
4
|
-
#
|
5
|
-
# LGPL(3) 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
|
-
begin
|
15
|
-
require 'enumerator'
|
16
|
-
rescue LoadError
|
17
|
-
end
|
18
|
-
|
19
|
-
# This is a simple reimplementation of the core Enumerable module
|
20
|
-
# to allow the methods to take and pass-on arbitrary arguments to the
|
21
|
-
# underlying #each call. This library uses Enumerator and scans
|
22
|
-
# Enumerable so it can alwasy stay in sync.
|
23
|
-
#
|
24
|
-
# NOTE Any Enumerable method with a negative arity cannot do pass arguments
|
25
|
-
# due to ambiguity in the argument count. So the methods #inject and #zip
|
26
|
-
# do NOT work this way, but simply work as they do in Enumerable.
|
27
|
-
# The method #find (and #detect) though has been made to work by removing
|
28
|
-
# its rarely used optional parameter and providing instead an optional
|
29
|
-
# keyword parameter (:ifnone => ...). Please keep these difference in mind.
|
30
|
-
#
|
31
|
-
# require 'enumargs'
|
32
|
-
#
|
33
|
-
# class T
|
34
|
-
# include Enumerable::Arguments
|
35
|
-
# def initialize(arr)
|
36
|
-
# @arr = arr
|
37
|
-
# end
|
38
|
-
# def each(n)
|
39
|
-
# arr.each{ |e| yield(e+n) }
|
40
|
-
# end
|
41
|
-
# end
|
42
|
-
#
|
43
|
-
# t = T.new([1,2,3])
|
44
|
-
# t.collect(4)
|
45
|
-
# #=> [5,6,7]
|
46
|
-
#
|
47
1
|
module Enumerable
|
48
|
-
module
|
49
|
-
|
50
|
-
|
2
|
+
# This is a simple reimplementation of the core Enumerable module
|
3
|
+
# to allow its methods to take and pass-on arbitrary arguments to the
|
4
|
+
# underlying #each call. This library uses Enumerator and scans
|
5
|
+
# Enumerable so it can alwasy stay in sync.
|
6
|
+
#
|
7
|
+
# NOTE: Any Enumerable method with a negative arity cannot pass arguments
|
8
|
+
# due to ambiguity in the argument count. So the methods #inject and #zip
|
9
|
+
# do NOT work this way, but simply work as they do in Enumerable. However,
|
10
|
+
# The methods #find and #detect have been made modified to work by removing
|
11
|
+
# its rarely used optional parameter and providing instead an optional
|
12
|
+
# keyword parameter (:ifnone => ...). Please keep these difference in mind.
|
13
|
+
#
|
14
|
+
# Example
|
15
|
+
# require 'enumargs'
|
16
|
+
#
|
17
|
+
# class T
|
18
|
+
# include Enumerable::Argumentable
|
19
|
+
# def initialize(arr)
|
20
|
+
# @arr = arr
|
21
|
+
# end
|
22
|
+
# def each(n)
|
23
|
+
# arr.each{ |e| yield(e+n) }
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# t = T.new([1,2,3])
|
28
|
+
# t.collect(4)
|
29
|
+
# #=> [5,6,7]
|
30
|
+
#
|
31
|
+
module Argumentable
|
32
|
+
|
33
|
+
# Helper method to wrap Enumerable methods.
|
34
|
+
def self.wrap_enumerable_method( methodname )
|
35
|
+
m = methodname
|
36
|
+
meth = Enumerable.instance_method(m)
|
37
|
+
arity = meth.arity
|
38
|
+
|
39
|
+
case arity <=> 0
|
40
|
+
when 0
|
41
|
+
class_eval %{
|
42
|
+
def #{m}( *args, &yld )
|
43
|
+
enum_for(:each, *args).#{m}( &yld )
|
44
|
+
end
|
45
|
+
}
|
46
|
+
when 1
|
47
|
+
class_eval %{
|
48
|
+
def #{m}( *args, &yld )
|
49
|
+
args, each_args = args[0...#{arity}], args[#{arity}..-1]
|
50
|
+
enum_for(:each, *each_args).#{m}( *args, &yld )
|
51
|
+
end
|
52
|
+
}
|
53
|
+
else
|
54
|
+
class_eval %{
|
55
|
+
def #{m}( *args, &yld )
|
56
|
+
enum_for(:each).#{m}( *args, &yld )
|
57
|
+
end
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
51
61
|
|
52
|
-
|
53
|
-
|
54
|
-
|
62
|
+
# Wrap all Enumerable's public instance methods
|
63
|
+
Enumerable.instance_methods(false).each do |m|
|
64
|
+
wrap_enumerable_method( m )
|
65
|
+
end
|
55
66
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
}
|
63
|
-
when 1
|
64
|
-
class_eval %{
|
65
|
-
def #{m}( *args, &yld )
|
66
|
-
args, each_args = args[0...#{arity}], args[#{arity}..-1]
|
67
|
-
enum_for(:each, *each_args).#{m}( *args, &yld )
|
68
|
-
end
|
69
|
-
}
|
70
|
-
else
|
71
|
-
class_eval %{
|
72
|
-
def #{m}( *args, &yld )
|
73
|
-
enum_for(:each).#{m}( *args, &yld )
|
74
|
-
end
|
75
|
-
}
|
67
|
+
# Support for #to_a.
|
68
|
+
#
|
69
|
+
def to_a(*args)
|
70
|
+
#map(*args){ |x| x }
|
71
|
+
enum_for(:each, *args).to_a
|
76
72
|
end
|
77
|
-
end
|
78
73
|
|
79
|
-
|
80
|
-
|
81
|
-
|
74
|
+
# Make exception for #find (a negative arity method) to accept
|
75
|
+
# keyword argument.
|
76
|
+
#
|
77
|
+
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
78
|
+
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
79
|
+
#
|
80
|
+
def find(*args, &yld) # future use **keys ?
|
81
|
+
if Hash === args.last and args.last.key?(:ifnone)
|
82
|
+
ifnone = args.last.delete(:ifnone)
|
83
|
+
args.pop if args.last.empty?
|
84
|
+
enum_for(:each, *args).find( ifnone, &yld )
|
85
|
+
else
|
86
|
+
enum_for(:each, *args).find( &yld )
|
87
|
+
end
|
88
|
+
end
|
82
89
|
|
83
|
-
|
84
|
-
def to_a(*args)
|
85
|
-
map(*args){ |x| x }
|
86
|
-
end
|
90
|
+
alias_method :detect, :find
|
87
91
|
|
88
|
-
# Make exception for #find (a negative arity method) to accept
|
89
|
-
# keyword argument.
|
90
|
-
#
|
91
|
-
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
92
|
-
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
93
|
-
#
|
94
|
-
def find(*args, &yld) # future use **keys ?
|
95
|
-
if Hash === args.last and args.last.key?(:ifnone)
|
96
|
-
ifnone = args.last.delete(:ifnone)
|
97
|
-
args.pop if args.last.empty?
|
98
|
-
enum_for(:each, *args).find( ifnone, &yld )
|
99
|
-
else
|
100
|
-
enum_for(:each, *args).find( &yld )
|
101
|
-
end
|
102
92
|
end
|
103
|
-
alias_method :detect, :find
|
104
93
|
|
105
|
-
|
94
|
+
# DEPRECATED: Module alias for old name.
|
95
|
+
Arguments = Argumentable
|
106
96
|
end
|
107
97
|
|
108
98
|
|
109
99
|
=begin OLD CODE
|
110
|
-
module EnumerableArgs
|
100
|
+
module EnumerableArgs
|
111
101
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
102
|
+
def collect(*args) # :yield:
|
103
|
+
a = []
|
104
|
+
each(*args){ |n| a << yield(n) }
|
105
|
+
a
|
106
|
+
end
|
107
|
+
alias_method( :map, :collect )
|
118
108
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
109
|
+
def detect(*args) # :yield:
|
110
|
+
each(*args){ |n| return n if yield(n) }
|
111
|
+
nil
|
112
|
+
end
|
113
|
+
alias_method( :find, :detect )
|
124
114
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
115
|
+
def each_with_index(*args)
|
116
|
+
i=0
|
117
|
+
each(*args){ |*n| n << i; yield(*n); i+=1 }
|
118
|
+
self
|
119
|
+
end
|
130
120
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
121
|
+
def to_a(*args)
|
122
|
+
a = []
|
123
|
+
each(*args){ |n| a << n }
|
124
|
+
a
|
125
|
+
end
|
126
|
+
alias_method( :entries, :to_a )
|
127
|
+
|
128
|
+
# An additional method not part of standard Enumerable.
|
129
|
+
# The regular version of this method can be found in Facets,
|
130
|
+
# but it is a bit more advanced then this one.
|
131
|
+
# At some point they need to be put into sync.
|
132
|
+
def each_slice(*args, &yld)
|
133
|
+
a = []; s = []
|
134
|
+
ar = yld.arity.abs
|
135
|
+
each(*args){ |n|
|
136
|
+
s << n
|
137
|
+
if s.length >= ar
|
138
|
+
yld.call(*s)
|
139
|
+
s = []
|
140
|
+
end
|
141
|
+
}
|
142
|
+
a
|
143
|
+
end
|
144
|
+
alias_method( :each_by, :each_slice )
|
155
145
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
146
|
+
def select(*args) # :yield:
|
147
|
+
a = []
|
148
|
+
each(*args){ |n| a << n if yield(n) }
|
149
|
+
a
|
150
|
+
end
|
151
|
+
alias_method( :find_all, :select )
|
162
152
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
153
|
+
def grep(pattern, *args)
|
154
|
+
a = []
|
155
|
+
each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
|
156
|
+
a
|
157
|
+
end
|
168
158
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
159
|
+
def include?(anObj, *args)
|
160
|
+
each(*args){ |n| return true if anObj == n }
|
161
|
+
false
|
162
|
+
end
|
163
|
+
alias_method( :member?, :include? )
|
174
164
|
|
175
|
-
|
176
|
-
|
177
|
-
|
165
|
+
def max(*args)
|
166
|
+
to_a(*args).max
|
167
|
+
end
|
178
168
|
|
179
|
-
|
180
|
-
|
181
|
-
|
169
|
+
def min(*args)
|
170
|
+
to_a(*args).min
|
171
|
+
end
|
182
172
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
173
|
+
def reject(*args)
|
174
|
+
a = []
|
175
|
+
each(*args){ |n| a << n if ! yield(n) }
|
176
|
+
a
|
177
|
+
end
|
188
178
|
|
189
|
-
|
190
|
-
|
191
|
-
|
179
|
+
def sort(*args)
|
180
|
+
# TODO
|
181
|
+
end
|
192
182
|
|
193
|
-
end
|
183
|
+
end
|
194
184
|
=end
|
195
185
|
|
186
|
+
# Copyright (c) 2004 Rubyworks (BSD-2-Clause)
|
data/lib/standard/facets/find.rb
CHANGED
@@ -1,16 +1,2 @@
|
|
1
|
-
require 'facets/
|
2
|
-
|
3
|
-
module Find
|
4
|
-
# Identical to find except select returns the matching files as an array.
|
5
|
-
# (find returns nil, which is not very useful if you actually wanted an array.)
|
6
|
-
# Calls the associated block with the name of every file and directory listed
|
7
|
-
# as arguments, then recursively on their subdirectories, and so on.
|
8
|
-
# Return a true (non-false) value from the block for every path that
|
9
|
-
# you want to be returned in the resulting array. You can still use Find.prune.
|
10
|
-
#
|
11
|
-
# CREDIT: Tyler Rick
|
12
|
-
def self.select(*paths, &block)
|
13
|
-
Enumerator.new(self, :find, *paths).select{|value| yield value}
|
14
|
-
end
|
15
|
-
end
|
1
|
+
require 'facets/find/select'
|
16
2
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'facets/enumerator'
|
2
|
+
|
3
|
+
module Find
|
4
|
+
# Identical to find except select returns the matching files as an array.
|
5
|
+
# (find returns nil, which is not very useful if you actually wanted an array.)
|
6
|
+
# Calls the associated block with the name of every file and directory listed
|
7
|
+
# as arguments, then recursively on their subdirectories, and so on.
|
8
|
+
# Return a true (non-false) value from the block for every path that
|
9
|
+
# you want to be returned in the resulting array. You can still use Find.prune.
|
10
|
+
#
|
11
|
+
# CREDIT: Tyler Rick
|
12
|
+
def self.select(*paths, &block)
|
13
|
+
Enumerator.new(self, :find, *paths).select{|value| yield value}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'facets/gem/specification/current_specs'
|
2
|
+
|
3
|
+
module Gem
|
4
|
+
|
5
|
+
# Search RubyGems for matching paths in current gem versions.
|
6
|
+
def self.search(match, options={})
|
7
|
+
matches = []
|
8
|
+
Gem::Specification.current_specs.each do |spec|
|
9
|
+
glob = File.join(spec.lib_dirs_glob, match)
|
10
|
+
list = Dir[glob] #.map{ |f| f.untaint }
|
11
|
+
list = list.map{ |d| d.chomp('/') }
|
12
|
+
matches.concat(list)
|
13
|
+
end
|
14
|
+
matches
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|