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,63 @@
|
|
1
|
+
# Memoizer wraps objects to provide cached method calls.
|
2
|
+
#
|
3
|
+
# class X
|
4
|
+
# def initialize ; @tick = 0 ; end
|
5
|
+
# def tick; @tick + 1; end
|
6
|
+
# def memo; @memo ||= Memoizer.new(self) ; end
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# x = X.new
|
10
|
+
# x.tick #=> 1
|
11
|
+
# x.memo.tick #=> 2
|
12
|
+
# x.tick #=> 3
|
13
|
+
# x.memo.tick #=> 2
|
14
|
+
# x.tick #=> 4
|
15
|
+
# x.memo.tick #=> 2
|
16
|
+
#
|
17
|
+
# You can also use to cache collections of objects to gain code speed ups.
|
18
|
+
#
|
19
|
+
# points = points.collect{|point| Memoizer.cache(point)}
|
20
|
+
#
|
21
|
+
# After our algorithm has finished using points, we want to get rid of
|
22
|
+
# these Memoizer objects. That's easy:
|
23
|
+
#
|
24
|
+
# points = points.collect{|point| point.__self__ }
|
25
|
+
#
|
26
|
+
# Or if you prefer (it is ever so slightly safer):
|
27
|
+
#
|
28
|
+
# points = points.collect{|point| Memoizer.uncache(point)}
|
29
|
+
#
|
30
|
+
# Memoizer is the work of Erik Veenstra
|
31
|
+
#
|
32
|
+
# Copyright (c) 2006 Erik Veenstra
|
33
|
+
#
|
34
|
+
# See http://javathink.blogspot.com/2008/09/what-is-memoizer-and-why-should-you.html
|
35
|
+
|
36
|
+
class Memoizer
|
37
|
+
|
38
|
+
#private :class, :clone, :display, :type, :method, :to_a, :to_s
|
39
|
+
private *instance_methods(true).select{ |m| m.to_s !~ /^__/ }
|
40
|
+
|
41
|
+
def initialize(object)
|
42
|
+
@self = object
|
43
|
+
@cache = {}
|
44
|
+
end
|
45
|
+
|
46
|
+
def __self__ ; @self ; end
|
47
|
+
|
48
|
+
# Not thread-safe! Speed is important in caches... ;]
|
49
|
+
def method_missing(method_name, *args, &block)
|
50
|
+
@cache[[method_name, args, block]] ||= @self.__send__(method_name, *args, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
#def self; @self; end
|
54
|
+
|
55
|
+
def self.cache(object)
|
56
|
+
new(object)
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.uncache(cached_object)
|
60
|
+
cached_object.instance_variable_get('@self')
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -1,83 +1,19 @@
|
|
1
1
|
require 'ostruct'
|
2
|
+
require 'facets/ostruct/initialize'
|
3
|
+
require 'facets/ostruct/to_h'
|
4
|
+
require 'facets/ostruct/merge'
|
5
|
+
require 'facets/ostruct/each'
|
6
|
+
require 'facets/ostruct/to_ostruct'
|
7
|
+
require 'facets/ostruct/op_fetch'
|
8
|
+
require 'facets/ostruct/op_store'
|
2
9
|
|
3
10
|
class OpenStruct
|
4
11
|
|
5
|
-
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
|
10
|
-
# o.age = 71
|
11
|
-
# end
|
12
|
-
#
|
13
|
-
# You can still provide a hash for initialization purposes, and even combine
|
14
|
-
# the two approaches if you wish.
|
15
|
-
#
|
16
|
-
# person = OpenStruct.new(:name => 'John Smith', :age => 31) do |p|
|
17
|
-
# p.gender = :M
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# Alternatively you can provide a default block:
|
21
|
-
#
|
22
|
-
# stuff = OpenStruct.new{ |o,k| o[k] = [] }
|
23
|
-
# stuff.place << :a
|
24
|
-
# stuff.place << :b
|
25
|
-
# stuff.place #=> [:a, :b]
|
26
|
-
#
|
27
|
-
# A setter block versus a defualt block is determined by the arity of
|
28
|
-
# the block. You can not provide both at the same time.
|
29
|
-
#
|
30
|
-
# CREDIT: Noah Gibbs, Gavin Sinclair
|
31
|
-
def initialize(hash=nil, &block)
|
32
|
-
if block && block.arity==2
|
33
|
-
@table = Hash.new(&block)
|
34
|
-
else
|
35
|
-
@table = {}
|
36
|
-
end
|
37
|
-
if hash
|
38
|
-
for k,v in hash
|
39
|
-
@table[k.to_sym] = v
|
40
|
-
new_ostruct_member(k)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
if block && block.arity==1
|
44
|
-
yield self
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
def each(&blk)
|
50
|
-
@table.each(&blk)
|
51
|
-
end
|
52
|
-
|
53
|
-
#
|
54
|
-
def to_h
|
55
|
-
@table.dup
|
56
|
-
end
|
57
|
-
|
58
|
-
# Access a value in the OpenStruct by key, like a Hash.
|
59
|
-
# This increases OpenStruct's "duckiness".
|
60
|
-
#
|
61
|
-
# o = OpenStruct.new
|
62
|
-
# o.t = 4
|
63
|
-
# o['t'] #=> 4
|
64
|
-
#
|
65
|
-
def [](key)
|
66
|
-
key = key.to_sym unless key.is_a?(Symbol)
|
67
|
-
@table[key]
|
68
|
-
end
|
69
|
-
|
70
|
-
# Set a value in the OpenStruct by key, like a Hash.
|
71
|
-
#
|
72
|
-
# o = OpenStruct.new
|
73
|
-
# o['t'] = 4
|
74
|
-
# o.t #=> 4
|
75
|
-
#
|
76
|
-
def []=(key,val)
|
77
|
-
raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
|
78
|
-
key = key.to_sym unless key.is_a?(Symbol)
|
79
|
-
@table[key]=val
|
80
|
-
end
|
12
|
+
#--
|
13
|
+
# TO BE DEPRECATED
|
14
|
+
# Must consider that accessing instance_delegate instead can be dangerous.
|
15
|
+
# Might we us a Functor to ensure the table keys are always symbols?
|
16
|
+
#++
|
81
17
|
|
82
18
|
# Provides access to an OpenStruct's inner table.
|
83
19
|
#
|
@@ -87,11 +23,14 @@ class OpenStruct
|
|
87
23
|
# o.instance_delegate.map { |k, v| "#{k} #{v}" }
|
88
24
|
# #=> ["a 1", "b 2"]
|
89
25
|
#
|
26
|
+
# @deprecated Use `#marshal_dump` instead.
|
27
|
+
#
|
90
28
|
def instance_delegate
|
29
|
+
warn "OpenStruct#instance_delegate is deprecated, use #marshal_dump instead."
|
91
30
|
@table
|
92
31
|
end
|
93
32
|
|
94
|
-
#
|
33
|
+
# @deprecated Use `#marshal_dump` instead.
|
95
34
|
alias ostruct_delegate instance_delegate
|
96
35
|
|
97
36
|
# Insert/update hash data on the fly.
|
@@ -100,111 +39,53 @@ class OpenStruct
|
|
100
39
|
# o.ostruct_update(:a => 2)
|
101
40
|
# o.a #=> 2
|
102
41
|
#
|
103
|
-
|
104
|
-
raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
|
105
|
-
##other = other.to_hash #to_h ?
|
106
|
-
for k,v in other
|
107
|
-
@table[k.to_sym] = v
|
108
|
-
end
|
109
|
-
self
|
110
|
-
end
|
111
|
-
|
112
|
-
# Merge hash data creating a new OpenStruct object.
|
113
|
-
#
|
114
|
-
# o = OpenStruct.new
|
115
|
-
# x = o.ostruct_merge(:a => 2)
|
116
|
-
# x.a #=> 2
|
42
|
+
# @deprecated Use #merge! instead.
|
117
43
|
#
|
118
|
-
def
|
119
|
-
|
120
|
-
|
121
|
-
o
|
44
|
+
def ostruct_update(other)
|
45
|
+
warn "OpenSrtuct#ostruct_update has been deprecated. Use #merge! instead."
|
46
|
+
merge!(other)
|
122
47
|
end
|
123
48
|
|
124
|
-
#--
|
125
|
-
# TO BE DEPRECATED
|
126
|
-
# Must consider that accessing instance_delegate instead can be dangerous.
|
127
|
-
# Might we us a Functor to ensure the table keys are always symbols?
|
128
|
-
#++
|
129
|
-
|
130
49
|
# Insert/update hash data on the fly.
|
131
50
|
#
|
132
51
|
# o = OpenStruct.new
|
133
52
|
# o.ostruct_update(:a => 2)
|
134
53
|
# o.a #=> 2
|
135
54
|
#
|
55
|
+
# @deprecated Use #merge! instead.
|
56
|
+
#
|
136
57
|
def __update__(other)
|
137
|
-
raise
|
138
|
-
|
139
|
-
for k,v in other
|
140
|
-
@table[k.to_sym] = v
|
141
|
-
end
|
142
|
-
self
|
58
|
+
raise NameError, "OpenSrtuct#__update__ has been deprecated. Use #merge! instead."
|
59
|
+
#merge!(other)
|
143
60
|
end
|
144
61
|
|
62
|
+
# TODO: How to handle regular merge, since it lacks punctuation to make it safe.
|
63
|
+
# Maybe `#update!`? Kind of odd but could work.
|
64
|
+
|
145
65
|
# Merge hash data creating a new OpenStruct object.
|
146
66
|
#
|
147
67
|
# o = OpenStruct.new
|
148
68
|
# x = o.ostruct_merge(:a => 2)
|
149
69
|
# x.a #=> 2
|
150
70
|
#
|
151
|
-
def
|
71
|
+
def ostruct_merge(other)
|
152
72
|
o = dup
|
153
|
-
o.
|
73
|
+
o.merge!(other)
|
154
74
|
o
|
155
75
|
end
|
156
76
|
|
77
|
+
# Merge hash data creating a new OpenStruct object.
|
157
78
|
#
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
end
|
163
|
-
|
164
|
-
|
165
|
-
class Hash
|
166
|
-
|
167
|
-
# Turns a hash into a generic object using an OpenStruct.
|
168
|
-
#
|
169
|
-
# o = {'a' => 1}.to_ostruct
|
170
|
-
# o.a #=> 1
|
171
|
-
#
|
172
|
-
def to_ostruct
|
173
|
-
OpenStruct.new(self)
|
174
|
-
end
|
175
|
-
|
176
|
-
# Like to_ostruct but recusively objectifies all hash elements as well.
|
177
|
-
#
|
178
|
-
# o = {'a' => { 'b' => 1 }}.to_ostruct_recurse
|
179
|
-
# o.a.b #=> 1
|
180
|
-
#
|
181
|
-
# The +exclude+ parameter is used internally to prevent infinite
|
182
|
-
# recursion and is not intended to be utilized by the end-user.
|
183
|
-
# But for more advance use, if there is a particular subhash you
|
184
|
-
# would like to prevent from being converted to an OpoenStruct
|
185
|
-
# then include it in the +exclude+ hash referencing itself. Eg.
|
186
|
-
#
|
187
|
-
# h = { 'a' => { 'b' => 1 } }
|
188
|
-
# o = h.to_ostruct_recurse( { h['a'] => h['a'] } )
|
189
|
-
# o.a['b'] #=> 1
|
79
|
+
# o = OpenStruct.new
|
80
|
+
# x = o.__merge__(:a => 2)
|
81
|
+
# x.a #=> 2
|
190
82
|
#
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
o
|
195
|
-
h = self.dup
|
196
|
-
each_pair do |k,v|
|
197
|
-
h[k] = v.to_ostruct_recurse( exclude ) if v.respond_to?(:to_ostruct_recurse)
|
198
|
-
end
|
199
|
-
o.__update__(h)
|
83
|
+
def __merge__(other)
|
84
|
+
o = dup
|
85
|
+
o.merge!(other)
|
86
|
+
o
|
200
87
|
end
|
201
|
-
end
|
202
88
|
|
203
|
-
class NilClass
|
204
|
-
# Create an empty OpenStruct object.
|
205
|
-
def to_ostruct
|
206
|
-
OpenStruct.new
|
207
|
-
end
|
208
89
|
end
|
209
90
|
|
210
91
|
# Copyright (c) 2005 Thomas Sawyer (Ruby License)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class OpenStruct
|
4
|
+
|
5
|
+
# Allows the initialization of an OpenStruct with a setter block:
|
6
|
+
#
|
7
|
+
# person = OpenStruct.new do |o|
|
8
|
+
# o.name = 'John Smith'
|
9
|
+
# o.gender = :M
|
10
|
+
# o.age = 71
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# You can still provide a hash for initialization purposes, and even combine
|
14
|
+
# the two approaches if you wish.
|
15
|
+
#
|
16
|
+
# person = OpenStruct.new(:name => 'John Smith', :age => 31) do |p|
|
17
|
+
# p.gender = :M
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# Alternatively you can provide a default block:
|
21
|
+
#
|
22
|
+
# stuff = OpenStruct.new{ |o,k| o[k] = [] }
|
23
|
+
# stuff.place << :a
|
24
|
+
# stuff.place << :b
|
25
|
+
# stuff.place #=> [:a, :b]
|
26
|
+
#
|
27
|
+
# A setter block versus a defualt block is determined by the arity of
|
28
|
+
# the block. You cannot provide both at the same time.
|
29
|
+
#
|
30
|
+
# CREDIT: Noah Gibbs, Gavin Sinclair
|
31
|
+
def initialize(hash=nil, &block)
|
32
|
+
if block && block.arity==2
|
33
|
+
@table = Hash.new(&block)
|
34
|
+
else
|
35
|
+
@table = {}
|
36
|
+
end
|
37
|
+
if hash
|
38
|
+
for k,v in hash
|
39
|
+
@table[k.to_sym] = v
|
40
|
+
new_ostruct_member(k)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
if block && block.arity==1
|
44
|
+
yield self
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class OpenStruct
|
4
|
+
|
5
|
+
# Insert/update hash data on the fly.
|
6
|
+
#
|
7
|
+
# o = OpenStruct.new
|
8
|
+
# o.merge!(:a => 2)
|
9
|
+
# o.a #=> 2
|
10
|
+
#
|
11
|
+
def merge!(other)
|
12
|
+
raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
|
13
|
+
##other = other.to_hash #to_h?
|
14
|
+
for k,v in other
|
15
|
+
@table[k.to_sym] = v
|
16
|
+
end
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class OpenStruct
|
4
|
+
|
5
|
+
# Access a value in the OpenStruct by key, like a Hash.
|
6
|
+
# This increases OpenStruct's "duckiness".
|
7
|
+
#
|
8
|
+
# o = OpenStruct.new
|
9
|
+
# o.t = 4
|
10
|
+
# o['t'] #=> 4
|
11
|
+
#
|
12
|
+
def [](key)
|
13
|
+
key = key.to_sym unless key.is_a?(Symbol)
|
14
|
+
@table[key]
|
15
|
+
end
|
16
|
+
|
17
|
+
# Set a value in the OpenStruct by key, like a Hash.
|
18
|
+
#
|
19
|
+
# o = OpenStruct.new
|
20
|
+
# o['t'] = 4
|
21
|
+
# o.t #=> 4
|
22
|
+
#
|
23
|
+
def []=(key,val)
|
24
|
+
raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
|
25
|
+
key = key.to_sym unless key.is_a?(Symbol)
|
26
|
+
@table[key]=val
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'facets/ostruct/op_fetch'
|