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
@@ -1,9 +1,15 @@
|
|
1
1
|
class String
|
2
2
|
|
3
|
-
# Indent left or right by n spaces.
|
4
|
-
# (This used to be called #tab and aliased as #indent.)
|
3
|
+
# Indent left or right by `n` spaces, or `n` number of `c` string.
|
5
4
|
#
|
6
|
-
#
|
5
|
+
# n - The number of spaces to indent. [Integer]
|
6
|
+
# c - Character to use, if other then space. [String]
|
7
|
+
#
|
8
|
+
# Returns a new string with the indention. [String]
|
9
|
+
#
|
10
|
+
# Credit: Gavin Sinclair
|
11
|
+
# Credit: Trans
|
12
|
+
# Credit: Tyler Rick
|
7
13
|
|
8
14
|
def indent(n, c=' ')
|
9
15
|
if n >= 0
|
@@ -14,30 +20,33 @@ class String
|
|
14
20
|
end
|
15
21
|
|
16
22
|
# Equivalent to String#indent, but modifies the receiver in place.
|
23
|
+
#
|
24
|
+
# n - The number of spaces to indent. [Integer]
|
25
|
+
# c - Character to use, if other then space. [String]
|
26
|
+
#
|
27
|
+
# Returns this string with the indention. [String]
|
17
28
|
|
18
29
|
def indent!(n, c=' ')
|
19
30
|
replace(indent(n,c))
|
20
31
|
end
|
21
32
|
|
22
|
-
# Remove excessive indentation. Useful for multi-line strings
|
23
|
-
# already indented code.
|
24
|
-
#
|
25
|
-
# <<-END.unindent
|
26
|
-
# ohaie
|
27
|
-
# wurld
|
28
|
-
# END
|
33
|
+
# Remove excessive indentation. Useful for multi-line strings
|
34
|
+
# embeded in already indented code.
|
29
35
|
#
|
30
|
-
#
|
36
|
+
# size - The number of spaces to indent. [Integer]
|
31
37
|
#
|
32
|
-
#
|
33
|
-
# wurld
|
38
|
+
# Examples
|
34
39
|
#
|
35
|
-
#
|
40
|
+
# <<-END.unindent
|
41
|
+
# ohaie
|
42
|
+
# wurld
|
43
|
+
# END
|
44
|
+
# #=> "ohaie\n wurld"
|
36
45
|
#
|
37
|
-
#
|
38
|
-
# wurld
|
46
|
+
# Returns a new unindented string. [String]
|
39
47
|
#
|
40
|
-
#
|
48
|
+
# Credit: Noah Gibbs
|
49
|
+
# Credit: mynyml
|
41
50
|
|
42
51
|
def unindent(size=nil)
|
43
52
|
if size
|
@@ -57,11 +66,19 @@ class String
|
|
57
66
|
|
58
67
|
# Equivalent to String#unindent, but modifies the receiver in place.
|
59
68
|
#
|
60
|
-
#
|
69
|
+
# Returns this string unindented. [String]
|
70
|
+
#
|
71
|
+
# Credit: mynyml
|
61
72
|
|
62
73
|
def unindent!
|
63
|
-
|
74
|
+
replace(unindent)
|
64
75
|
end
|
65
76
|
|
66
|
-
|
77
|
+
# DEPRECATED: Use String#indent instead.
|
78
|
+
alias :tab :indent
|
79
|
+
alias :tab! :indent!
|
67
80
|
|
81
|
+
#alias :backtab :unindent
|
82
|
+
#alias :backtab! :unindent!
|
83
|
+
|
84
|
+
end
|
@@ -1,13 +1,17 @@
|
|
1
1
|
class String
|
2
2
|
|
3
|
-
# Interpolate
|
3
|
+
# Interpolate provides a means of externally using Ruby string
|
4
4
|
# interpolation mechinism.
|
5
5
|
#
|
6
6
|
# try = "hello"
|
7
7
|
# str = "\#{try}!!!"
|
8
8
|
# String.interpolate{ str } #=> "hello!!!"
|
9
9
|
#
|
10
|
-
#
|
10
|
+
# Note this uses #eval under the hood. We do not recommend that
|
11
|
+
# it serve in place of a good templating system. But, it can be
|
12
|
+
# useful for simple cases.
|
13
|
+
#
|
14
|
+
# The block is neccessary in order to get then binding of the caller.
|
11
15
|
#
|
12
16
|
# CREDIT: Trans
|
13
17
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'facets/functor'
|
2
|
+
|
3
|
+
class String
|
4
|
+
|
5
|
+
# TODO: Should String#linear be moved to separate functor gem?
|
6
|
+
|
7
|
+
# Like `#newlines` but returns a Functor instead.
|
8
|
+
#
|
9
|
+
# "a \n b \n c".linear.strip #=> "a\nb\nc"
|
10
|
+
#
|
11
|
+
def linear
|
12
|
+
Functor.new do |op, *a, &b|
|
13
|
+
lines.map { |line|
|
14
|
+
line.chomp.public_send(op, *a, &b)
|
15
|
+
}.join("\n")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -1,31 +1,59 @@
|
|
1
|
+
require 'facets/string/indent'
|
2
|
+
|
1
3
|
class String
|
2
4
|
|
3
|
-
#
|
5
|
+
# Preserve relative tabbing such that the line with the least amount
|
6
|
+
# of white space ends up with the given number of spaces before non-space
|
7
|
+
# and all other lines move relative to it.
|
8
|
+
#
|
9
|
+
# Because of the nature of this method, leading tab characters (`\t`) must
|
10
|
+
# be converted to spaces. The size of a tab can be set via the `:tab` option.
|
11
|
+
# The default size is 2.
|
12
|
+
#
|
13
|
+
# If the `:lead` option is set, then the relative margin is determined
|
14
|
+
# by the first non-blank line, instead of the minimum white-space for all
|
15
|
+
# lines.
|
16
|
+
#
|
17
|
+
# Arguments
|
18
|
+
#
|
19
|
+
# num - The size of the desired margin. [Integer]
|
20
|
+
# opts - Margin options. [Hash]
|
4
21
|
#
|
5
|
-
#
|
6
|
-
# | This
|
7
|
-
# | is
|
8
|
-
# | margin controlled!
|
9
|
-
# }.margin
|
22
|
+
# Options
|
10
23
|
#
|
11
|
-
#
|
24
|
+
# :tab - Size of tab character in spaces. [Integer]
|
25
|
+
# :lead - Use first non-blank line as relative marker. [Boolean]
|
12
26
|
#
|
13
|
-
#
|
27
|
+
# Returns a new String with adjusted margin. [String]
|
14
28
|
#
|
15
|
-
#
|
29
|
+
# Author: Gavin Sinclair
|
30
|
+
# Author: Trans
|
16
31
|
|
17
|
-
def margin(
|
18
|
-
#
|
19
|
-
#
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
32
|
+
def margin(num=nil, opts={})
|
33
|
+
# TODO: temporary to help people transition
|
34
|
+
raise ArgumentError, "String#margin has been renamed to #trim." unless num
|
35
|
+
|
36
|
+
tab = opts[:tab] || 2
|
37
|
+
str = gsub("\t", " " * tab) # TODO: only leading tabs ?
|
38
|
+
|
39
|
+
if opts[:lead]
|
40
|
+
if self =~ /^( *)\S/
|
41
|
+
indent(num - $1.length)
|
42
|
+
else
|
43
|
+
self
|
44
|
+
end
|
25
45
|
else
|
26
|
-
|
46
|
+
min = []
|
47
|
+
str.each_line do |line|
|
48
|
+
next if line.strip.empty?
|
49
|
+
min << line.index(/\S/)
|
50
|
+
end
|
51
|
+
min = min.min
|
52
|
+
str.indent(num - min)
|
27
53
|
end
|
28
54
|
end
|
29
55
|
|
30
|
-
|
56
|
+
# Original name of #margin.
|
57
|
+
alias :tabto :margin
|
31
58
|
|
59
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Returns true if it's a decimal digits.
|
4
|
+
#
|
5
|
+
# "123_456_789_123_456_789.123_456_000_111".number? # => true
|
6
|
+
# "1.23".number? # => true
|
7
|
+
# "1.23a".number? # => false
|
8
|
+
#
|
9
|
+
# CREDIT: u2
|
10
|
+
|
11
|
+
def number?
|
12
|
+
!!self.match(/\A[+-]?\d+?(_?\d+?)*?(\.\d+(_?\d+?)*?)?\Z/)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Create a random String of given length, using given character set
|
4
|
+
#
|
5
|
+
# Examples
|
6
|
+
#
|
7
|
+
# String.random
|
8
|
+
# => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
|
9
|
+
#
|
10
|
+
# String.random(10)
|
11
|
+
# => "t8BIna341S"
|
12
|
+
#
|
13
|
+
# String.random(10, ['a'..'z'])
|
14
|
+
# => "nstpvixfri"
|
15
|
+
#
|
16
|
+
# String.random(10, ['0'..'9'] )
|
17
|
+
# => "0982541042"
|
18
|
+
#
|
19
|
+
# String.random(10, ['0'..'9','A'..'F'] )
|
20
|
+
# => "3EBF48AD3D"
|
21
|
+
#
|
22
|
+
# CREDIT: Tilo Sloboda
|
23
|
+
#
|
24
|
+
# SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
|
25
|
+
#
|
26
|
+
# TODO: Move to random.rb in standard library?
|
27
|
+
|
28
|
+
def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
|
29
|
+
characters = character_set.map { |i| i.to_a }.flatten
|
30
|
+
characters_len = characters.length
|
31
|
+
(0...len).map{ characters[rand(characters_len)] }.join
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Removes all occurrences of a pattern in a string.
|
4
|
+
#
|
5
|
+
# Returns a new [String] with all occurrences of the pattern removed.
|
6
|
+
def remove(pattern)
|
7
|
+
gsub(pattern, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
# Removes all occurrences of a pattern in a string.
|
11
|
+
#
|
12
|
+
# Returns the [String] with all occurrences of the pattern removed.
|
13
|
+
def remove!(pattern)
|
14
|
+
gsub!(pattern, '')
|
15
|
+
end
|
16
|
+
|
17
|
+
# Removes occurances of a string or regexp. This is an operator
|
18
|
+
# form for the #remove method.
|
19
|
+
#
|
20
|
+
# ("HELLO HELLO" - "LL") #=> "HEO HEO"
|
21
|
+
# ("HELLO PERL" - /L\S/) #=> "HEO PERL"
|
22
|
+
#
|
23
|
+
# Returns a new [String] with all pattern matches removed.
|
24
|
+
#
|
25
|
+
# CREDIT: Benjamin David Oakes
|
26
|
+
def -(pattern)
|
27
|
+
gsub(pattern, '')
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Rotate string to the left with count.
|
4
|
+
# Specifying negative number indicates rotation to the right.
|
5
|
+
#
|
6
|
+
# 'abcdefgh'.rotate(2) #=> 'cdefghab'
|
7
|
+
# 'abcdefgh'.rotate(-2) #=> 'ghabcdef'
|
8
|
+
#
|
9
|
+
# CREDIT: T. Yamada
|
10
|
+
def rotate(count=1)
|
11
|
+
count+=self.length if count<0
|
12
|
+
self.slice(count,self.length-count)+self.slice(0,count)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Destructive version of String#rotate
|
16
|
+
#
|
17
|
+
# s='abcdefgh'
|
18
|
+
# s.rotate!(2)
|
19
|
+
# s.should eq 'cdefghab'
|
20
|
+
#
|
21
|
+
# CREDIT: T. Yamada
|
22
|
+
def rotate!(count=1) replace(rotate(count)) end
|
23
|
+
|
24
|
+
end
|
@@ -36,7 +36,7 @@ class String
|
|
36
36
|
# -- "graph" self
|
37
37
|
last = self.length
|
38
38
|
(0..last).each do |ff|
|
39
|
-
loc
|
39
|
+
#loc = self.length
|
40
40
|
break if ff == last - 1
|
41
41
|
wordB = (1..(last-1)).to_a.reverse!
|
42
42
|
if (wordB != nil)
|
@@ -50,7 +50,7 @@ class String
|
|
50
50
|
# -- "graph" input string
|
51
51
|
last = str_in.length
|
52
52
|
(0..last).each{ |ff|
|
53
|
-
loc
|
53
|
+
#loc = str_in.length
|
54
54
|
break if ff == last - 1
|
55
55
|
wordB = (1..(last-1)).to_a.reverse!
|
56
56
|
wordB.each do |ss|
|
@@ -1,17 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class String
|
4
|
-
|
5
|
-
# Aligns each line n spaces.
|
6
|
-
#
|
7
|
-
# CREDIT: Gavin Sinclair
|
8
|
-
#
|
9
|
-
def tab(n)
|
10
|
-
gsub(/^ */, ' ' * n)
|
11
|
-
end
|
12
|
-
|
13
|
-
# NOTE: Deprecated #taballto which was an alias for #tab.
|
14
|
-
#alias_method :taballto, :tab
|
15
|
-
|
16
|
-
end
|
17
|
-
|
1
|
+
# DEPRECATED
|
2
|
+
require 'facets/string/indent'
|
@@ -1,19 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class String
|
4
|
-
|
5
|
-
# Preserves relative tabbing.
|
6
|
-
# The first non-empty line ends up with n spaces before nonspace.
|
7
|
-
#
|
8
|
-
# CREDIT: Gavin Sinclair
|
9
|
-
|
10
|
-
def tabto(n)
|
11
|
-
if self =~ /^( *)\S/
|
12
|
-
indent(n - $1.length)
|
13
|
-
else
|
14
|
-
self
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
1
|
+
# DEPRECATED
|
2
|
+
require 'facets/string/margin'
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'to_re'
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Control the margin of a string using a trim character.
|
4
|
+
#
|
5
|
+
# The first character of the second line of the string
|
6
|
+
# is used as the trim character. This method is useful
|
7
|
+
# when literal multi-line strings are needed in code.
|
8
|
+
#
|
9
|
+
# num - Number of extra spaces with which to replace the
|
10
|
+
# trim character. [Integer]
|
11
|
+
#
|
12
|
+
# Examples
|
13
|
+
#
|
14
|
+
# x = %Q{
|
15
|
+
# | This
|
16
|
+
# | is
|
17
|
+
# | trim!
|
18
|
+
# }.trim
|
19
|
+
#
|
20
|
+
# Returns string with the margin trimed-off.
|
21
|
+
#
|
22
|
+
# Note: This this method used to be called `margin` prior to Facets 3.0.
|
23
|
+
#
|
24
|
+
# Since: 3.0.0
|
25
|
+
# Author: Trans
|
26
|
+
|
27
|
+
def trim(num=0)
|
28
|
+
#d = /\A.*\n\s*(.)/.match( self )[1]
|
29
|
+
#d = /\A\s*(.)/.match( self)[1] unless d
|
30
|
+
|
31
|
+
md = /\A.*\n\s*(.)/.match(self) || /\A\s*(.)/.match(self)
|
32
|
+
|
33
|
+
d = md[1]
|
34
|
+
|
35
|
+
return '' unless d
|
36
|
+
|
37
|
+
if num == 0
|
38
|
+
gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, '')
|
39
|
+
else
|
40
|
+
gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, ' ' * num)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|