facets 3.0.0 → 3.2.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 +5 -5
- data/CONTRIBUTING.md +112 -0
- data/HISTORY.md +179 -0
- data/LICENSE.txt +21 -343
- data/{README.rdoc → README.md} +74 -67
- data/lib/core/facets/array/arrange.rb +1 -42
- data/lib/core/facets/array/average.rb +15 -0
- data/lib/core/facets/array/before.rb +1 -1
- data/lib/core/facets/array/collapse.rb +4 -0
- data/lib/core/facets/array/delete_first.rb +21 -0
- data/lib/core/facets/array/delete_values_at.rb +1 -0
- data/lib/core/facets/array/divide.rb +7 -0
- data/lib/core/facets/array/duplicates.rb +15 -0
- data/lib/core/facets/array/each_pair.rb +1 -4
- data/lib/core/facets/array/first.rb +1 -0
- data/lib/core/facets/array/from.rb +11 -16
- data/lib/core/facets/array/indexes.rb +113 -0
- data/lib/core/facets/array/last.rb +1 -0
- data/lib/core/facets/array/mode.rb +2 -2
- data/lib/core/facets/array/nonuniq.rb +6 -8
- data/lib/core/facets/array/occurrence.rb +8 -4
- data/lib/core/facets/array/probability.rb +1 -1
- data/lib/core/facets/array/recursively.rb +2 -2
- data/lib/core/facets/array/remove.rb +39 -0
- data/lib/core/facets/array/span.rb +29 -0
- data/lib/core/facets/array/splice.rb +1 -1
- data/lib/core/facets/array/split_at.rb +25 -0
- data/lib/core/facets/array/standard_deviation.rb +28 -0
- data/lib/core/facets/array/step.rb +12 -14
- data/lib/core/facets/array/to_ranges.rb +48 -0
- data/lib/core/facets/array/uniq_by.rb +7 -3
- data/lib/core/facets/array/variance.rb +20 -0
- data/lib/core/facets/array.rb +1 -0
- data/lib/core/facets/binding/caller.rb +8 -2
- data/lib/core/facets/binding/op_get.rb +7 -11
- data/lib/core/facets/binding/self.rb +4 -10
- data/lib/core/facets/binding.rb +0 -1
- data/lib/core/facets/boolean.rb +1 -1
- data/lib/core/facets/class/descendants.rb +0 -2
- data/lib/core/facets/class.rb +2 -2
- data/lib/core/facets/comparable/bound.rb +13 -1
- data/lib/core/facets/comparable/clip.rb +3 -32
- data/lib/core/facets/denumerable.rb +0 -3
- data/lib/core/facets/dir/find.rb +20 -0
- data/lib/core/facets/dir/recurse.rb +8 -26
- data/lib/core/facets/enumerable/cluster.rb +6 -4
- data/lib/core/facets/enumerable/compact_map.rb +2 -12
- data/lib/core/facets/enumerable/defer.rb +2 -13
- data/lib/core/facets/enumerable/each_by.rb +0 -2
- data/lib/core/facets/enumerable/frequency.rb +2 -2
- data/lib/core/facets/enumerable/hashify.rb +27 -31
- data/lib/core/facets/enumerable/hinge.rb +3 -4
- data/lib/core/facets/enumerable/map_with_index.rb +3 -6
- data/lib/core/facets/enumerable/mash.rb +5 -28
- data/lib/core/facets/enumerable/uniq_by.rb +4 -8
- data/lib/core/facets/enumerable/with_position.rb +58 -0
- data/lib/core/facets/enumerator.rb +2 -75
- data/lib/core/facets/exception/error_print.rb +6 -71
- data/lib/core/facets/file/atomic_open.rb +1 -1
- data/lib/core/facets/file/null.rb +3 -15
- data/lib/core/facets/file/read_binary.rb +3 -12
- data/lib/core/facets/hash/except.rb +11 -6
- data/lib/core/facets/hash/fetch_nested.rb +8 -9
- data/lib/core/facets/hash/graph.rb +1 -1
- data/lib/core/facets/hash/rekey.rb +3 -3
- data/lib/core/facets/hash/revalue.rb +3 -3
- data/lib/core/facets/hash/{to_proc.rb → setter.rb} +8 -9
- data/lib/core/facets/hash/slice.rb +0 -26
- data/lib/core/facets/hash/update_keys.rb +4 -11
- data/lib/core/facets/hash/update_values.rb +4 -10
- data/lib/core/facets/indexable.rb +7 -5
- data/lib/core/facets/kernel/callstack.rb +5 -24
- data/lib/core/facets/kernel/eigenclass.rb +6 -6
- data/lib/core/facets/kernel/ergo.rb +3 -3
- data/lib/core/facets/kernel/extension.rb +3 -6
- data/lib/core/facets/kernel/functor.rb +16 -0
- data/lib/core/facets/kernel/instance_class.rb +4 -20
- data/lib/core/facets/kernel/instance_send.rb +5 -3
- data/lib/core/facets/kernel/like.rb +1 -1
- data/lib/core/facets/kernel/load_relative.rb +8 -20
- data/lib/core/facets/kernel/memo.rb +4 -26
- data/lib/core/facets/kernel/meta_class.rb +10 -6
- data/lib/core/facets/kernel/object_class.rb +5 -6
- data/lib/core/facets/kernel/object_send.rb +5 -26
- data/lib/core/facets/kernel/qua_class.rb +4 -20
- data/lib/core/facets/kernel/require_all.rb +8 -20
- data/lib/core/facets/kernel/returning.rb +3 -19
- data/lib/core/facets/kernel/tap.rb +3 -36
- data/lib/core/facets/kernel/tee.rb +2 -0
- data/lib/core/facets/kernel/try.rb +38 -28
- data/lib/core/facets/kernel.rb +2 -4
- data/lib/core/facets/lazy.rb +1 -1
- data/lib/core/facets/matchdata/matchtree.rb +2 -0
- data/lib/core/facets/module/alias_method_chain.rb +4 -43
- data/lib/core/facets/module/attr_setter.rb +3 -2
- data/lib/core/facets/module/can.rb +5 -16
- data/lib/core/facets/module/class_extend.rb +2 -2
- data/lib/core/facets/numeric/delimit.rb +20 -0
- data/lib/core/facets/object/dup.rb +0 -46
- data/lib/core/facets/proc/bind.rb +0 -2
- data/lib/core/facets/proc/compose.rb +7 -28
- data/lib/core/facets/proc/to_method.rb +0 -1
- data/lib/core/facets/proc/update.rb +8 -1
- data/lib/core/facets/range/intersection.rb +42 -0
- data/lib/core/facets/range/nudge.rb +27 -0
- data/lib/core/facets/string/ascii_only.rb +2 -2
- data/lib/core/facets/string/cleanlines.rb +0 -2
- data/lib/core/facets/string/dashcase.rb +21 -0
- data/lib/core/facets/string/indent.rb +0 -8
- data/lib/core/facets/string/lchomp.rb +7 -14
- data/lib/core/facets/string/margin.rb +0 -4
- data/lib/core/facets/string/newlines.rb +0 -2
- data/lib/core/facets/string/random.rb +13 -3
- data/lib/core/facets/string/similarity.rb +7 -6
- data/lib/core/facets/string/snakecase.rb +12 -5
- data/lib/core/facets/string/words.rb +13 -1
- data/lib/core/facets/string.rb +0 -3
- data/lib/core/facets/struct/attributes.rb +2 -3
- data/lib/core/facets/time/trunc.rb +12 -5
- data/lib/core/facets/unboundmethod/arguments.rb +1 -0
- data/lib/core/facets/version.rb +1 -17
- data/lib/core/facets.rb +0 -1
- data/lib/standard/facets/argvector.rb +1 -1
- data/lib/standard/facets/cgi/escape_html.rb +14 -25
- data/lib/standard/facets/cloneable.rb +4 -51
- data/lib/standard/facets/continuation.rb +2 -56
- data/lib/standard/facets/crypt3.rb +126 -0
- data/lib/standard/facets/date/cmp.rb +32 -0
- data/lib/standard/facets/date.rb +1 -0
- data/lib/standard/facets/digest.rb +0 -1
- data/lib/standard/facets/enumargs.rb +5 -0
- data/lib/standard/facets/fileutils/cp_rx.rb +0 -2
- data/lib/standard/facets/fileutils/ln_r.rb +0 -1
- data/lib/standard/facets/find/select.rb +0 -2
- data/lib/standard/facets/getoptlong.rb +3 -59
- data/lib/standard/facets/load_monitor.rb +2 -26
- data/lib/standard/facets/math/gini_coefficient.rb +5 -4
- data/lib/standard/facets/math/kldivergence.rb +8 -7
- data/lib/standard/facets/math/percentile.rb +2 -2
- data/lib/standard/facets/multiton.rb +1 -1
- data/lib/standard/facets/net/http.rb +33 -14
- data/lib/standard/facets/ostruct/initialize.rb +4 -19
- data/lib/standard/facets/ostruct/to_ostruct.rb +2 -1
- data/lib/standard/facets/ostruct.rb +0 -88
- data/lib/standard/facets/pathname/empty.rb +2 -10
- data/lib/standard/facets/pathname/glob.rb +19 -12
- data/lib/standard/facets/pathname/null.rb +3 -14
- data/lib/standard/facets/random.rb +47 -133
- data/lib/standard/facets/timer.rb +3 -3
- data/lib/standard/facets/tuple.rb +2 -4
- data/lib/standard/facets/uri.rb +3 -2
- metadata +84 -1181
- data/.index +0 -76
- data/.yardopts +0 -10
- data/CONTRIBUTE.md +0 -78
- data/NOTICE.rdoc +0 -167
- data/demo/applique/assertion_framework.rb +0 -1
- data/demo/applique/file_helpers.rb +0 -34
- data/demo/core/array/combination.rdoc +0 -19
- data/demo/core/array/delete.rdoc +0 -23
- data/demo/core/array/index.rdoc +0 -14
- data/demo/core/array/merge.rdoc +0 -15
- data/demo/core/array/only.rdoc +0 -9
- data/demo/core/array/pad.rdoc +0 -28
- data/demo/core/array/permutation.rdoc +0 -10
- data/demo/core/array/product.rdoc +0 -26
- data/demo/core/array/recursively.rdoc +0 -16
- data/demo/core/array/rotate.rdoc +0 -30
- data/demo/core/array/select.rdoc +0 -8
- data/demo/core/array/uniq_by.rdoc +0 -9
- data/demo/core/binding/caller.rdoc +0 -57
- data/demo/core/binding/defined.rdoc +0 -10
- data/demo/core/binding/eval.rdoc +0 -8
- data/demo/core/binding/local_variables.rdoc +0 -26
- data/demo/core/binding/opvars.rdoc +0 -16
- data/demo/core/binding/self.rdoc +0 -6
- data/demo/core/class/descendants.rdoc +0 -10
- data/demo/core/class/to_proc.rdoc +0 -8
- data/demo/core/comparable/cap.rdoc +0 -20
- data/demo/core/comparable/clip.rdoc +0 -37
- data/demo/core/comparable/cmp.rdoc +0 -18
- data/demo/core/comparable/op_get.rdoc +0 -29
- data/demo/core/dir/ascend.rdoc +0 -24
- data/demo/core/dir/descend.rdoc +0 -14
- data/demo/core/dir/multiglob.rdoc +0 -41
- data/demo/core/dir/parent.rdoc +0 -6
- data/demo/core/dir/recurse.rdoc +0 -41
- data/demo/core/exception/detail.rdoc +0 -12
- data/demo/core/facets.rdoc +0 -6
- data/demo/core/filetest/root.rdoc +0 -6
- data/demo/core/hash/recursively.rdoc +0 -21
- data/demo/core/indexable.rdoc +0 -95
- data/demo/core/integer/bitmask.rdoc +0 -46
- data/demo/core/integer/even.rdoc +0 -12
- data/demo/core/integer/factorial.rdoc +0 -10
- data/demo/core/integer/length.rdoc +0 -7
- data/demo/core/integer/multiple.rdoc +0 -10
- data/demo/core/integer/odd.rdoc +0 -12
- data/demo/core/integer/of.rdoc +0 -14
- data/demo/core/integer/ordinal.rdoc +0 -9
- data/demo/core/matchdata/match.rdoc +0 -7
- data/demo/core/matchdata/matchset.rdoc +0 -15
- data/demo/core/module/cattr.rdoc +0 -43
- data/demo/core/module/class_extend.rdoc +0 -64
- data/demo/core/module/class_inheritor.rdoc +0 -126
- data/demo/core/module/copy_inheritor.rdoc +0 -30
- data/demo/core/module/method_space.rdoc +0 -55
- data/demo/core/string/align.rdoc +0 -34
- data/demo/core/string/bracket.rdoc +0 -35
- data/demo/core/string/bytes.rdoc +0 -8
- data/demo/core/string/camelcase.rdoc +0 -47
- data/demo/core/string/capitalized.rdoc +0 -27
- data/demo/core/string/characters.rdoc +0 -11
- data/demo/core/string/cleanlines.rdoc +0 -10
- data/demo/core/string/cleave.rdoc +0 -49
- data/demo/core/string/divide.rdoc +0 -9
- data/demo/core/string/each_char.rdoc +0 -9
- data/demo/core/string/each_word.rdoc +0 -9
- data/demo/core/string/end_with.rdoc +0 -6
- data/demo/core/string/expand_tabs.rdoc +0 -69
- data/demo/core/string/fold.rdoc +0 -14
- data/demo/core/string/indent.rdoc +0 -65
- data/demo/core/string/interpolate.rdoc +0 -7
- data/demo/core/string/lchomp.rdoc +0 -14
- data/demo/core/string/line_wrap.rdoc +0 -7
- data/demo/core/string/lines.rdoc +0 -8
- data/demo/core/string/margin.rdoc +0 -92
- data/demo/core/string/methodize.rdoc +0 -22
- data/demo/core/string/modulize.rdoc +0 -22
- data/demo/core/string/mscan.rdoc +0 -10
- data/demo/core/string/natcmp.rdoc +0 -10
- data/demo/core/string/nchar.rdoc +0 -9
- data/demo/core/string/newlines.rdoc +0 -9
- data/demo/core/string/op_sub.rdoc +0 -7
- data/demo/core/string/pathize.rdoc +0 -22
- data/demo/core/string/quote.rdoc +0 -20
- data/demo/core/string/range.rdoc +0 -19
- data/demo/core/string/rewrite.rdoc +0 -9
- data/demo/core/string/shatter.rdoc +0 -9
- data/demo/core/string/snakecase.rdoc +0 -10
- data/demo/core/string/splice.rdoc +0 -28
- data/demo/core/string/start_with.rdoc +0 -7
- data/demo/core/string/subtract.rdoc +0 -8
- data/demo/core/string/tab.rdoc +0 -16
- data/demo/core/string/tabto.rdoc +0 -29
- data/demo/core/string/titlecase.rdoc +0 -8
- data/demo/core/string/to_re.rdoc +0 -22
- data/demo/core/string/unfold.rdoc +0 -9
- data/demo/core/string/unindent.rdoc +0 -65
- data/demo/core/string/unquote.rdoc +0 -6
- data/demo/core/string/variablize.rdoc +0 -7
- data/demo/core/string/word_wrap.rdoc +0 -54
- data/demo/core/string/words.rdoc +0 -13
- data/demo/core/string/xor.rdoc +0 -8
- data/demo/standard/02_cloneable.rdoc +0 -46
- data/demo/standard/03_enumargs.rdoc +0 -75
- data/demo/standard/04_equitable.rdoc +0 -35
- data/demo/standard/05_instantiable.rdoc +0 -42
- data/demo/standard/basic_object.rdoc +0 -22
- data/demo/standard/memoizable.rdoc +0 -134
- data/demo/standard/mulititon.rdoc +0 -156
- data/lib/core/facets/applique/file_helpers.rb +0 -33
- data/lib/core/facets/array/intersection.rb +0 -25
- data/lib/core/facets/array/op_pow.rb +0 -14
- data/lib/core/facets/array/to_h.rb +0 -22
- data/lib/core/facets/binding/local_variables.rb +0 -16
- data/lib/core/facets/class/singleton.rb +0 -1
- data/lib/core/facets/class/singleton_class.rb +0 -16
- data/lib/core/facets/class/subclasses.rb +0 -28
- data/lib/core/facets/dir/each_child.rb +0 -16
- data/lib/core/facets/enumerable/filter.rb +0 -33
- data/lib/core/facets/enumerable/sum.rb +0 -30
- data/lib/core/facets/exception/set_message.rb +0 -10
- data/lib/core/facets/file/write.rb +0 -24
- data/lib/core/facets/fixnum.rb +0 -7
- data/lib/core/facets/kernel/__dir__.rb +0 -28
- data/lib/core/facets/kernel/constant.rb +0 -22
- data/lib/core/facets/kernel/instance_exec.rb +0 -47
- data/lib/core/facets/kernel/p.rb +0 -24
- data/lib/core/facets/kernel/singleton_class.rb +0 -10
- data/lib/core/facets/matchdata/match.rb +0 -15
- data/lib/core/facets/method/curry.rb +0 -13
- data/lib/core/facets/numeric/negative.rb +0 -1
- data/lib/core/facets/numeric/positive.rb +0 -15
- data/lib/core/facets/object/itself.rb +0 -16
- data/lib/core/facets/object/try_dup.rb +0 -1
- data/lib/core/facets/process/daemon.rb +0 -32
- data/lib/core/facets/range/overlap.rb +0 -12
- data/lib/core/facets/string/characters.rb +0 -13
- data/lib/core/facets/string/crypt.rb +0 -22
- data/lib/core/facets/string/tab.rb +0 -2
- data/lib/core/facets/string/tabto.rb +0 -2
- data/lib/core/facets/symbol/succ.rb +0 -23
- data/lib/core/facets.yml +0 -76
- data/lib/standard/facets/basicobject.rb +0 -75
- data/lib/standard/facets/digest/base64digest.rb +0 -45
- data/lib/standard/facets/ostruct/each.rb +0 -11
- data/lib/standard/facets/ostruct/merge.rb +0 -21
- data/lib/standard/facets/ostruct/op_fetch.rb +0 -29
- data/lib/standard/facets/ostruct/op_store.rb +0 -1
- data/lib/standard/facets/ostruct/to_h.rb +0 -10
- data/test/core/array/test_after.rb +0 -27
- data/test/core/array/test_arrange.rb +0 -37
- data/test/core/array/test_before.rb +0 -27
- data/test/core/array/test_collapse.rb +0 -14
- data/test/core/array/test_combination.rb +0 -25
- data/test/core/array/test_commonality.rb +0 -35
- data/test/core/array/test_conjoin.rb +0 -50
- data/test/core/array/test_contains.rb +0 -14
- data/test/core/array/test_delete.rb +0 -42
- data/test/core/array/test_divide.rb +0 -14
- data/test/core/array/test_duplicates.rb +0 -29
- data/test/core/array/test_each_overlap.rb +0 -31
- data/test/core/array/test_entropy.rb +0 -23
- data/test/core/array/test_extract_options.rb +0 -28
- data/test/core/array/test_first.rb +0 -17
- data/test/core/array/test_index.rb +0 -20
- data/test/core/array/test_intersection.rb +0 -19
- data/test/core/array/test_last.rb +0 -17
- data/test/core/array/test_median.rb +0 -27
- data/test/core/array/test_merge.rb +0 -27
- data/test/core/array/test_missing.rb +0 -12
- data/test/core/array/test_mode.rb +0 -17
- data/test/core/array/test_nonuniq.rb +0 -25
- data/test/core/array/test_not_empty.rb +0 -17
- data/test/core/array/test_occur.rb +0 -52
- data/test/core/array/test_occurrence.rb +0 -20
- data/test/core/array/test_only.rb +0 -17
- data/test/core/array/test_pad.rb +0 -40
- data/test/core/array/test_peek.rb +0 -28
- data/test/core/array/test_permutation.rb +0 -20
- data/test/core/array/test_poke.rb +0 -21
- data/test/core/array/test_probability.rb +0 -18
- data/test/core/array/test_product.rb +0 -64
- data/test/core/array/test_pull.rb +0 -15
- data/test/core/array/test_recurse.rb +0 -40
- data/test/core/array/test_recursively.rb +0 -33
- data/test/core/array/test_reject_values.rb +0 -17
- data/test/core/array/test_rotate.rb +0 -38
- data/test/core/array/test_select.rb +0 -16
- data/test/core/array/test_splice.rb +0 -21
- data/test/core/array/test_split.rb +0 -22
- data/test/core/array/test_squeeze.rb +0 -22
- data/test/core/array/test_step.rb +0 -28
- data/test/core/array/test_store.rb +0 -22
- data/test/core/array/test_traverse.rb +0 -26
- data/test/core/array/test_uniq_by.rb +0 -17
- data/test/core/array/test_unique_permutation.rb +0 -23
- data/test/core/binding/test_caller.rb +0 -69
- data/test/core/binding/test_defined.rb +0 -18
- data/test/core/binding/test_eval.rb +0 -15
- data/test/core/binding/test_local_variables.rb +0 -36
- data/test/core/binding/test_op.rb +0 -24
- data/test/core/binding/test_self.rb +0 -16
- data/test/core/class/test_descendents.rb +0 -19
- data/test/core/class/test_preallocate.rb +0 -32
- data/test/core/class/test_subclasses.rb +0 -20
- data/test/core/class/test_to_proc.rb +0 -16
- data/test/core/comparable/test_bound.rb +0 -32
- data/test/core/comparable/test_cap.rb +0 -36
- data/test/core/comparable/test_clip.rb +0 -31
- data/test/core/comparable/test_cmp.rb +0 -16
- data/test/core/comparable/test_op_get.rb +0 -61
- data/test/core/denumerable_tc.rb +0 -194
- data/test/core/dir/test_ascend.rb +0 -40
- data/test/core/dir/test_descend.rb +0 -24
- data/test/core/dir/test_each_child.rb +0 -22
- data/test/core/dir/test_multiglob.rb +0 -25
- data/test/core/dir/test_parent.rb +0 -14
- data/test/core/dir/test_recurse.rb +0 -26
- data/test/core/enumerable/test_accumulate.rb +0 -44
- data/test/core/enumerable/test_cluster_by.rb +0 -30
- data/test/core/enumerable/test_compact_map.rb +0 -32
- data/test/core/enumerable/test_count.rb +0 -32
- data/test/core/enumerable/test_defer.rb +0 -27
- data/test/core/enumerable/test_each_by.rb +0 -49
- data/test/core/enumerable/test_each_with_object.rb +0 -18
- data/test/core/enumerable/test_every.rb +0 -33
- data/test/core/enumerable/test_ewise.rb +0 -30
- data/test/core/enumerable/test_exclude.rb +0 -15
- data/test/core/enumerable/test_expand.rb +0 -15
- data/test/core/enumerable/test_filter.rb +0 -19
- data/test/core/enumerable/test_find_yield.rb +0 -96
- data/test/core/enumerable/test_frequency.rb +0 -15
- data/test/core/enumerable/test_graph.rb +0 -42
- data/test/core/enumerable/test_group_by.rb +0 -36
- data/test/core/enumerable/test_key_by.rb +0 -22
- data/test/core/enumerable/test_map_by.rb +0 -27
- data/test/core/enumerable/test_map_send.rb +0 -26
- data/test/core/enumerable/test_map_with_index.rb +0 -23
- data/test/core/enumerable/test_mash.rb +0 -17
- data/test/core/enumerable/test_modulate.rb +0 -17
- data/test/core/enumerable/test_none.rb +0 -29
- data/test/core/enumerable/test_occur.rb +0 -40
- data/test/core/enumerable/test_one.rb +0 -34
- data/test/core/enumerable/test_only.rb +0 -40
- data/test/core/enumerable/test_per.rb +0 -19
- data/test/core/enumerable/test_purge.rb +0 -22
- data/test/core/enumerable/test_recursively.rb +0 -33
- data/test/core/enumerable/test_squeeze.rb +0 -35
- data/test/core/enumerable/test_sum.rb +0 -40
- data/test/core/enumerable/test_take.rb +0 -15
- data/test/core/enumerable/test_uniq_by.rb +0 -25
- data/test/core/enumerable/test_visit.rb +0 -14
- data/test/core/enumerator/lazy/test_squeeze.rb +0 -33
- data/test/core/enumerator/test_fx.rb +0 -16
- data/test/core/enumerator/test_new.rb +0 -21
- data/test/core/enumerator_tc.rb +0 -40
- data/test/core/exception/test_detail.rb +0 -15
- data/test/core/exception/test_raised.rb +0 -15
- data/test/core/exception/test_suppress.rb +0 -16
- data/test/core/file/test_append.rb +0 -22
- data/test/core/file/test_create.rb +0 -17
- data/test/core/file/test_ext.rb +0 -31
- data/test/core/file/test_null.rb +0 -14
- data/test/core/file/test_read_binary.rb +0 -19
- data/test/core/file/test_read_list.rb +0 -16
- data/test/core/file/test_rewrite.rb +0 -35
- data/test/core/file/test_rootname.rb +0 -13
- data/test/core/file/test_sanitize.rb +0 -32
- data/test/core/file/test_split_all.rb +0 -14
- data/test/core/file/test_write.rb +0 -22
- data/test/core/file/test_writelines.rb +0 -21
- data/test/core/filetest/test_root.rb +0 -14
- data/test/core/functor_tc.rb +0 -41
- data/test/core/hash/test_alias.rb +0 -25
- data/test/core/hash/test_argumentize.rb +0 -23
- data/test/core/hash/test_at.rb +0 -16
- data/test/core/hash/test_autonew.rb +0 -22
- data/test/core/hash/test_collate.rb +0 -61
- data/test/core/hash/test_count.rb +0 -23
- data/test/core/hash/test_data.rb +0 -35
- data/test/core/hash/test_dearray_values.rb +0 -26
- data/test/core/hash/test_deep_merge.rb +0 -31
- data/test/core/hash/test_deep_rekey.rb +0 -131
- data/test/core/hash/test_delete_at.rb +0 -18
- data/test/core/hash/test_delete_unless.rb +0 -18
- data/test/core/hash/test_delete_values.rb +0 -30
- data/test/core/hash/test_diff.rb +0 -16
- data/test/core/hash/test_each_with_key.rb +0 -16
- data/test/core/hash/test_expect.rb +0 -24
- data/test/core/hash/test_fetch_nested.rb +0 -24
- data/test/core/hash/test_graph.rb +0 -40
- data/test/core/hash/test_insert.rb +0 -20
- data/test/core/hash/test_inverse.rb +0 -20
- data/test/core/hash/test_join.rb +0 -32
- data/test/core/hash/test_keys.rb +0 -41
- data/test/core/hash/test_new_with.rb +0 -17
- data/test/core/hash/test_op_add.rb +0 -17
- data/test/core/hash/test_op_and.rb +0 -31
- data/test/core/hash/test_op_mul.rb +0 -17
- data/test/core/hash/test_op_or.rb +0 -17
- data/test/core/hash/test_op_push.rb +0 -34
- data/test/core/hash/test_op_sub.rb +0 -28
- data/test/core/hash/test_recurse.rb +0 -39
- data/test/core/hash/test_recursively.rb +0 -71
- data/test/core/hash/test_rekey.rb +0 -119
- data/test/core/hash/test_replace_each.rb +0 -17
- data/test/core/hash/test_revalue.rb +0 -98
- data/test/core/hash/test_reverse_merge.rb +0 -39
- data/test/core/hash/test_select.rb +0 -44
- data/test/core/hash/test_slice.rb +0 -36
- data/test/core/hash/test_stringify_keys.rb +0 -26
- data/test/core/hash/test_swap.rb +0 -15
- data/test/core/hash/test_symbolize_keys.rb +0 -26
- data/test/core/hash/test_to_mod.rb +0 -24
- data/test/core/hash/test_to_proc.rb +0 -23
- data/test/core/hash/test_to_struct.rb +0 -22
- data/test/core/hash/test_traverse.rb +0 -29
- data/test/core/hash/test_update_each.rb +0 -16
- data/test/core/hash/test_update_keys.rb +0 -21
- data/test/core/hash/test_update_values.rb +0 -15
- data/test/core/hash/test_url_params.rb +0 -26
- data/test/core/hash/test_weave.rb +0 -18
- data/test/core/hash/test_zip.rb +0 -16
- data/test/core/indexable_tc.rb +0 -226
- data/test/core/integer/test_bitmask.rb +0 -73
- data/test/core/integer/test_even.rb +0 -24
- data/test/core/integer/test_factorial.rb +0 -30
- data/test/core/integer/test_multiple.rb +0 -16
- data/test/core/integer/test_odd.rb +0 -24
- data/test/core/integer/test_of.rb +0 -36
- data/test/core/integer/test_ordinal.rb +0 -27
- data/test/core/kernel/test_as.rb +0 -74
- data/test/core/kernel/test_ask.rb +0 -9
- data/test/core/kernel/test_assign.rb +0 -61
- data/test/core/kernel/test_assign_from.rb +0 -48
- data/test/core/kernel/test_attr_singleton.rb +0 -51
- data/test/core/kernel/test_blank.rb +0 -103
- data/test/core/kernel/test_callstack.rb +0 -21
- data/test/core/kernel/test_class.rb +0 -14
- data/test/core/kernel/test_complete.rb +0 -19
- data/test/core/kernel/test_constant.rb +0 -18
- data/test/core/kernel/test_d.rb +0 -10
- data/test/core/kernel/test_deep_clone.rb +0 -31
- data/test/core/kernel/test_deep_copy.rb +0 -15
- data/test/core/kernel/test_dir.rb +0 -24
- data/test/core/kernel/test_disable_warnings.rb +0 -38
- data/test/core/kernel/test_ergo.rb +0 -32
- data/test/core/kernel/test_extension.rb +0 -18
- data/test/core/kernel/test_get.rb +0 -54
- data/test/core/kernel/test_here.rb +0 -13
- data/test/core/kernel/test_hierarchical_send.rb +0 -48
- data/test/core/kernel/test_in.rb +0 -14
- data/test/core/kernel/test_instance_assign.rb +0 -19
- data/test/core/kernel/test_instance_class.rb +0 -15
- data/test/core/kernel/test_instance_extract.rb +0 -28
- data/test/core/kernel/test_instance_send.rb +0 -26
- data/test/core/kernel/test_maybe.rb +0 -13
- data/test/core/kernel/test_meta_alias.rb +0 -18
- data/test/core/kernel/test_meta_class.rb +0 -33
- data/test/core/kernel/test_meta_def.rb +0 -15
- data/test/core/kernel/test_meta_eval.rb +0 -18
- data/test/core/kernel/test_method.rb +0 -20
- data/test/core/kernel/test_not.rb +0 -51
- data/test/core/kernel/test_not_nil.rb +0 -25
- data/test/core/kernel/test_object_class.rb +0 -22
- data/test/core/kernel/test_object_hexid.rb +0 -20
- data/test/core/kernel/test_object_send.rb +0 -25
- data/test/core/kernel/test_presence.rb +0 -37
- data/test/core/kernel/test_qua_class.rb +0 -25
- data/test/core/kernel/test_require_all.rb +0 -11
- data/test/core/kernel/test_require_relative.rb +0 -12
- data/test/core/kernel/test_respond.rb +0 -38
- data/test/core/kernel/test_returning.rb +0 -17
- data/test/core/kernel/test_silence.rb +0 -24
- data/test/core/kernel/test_singleton_class.rb +0 -15
- data/test/core/kernel/test_super_method.rb +0 -23
- data/test/core/kernel/test_tap.rb +0 -38
- data/test/core/kernel/test_temporarily.rb +0 -25
- data/test/core/kernel/test_true.rb +0 -31
- data/test/core/kernel/test_try.rb +0 -35
- data/test/core/kernel/test_val.rb +0 -30
- data/test/core/kernel/test_with.rb +0 -18
- data/test/core/kernel/test_writers.rb +0 -53
- data/test/core/matchdata/test_match.rb +0 -14
- data/test/core/matchdata/test_matchset.rb +0 -29
- data/test/core/method/test_composition.rb +0 -42
- data/test/core/module/test_abstract.rb +0 -24
- data/test/core/module/test_alias_accessor.rb +0 -27
- data/test/core/module/test_alias_method_chain.rb +0 -34
- data/test/core/module/test_alias_module_function.rb +0 -24
- data/test/core/module/test_all_instance_methods.rb +0 -27
- data/test/core/module/test_ancestor.rb +0 -16
- data/test/core/module/test_anonymous.rb +0 -18
- data/test/core/module/test_attr_setter.rb +0 -28
- data/test/core/module/test_basename.rb +0 -14
- data/test/core/module/test_can.rb +0 -22
- data/test/core/module/test_class.rb +0 -22
- data/test/core/module/test_class_def.rb +0 -22
- data/test/core/module/test_class_extend.rb +0 -73
- data/test/core/module/test_class_inheritor.rb +0 -135
- data/test/core/module/test_copy_inheritor.rb +0 -35
- data/test/core/module/test_enclosure.rb +0 -24
- data/test/core/module/test_instance_function.rb +0 -30
- data/test/core/module/test_instance_method.rb +0 -20
- data/test/core/module/test_instance_method_defined.rb +0 -38
- data/test/core/module/test_integrate.rb +0 -28
- data/test/core/module/test_is.rb +0 -50
- data/test/core/module/test_memoize.rb +0 -33
- data/test/core/module/test_method_clash.rb +0 -59
- data/test/core/module/test_method_space.rb +0 -72
- data/test/core/module/test_methodize.rb +0 -26
- data/test/core/module/test_modname.rb +0 -13
- data/test/core/module/test_module_def.rb +0 -22
- data/test/core/module/test_module_load.rb +0 -23
- data/test/core/module/test_nodef.rb +0 -19
- data/test/core/module/test_op.rb +0 -56
- data/test/core/module/test_pathize.rb +0 -25
- data/test/core/module/test_preextend.rb +0 -26
- data/test/core/module/test_redefine_method.rb +0 -30
- data/test/core/module/test_redirect_method.rb +0 -32
- data/test/core/module/test_remove.rb +0 -18
- data/test/core/module/test_rename_method.rb +0 -34
- data/test/core/module/test_revise.rb +0 -61
- data/test/core/module/test_set.rb +0 -30
- data/test/core/module/test_spacename.rb +0 -15
- data/test/core/module/test_to_obj.rb +0 -20
- data/test/core/module/test_wrap_method.rb +0 -32
- data/test/core/nilclass/test_to_f.rb +0 -13
- data/test/core/numeric/test_approx.rb +0 -26
- data/test/core/numeric/test_distance.rb +0 -16
- data/test/core/numeric/test_length.rb +0 -16
- data/test/core/numeric/test_round.rb +0 -76
- data/test/core/numeric/test_spacing.rb +0 -17
- data/test/core/object/test_dup.rb +0 -115
- data/test/core/object/test_object_state.rb +0 -75
- data/test/core/object/test_replace.rb +0 -69
- data/test/core/object/test_try_dup.rb +0 -59
- data/test/core/proc/test_bind.rb +0 -29
- data/test/core/proc/test_bind_to.rb +0 -17
- data/test/core/proc/test_compose.rb +0 -27
- data/test/core/proc/test_curry.rb +0 -38
- data/test/core/proc/test_partial.rb +0 -27
- data/test/core/proc/test_to_method.rb +0 -43
- data/test/core/proc/test_update.rb +0 -15
- data/test/core/range/test_combine.rb +0 -32
- data/test/core/range/test_op_add.rb +0 -24
- data/test/core/range/test_op_sub.rb +0 -34
- data/test/core/range/test_overlap.rb +0 -15
- data/test/core/range/test_to_r.rb +0 -20
- data/test/core/range/test_umbrella.rb +0 -32
- data/test/core/range/test_within.rb +0 -25
- data/test/core/regexp/test_arity.rb +0 -30
- data/test/core/regexp/test_multiline.rb +0 -19
- data/test/core/regexp/test_op_add.rb +0 -15
- data/test/core/regexp/test_op_or.rb +0 -16
- data/test/core/regexp/test_to_re.rb +0 -24
- data/test/core/string/test_align.rb +0 -32
- data/test/core/string/test_ascii_only.rb +0 -30
- data/test/core/string/test_bracket.rb +0 -37
- data/test/core/string/test_bytes.rb +0 -13
- data/test/core/string/test_camelcase.rb +0 -59
- data/test/core/string/test_capitalized.rb +0 -36
- data/test/core/string/test_characters.rb +0 -13
- data/test/core/string/test_cleanlines.rb +0 -12
- data/test/core/string/test_cleave.rb +0 -27
- data/test/core/string/test_cmp.rb +0 -18
- data/test/core/string/test_compress_lines.rb +0 -18
- data/test/core/string/test_divide.rb +0 -17
- data/test/core/string/test_each_char.rb +0 -17
- data/test/core/string/test_each_word.rb +0 -17
- data/test/core/string/test_edit_distance.rb +0 -20
- data/test/core/string/test_end_with.rb +0 -24
- data/test/core/string/test_exclude.rb +0 -23
- data/test/core/string/test_expand_tabs.rb +0 -83
- data/test/core/string/test_file.rb +0 -15
- data/test/core/string/test_fold.rb +0 -21
- data/test/core/string/test_indent.rb +0 -90
- data/test/core/string/test_index_all.rb +0 -18
- data/test/core/string/test_interpolate.rb +0 -16
- data/test/core/string/test_lchomp.rb +0 -25
- data/test/core/string/test_line_wrap.rb +0 -15
- data/test/core/string/test_lines.rb +0 -15
- data/test/core/string/test_lowercase.rb +0 -18
- data/test/core/string/test_margin.rb +0 -16
- data/test/core/string/test_methodize.rb +0 -28
- data/test/core/string/test_modulize.rb +0 -28
- data/test/core/string/test_mscan.rb +0 -18
- data/test/core/string/test_natcmp.rb +0 -17
- data/test/core/string/test_nchar.rb +0 -17
- data/test/core/string/test_newlines.rb +0 -14
- data/test/core/string/test_number.rb +0 -44
- data/test/core/string/test_op_div.rb +0 -15
- data/test/core/string/test_op_sub.rb +0 -15
- data/test/core/string/test_pathize.rb +0 -31
- data/test/core/string/test_quote.rb +0 -41
- data/test/core/string/test_range.rb +0 -35
- data/test/core/string/test_remove.rb +0 -36
- data/test/core/string/test_rewrite.rb +0 -17
- data/test/core/string/test_rotate.rb +0 -31
- data/test/core/string/test_shatter.rb +0 -17
- data/test/core/string/test_similarity.rb +0 -14
- data/test/core/string/test_snakecase.rb +0 -22
- data/test/core/string/test_splice.rb +0 -37
- data/test/core/string/test_squish.rb +0 -31
- data/test/core/string/test_start_with.rb +0 -24
- data/test/core/string/test_store.rb +0 -16
- data/test/core/string/test_subtract.rb +0 -16
- data/test/core/string/test_tab.rb +0 -16
- data/test/core/string/test_titlecase.rb +0 -16
- data/test/core/string/test_to_re.rb +0 -35
- data/test/core/string/test_trim.rb +0 -116
- data/test/core/string/test_unbracket.rb +0 -38
- data/test/core/string/test_underscore.rb +0 -21
- data/test/core/string/test_unfold.rb +0 -17
- data/test/core/string/test_unindent.rb +0 -105
- data/test/core/string/test_unquote.rb +0 -13
- data/test/core/string/test_uppercase.rb +0 -22
- data/test/core/string/test_variablize.rb +0 -15
- data/test/core/string/test_word_wrap.rb +0 -80
- data/test/core/string/test_words.rb +0 -24
- data/test/core/string/test_xor.rb +0 -16
- data/test/core/symbol/test_as_s.rb +0 -15
- data/test/core/symbol/test_bang.rb +0 -15
- data/test/core/symbol/test_chomp.rb +0 -22
- data/test/core/symbol/test_generate.rb +0 -20
- data/test/core/symbol/test_not.rb +0 -19
- data/test/core/symbol/test_op_div.rb +0 -15
- data/test/core/symbol/test_plain.rb +0 -19
- data/test/core/symbol/test_query.rb +0 -19
- data/test/core/symbol/test_setter.rb +0 -17
- data/test/core/symbol/test_succ.rb +0 -16
- data/test/core/symbol/test_thrown.rb +0 -22
- data/test/core/symbol/test_to_proc.rb +0 -35
- data/test/core/symbol/test_variablize.rb +0 -14
- data/test/core/time/test_ago.rb +0 -18
- data/test/core/time/test_change.rb +0 -17
- data/test/core/time/test_dst_adjustment.rb +0 -19
- data/test/core/time/test_elapse.rb +0 -15
- data/test/core/time/test_future.rb +0 -32
- data/test/core/time/test_hence.rb +0 -18
- data/test/core/time/test_in.rb +0 -18
- data/test/core/time/test_less.rb +0 -139
- data/test/core/time/test_past.rb +0 -32
- data/test/core/time/test_round_to.rb +0 -34
- data/test/core/time/test_set.rb +0 -43
- data/test/core/time/test_shift.rb +0 -135
- data/test/core/time/test_stamp.rb +0 -42
- data/test/core/time/test_to_time.rb +0 -15
- data/test/core/time/test_trunc.rb +0 -34
- data/test/core/to_hash_tc.rb +0 -210
- data/test/core/unboundmethod/test_arguments.rb +0 -25
- data/test/core/unboundmethod/test_name.rb +0 -19
- data/test/standard/binding/test_block_exec.rb +0 -21
- data/test/standard/math/test_abs.rb +0 -13
- data/test/standard/math/test_acot.rb +0 -23
- data/test/standard/math/test_acoth.rb +0 -22
- data/test/standard/math/test_beta.rb +0 -19
- data/test/standard/math/test_ceil.rb +0 -22
- data/test/standard/math/test_cosec.rb +0 -19
- data/test/standard/math/test_cosech.rb +0 -19
- data/test/standard/math/test_cot.rb +0 -13
- data/test/standard/math/test_coth.rb +0 -13
- data/test/standard/math/test_distance.rb +0 -16
- data/test/standard/math/test_exp10.rb +0 -14
- data/test/standard/math/test_exp2.rb +0 -14
- data/test/standard/math/test_factorial.rb +0 -13
- data/test/standard/math/test_floor.rb +0 -23
- data/test/standard/math/test_gcd.rb +0 -18
- data/test/standard/math/test_lcm.rb +0 -13
- data/test/standard/math/test_median.rb +0 -17
- data/test/standard/math/test_percentile.rb +0 -13
- data/test/standard/math/test_pow.rb +0 -30
- data/test/standard/math/test_root.rb +0 -15
- data/test/standard/math/test_sec.rb +0 -19
- data/test/standard/math/test_sech.rb +0 -19
- data/test/standard/math/test_sign.rb +0 -20
- data/test/standard/math/test_sinc.rb +0 -15
- data/test/standard/math/test_srq.rb +0 -20
- data/test/standard/pathname/test_chdir.rb +0 -16
- data/test/standard/pathname/test_readline.rb +0 -23
- data/test/standard/test_argvector.rb +0 -64
- data/test/standard/test_cloneable.rb +0 -60
- data/test/standard/test_date.rb +0 -82
- data/test/standard/test_enumargs.rb +0 -89
- data/test/standard/test_equitable.rb +0 -46
- data/test/standard/test_instantiable.rb +0 -40
- data/test/standard/test_math.rb +0 -3
- data/test/standard/test_memoizable.rb +0 -42
- data/test/standard/test_multipliers.rb +0 -141
- data/test/standard/test_ostruct.rb +0 -191
- data/test/standard/test_random.rb +0 -241
- data/test/standard/test_shellwords.rb +0 -74
- data/test/standard/test_thread.rb +0 -24
- data/test/standard/test_timer.rb +0 -62
- data/test/standard/test_tuple.rb +0 -68
- data/test/standard/test_uri.rb +0 -50
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
= Enumerable::Arguments
|
|
2
|
-
|
|
3
|
-
Require the library.
|
|
4
|
-
|
|
5
|
-
require 'facets/enumargs'
|
|
6
|
-
|
|
7
|
-
This will serve as our example class.
|
|
8
|
-
|
|
9
|
-
class PlusArray
|
|
10
|
-
include Enumerable::Arguments
|
|
11
|
-
|
|
12
|
-
def initialize(arr)
|
|
13
|
-
@arr = arr
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def each(n=0)
|
|
17
|
-
@arr.each{ |e| yield(e+n) }
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
Now Enumerable methods such as #map and #collect
|
|
22
|
-
take an argument as well.
|
|
23
|
-
|
|
24
|
-
t = PlusArray.new([1,2,3])
|
|
25
|
-
t.collect(4){ |e| e }.assert == [5,6,7]
|
|
26
|
-
|
|
27
|
-
Filtering methods such as #select and reject work
|
|
28
|
-
as well.
|
|
29
|
-
|
|
30
|
-
t = PlusArray.new([1,2,3])
|
|
31
|
-
t.select(4){ |x| x == 6 }.assert == [6]
|
|
32
|
-
|
|
33
|
-
t = PlusArray.new([1,2,3])
|
|
34
|
-
t.reject(4){ |x| x == 6 }.assert == [5,7]
|
|
35
|
-
|
|
36
|
-
We can covert to an array using #to_a with an argument.
|
|
37
|
-
|
|
38
|
-
t = PlusArray.new([1,2,3])
|
|
39
|
-
t.to_a(4).assert == [5,6,7]
|
|
40
|
-
|
|
41
|
-
We can get the minimum value using #min.
|
|
42
|
-
|
|
43
|
-
t = PlusArray.new([1,2,3])
|
|
44
|
-
t.min(4).assert == 5
|
|
45
|
-
|
|
46
|
-
And get the maximum value using #min.
|
|
47
|
-
|
|
48
|
-
t = PlusArray.new([1,2,3])
|
|
49
|
-
t.max(4).assert == 7
|
|
50
|
-
|
|
51
|
-
Methods that already take and argument, now take two
|
|
52
|
-
such as #include?
|
|
53
|
-
|
|
54
|
-
t = PlusArray.new([1,2,3])
|
|
55
|
-
t.assert.include?(7,4)
|
|
56
|
-
|
|
57
|
-
And #each_slice.
|
|
58
|
-
|
|
59
|
-
t = PlusArray.new([1,2,3,4])
|
|
60
|
-
a = []
|
|
61
|
-
t.each_slice(2,4){ |e,f| a << [e,f] }
|
|
62
|
-
a.assert == [[5,6],[7,8]]
|
|
63
|
-
|
|
64
|
-
The #find method has a slightly different interface
|
|
65
|
-
than the original Enumerable.
|
|
66
|
-
|
|
67
|
-
t = PlusArray.new([1,2,3,4])
|
|
68
|
-
f = t.find(2, :ifnone=>lambda{:NOPE}) { |a| a == 10 }
|
|
69
|
-
f.assert == :NOPE
|
|
70
|
-
|
|
71
|
-
The #grep method should also work.
|
|
72
|
-
|
|
73
|
-
t = PlusArray.new(['a1','b2','a3','b4'])
|
|
74
|
-
t.grep(/^b/, 'x').assert == ['b2x','b4x']
|
|
75
|
-
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
= Equitqable
|
|
2
|
-
|
|
3
|
-
Require the library.
|
|
4
|
-
|
|
5
|
-
require 'facets/equitable'
|
|
6
|
-
|
|
7
|
-
We will use this simple class as an example.
|
|
8
|
-
|
|
9
|
-
class C
|
|
10
|
-
include Equitable(:a,:b)
|
|
11
|
-
|
|
12
|
-
attr_accessor :a, :b
|
|
13
|
-
|
|
14
|
-
def initialize(a,b)
|
|
15
|
-
@a = a
|
|
16
|
-
@b = b
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
Now, if two instance of our sample class +C+ have
|
|
21
|
-
equal attributes +@a+ and +@b+ then they will
|
|
22
|
-
be equal.
|
|
23
|
-
|
|
24
|
-
c1 = C.new(10,20)
|
|
25
|
-
c2 = C.new(10,20)
|
|
26
|
-
c2.assert == c1
|
|
27
|
-
|
|
28
|
-
Otherwise they will not be equal.
|
|
29
|
-
|
|
30
|
-
c1 = C.new(10, 10)
|
|
31
|
-
c2 = C.new(10, 20)
|
|
32
|
-
c2.refute == c1
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
= Instantiable
|
|
2
|
-
|
|
3
|
-
Require the library.
|
|
4
|
-
|
|
5
|
-
require 'facets/instantiable'
|
|
6
|
-
|
|
7
|
-
We will use this module as an example.
|
|
8
|
-
|
|
9
|
-
module M
|
|
10
|
-
include Instantiable
|
|
11
|
-
|
|
12
|
-
attr :a
|
|
13
|
-
|
|
14
|
-
def initialize(a)
|
|
15
|
-
@a = a
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
As we can see M is now fully instantiable, as any
|
|
20
|
-
class would be.
|
|
21
|
-
|
|
22
|
-
m = M.new(1)
|
|
23
|
-
m.a.assert == 1
|
|
24
|
-
|
|
25
|
-
We can also use #extend rather than #include and
|
|
26
|
-
get the same result.
|
|
27
|
-
|
|
28
|
-
module N
|
|
29
|
-
extend Instantiable
|
|
30
|
-
|
|
31
|
-
attr :a
|
|
32
|
-
|
|
33
|
-
def initialize( a )
|
|
34
|
-
@a = a
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
As we saw with +M+ so too with +N+.
|
|
39
|
-
|
|
40
|
-
n = N.new( 1 )
|
|
41
|
-
n.a.assert == 1
|
|
42
|
-
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
== BasicObject
|
|
2
|
-
|
|
3
|
-
require 'facets/basicobject'
|
|
4
|
-
|
|
5
|
-
o = Class.new(BasicObject).new
|
|
6
|
-
|
|
7
|
-
Should ignore new kernel methods.
|
|
8
|
-
|
|
9
|
-
Kernel.module_eval { def xxx ; end }
|
|
10
|
-
|
|
11
|
-
expect NoMethodError do
|
|
12
|
-
o.xxx
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
Should ignore new object methods.
|
|
16
|
-
|
|
17
|
-
Object.class_eval { def yyy ; end }
|
|
18
|
-
|
|
19
|
-
expect NoMethodError do
|
|
20
|
-
o.yyy
|
|
21
|
-
end
|
|
22
|
-
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
= Memoizable
|
|
2
|
-
|
|
3
|
-
Memoizable allows
|
|
4
|
-
|
|
5
|
-
require 'facets/memoizable'
|
|
6
|
-
|
|
7
|
-
The classic example is calculating the Fibonacci sequence.
|
|
8
|
-
|
|
9
|
-
class Fibonacci
|
|
10
|
-
include Memoizable
|
|
11
|
-
|
|
12
|
-
def fib( num )
|
|
13
|
-
return num if num < 2
|
|
14
|
-
fib(num - 1) + fib(num - 2)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
memoize :fib
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
The first time will take a moment to calculate.
|
|
21
|
-
|
|
22
|
-
f = Fibonacci.new
|
|
23
|
-
f.fib(100)
|
|
24
|
-
|
|
25
|
-
The second time will be returned almost instantly.
|
|
26
|
-
|
|
27
|
-
f = Fibonacci.new
|
|
28
|
-
f.fib(100)
|
|
29
|
-
|
|
30
|
-
The following example makes if very clear what memoize is doing.
|
|
31
|
-
|
|
32
|
-
class MemoExample
|
|
33
|
-
include Memoizable
|
|
34
|
-
attr_accessor :a
|
|
35
|
-
memoize :a
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
m = MemoExample.new
|
|
39
|
-
m.a = 10
|
|
40
|
-
m.a #=> 10
|
|
41
|
-
m.a = 20
|
|
42
|
-
m.a #=> 10
|
|
43
|
-
|
|
44
|
-
Even though @a is assigned to 20, the method #a continues to return 10.
|
|
45
|
-
|
|
46
|
-
Memoizable is designed to handle a number of typically problematic aspects
|
|
47
|
-
of memoization implementations. First a memoizable object can be frozen.
|
|
48
|
-
|
|
49
|
-
f = Fibonacci.new
|
|
50
|
-
f.freeze
|
|
51
|
-
f.fib(100)
|
|
52
|
-
|
|
53
|
-
Memoizable objects are freezable because it does not use an instance variable
|
|
54
|
-
to store the memoized return values. Instead it uses a global class instance
|
|
55
|
-
variable in +Memoizable.cache+.
|
|
56
|
-
|
|
57
|
-
However, this also means the memoization cache is not preserved when an object
|
|
58
|
-
is duplicated. If this behavior is desired an aditional module is provided
|
|
59
|
-
called `Memoizable::Copy`. When the `Memoiazble::Copy` module is included into
|
|
60
|
-
a class it not only adds the #memoize class methods but also includes
|
|
61
|
-
an #initialize_copy method, which copies the appropriate cache entries when
|
|
62
|
-
#dup or #clone is used. Keep this in mind. It is important to call #super if you
|
|
63
|
-
override the #initialize_copy method in a class that uses `Memoizable::Copy`.
|
|
64
|
-
|
|
65
|
-
class MemoExample2
|
|
66
|
-
include Memoizable::Copy
|
|
67
|
-
attr_accessor :a
|
|
68
|
-
memoize :a
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
m = MemoExample2.new
|
|
72
|
-
m.a = 10
|
|
73
|
-
m.a #=> 10
|
|
74
|
-
|
|
75
|
-
n = m.dup
|
|
76
|
-
n.a = 20
|
|
77
|
-
n.a #=> 10
|
|
78
|
-
|
|
79
|
-
The `#memoize` method also accepts a few options that can be used to modify
|
|
80
|
-
the behvior of the memoizaiton. To memoize a method across all objects
|
|
81
|
-
of the same class and not just per-object, set the `:class` option to true.
|
|
82
|
-
|
|
83
|
-
class MemoExample3
|
|
84
|
-
include Memoizable
|
|
85
|
-
attr_accessor :a
|
|
86
|
-
memoize :a, :class=>true
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
m = MemoExample3.new
|
|
90
|
-
m.a = 10
|
|
91
|
-
m.a #=> 10
|
|
92
|
-
|
|
93
|
-
n = MemoExample3.new
|
|
94
|
-
n.a #=> 10
|
|
95
|
-
|
|
96
|
-
Memoization is indexed based on arguments passed to the method, as can be seen
|
|
97
|
-
in the Fibonacci example. Methods can also be memoized by name only, forgoing
|
|
98
|
-
any indexing based on arguments passed. To do this, set the `:arguments`
|
|
99
|
-
option to +false+.
|
|
100
|
-
|
|
101
|
-
class MemoExample4
|
|
102
|
-
include Memoizable
|
|
103
|
-
def f(n)
|
|
104
|
-
n + n
|
|
105
|
-
end
|
|
106
|
-
memoize :f, :arguments=>false
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
m = MemoExample4.new
|
|
110
|
-
m.f(1)
|
|
111
|
-
m.f(2) #=> 2
|
|
112
|
-
m.f(3) #=> 2
|
|
113
|
-
|
|
114
|
-
Blocks passed to a method normally have only a present vs. non-present effect
|
|
115
|
-
on the memoization index. In other words the return value of a method will be
|
|
116
|
-
cached under one key if a block is passed to it and under a different index
|
|
117
|
-
if not. It doesn't matter if blocks passed in actually differ, since
|
|
118
|
-
the only way to compare blocks is by their +object_id+ and it is very rare
|
|
119
|
-
for the exact same block object to be reused.
|
|
120
|
-
|
|
121
|
-
Finally, the `:freeze` option can be used to freeze the memoized results.
|
|
122
|
-
|
|
123
|
-
class MemoExample5
|
|
124
|
-
include Memoizable
|
|
125
|
-
def f(n)
|
|
126
|
-
(n + n).to_s
|
|
127
|
-
end
|
|
128
|
-
memoize :f, :freeze=>true
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
m = MemoExample5.new
|
|
132
|
-
m.f(1).frozen? #=> true
|
|
133
|
-
m.f(2).frozen? #=> true
|
|
134
|
-
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
= Multiton
|
|
2
|
-
|
|
3
|
-
The Multion pattern is essentially the same as the Singleton pattern, but
|
|
4
|
-
unlike it's fully unique brethren Multiton's are identical if their
|
|
5
|
-
initialization parameters are identical.
|
|
6
|
-
|
|
7
|
-
To demontrate we first need to load the Facets multiton.rb script.
|
|
8
|
-
|
|
9
|
-
require 'facets/multiton'
|
|
10
|
-
|
|
11
|
-
Now for the various exmples.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
== EXAMPLE A - STANDARD USAGE
|
|
15
|
-
|
|
16
|
-
class SomeMultitonClass
|
|
17
|
-
include Multiton
|
|
18
|
-
|
|
19
|
-
attr :arg
|
|
20
|
-
def initialize(arg)
|
|
21
|
-
@arg = arg
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
a = SomeMultitonClass.instance(4)
|
|
26
|
-
b = SomeMultitonClass.instance(4) # a and b are same object
|
|
27
|
-
c = SomeMultitonClass.instance(2) # c is a different object
|
|
28
|
-
|
|
29
|
-
a.assert == b
|
|
30
|
-
|
|
31
|
-
x = [a.arg, b.arg].max * 10 + c.arg
|
|
32
|
-
x.assert == 42
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
== EXAMPLE B - MODIFY AN EXISTING CLASS
|
|
36
|
-
|
|
37
|
-
We can modify an existing class (if we are so bold), for example we can
|
|
38
|
-
add shared filehandles to the File class.
|
|
39
|
-
|
|
40
|
-
class ::File
|
|
41
|
-
include Multiton
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
lineno = __LINE__
|
|
45
|
-
# HERE1
|
|
46
|
-
# HERE2
|
|
47
|
-
|
|
48
|
-
a = File.instance(__FILE__)
|
|
49
|
-
b = File.instance(__FILE__)
|
|
50
|
-
|
|
51
|
-
b.assert == a
|
|
52
|
-
|
|
53
|
-
lineno.times{ a.gets }
|
|
54
|
-
|
|
55
|
-
a.gets.strip.assert == "# HERE1"
|
|
56
|
-
b.gets.strip.assert == "# HERE2"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
== EXAMPLE C - INHERITENCE
|
|
60
|
-
|
|
61
|
-
class A < String
|
|
62
|
-
include Multiton
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# B is also a multiton - with it's OWN object cache
|
|
66
|
-
class B < A; end
|
|
67
|
-
|
|
68
|
-
# w is the same object as x, y is the same object as z
|
|
69
|
-
w,x,y,z = A.instance('A'), A.instance('A'), B.instance('B'), B.instance('B')
|
|
70
|
-
|
|
71
|
-
x.object_id.assert == w.object_id
|
|
72
|
-
z.object_id.assert == y.object_id
|
|
73
|
-
|
|
74
|
-
a = B.instance('A')
|
|
75
|
-
b = B.instance('A')
|
|
76
|
-
|
|
77
|
-
w.object_id.refute == a.object_id # (each class has it's own pool)
|
|
78
|
-
b.object_id.assert == a.object_id
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
== EXAMPLE D - MULTIPLE MODULE INCLUSION (does nothing)
|
|
82
|
-
|
|
83
|
-
class A < String
|
|
84
|
-
include Multiton
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# B is also a multiton - with it's OWN object cache
|
|
88
|
-
class B < A; end
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
# w is the same object as x, y is the same object as z
|
|
92
|
-
w,x,y,z = A.instance('A'), A.instance('A'), B.instance('B'), B.instance('B')
|
|
93
|
-
|
|
94
|
-
yz_id = y.object_id || z.object_id
|
|
95
|
-
|
|
96
|
-
If we include Multiton again, it will have to effect.
|
|
97
|
-
|
|
98
|
-
B.class_eval {
|
|
99
|
-
include Multiton
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
# y is not only the same object as z, but they are both the same object(s)
|
|
103
|
-
# as from EXAMPLE C
|
|
104
|
-
|
|
105
|
-
y,z = B.instance('B'), B.instance('B')
|
|
106
|
-
|
|
107
|
-
yz_id.assert == y.object_id
|
|
108
|
-
yz_id.assert == z.object_id
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
== EXAMPLE E - SO YOU WANNA USE NEW INSTEAD OF INSTANCE
|
|
112
|
-
|
|
113
|
-
module K
|
|
114
|
-
# use an inner class which is itself a multiton
|
|
115
|
-
class K < String; include Multiton; end
|
|
116
|
-
|
|
117
|
-
# define a new which returns a mutltion using #instance...
|
|
118
|
-
class << self
|
|
119
|
-
def new(*args, &block)
|
|
120
|
-
K.instance(*args, &block)
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
the = K.new '4'
|
|
126
|
-
answer = K.new '2'
|
|
127
|
-
|
|
128
|
-
x = sprintf( "%s%s", the, answer )
|
|
129
|
-
x.assert == "42"
|
|
130
|
-
the.class.assert == K::K
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
== EXAMPLE F - using Klass.multiton_id
|
|
134
|
-
|
|
135
|
-
class Klass
|
|
136
|
-
include Multiton
|
|
137
|
-
|
|
138
|
-
def initialize( important, not_important )
|
|
139
|
-
@important, @not_important = important, not_important
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
def Klass.multiton_id(*args, &block)
|
|
143
|
-
# we consider only the first arg
|
|
144
|
-
important, not_important = *args
|
|
145
|
-
important
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
a = Klass.instance( :a, :b )
|
|
150
|
-
b = Klass.instance( :a, :c )
|
|
151
|
-
c = Klass.instance( :b, :b )
|
|
152
|
-
|
|
153
|
-
a.assert == b
|
|
154
|
-
c.refute == a
|
|
155
|
-
c.refute == b
|
|
156
|
-
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
def temporary_directory
|
|
3
|
-
@temporary_directory ||= 'tmp'
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
When /Given a directory '(.*?)' containing/ do |dir, text|
|
|
7
|
-
@temporary_directory = File.join(@temporary_directory, dir)
|
|
8
|
-
text.lines.each do |file|
|
|
9
|
-
next if file =~ /^\s*$/
|
|
10
|
-
file = File.join(@temporary_directory, file.strip)
|
|
11
|
-
dir = File.dirname(file)
|
|
12
|
-
FileUtils.mkdir_p(dir)
|
|
13
|
-
File.open(file, 'w'){ |f| f << "SPINICH" }
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
Before :all do
|
|
18
|
-
if File.exist?(temporary_directory)
|
|
19
|
-
FileUtils.rm_r(temporary_directory)
|
|
20
|
-
end
|
|
21
|
-
FileUtils.mkdir_p(temporary_directory)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Used for File extensions
|
|
25
|
-
When "had a file '(((.*?)))'" do |name|
|
|
26
|
-
name = name.sub(/^tmp\//, '') # b/c QED now runs from tmp/qed
|
|
27
|
-
File.open(name, 'w'){|f| f << "Hello World"}
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
When "had a binary file '(((.*?)))'" do |name|
|
|
31
|
-
name = name.sub(/^tmp\//, '') # b/c QED now runs from tmp/qed
|
|
32
|
-
File.open(name, 'wb'){|f| f << "Hello\nWorld\n"}
|
|
33
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
class Array
|
|
2
|
-
|
|
3
|
-
# Returns the values in common for an array set (nil, singe value/object, or range).
|
|
4
|
-
#
|
|
5
|
-
# CREDIT: monocle
|
|
6
|
-
|
|
7
|
-
def intersection
|
|
8
|
-
array = uniq.sort_by { |e| Range === e ? e.first : e }
|
|
9
|
-
array.inject() do |c, e|
|
|
10
|
-
f = (Range === c ? c.last : c)
|
|
11
|
-
v = (Range === e ? e.first : e)
|
|
12
|
-
case f <=> v
|
|
13
|
-
when -1 then return nil
|
|
14
|
-
when 0 then f
|
|
15
|
-
else
|
|
16
|
-
if Range === e
|
|
17
|
-
v..([f, e.last].min)
|
|
18
|
-
else
|
|
19
|
-
v
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
require 'facets/array/product'
|
|
2
|
-
|
|
3
|
-
class Array
|
|
4
|
-
# Array#** is an alias for Array#product.
|
|
5
|
-
#
|
|
6
|
-
# NOTE: This method is not a common core extension and is not
|
|
7
|
-
# loaded automatically when using <code>require 'facets'</code>.
|
|
8
|
-
#
|
|
9
|
-
# @uncommon
|
|
10
|
-
# require 'facets/array/op_pow'
|
|
11
|
-
#
|
|
12
|
-
alias_method :**, :product
|
|
13
|
-
end
|
|
14
|
-
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
class Array
|
|
2
|
-
|
|
3
|
-
# Convert an associative array to a Hash.
|
|
4
|
-
#
|
|
5
|
-
# Examples
|
|
6
|
-
#
|
|
7
|
-
# [[:a, 1], [:b, 2]].to_h
|
|
8
|
-
# #=> {:a=>1, :b=>2}
|
|
9
|
-
#
|
|
10
|
-
# [[:a, 1], :b].to_h
|
|
11
|
-
# #=> {:a=>1, :b=>nil}
|
|
12
|
-
#
|
|
13
|
-
# Returns [Hash].
|
|
14
|
-
#
|
|
15
|
-
def to_h
|
|
16
|
-
h = {}
|
|
17
|
-
each{ |(k,v)| h[k] = v }
|
|
18
|
-
h
|
|
19
|
-
end unless method_defined?(:to_h)
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
class Binding
|
|
2
|
-
|
|
3
|
-
# Returns the local variables defined in the binding context:
|
|
4
|
-
#
|
|
5
|
-
# a = 1
|
|
6
|
-
# b = 2
|
|
7
|
-
#
|
|
8
|
-
# binding.local_variables #=> [:a, :b]
|
|
9
|
-
#
|
|
10
|
-
# TODO: Rename this to prevent name clash?
|
|
11
|
-
def local_variables()
|
|
12
|
-
eval("local_variables")
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
require 'facets/class/singleton_class'
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
class Class
|
|
2
|
-
|
|
3
|
-
# Return true if a class is the singleton class of
|
|
4
|
-
# an object.
|
|
5
|
-
#
|
|
6
|
-
# @uncommon
|
|
7
|
-
# require 'facets/class/singleton_class'
|
|
8
|
-
#
|
|
9
|
-
def singleton_class?
|
|
10
|
-
! ancestors.include?( self ) rescue false
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# @deprecated
|
|
14
|
-
alias :singleton? :singleton_class?
|
|
15
|
-
|
|
16
|
-
end
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
class Class
|
|
2
|
-
|
|
3
|
-
if defined?(Class.__subclasses__) # Rubinius
|
|
4
|
-
|
|
5
|
-
# Returns an array with the direct children of +self+.
|
|
6
|
-
#
|
|
7
|
-
# Integer.subclasses # => [Fixnum, Bignum]
|
|
8
|
-
#
|
|
9
|
-
alias_method :subclasses, :__subclasses__
|
|
10
|
-
|
|
11
|
-
else
|
|
12
|
-
|
|
13
|
-
# Returns an array with the direct children of +self+.
|
|
14
|
-
#
|
|
15
|
-
# Integer.subclasses # => [Fixnum, Bignum]
|
|
16
|
-
#
|
|
17
|
-
def subclasses
|
|
18
|
-
list = []
|
|
19
|
-
ObjectSpace.each_object(Class) do |c|
|
|
20
|
-
list.unshift c if c.superclass == self
|
|
21
|
-
end
|
|
22
|
-
list.uniq
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
end
|
|
28
|
-
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
class Dir
|
|
2
|
-
|
|
3
|
-
# Like #each, except the "." and ".." special files are ignored.
|
|
4
|
-
# You can use +ignore+ to override '.' and '..' and ignore
|
|
5
|
-
# other entries via a exact match or regular expression.
|
|
6
|
-
#
|
|
7
|
-
# CREDIT: Tyler Rick
|
|
8
|
-
def each_child(*ignore)
|
|
9
|
-
ignore = ['.', '..'] if ignore.empty?
|
|
10
|
-
each do |file|
|
|
11
|
-
yield file unless ignore.any?{ |i| i === file }
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
module Enumerable
|
|
2
|
-
|
|
3
|
-
# The block acts as an arbitrary filter on the data. Unlike map,
|
|
4
|
-
# it can choose to drop elements from the result and/or add
|
|
5
|
-
# additional elements. The first object passed to the block is
|
|
6
|
-
# the receiver of the output.
|
|
7
|
-
#
|
|
8
|
-
# x = (1..10000)
|
|
9
|
-
# x = x.filter{ |out,i| out << i if i % 2 == 0 } # like select
|
|
10
|
-
# x = x.filter{ |out,i| out << i + 100 } # like map
|
|
11
|
-
# x = x.take(3)
|
|
12
|
-
#
|
|
13
|
-
# x #=> [102, 104, 106]
|
|
14
|
-
#
|
|
15
|
-
# This is very similar to #each_with_object, but #filter handles
|
|
16
|
-
# argument better by reversing their order and using the splat
|
|
17
|
-
# operator. (This was also once known as #injecting.)
|
|
18
|
-
#
|
|
19
|
-
# CREDIT: David Black, Louis J Scoras
|
|
20
|
-
|
|
21
|
-
def filter(output=[]) #:yeild:
|
|
22
|
-
if block_given?
|
|
23
|
-
each do |*input|
|
|
24
|
-
yield(output, *input)
|
|
25
|
-
end
|
|
26
|
-
output
|
|
27
|
-
else
|
|
28
|
-
to_enum(:filter)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
|