facets 3.1.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/HISTORY.md +141 -0
- data/LICENSE.txt +21 -343
- data/README.md +26 -19
- data/lib/core/facets/array/arrange.rb +1 -42
- data/lib/core/facets/array/average.rb +0 -1
- data/lib/core/facets/array/before.rb +1 -1
- data/lib/core/facets/array/delete_first.rb +21 -0
- data/lib/core/facets/array/duplicates.rb +13 -0
- data/lib/core/facets/array/indexes.rb +113 -0
- data/lib/core/facets/array/nonuniq.rb +6 -8
- data/lib/core/facets/array/occurrence.rb +4 -1
- data/lib/core/facets/array/remove.rb +39 -0
- data/lib/core/facets/array/span.rb +29 -0
- data/lib/core/facets/array/split_at.rb +25 -0
- data/lib/core/facets/array/standard_deviation.rb +7 -2
- 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 +3 -3
- 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/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/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/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/null.rb +3 -15
- data/lib/core/facets/file/read_binary.rb +3 -12
- data/lib/core/facets/hash/except.rb +0 -7
- 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 +6 -4
- data/lib/core/facets/kernel/callstack.rb +5 -24
- data/lib/core/facets/kernel/eigenclass.rb +6 -6
- 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/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/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/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 +6 -8
- 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/lchomp.rb +7 -14
- data/lib/core/facets/string/newlines.rb +0 -2
- 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 -1
- 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/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 +1 -1
- data/lib/standard/facets/multiton.rb +1 -1
- 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/tuple.rb +2 -4
- data/lib/standard/facets/uri.rb +3 -2
- metadata +29 -1172
- data/.index +0 -80
- data/.yardopts +0 -10
- 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/after.md +0 -13
- data/demo/core/array/arrange.md +0 -17
- data/demo/core/array/before.md +0 -14
- data/demo/core/array/collapse.md +0 -15
- data/demo/core/array/collisions.md +0 -30
- data/demo/core/array/commonality.md +0 -31
- data/demo/core/array/conjoin.md +0 -47
- data/demo/core/array/contains.md +0 -9
- data/demo/core/array/delete_unless.md +0 -13
- data/demo/core/array/delete_values.md +0 -10
- data/demo/core/array/delete_values_at.md +0 -15
- data/demo/core/array/divide.md +0 -14
- data/demo/core/array/duplicates.md +0 -14
- data/demo/core/array/each_overlap.md +0 -12
- data/demo/core/array/each_pair.md +0 -13
- data/demo/core/array/each_value.md +0 -12
- data/demo/core/array/entropy.md +0 -13
- data/demo/core/array/extract_options.md +0 -13
- data/demo/core/array/first.md +0 -11
- data/demo/core/array/from.md +0 -11
- data/demo/core/array/ideal_entropy.md +0 -11
- data/demo/core/array/intersection.md +0 -11
- data/demo/core/array/last.md +0 -11
- data/demo/core/array/median.md +0 -23
- data/demo/core/array/merge.md +0 -15
- data/demo/core/array/missing.md +0 -10
- data/demo/core/array/mode.md +0 -9
- data/demo/core/array/nonuniq.md +0 -16
- data/demo/core/array/not_empty.md +0 -8
- data/demo/core/array/occur.md +0 -18
- data/demo/core/array/occurrence.md +0 -13
- data/demo/core/array/only.md +0 -9
- data/demo/core/array/op_pow.md +0 -10
- data/demo/core/array/pad.md +0 -28
- data/demo/core/array/peek.md +0 -10
- data/demo/core/array/poke.md +0 -15
- data/demo/core/array/probability +0 -8
- data/demo/core/array/pull.md +0 -10
- data/demo/core/array/recurse.md +0 -10
- data/demo/core/array/recursively.md +0 -20
- data/demo/core/array/reject_values.md +0 -10
- data/demo/core/array/splice.md +0 -14
- data/demo/core/array/split.md +0 -13
- data/demo/core/array/squeeze.md +0 -14
- data/demo/core/array/step.md +0 -16
- data/demo/core/array/store.md +0 -9
- data/demo/core/array/thru.md +0 -12
- data/demo/core/array/to_h.md +0 -11
- data/demo/core/array/traverse.md +0 -20
- data/demo/core/array/uniq_by.md +0 -16
- data/demo/core/array/unique_permutation.md +0 -14
- data/demo/core/array/zip.md +0 -8
- data/demo/core/binding/caller.md +0 -57
- data/demo/core/binding/defined.md +0 -10
- data/demo/core/binding/opvars.md +0 -16
- data/demo/core/binding/self.md +0 -6
- data/demo/core/class/descendants.md +0 -13
- data/demo/core/class/to_proc.md +0 -11
- data/demo/core/comparable/at_least.md +0 -11
- data/demo/core/comparable/at_most.md +0 -11
- data/demo/core/comparable/bound.md +0 -13
- data/demo/core/comparable/cap.md +0 -11
- data/demo/core/comparable/clip.md +0 -29
- data/demo/core/comparable/cmp.md +0 -18
- data/demo/core/comparable/op_get.md +0 -32
- data/demo/core/dir/ascend.md +0 -24
- data/demo/core/dir/descend.md +0 -16
- data/demo/core/dir/multiglob.md +0 -41
- data/demo/core/dir/parent.md +0 -6
- data/demo/core/dir/recurse.md +0 -41
- data/demo/core/exception/detail.md +0 -19
- data/demo/core/facets.md +0 -6
- data/demo/core/filetest/root.md +0 -13
- data/demo/core/hash/recursively.md +0 -21
- data/demo/core/indexable.md +0 -95
- data/demo/core/integer/bitmask.md +0 -46
- data/demo/core/integer/factorial.md +0 -10
- data/demo/core/integer/length.md +0 -7
- data/demo/core/integer/multiple.md +0 -12
- data/demo/core/integer/of.md +0 -11
- data/demo/core/integer/ordinal.md +0 -11
- data/demo/core/integer/times_collect.md +0 -9
- data/demo/core/matchdata/match.md +0 -7
- data/demo/core/matchdata/matchset.md +0 -7
- data/demo/core/matchdata/matchtree.md +0 -10
- data/demo/core/module/cattr.md +0 -43
- data/demo/core/module/class_extend.md +0 -64
- data/demo/core/module/class_inheritor.md +0 -126
- data/demo/core/module/copy_inheritor.md +0 -30
- data/demo/core/module/include_as.md +0 -31
- data/demo/core/module/method_space.md +0 -24
- data/demo/core/string/acronym.md +0 -9
- data/demo/core/string/align.md +0 -34
- data/demo/core/string/ascii_only.md +0 -37
- data/demo/core/string/bracket.md +0 -35
- data/demo/core/string/camelcase.md +0 -47
- data/demo/core/string/capitalized.md +0 -27
- data/demo/core/string/characters.md +0 -11
- data/demo/core/string/cleanlines.md +0 -10
- data/demo/core/string/cleave.md +0 -49
- data/demo/core/string/compress_lines.md +0 -22
- data/demo/core/string/crypt.md +0 -15
- data/demo/core/string/divide.md +0 -9
- data/demo/core/string/each_word.md +0 -11
- data/demo/core/string/edit_distance.md +0 -15
- data/demo/core/string/exclude.md +0 -15
- data/demo/core/string/expand_tabs.md +0 -69
- data/demo/core/string/fold.md +0 -14
- data/demo/core/string/indent.md +0 -65
- data/demo/core/string/index_all.md +0 -14
- data/demo/core/string/interpolate.md +0 -8
- data/demo/core/string/lchomp.md +0 -14
- data/demo/core/string/line_wrap.md +0 -7
- data/demo/core/string/lowercase.md +0 -12
- data/demo/core/string/methodize.md +0 -22
- data/demo/core/string/modulize.md +0 -22
- data/demo/core/string/mscan.md +0 -10
- data/demo/core/string/natcmp.md +0 -10
- data/demo/core/string/nchar.md +0 -9
- data/demo/core/string/newlines.md +0 -9
- data/demo/core/string/number.md +0 -27
- data/demo/core/string/op_div.md +0 -10
- data/demo/core/string/op_sub.md +0 -7
- data/demo/core/string/pathize.md +0 -22
- data/demo/core/string/quote.md +0 -20
- data/demo/core/string/random.md +0 -25
- data/demo/core/string/range.md +0 -19
- data/demo/core/string/remove.md +0 -33
- data/demo/core/string/rewrite.md +0 -9
- data/demo/core/string/shatter.md +0 -9
- data/demo/core/string/similarity.md +0 -12
- data/demo/core/string/snakecase.md +0 -14
- data/demo/core/string/splice.md +0 -28
- data/demo/core/string/squish.md +0 -27
- data/demo/core/string/store.md +0 -10
- data/demo/core/string/subtract.md +0 -8
- data/demo/core/string/titlecase.md +0 -8
- data/demo/core/string/to_re.md +0 -22
- data/demo/core/string/trim.md +0 -92
- data/demo/core/string/unbracket.md +0 -24
- data/demo/core/string/underscore.md +0 -17
- data/demo/core/string/unfold.md +0 -9
- data/demo/core/string/unindent.md +0 -65
- data/demo/core/string/unquote.md +0 -6
- data/demo/core/string/uppercase.md +0 -15
- data/demo/core/string/variablize.md +0 -7
- data/demo/core/string/word_wrap.md +0 -54
- data/demo/core/string/words.md +0 -13
- data/demo/core/string/xor.md +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 -12
- data/lib/core/facets/array/to_h.rb +0 -19
- 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 -40
- 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/symbol/succ.rb +0 -23
- data/lib/core/facets.yml +0 -80
- 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_arrange.rb +0 -37
- data/test/core/array/test_average.rb +0 -16
- data/test/core/array/test_before.rb +0 -48
- data/test/core/array/test_collapse.rb +0 -23
- 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_delete_unless.rb +0 -17
- data/test/core/array/test_delete_values.rb +0 -31
- data/test/core/array/test_divide.rb +0 -24
- data/test/core/array/test_duplicates.rb +0 -29
- data/test/core/array/test_each_overlap.rb +0 -31
- data/test/core/array/test_each_pair.rb +0 -16
- data/test/core/array/test_each_value.rb +0 -16
- 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_from.rb +0 -42
- 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_op_pow.rb +0 -13
- data/test/core/array/test_pad.rb +0 -40
- data/test/core/array/test_peek.rb +0 -28
- data/test/core/array/test_poke.rb +0 -21
- data/test/core/array/test_probability.rb +0 -18
- 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_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_standard_deviation.rb +0 -18
- data/test/core/array/test_step.rb +0 -28
- data/test/core/array/test_store.rb +0 -22
- data/test/core/array/test_to_h.rb +0 -14
- data/test/core/array/test_traverse.rb +0 -26
- data/test/core/array/test_uniq_by.rb +0 -24
- data/test/core/array/test_unique_permutation.rb +0 -23
- data/test/core/array/test_variance.rb +0 -17
- data/test/core/array/test_zip.rb +0 -13
- data/test/core/binding/test_caller.rb +0 -69
- data/test/core/binding/test_defined.rb +0 -18
- 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.rb +0 -36
- data/test/core/enumerable/test_compact_map.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_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_hashify.rb +0 -113
- 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_occur.rb +0 -40
- 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_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 -34
- 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_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_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_factorial.rb +0 -30
- data/test/core/integer/test_multiple.rb +0 -16
- 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 -34
- 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_replace.rb +0 -47
- 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_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/numeric/test_approx.rb +0 -26
- data/test/core/numeric/test_delimit.rb +0 -68
- data/test/core/numeric/test_distance.rb +0 -16
- data/test/core/numeric/test_length.rb +0 -16
- data/test/core/numeric/test_round_to.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_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_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_nudge.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_rng.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_acronym.rb +0 -14
- data/test/core/string/test_align.rb +0 -32
- data/test/core/string/test_ascii_only.rb +0 -51
- data/test/core/string/test_bracket.rb +0 -37
- 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 -27
- data/test/core/string/test_crypt.rb +0 -17
- data/test/core/string/test_divide.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_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 -22
- 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_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_random.rb +0 -25
- data/test/core/string/test_range.rb +0 -35
- data/test/core/string/test_remove.rb +0 -50
- 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 -22
- 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_store.rb +0 -16
- data/test/core/string/test_subtract.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/struct/test_replace.rb +0 -18
- 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_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/unboundmethod/test_arguments.rb +0 -25
- 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 -105
- 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
|
@@ -2,26 +2,25 @@ require 'cgi'
|
|
|
2
2
|
|
|
3
3
|
class CGI
|
|
4
4
|
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# this conversion.
|
|
5
|
+
# Extended HTML/XHTML escaping with mode support. Unlike Ruby's built-in
|
|
6
|
+
# `CGI.escape_html`, this supports additional escape modes.
|
|
8
7
|
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
# Available modes include:
|
|
8
|
+
# Available modes:
|
|
12
9
|
# * `:quote` - escapes single and double quotes
|
|
13
10
|
# * `:newlines` - escapes newline characters (\r and \n)
|
|
14
11
|
# * `:ampersand` - escapes the ampersand sign
|
|
15
12
|
# * `:brackets` - escapes less-than and greater-than signs
|
|
16
13
|
# * `:default` - escapes double quotes
|
|
17
14
|
#
|
|
15
|
+
# By default all strings are escaped on `&`, `>`, `<` and `"`.
|
|
16
|
+
#
|
|
18
17
|
# @example
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
18
|
+
# CGI.escape_xhtml("<tag>") #=> "<tag>"
|
|
19
|
+
# CGI.escape_xhtml("Example\nString", :newlines) #=> "Example String"
|
|
20
|
+
# CGI.escape_xhtml("\"QUOTE\"", false) #=> "\"QUOTE\""
|
|
22
21
|
#
|
|
23
|
-
def self.
|
|
24
|
-
modes << :
|
|
22
|
+
def self.escape_xhtml(string, *modes)
|
|
23
|
+
modes << :default if modes.empty?
|
|
25
24
|
|
|
26
25
|
unless modes.include?(:nonstandard)
|
|
27
26
|
string = string.gsub(/&/, '&').gsub(/>/, '>').gsub(/</, '<')
|
|
@@ -32,7 +31,7 @@ class CGI
|
|
|
32
31
|
case mode
|
|
33
32
|
when :quote, :quotes
|
|
34
33
|
string.gsub(%r|"|,'"').gsub(%r|'|,''')
|
|
35
|
-
when :newlines
|
|
34
|
+
when :newlines
|
|
36
35
|
string.gsub(/[\r\n]+/,' ')
|
|
37
36
|
when :ampersand
|
|
38
37
|
string.gsub(/&/, '&')
|
|
@@ -41,23 +40,13 @@ class CGI
|
|
|
41
40
|
when :default, true
|
|
42
41
|
string.gsub(/\"/, '"')
|
|
43
42
|
when false
|
|
43
|
+
string
|
|
44
44
|
else
|
|
45
|
-
raise ArgumentError, "unrecognized HTML escape mode -- #{
|
|
45
|
+
raise ArgumentError, "unrecognized HTML escape mode -- #{mode}"
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
|
-
end
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
# @deprecated
|
|
52
|
-
alias :escapeHTML :escape_html
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
if RUBY_VERSION < '1.9'
|
|
56
|
-
class << self
|
|
57
|
-
alias :unescape_html :unescapeHTML
|
|
58
|
-
alias :escape_element :escapeElement
|
|
59
|
-
alias :unescape_element :unescapeElement
|
|
60
|
-
end
|
|
49
|
+
string
|
|
61
50
|
end
|
|
62
51
|
|
|
63
52
|
end
|
|
@@ -1,67 +1,20 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
# Cloneable was originally ported from Jim Weirich's Rake.
|
|
5
|
-
# The current version is the work of Ken Bloom.
|
|
6
|
-
#
|
|
7
|
-
# DEPRECATED: A better approach is to provide a #deep_dup and and a #deep_clone,
|
|
8
|
-
# then if a class needs these for #dup and #clone they can just alias them.
|
|
9
|
-
#
|
|
10
|
-
# CREDIT: Ken Bloom
|
|
1
|
+
# @deprecated Use deep_dup/deep_clone instead, or define your own
|
|
2
|
+
# initialize_copy method.
|
|
3
|
+
warn "facets/cloneable is deprecated. Use deep_dup/deep_clone instead.", uplevel: 1
|
|
11
4
|
|
|
12
5
|
module Cloneable
|
|
13
6
|
|
|
14
7
|
def initialize_copy(sibling)
|
|
15
|
-
# First duplicate my superclass' state. Note that if it's duplicating
|
|
16
|
-
# instance variables, this will be overwritten, but this is important
|
|
17
|
-
# because we could be dealing with a C extension with state hidden from
|
|
18
|
-
# the Ruby interpreter.
|
|
19
8
|
super
|
|
20
|
-
|
|
21
|
-
# We want to know if we're being dup'ed or clone'd, because we want to
|
|
22
|
-
# preserve the state of our internals the same way our state is being
|
|
23
|
-
# preserved. (If we can't figure it out, we'll just use #dup.)
|
|
24
9
|
operation = (
|
|
25
10
|
copy_call = caller.find{|x| x !~ /'initialize_copy'/}
|
|
26
11
|
copy_match = copy_call.match(/`(dup|clone)'/)
|
|
27
12
|
copy_match ? copy_match[1] : :dup
|
|
28
13
|
)
|
|
29
|
-
|
|
30
14
|
sibling.instance_variables.each do |ivar|
|
|
31
15
|
value = sibling.instance_variable_get(ivar)
|
|
32
|
-
|
|
33
|
-
# Set my instance variable to be a #dup or #clone
|
|
34
|
-
# or my sibling, depending on what's happening to me right now.
|
|
35
16
|
instance_variable_set(ivar, value.send(operation))
|
|
36
17
|
end
|
|
37
18
|
end
|
|
38
19
|
|
|
39
|
-
|
|
40
|
-
#def clone
|
|
41
|
-
# @_copy_operation = :clone
|
|
42
|
-
# super
|
|
43
|
-
#end
|
|
44
|
-
#
|
|
45
|
-
#def dup
|
|
46
|
-
# @_copy_operation = :dup
|
|
47
|
-
# super
|
|
48
|
-
#end
|
|
49
|
-
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
# OLD VERSION
|
|
55
|
-
|
|
56
|
-
#module Cloneable
|
|
57
|
-
# def clone
|
|
58
|
-
# sibling = self.class.new
|
|
59
|
-
# instance_variables.each do |ivar|
|
|
60
|
-
# value = self.instance_variable_get(ivar)
|
|
61
|
-
# sibling.instance_variable_set(ivar, value.dup) #rake_dup)
|
|
62
|
-
# end
|
|
63
|
-
# sibling
|
|
64
|
-
# end
|
|
65
|
-
# alias_method :dup, :clone
|
|
66
|
-
#end
|
|
67
|
-
|
|
20
|
+
end
|
|
@@ -1,56 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
# = Continuation Extension
|
|
4
|
-
#
|
|
5
|
-
# Creates a continuation in a way that is easier to use than callcc.
|
|
6
|
-
# On the initial call this will return the created Continuation and
|
|
7
|
-
# the arguments you gave to Continuation.create in an Array. If you
|
|
8
|
-
# then issue .call() on the Continuation execution will jump back to
|
|
9
|
-
# the point of time where you initially invoked Continuation.create,
|
|
10
|
-
# but this time it will return the Continuation and the arguments
|
|
11
|
-
# you supplied in an Array.
|
|
12
|
-
#
|
|
13
|
-
# You can supply a block instead of default arguments which will
|
|
14
|
-
# cause that block to be executed once and its result to be returned
|
|
15
|
-
# along side the created Continuation, but this form is confusing
|
|
16
|
-
# and does only rarely make sense.
|
|
17
|
-
#
|
|
18
|
-
# # Count from 0 to 10
|
|
19
|
-
# cc, counter = Continuation.create(0)
|
|
20
|
-
# counter #~> 0..10
|
|
21
|
-
# cc.call(counter + 1) if counter < 10
|
|
22
|
-
#
|
|
23
|
-
# # Implement something similar to Array#inject using Continuations.
|
|
24
|
-
# # For simplicity's sake, this is not fully compatible with the real
|
|
25
|
-
# # inject. Make sure that you understand Array#inject before you try
|
|
26
|
-
# # to understand this.
|
|
27
|
-
# class ::Array
|
|
28
|
-
# def cc_inject(value = nil)
|
|
29
|
-
# copy = self.clone
|
|
30
|
-
# cc, result, item = Continuation.create(value, nil)
|
|
31
|
-
# next_item = copy.shift
|
|
32
|
-
# if result and item
|
|
33
|
-
# # Aggregate the result using the block.
|
|
34
|
-
# cc.call(yield(result, item), next_item)
|
|
35
|
-
# elsif next_item
|
|
36
|
-
# # item not yet set and Array is not empty:
|
|
37
|
-
# # This means we did not get a value and thus need to use the
|
|
38
|
-
# # first item from the Array before we can start using the
|
|
39
|
-
# # block to aggregate the result.
|
|
40
|
-
# cc.call(next_item, result)
|
|
41
|
-
# end
|
|
42
|
-
#
|
|
43
|
-
# return result
|
|
44
|
-
# end
|
|
45
|
-
# end
|
|
46
|
-
# [1,2,3,4,5].cc_inject { |acc, n| acc + n } # => 15
|
|
47
|
-
#
|
|
48
|
-
def Continuation.create(*args, &block)
|
|
49
|
-
args = [args] if not args.nil? and not args.is_a? Array # 1.6.8 compatibility
|
|
50
|
-
cc = nil; result = callcc {|c| cc = c; block.call(cc) if block and args.empty?}
|
|
51
|
-
result ||= args
|
|
52
|
-
return *[cc, *result]
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end
|
|
56
|
-
|
|
1
|
+
# @deprecated callcc is obsolete in Ruby. Use Fiber instead.
|
|
2
|
+
warn "facets/continuation is deprecated. callcc is obsolete; use Fiber instead.", uplevel: 1
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Crypt3 is a pure Ruby version of crypt(3), a salted one-way hashing
|
|
2
|
+
# of a password.
|
|
3
|
+
#
|
|
4
|
+
# Supported hashing algorithms are: md5, sha1, sha256, sha384, sha512, rmd160.
|
|
5
|
+
#
|
|
6
|
+
# Only the md5 hashing algorithm is standard and compatible with crypt(3),
|
|
7
|
+
# the others are not standard.
|
|
8
|
+
#
|
|
9
|
+
# Originally written by Poul-Henning Kamp (Beer-Ware License).
|
|
10
|
+
# Adapted by guillaume.pierronnet based on FreeBSD src/lib/libcrypt/crypt.c
|
|
11
|
+
#
|
|
12
|
+
# Copyright (c) 2002 Poul-Henning Kamp
|
|
13
|
+
# License: BSD-2-Clause
|
|
14
|
+
|
|
15
|
+
module Crypt3
|
|
16
|
+
|
|
17
|
+
VERSION = '1.2.0'
|
|
18
|
+
|
|
19
|
+
# Base 64 character set.
|
|
20
|
+
ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
|
21
|
+
|
|
22
|
+
# A pure ruby version of crypt(3), a salted one-way hashing of a password.
|
|
23
|
+
#
|
|
24
|
+
# Automatically generates an 8-byte salt if none given.
|
|
25
|
+
#
|
|
26
|
+
# Crypt3.crypt('password') #=> "$1$xxxxxxxx$hash..."
|
|
27
|
+
# Crypt3.crypt('password', :sha256) #=> "$1$xxxxxxxx$hash..."
|
|
28
|
+
#
|
|
29
|
+
# password - The phrase to encrypt. [String]
|
|
30
|
+
# algo - The algorithm to use. [Symbol]
|
|
31
|
+
# salt - Cryptographic salt, random if nil. [String]
|
|
32
|
+
# magic - The magic prefix. [String]
|
|
33
|
+
#
|
|
34
|
+
# Returns the cryptographic hash. [String]
|
|
35
|
+
def self.crypt(password, algo = :md5, salt = nil, magic = '$1$')
|
|
36
|
+
salt ||= generate_salt(8)
|
|
37
|
+
|
|
38
|
+
case algo
|
|
39
|
+
when :md5
|
|
40
|
+
require "digest/md5"
|
|
41
|
+
when :sha1
|
|
42
|
+
require "digest/sha1"
|
|
43
|
+
when :rmd160
|
|
44
|
+
require "digest/rmd160"
|
|
45
|
+
when :sha256, :sha384, :sha512
|
|
46
|
+
require "digest/sha2"
|
|
47
|
+
else
|
|
48
|
+
raise(ArgumentError, "unknown algorithm: #{algo}")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
digest_class = Digest.const_get(algo.to_s.upcase)
|
|
52
|
+
|
|
53
|
+
m = digest_class.new
|
|
54
|
+
m.update(password + magic + salt)
|
|
55
|
+
|
|
56
|
+
mixin = digest_class.new.update(password + salt + password).digest
|
|
57
|
+
password.length.times do |i|
|
|
58
|
+
m.update(mixin[i % 16].chr)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
i = password.length
|
|
62
|
+
while i != 0
|
|
63
|
+
if (i & 1) != 0
|
|
64
|
+
m.update("\x00")
|
|
65
|
+
else
|
|
66
|
+
m.update(password[0].chr)
|
|
67
|
+
end
|
|
68
|
+
i >>= 1
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
final = m.digest
|
|
72
|
+
|
|
73
|
+
1000.times do |i|
|
|
74
|
+
m2 = digest_class.new
|
|
75
|
+
m2.update((i & 1) != 0 ? password : final)
|
|
76
|
+
m2.update(salt) if (i % 3) != 0
|
|
77
|
+
m2.update(password) if (i % 7) != 0
|
|
78
|
+
m2.update((i & 1) != 0 ? final : password)
|
|
79
|
+
final = m2.digest
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
rearranged = ""
|
|
83
|
+
[[0, 6, 12], [1, 7, 13], [2, 8, 14], [3, 9, 15], [4, 10, 5]].each do |a, b, c|
|
|
84
|
+
v = final.getbyte(a) << 16 | final.getbyte(b) << 8 | final.getbyte(c)
|
|
85
|
+
4.times do
|
|
86
|
+
rearranged += ITOA64[v & 0x3f]
|
|
87
|
+
v >>= 6
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
v = final.getbyte(11)
|
|
92
|
+
2.times do
|
|
93
|
+
rearranged += ITOA64[v & 0x3f]
|
|
94
|
+
v >>= 6
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
magic + salt + '$' + rearranged
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Check the validity of a password against a hashed string.
|
|
101
|
+
#
|
|
102
|
+
# Crypt3.check('password', '$1$xxxxxxxx$hash...') #=> true
|
|
103
|
+
#
|
|
104
|
+
# password - The phrase that was encrypted. [String]
|
|
105
|
+
# hash - The cryptographic hash. [String]
|
|
106
|
+
# algo - The algorithm used. [Symbol]
|
|
107
|
+
#
|
|
108
|
+
# Returns true if valid. [Boolean]
|
|
109
|
+
def self.check(password, hash, algo = :md5)
|
|
110
|
+
magic, salt = hash.split('$')[1, 2]
|
|
111
|
+
magic = '$' + magic + '$'
|
|
112
|
+
self.crypt(password, algo, salt, magic) == hash
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Generate a random salt of the given size.
|
|
116
|
+
#
|
|
117
|
+
# Crypt3.generate_salt(8) #=> "xK3d9Wq2"
|
|
118
|
+
#
|
|
119
|
+
# size - The size of the salt. [Integer]
|
|
120
|
+
#
|
|
121
|
+
# Returns random salt. [String]
|
|
122
|
+
def self.generate_salt(size)
|
|
123
|
+
(1..size).map { ITOA64[rand(ITOA64.size)] }.join
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
require 'date'
|
|
3
|
+
|
|
4
|
+
class Time
|
|
5
|
+
alias_method :old_compare, :<=>
|
|
6
|
+
private :old_compare
|
|
7
|
+
|
|
8
|
+
# Allow for Date <=> DateTime <=> Time, to work as expected.
|
|
9
|
+
|
|
10
|
+
def <=>(other)
|
|
11
|
+
if Date === other or DateTime === other
|
|
12
|
+
self.to_datetime <=> other
|
|
13
|
+
else
|
|
14
|
+
old_compare(other)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Date
|
|
20
|
+
alias_method :old_compare, :<=>
|
|
21
|
+
private :old_compare
|
|
22
|
+
|
|
23
|
+
# Allow for Date <=> DateTime <=> Time, to work as expected.
|
|
24
|
+
|
|
25
|
+
def <=>(other)
|
|
26
|
+
if Time === other
|
|
27
|
+
self.to_datetime <=> other.to_datetime
|
|
28
|
+
else
|
|
29
|
+
old_compare(other)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/standard/facets/date.rb
CHANGED
|
@@ -14,7 +14,6 @@ module FileUtils
|
|
|
14
14
|
# subdirectory is automatically skipped as well.
|
|
15
15
|
|
|
16
16
|
def cp_rx(src, dest, options = {}, &filter)
|
|
17
|
-
fu_check_options(options, OPT_TABLE['cp_r'])
|
|
18
17
|
if options[:verbose]
|
|
19
18
|
fu_output_message("cp -r#{options[:preserve] ? 'p' : ''}#{options[:remove_destination] ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}")
|
|
20
19
|
end
|
|
@@ -41,4 +40,3 @@ module FileUtils
|
|
|
41
40
|
end
|
|
42
41
|
|
|
43
42
|
end
|
|
44
|
-
|
|
@@ -27,7 +27,6 @@ module FileUtils
|
|
|
27
27
|
#
|
|
28
28
|
# TODO: Why --remove-destination and not just --force?
|
|
29
29
|
def ln_r(src, dest, options = {})
|
|
30
|
-
fu_check_options options, OPT_TABLE['ln_r']
|
|
31
30
|
fu_output_message "ln -r#{options[:remove_destination] ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]
|
|
32
31
|
return if options[:noop]
|
|
33
32
|
options = options.dup
|
|
@@ -1,59 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
#
|
|
5
|
-
# Ruby's standard GetoptLong class with an added DSL.
|
|
6
|
-
#
|
|
7
|
-
# opts = GetoptLong.new do
|
|
8
|
-
# reqs '--expect', '-x'
|
|
9
|
-
# flag '--help', '-h'
|
|
10
|
-
# end
|
|
11
|
-
#
|
|
12
|
-
# See GetoptLong::DSL for details.
|
|
13
|
-
|
|
14
|
-
class GetoptLong
|
|
15
|
-
|
|
16
|
-
alias :init :initialize
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
def initialize(*arguments, &block)
|
|
20
|
-
if block_given?
|
|
21
|
-
raise ArgumentError unless arguments.empty?
|
|
22
|
-
arguments = DSL.new(&block).arguments
|
|
23
|
-
end
|
|
24
|
-
init(*arguments)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# DSL-mode parser.
|
|
28
|
-
class DSL
|
|
29
|
-
attr :arguments
|
|
30
|
-
|
|
31
|
-
def initialize(&block)
|
|
32
|
-
@arguments = []
|
|
33
|
-
instance_eval(&block)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
def flag(*opts)
|
|
38
|
-
@arguments << (opts << GetoptLong::NO_ARGUMENT)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
#
|
|
42
|
-
def required(*opts)
|
|
43
|
-
@arguments << (opts << GetoptLong::REQUIRED_ARGUMENT)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
#
|
|
47
|
-
alias :reqs :required
|
|
48
|
-
|
|
49
|
-
#
|
|
50
|
-
def optional(*opts)
|
|
51
|
-
@arguments << (opts << GetoptLong::OPTIONAL_ARGUMENT)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
#
|
|
55
|
-
alias :opts :optional
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
end
|
|
59
|
-
|
|
1
|
+
# @deprecated GetoptLong is a bundled gem heading for removal.
|
|
2
|
+
# Consider using OptionParser or a modern CLI library instead.
|
|
3
|
+
warn "facets/getoptlong is deprecated. Consider OptionParser instead.", uplevel: 1
|
|
@@ -1,26 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
alias_method :require_without_monitor, :require
|
|
4
|
-
alias_method :load_without_monitor, :load
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
alias_method :require_without_monitor, :require
|
|
8
|
-
alias_method :load_without_monitor, :load
|
|
9
|
-
|
|
10
|
-
# Require script and print what is being require.
|
|
11
|
-
def require(file)
|
|
12
|
-
$stderr.puts "monitor require: #{file}\n#{caller.inspect}\n\n"
|
|
13
|
-
require_without_monitor(file)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
module_function :require
|
|
17
|
-
|
|
18
|
-
# Load script and print what is being loaded.
|
|
19
|
-
def load(file, wrap=false)
|
|
20
|
-
$stderr.puts "monitor load: #{file}\n#{caller.inspect}\n\n"
|
|
21
|
-
load_without_monitor(file, wrap)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
module_function :load
|
|
25
|
-
end
|
|
26
|
-
|
|
1
|
+
# @deprecated Monkey-patching require/load globally is dangerous.
|
|
2
|
+
warn "facets/load_monitor is deprecated. It monkey-patches require/load globally.", uplevel: 1
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'facets/math/approx_equal'
|
|
2
|
+
require 'facets/math/mean'
|
|
2
3
|
|
|
3
4
|
module Math
|
|
4
5
|
|
|
@@ -13,11 +14,11 @@ module Math
|
|
|
13
14
|
# GC = \frac{\sum_{i=1}^N (2i-N-1)x_i}{N^2-\bar{x}}
|
|
14
15
|
#
|
|
15
16
|
def self.gini_coefficient(array)
|
|
16
|
-
return -1 if size <= 0 or any? { |x| x < 0 }
|
|
17
|
-
return 0 if size < 2 or all? { |x| approx_equal(x,0) }
|
|
17
|
+
return -1 if array.size <= 0 or array.any? { |x| x < 0 }
|
|
18
|
+
return 0 if array.size < 2 or array.all? { |x| approx_equal(x,0) }
|
|
18
19
|
s = 0
|
|
19
|
-
sort.each_with_index { |li,i| s += (2*i+1-size)*li }
|
|
20
|
-
s.to_f/(size**2*mean).to_f
|
|
20
|
+
array.sort.each_with_index { |li,i| s += (2*i+1-array.size)*li }
|
|
21
|
+
s.to_f/(array.size**2*mean(array)).to_f
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
## OLD WAY
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
module Math
|
|
2
2
|
|
|
3
|
-
# The Kullback-Leibler divergence from
|
|
3
|
+
# The Kullback-Leibler divergence from distribution +p+ to distribution +q+.
|
|
4
|
+
#
|
|
5
|
+
# Both arrays must be the same size and represent probability distributions
|
|
6
|
+
# (values should be positive).
|
|
4
7
|
#
|
|
5
8
|
# NB: You will possibly want to sort both P and Q before calling this
|
|
6
9
|
# depending on what you're actually trying to measure.
|
|
7
10
|
#
|
|
8
11
|
# http://en.wikipedia.org/wiki/Kullback-Leibler_divergence
|
|
9
12
|
#
|
|
10
|
-
def self.kldivergence(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
kld
|
|
14
|
-
each_with_index { |pi,i| kld += pi*Math::log(pi.to_f/q[i].to_f) }
|
|
13
|
+
def self.kldivergence(p, q)
|
|
14
|
+
raise ArgumentError, "Cannot compare differently sized arrays." unless p.size == q.size
|
|
15
|
+
kld = 0.0
|
|
16
|
+
p.each_with_index { |pi, i| kld += pi * Math.log(pi.to_f / q[i].to_f) }
|
|
15
17
|
kld
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
end
|
|
19
|
-
|
|
@@ -17,30 +17,15 @@ class OpenStruct
|
|
|
17
17
|
# p.gender = :M
|
|
18
18
|
# end
|
|
19
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
20
|
# CREDIT: Noah Gibbs, Gavin Sinclair
|
|
31
21
|
def initialize(hash=nil, &block)
|
|
32
|
-
|
|
33
|
-
@table = Hash.new(&block)
|
|
34
|
-
else
|
|
35
|
-
@table = {}
|
|
36
|
-
end
|
|
22
|
+
@table = {}
|
|
37
23
|
if hash
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
new_ostruct_member(k)
|
|
24
|
+
hash.each_pair do |k, v|
|
|
25
|
+
self[k.to_sym] = v
|
|
41
26
|
end
|
|
42
27
|
end
|
|
43
|
-
if block && block.arity==1
|
|
28
|
+
if block && block.arity == 1
|
|
44
29
|
yield self
|
|
45
30
|
end
|
|
46
31
|
end
|