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
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class OpenStruct
|
4
|
+
#
|
5
|
+
def to_ostruct
|
6
|
+
self
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Hash
|
11
|
+
# Turns a hash into a generic object using an OpenStruct.
|
12
|
+
#
|
13
|
+
# o = {'a' => 1}.to_ostruct
|
14
|
+
# o.a #=> 1
|
15
|
+
#
|
16
|
+
def to_ostruct
|
17
|
+
OpenStruct.new(self)
|
18
|
+
end
|
19
|
+
|
20
|
+
## Recursively converts a Hash object to an OpenStruct object.
|
21
|
+
##
|
22
|
+
## Returns a copy of the hash as an OpenStruct.
|
23
|
+
#def to_ostruct()
|
24
|
+
# struct = OpenStruct.new(self.clone())
|
25
|
+
# each do |k, v|
|
26
|
+
# struct.__send__("#{k}=", v.to_ostruct()) if v.is_a?(Hash)
|
27
|
+
# struct.__send__(k).map! {|x| x.is_a?(Hash) ? x.to_ostruct() : x} if v.is_a?(Array)
|
28
|
+
# end
|
29
|
+
# return struct
|
30
|
+
#end
|
31
|
+
|
32
|
+
# Like `#to_ostruct` but recusively objectifies all hash elements as well.
|
33
|
+
#
|
34
|
+
# o = {'a' => { 'b' => 1 }}.to_ostruct_recurse
|
35
|
+
# o.a.b #=> 1
|
36
|
+
#
|
37
|
+
# The `exclude` parameter is used internally to prevent infinite
|
38
|
+
# recursion and is not intended to be utilized by the end-user.
|
39
|
+
# But for more advance use, if there is a particular subhash you
|
40
|
+
# would like to prevent from being converted to an OpoenStruct
|
41
|
+
# then include it in the `exclude` hash referencing itself. e.g.
|
42
|
+
#
|
43
|
+
# h = { 'a' => { 'b' => 1 } }
|
44
|
+
# o = h.to_ostruct_recurse( { h['a'] => h['a'] } )
|
45
|
+
# o.a['b'] #=> 1
|
46
|
+
#
|
47
|
+
# CREDIT: Alison Rowland, Jamie Macey, Mat Schaffer
|
48
|
+
def to_ostruct_recurse(exclude={})
|
49
|
+
return exclude[self] if exclude.key?( self )
|
50
|
+
o = exclude[self] = OpenStruct.new
|
51
|
+
h = self.dup
|
52
|
+
each_pair do |k,v|
|
53
|
+
h[k] = v.to_ostruct_recurse( exclude ) if v.respond_to?(:to_ostruct_recurse)
|
54
|
+
end
|
55
|
+
o.merge!(h)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class NilClass
|
60
|
+
# Create an empty OpenStruct object.
|
61
|
+
def to_ostruct
|
62
|
+
OpenStruct.new
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
@@ -1,189 +1,26 @@
|
|
1
|
-
# = Pathname
|
2
|
-
#
|
3
|
-
# Ruby's standard Pathname class with extensions.
|
4
|
-
#
|
5
|
-
# == Authors:
|
6
|
-
#
|
7
|
-
# * Daniel Burger
|
8
|
-
# * Thomas Sawyer
|
9
|
-
#
|
10
|
-
# == Copying
|
11
|
-
#
|
12
|
-
# Copyright (c) 2006 Thomas Sawyer, Daniel Burger
|
13
|
-
#
|
14
|
-
# Ruby License
|
15
|
-
#
|
16
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
17
|
-
# software under the same terms as Ruby.
|
18
|
-
#
|
19
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
20
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
21
|
-
# FOR A PARTICULAR PURPOSE.
|
22
|
-
|
23
1
|
require 'pathname'
|
24
|
-
require 'facets/file/rootname'
|
25
|
-
require 'facets/fileutils/outofdate'
|
26
|
-
|
27
|
-
class Pathname
|
28
|
-
|
29
|
-
# Alias #to_s to #to_str when #to_str is not defined.
|
30
|
-
#
|
31
|
-
alias_method(:to_str, :to_s) unless method_defined?(:to_str)
|
32
|
-
|
33
|
-
# Alternate to Pathname#new.
|
34
|
-
#
|
35
|
-
# Pathname['/usr/share']
|
36
|
-
#
|
37
|
-
def self.[](path)
|
38
|
-
new(path)
|
39
|
-
end
|
40
|
-
|
41
|
-
# Start a path. Another alias for #new.
|
42
|
-
#
|
43
|
-
# Pathname / 'usr'
|
44
|
-
#
|
45
|
-
def self./(path)
|
46
|
-
new(path)
|
47
|
-
end
|
48
|
-
|
49
|
-
# Root constant for building paths from root directory onward.
|
50
|
-
def self.root
|
51
|
-
Pathname.new('/')
|
52
|
-
end
|
53
|
-
|
54
|
-
# Home constant for building paths from root directory onward.
|
55
|
-
#
|
56
|
-
# TODO: Pathname#home needs to be more robust.
|
57
|
-
#
|
58
|
-
def self.home
|
59
|
-
Pathname.new('~')
|
60
|
-
end
|
61
|
-
|
62
|
-
# Work constant for building paths from root directory onward.
|
63
|
-
#
|
64
|
-
def self.work
|
65
|
-
Pathname.new('.')
|
66
|
-
end
|
67
|
-
|
68
|
-
# Platform dependent null device.
|
69
|
-
#
|
70
|
-
# CREDIT Daniel Burger
|
71
|
-
def self.null
|
72
|
-
case RUBY_PLATFORM
|
73
|
-
when /mswin/i
|
74
|
-
'NUL'
|
75
|
-
when /amiga/i
|
76
|
-
'NIL:'
|
77
|
-
when /openvms/i
|
78
|
-
'NL:'
|
79
|
-
else
|
80
|
-
'/dev/null'
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
# Try to get this into standard Pathname class.
|
85
|
-
alias_method :/, :+
|
86
|
-
|
87
|
-
#
|
88
|
-
def rootname
|
89
|
-
self.class.new(File.rootname(to_s))
|
90
|
-
end
|
91
2
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
3
|
+
require 'facets/pathname/home'
|
4
|
+
require 'facets/pathname/null'
|
5
|
+
require 'facets/pathname/op_div'
|
6
|
+
require 'facets/pathname/op_fetch'
|
7
|
+
require 'facets/pathname/root'
|
8
|
+
require 'facets/pathname/work'
|
97
9
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
10
|
+
require 'facets/pathname/empty'
|
11
|
+
require 'facets/pathname/exists'
|
12
|
+
require 'facets/pathname/glob'
|
13
|
+
require 'facets/pathname/outofdate'
|
14
|
+
require 'facets/pathname/readline'
|
15
|
+
require 'facets/pathname/rootname'
|
16
|
+
require 'facets/pathname/safe'
|
17
|
+
require 'facets/pathname/split_root'
|
18
|
+
require 'facets/pathname/to_str'
|
19
|
+
require 'facets/pathname/uptodate'
|
20
|
+
require 'facets/pathname/visit'
|
103
21
|
|
104
|
-
|
105
|
-
#
|
106
|
-
# DEPRECATE: While slightly faster then glob().first, not really worth it
|
107
|
-
# unless this can be rewritten to shortcut on first match (using fnmatch?).
|
108
|
-
# In wich case, is there a better name for this method?
|
109
|
-
def glob_first(match, *opts)
|
110
|
-
flags = glob_flags(opts)
|
111
|
-
file = ::Dir.glob(::File.join(self.to_s, match), flags).first
|
112
|
-
file ? self.class.new(file) : nil
|
113
|
-
end
|
22
|
+
require 'facets/pathname/to_path'
|
114
23
|
|
115
|
-
# Return globbed matches with pathnames relative to the current pathname.
|
116
|
-
def glob_relative(match, *opts)
|
117
|
-
flags = glob_flags(opts)
|
118
|
-
files = Dir.glob(::File.join(self.to_s, match), flags)
|
119
|
-
files = files.map{ |f| f.sub(self.to_s.chomp('/') + '/', '') }
|
120
|
-
files.collect{ |m| self.class.new(m) }
|
121
|
-
end
|
122
|
-
|
123
|
-
private
|
124
|
-
|
125
|
-
def glob_flags(opts)
|
126
|
-
flags = 0
|
127
|
-
opts.each do |opt|
|
128
|
-
case opt when Symbol, String
|
129
|
-
flags += ::File.const_get("FNM_#{opt}".upcase)
|
130
|
-
else
|
131
|
-
flags += opt
|
132
|
-
end
|
133
|
-
end
|
134
|
-
flags
|
135
|
-
end
|
136
|
-
|
137
|
-
public
|
138
|
-
|
139
|
-
#
|
140
|
-
def empty?
|
141
|
-
Dir.glob(::File.join(to_s, '*')).empty?
|
142
|
-
end
|
143
|
-
|
144
|
-
#
|
145
|
-
def uptodate?(*sources)
|
146
|
-
::FileUtils.uptodate?(to_s, sources.flatten)
|
147
|
-
end
|
148
|
-
|
149
|
-
#
|
150
|
-
def outofdate?(*sources)
|
151
|
-
::FileUtils.outofdate?(to_s, sources.flatten)
|
152
|
-
end
|
153
|
-
|
154
|
-
# Recursively visit a directory located by its path, yielding each resource
|
155
|
-
# as its full matching pathname object. If called on a file, yield the file.
|
156
|
-
#
|
157
|
-
# call-seq:
|
158
|
-
# visit => yield each file
|
159
|
-
# visit(all: true) => yield visited directories as well
|
160
|
-
# visit(hidden: true) => yield hidden files and directories as well
|
161
|
-
#
|
162
|
-
# Example use case:
|
163
|
-
#
|
164
|
-
# # Locate any file but *.haml within app/**/*
|
165
|
-
# Pathname.new("app").visit do |f|
|
166
|
-
# next unless f.to_s =~ /\.haml$/
|
167
|
-
# f
|
168
|
-
# end
|
169
|
-
#
|
170
|
-
# TODO: Use #map instead of #each ?
|
171
|
-
#
|
172
|
-
# CREDIT: Jean-Denis Vauguet
|
173
|
-
def visit(options = {:all => false, :hidden => false})
|
174
|
-
if self.directory?
|
175
|
-
children.each do |entry|
|
176
|
-
next if entry.basename.to_s[0] == "." && !options[:hidden]
|
177
|
-
yield(entry) unless entry.directory? && !options[:all]
|
178
|
-
##entry.visit(:all => options[:all]) { |sub_entry| yield sub_entry } if entry.directory?
|
179
|
-
entry.visit(:all => options[:all], :hidden => options[:hidden]) do |sub_entry|
|
180
|
-
yield(sub_entry)
|
181
|
-
end if entry.directory?
|
182
|
-
end
|
183
|
-
else
|
184
|
-
yield self
|
185
|
-
end
|
186
|
-
end
|
187
24
|
|
188
25
|
## # Already included in 1.8.4+ version of Ruby (except for inclusion flag)
|
189
26
|
## if not instance_methods.include?(:ascend)
|
@@ -217,37 +54,3 @@ class Pathname
|
|
217
54
|
##
|
218
55
|
## end
|
219
56
|
|
220
|
-
# Does a directory contain a matching entry?
|
221
|
-
# Or if the pathname is a file, same as #fnmatch.
|
222
|
-
def include?(pattern,*opts)
|
223
|
-
if directory?
|
224
|
-
glob_first(pattern,*opts)
|
225
|
-
else
|
226
|
-
fnmatch(pattern,*opts)
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
end
|
231
|
-
|
232
|
-
class NilClass
|
233
|
-
# Provide platform dependent null path.
|
234
|
-
#
|
235
|
-
# @standard
|
236
|
-
# require 'facets/pathname'
|
237
|
-
#
|
238
|
-
# @author Daniel Burger
|
239
|
-
def to_path
|
240
|
-
Pathname.null
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
class Array
|
245
|
-
# Convert array to Pathname instance.
|
246
|
-
#
|
247
|
-
# @standard
|
248
|
-
# require 'facets/pathname'
|
249
|
-
#
|
250
|
-
def to_path
|
251
|
-
Pathname.new(join('/'))
|
252
|
-
end
|
253
|
-
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class Pathname
|
2
|
+
|
3
|
+
# Glob pathnames.
|
4
|
+
def glob(match, *opts)
|
5
|
+
flags = glob_flags(opts)
|
6
|
+
Dir.glob(::File.join(self.to_s, match), flags).collect{ |m| self.class.new(m) }
|
7
|
+
end
|
8
|
+
|
9
|
+
# Return the first glob match.
|
10
|
+
#
|
11
|
+
# DEPRECATE: While slightly faster then glob().first, not really worth it
|
12
|
+
# unless this can be rewritten to shortcut on first match (using fnmatch?).
|
13
|
+
# In wich case, is there a better name for this method?
|
14
|
+
def glob_first(match, *opts)
|
15
|
+
flags = glob_flags(opts)
|
16
|
+
file = ::Dir.glob(::File.join(self.to_s, match), flags).first
|
17
|
+
file ? self.class.new(file) : nil
|
18
|
+
end
|
19
|
+
|
20
|
+
# Return globbed matches with pathnames relative to the current pathname.
|
21
|
+
def glob_relative(match, *opts)
|
22
|
+
flags = glob_flags(opts)
|
23
|
+
files = Dir.glob(::File.join(self.to_s, match), flags)
|
24
|
+
files = files.map{ |f| f.sub(self.to_s.chomp('/') + '/', '') }
|
25
|
+
files.collect{ |m| self.class.new(m) }
|
26
|
+
end
|
27
|
+
|
28
|
+
# Does a directory contain a matching entry?
|
29
|
+
# Or if the pathname is a file, same as #fnmatch.
|
30
|
+
#
|
31
|
+
# TODO: Move to own file? Better name?
|
32
|
+
#
|
33
|
+
# Returns [Pathname]
|
34
|
+
|
35
|
+
def include?(pattern,*opts)
|
36
|
+
if directory?
|
37
|
+
glob_first(pattern,*opts)
|
38
|
+
else
|
39
|
+
fnmatch(pattern,*opts)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def glob_flags(opts)
|
46
|
+
flags = 0
|
47
|
+
opts.each do |opt|
|
48
|
+
case opt when Symbol, String
|
49
|
+
flags += ::File.const_get("FNM_#{opt}".upcase)
|
50
|
+
else
|
51
|
+
flags += opt
|
52
|
+
end
|
53
|
+
end
|
54
|
+
flags
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Pathname
|
2
|
+
|
3
|
+
# Platform dependent null device.
|
4
|
+
#
|
5
|
+
# CREDIT: Daniel Burger
|
6
|
+
|
7
|
+
def self.null
|
8
|
+
case RUBY_PLATFORM
|
9
|
+
when /mswin/i
|
10
|
+
'NUL'
|
11
|
+
when /amiga/i
|
12
|
+
'NIL:'
|
13
|
+
when /openvms/i
|
14
|
+
'NL:'
|
15
|
+
else
|
16
|
+
'/dev/null'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|