mack-facets 0.8.1 → 0.8.2
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.
- data/lib/gems.rb +25 -0
- data/lib/gems/english-0.3.1/VERSION +1 -0
- data/lib/gems/english-0.3.1/lib/english/array.rb +48 -0
- data/lib/gems/english-0.3.1/lib/english/censor.rb +76 -0
- data/lib/gems/english-0.3.1/lib/english/double_metaphone.rb +353 -0
- data/lib/gems/english-0.3.1/lib/english/dresner.rb +47 -0
- data/lib/gems/english-0.3.1/lib/english/inflect.rb +299 -0
- data/lib/gems/english-0.3.1/lib/english/jumble.rb +37 -0
- data/lib/gems/english-0.3.1/lib/english/levenshtein.rb +78 -0
- data/lib/gems/english-0.3.1/lib/english/metaphone.rb +110 -0
- data/lib/gems/english-0.3.1/lib/english/numerals.rb +71 -0
- data/lib/gems/english-0.3.1/lib/english/patterns.rb +49 -0
- data/lib/gems/english-0.3.1/lib/english/porter_stemming.rb +188 -0
- data/lib/gems/english-0.3.1/lib/english/roman.rb +174 -0
- data/lib/gems/english-0.3.1/lib/english/similarity.rb +103 -0
- data/lib/gems/english-0.3.1/lib/english/soundex.rb +70 -0
- data/lib/gems/english-0.3.1/lib/english/string.rb +210 -0
- data/lib/gems/english-0.3.1/lib/english/style.rb +294 -0
- data/lib/gems/english-0.3.1/lib/english/style_orm.rb +143 -0
- data/lib/gems/english-0.3.1/lib/english/textfilter.rb +91 -0
- data/lib/gems/extlib-0.9.8/lib/extlib.rb +56 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/assertions.rb +8 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/blank.rb +59 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/boolean.rb +11 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/class.rb +175 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/datetime.rb +9 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/dictionary.rb +433 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/hash.rb +419 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/hook.rb +366 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/inflection.rb +435 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/lazy_array.rb +106 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/logger.rb +202 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/mash.rb +148 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/module.rb +41 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/nil.rb +5 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/numeric.rb +5 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/object.rb +175 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/object_space.rb +13 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/pathname.rb +5 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/pooling.rb +239 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/rubygems.rb +38 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/simple_set.rb +39 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/string.rb +132 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/struct.rb +8 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/symbol.rb +17 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/tasks/release.rb +15 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/time.rb +19 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/version.rb +3 -0
- data/lib/gems/extlib-0.9.8/lib/extlib/virtual_file.rb +10 -0
- data/lib/gems/facets-2.4.5/VERSION +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets-live.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets-load.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets.rb +11 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/combination.rb +59 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/conjoin.rb +58 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/delete.rb +61 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/index.rb +48 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/indexable.rb +73 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/merge.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/not_empty.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/only.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/pad.rb +41 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/permutation.rb +30 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/product.rb +57 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/recursively.rb +30 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/rotate.rb +42 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/select.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/splice.rb +30 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/stackable.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/array/traverse.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/binding.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/binding/caller.rb +54 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/binding/defined.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/binding/eval.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/binding/local_variables.rb +15 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/binding/self.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/bitmask.rb +104 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/blank.rb +60 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/boolean.rb +156 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/callstack.rb +52 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/cattr.rb +2 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/cattr.rb +115 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/cattr_accessor.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/cattr_reader.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/cattr_writer.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/descendents.rb +36 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/methodize.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/pathize.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/prepend.rb +50 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/subclasses.rb +2 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/class/to_proc.rb +42 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/comparable.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/comparable/bound.rb +65 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/comparable/cmp.rb +38 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/comparable/comparable.rb +42 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/dir.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/dir/ascend.rb +59 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/dir/descend.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/dir/multiglob.rb +92 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/dir/parent.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/dir/recurse.rb +29 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/accumulate.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/cluster_by.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/collect.rb +54 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/commonality.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/count.rb +26 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/divide.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/duplicates.rb +38 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/each_by.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/entropy.rb +37 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/frequency.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/group_by.rb +27 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/inject.rb +31 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/map_send.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/mash.rb +32 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/mode.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/modulate.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/none.rb +31 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/occur.rb +38 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/one.rb +38 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/probability.rb +36 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/split.rb +27 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/sum.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/enumerable/uniq_by.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/exception.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/exception/detail.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/exception/suppress.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/append.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/create.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/null.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/read.rb +41 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/rewrite.rb +88 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/rootname.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/split_root.rb +10 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/write.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/file/writelines.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/filetest.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/filetest/root.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/float.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/float/round.rb +2 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/functor.rb +77 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/alias.rb +31 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/argumentize.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/at.rb +8 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/autonew.rb +42 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/collate.rb +45 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/delete.rb +47 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/diff.rb +11 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/except.rb +27 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/insert.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/inverse.rb +27 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/join.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/keys.rb +45 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/mash.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/merge.rb +30 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/op.rb +7 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/op_add.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/op_and.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/op_mul.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/op_or.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/op_push.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/op_sub.rb +26 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/recursive_merge.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/recursively.rb +29 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/rekey.rb +59 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/select.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/slice.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/swap.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/to_h.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/to_proc.rb +41 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/to_struct.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/traverse.rb +41 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/update.rb +81 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/weave.rb +81 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/hash/zipnew.rb +2 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/indexable.rb +251 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/integer.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/integer/even.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/integer/factorial.rb +30 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/integer/multiple.rb +15 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/integer/odd.rb +35 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/integer/of.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/integer/ordinal.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/__callee__.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/__class__.rb +9 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/__dir__.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/__get__.rb +10 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/__method__.rb +36 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/__set__.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/as.rb +100 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/ask.rb +27 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/attr_singleton.rb +62 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/complete.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/constant.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/d.rb +26 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/deep_copy.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/demo.rb +23 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/ergo.rb +42 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/here.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/in.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/instance.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/instance_assign.rb +41 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/instance_class.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/instance_exec.rb +40 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/instance_send.rb +7 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/instance_variables.rb +99 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/maybe.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/not_nil.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/object_class.rb +10 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/object_hexid.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/object_send.rb +32 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/p.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/populate.rb +73 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/qua_class.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/require_all.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/require_local.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/resc.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/respond.rb +23 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/returning.rb +23 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/silence.rb +75 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/singleton_class.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/tap.rb +32 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/try.rb +23 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/val.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/kernel/with.rb +20 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/lazy.rb +238 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/matchdata.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/matchdata/match.rb +15 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/matchdata/matchset.rb +44 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/metaid.rb +94 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/abstract.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/alias_accessor.rb +45 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/alias_method_chain.rb +50 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/alias_module_function.rb +30 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/ancestor.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/basename.rb +31 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/can.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/class.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/conflict.rb +63 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/include_function_module.rb +25 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/instance_methods.rb +40 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/integrate.rb +2 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/is.rb +57 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/methodize.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/modspace.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/module_load.rb +56 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/nesting.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/op.rb +95 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/pathize.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/prepend.rb +26 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/redefine_method.rb +35 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/redirect_method.rb +45 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/rename_method.rb +20 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/revise.rb +62 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/spacename.rb +25 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/module/wrap_method.rb +28 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/nilclass.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/nilclass/ergo.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/nilclass/to_f.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/numeric.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/numeric/approx.rb +15 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/numeric/distance.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/numeric/round.rb +72 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/proc.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/proc/bind.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/proc/compose.rb +42 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/proc/curry.rb +31 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/proc/to_method.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/proc/update.rb +9 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/range.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/range/combine.rb +47 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/range/overlap.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/range/to_r.rb +26 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/range/umbrella.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/range/within.rb +66 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/regexp.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/regexp/arity.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/regexp/to_re.rb +28 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/stackable.rb +86 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/align.rb +106 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/bracket.rb +105 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/bytes.rb +15 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/camelcase.rb +26 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/capitalized.rb +46 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/chars.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/chomp.rb +33 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/cleave.rb +36 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/divide.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/each_char.rb +29 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/each_word.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/end_with.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/fold.rb +39 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/interpolate.rb +20 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/line_wrap.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/lines.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/methodize.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/modulize.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/mscan.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/natcmp.rb +88 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/nchar.rb +28 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/op_sub.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/pathize.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/range.rb +77 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/rewrite.rb +28 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/shatter.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/snakecase.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/splice.rb +37 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/start_with.rb +32 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/subtract.rb +4 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/tab.rb +103 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/titlecase.rb +15 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/to_re.rb +26 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/variablize.rb +13 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/word_wrap.rb +34 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/words.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/string/xor.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/chomp.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/generate.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/not.rb +29 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/plain.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/query.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/re_s.rb +18 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/setter.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/succ.rb +19 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/to_proc.rb +38 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/symbol/variablize.rb +12 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/advance.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/ago.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/change.rb +41 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/elapse.rb +16 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/hence.rb +94 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/round.rb +17 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/set.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/stamp.rb +44 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/to_time.rb +21 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/time/trunc.rb +15 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/to_hash.rb +87 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/unboundmethod.rb +6 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/unboundmethod/arguments.rb +44 -0
- data/lib/gems/facets-2.4.5/lib/core/facets/unboundmethod/name.rb +25 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/basicobject.rb +14 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/cgi.rb +50 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/continuation.rb +57 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/date.rb +396 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils.rb +27 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils/head.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils/safe_ln.rb +28 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils/slice.rb +141 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils/tail.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils/wc.rb +114 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils/whereis.rb +64 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/fileutils/which.rb +101 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/getoptlong.rb +71 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/logger.rb +291 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/ostruct.rb +238 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/pathname.rb +172 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/rbconfig.rb +45 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/set.rb +27 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/shellwords.rb +89 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/uri.rb +249 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/yaml.rb +75 -0
- data/lib/gems/facets-2.4.5/lib/lore/facets/zlib.rb +38 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/1stclassmethod.rb +140 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/advisable.rb +162 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/annotations.rb +302 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/ansicode.rb +315 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/arguments.rb +365 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/argvector.rb +353 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/association.rb +194 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/attr.rb +208 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/autoarray.rb +62 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/autoreload.rb +150 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/basex.rb +37 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/bbcode.rb +397 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/bicrypt.rb +265 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/binding/opvars.rb +24 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/binreadable.rb +221 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/blankslate.rb +66 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/buildable.rb +344 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/bytes.rb +175 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/cachedecorator.rb +117 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/capsule.rb +258 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/chain.rb +58 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/class_extension.rb +114 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/classmethods.rb +199 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/cloneable.rb +76 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/command.rb +439 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/consoleutils.rb +113 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/coroutine.rb +159 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/crypt.rb +166 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/cssfilter.rb +254 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/daemonize.rb +44 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/dependency.rb +151 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/dictionary.rb +478 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/dictionarymatcher.rb +136 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/downloader.rb +281 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/duplicable.rb +43 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/duration.rb +540 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/elementor.rb +133 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/elementwise.rb +61 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/enumerablepass.rb +217 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/equatable.rb +120 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/eventhook.rb +132 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/expirable.rb +82 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/fileable.rb +162 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/filelist.rb +497 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/fileshell.rb +202 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/hash/stringify_keys.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/hash/symbolize_keys.rb +94 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/heap.rb +22 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/htmlfilter.rb +595 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/infinity.rb +193 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/inheritor.rb +130 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/ini.rb +264 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/instantiable.rb +47 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/instantise.rb +1 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/instantize.rb +95 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/interval.rb +282 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/ioredirect.rb +130 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/iteration.rb +65 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/kernel/meta.rb +32 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/linkedlist.rb +222 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/lrucache.rb +157 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/main.rb +70 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/memoize.rb +116 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/methodspace.rb +141 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/minitar.rb +1063 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/multipliers.rb +109 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/multiton.rb +386 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/nackclass.rb +41 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/net/smtp_tls.rb +131 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/nilstatus.rb +47 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/nullclass.rb +74 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/opencascade.rb +94 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/opencollection.rb +43 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/openhash.rb +39 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/openobject.rb +267 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/opesc.rb +60 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/orderedhash.rb +37 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/overload.rb +94 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/paramix.rb +202 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/partial.rb +37 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/pathlist.rb +112 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/platform.rb +192 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/pool.rb +91 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/pqueue.rb +449 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/progressbar.rb +253 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/prototype.rb +88 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/random.rb +451 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/rbsystem.rb +222 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/recorder.rb +109 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/reference.rb +99 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/reflection.rb +145 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/registerable.rb +35 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/rwdelegator.rb +74 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/semaphore.rb +92 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/settings.rb +248 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/snapshot.rb +209 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/string/mask.rb +278 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/string/words.rb +173 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/succ.rb +44 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/syncarray.rb +114 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/synchash.rb +157 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/tagiter.rb +366 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/thread.rb +51 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/timer.rb +274 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/times.rb +431 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/tracepoint.rb +209 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/tuple.rb +325 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/typecast.rb +261 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/uninheritable.rb +50 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/uploadutils.rb +464 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/version.rb +136 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/xmlhash.rb +112 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/xoxo.rb +259 -0
- data/lib/gems/facets-2.4.5/lib/more/facets/ziputils.rb +349 -0
- data/lib/mack-facets.rb +4 -2
- data/lib/mack-facets/english_extensions/inflect.rb +50 -50
- data/lib/mack-facets/extensions/string.rb +10 -1
- data/lib/mack-facets/utils/inflections.rb +50 -47
- data/lib/mack-facets/utils/inflector.rb +19 -19
- metadata +547 -36
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# = Multipliers
|
|
2
|
+
#
|
|
3
|
+
# WARNING: Use Rich Units package for future compatibilty!
|
|
4
|
+
#
|
|
5
|
+
# == Synopsis
|
|
6
|
+
#
|
|
7
|
+
# Adds methods to Numeric to make working with
|
|
8
|
+
# magnitudes (kilo, mega, giga, milli, micro, etc.)
|
|
9
|
+
# as well as bits and bytes easier.
|
|
10
|
+
#
|
|
11
|
+
# 1.kilo #=> 1000
|
|
12
|
+
# 1.milli #=> 0.001
|
|
13
|
+
# 1.kibi #=> 1024
|
|
14
|
+
#
|
|
15
|
+
# To display a value in a certain denomination, simply
|
|
16
|
+
# perform the inverse operation by placing the
|
|
17
|
+
# multiplier called on unit (1) in the denominator.
|
|
18
|
+
#
|
|
19
|
+
# 1000 / 1.kilo #=> 1
|
|
20
|
+
# 1024 / 1.kibi #=> 1
|
|
21
|
+
#
|
|
22
|
+
# == History
|
|
23
|
+
#
|
|
24
|
+
# Thanks to Rich Kilmer and bytes.rb which inspired this library.
|
|
25
|
+
#
|
|
26
|
+
# == Notes
|
|
27
|
+
#
|
|
28
|
+
# * This library is not compatible with STICK's units.rb (an spin-off
|
|
29
|
+
# of Facets old units.rb library). Do not attempt to use both at the same time.
|
|
30
|
+
#
|
|
31
|
+
# == Authors
|
|
32
|
+
#
|
|
33
|
+
# * Thomas Sawyer
|
|
34
|
+
#
|
|
35
|
+
# == Copying
|
|
36
|
+
#
|
|
37
|
+
# Copyright (c) 2005 Thomas Sawyer
|
|
38
|
+
#
|
|
39
|
+
# Ruby License
|
|
40
|
+
#
|
|
41
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
|
42
|
+
# software under the same terms as Ruby.
|
|
43
|
+
#
|
|
44
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
45
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
46
|
+
# FOR A PARTICULAR PURPOSE.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# = Multipliers
|
|
50
|
+
#
|
|
51
|
+
# Adds methods to Numeric to make working with
|
|
52
|
+
# magnitudes (kilo, mega, giga, milli, micro, etc.)
|
|
53
|
+
# as well as bits and bytes easier.
|
|
54
|
+
#
|
|
55
|
+
# 1.kilo #=> 1000
|
|
56
|
+
# 1.milli #=> 0.001
|
|
57
|
+
# 1.kibi #=> 1024
|
|
58
|
+
#
|
|
59
|
+
# To display a value in a certain denomination, simply
|
|
60
|
+
# perform the inverse operation by placing the
|
|
61
|
+
# multiplier called on unit (1) in the denominator.
|
|
62
|
+
#
|
|
63
|
+
# 1000 / 1.kilo #=> 1
|
|
64
|
+
# 1024 / 1.kibi #=> 1
|
|
65
|
+
#
|
|
66
|
+
|
|
67
|
+
#
|
|
68
|
+
class Numeric
|
|
69
|
+
|
|
70
|
+
# SI Multipliers
|
|
71
|
+
|
|
72
|
+
def deka ; self * 10 ; end
|
|
73
|
+
def hecto ; self * 100 ; end
|
|
74
|
+
def kilo ; self * 1000 ; end
|
|
75
|
+
def mega ; self * 1000000 ; end
|
|
76
|
+
def giga ; self * 1000000000 ; end
|
|
77
|
+
def tera ; self * 1000000000000 ; end
|
|
78
|
+
def peta ; self * 1000000000000000 ; end
|
|
79
|
+
def exa ; self * 1000000000000000000 ; end
|
|
80
|
+
|
|
81
|
+
# SI Fractional
|
|
82
|
+
|
|
83
|
+
def deci ; self.to_f / 10 ; end
|
|
84
|
+
def centi ; self.to_f / 100 ; end
|
|
85
|
+
def milli ; self.to_f / 1000 ; end
|
|
86
|
+
def micro ; self.to_f / 1000000 ; end
|
|
87
|
+
def nano ; self.to_f / 1000000000 ; end
|
|
88
|
+
def pico ; self.to_f / 1000000000000 ; end
|
|
89
|
+
def femto ; self.to_f / 1000000000000000 ; end
|
|
90
|
+
def atto ; self.to_f / 1000000000000000000 ; end
|
|
91
|
+
|
|
92
|
+
# SI Binary
|
|
93
|
+
|
|
94
|
+
def kibi ; self * 1024 ; end
|
|
95
|
+
def mebi ; self * 1024**2 ; end
|
|
96
|
+
def gibi ; self * 1024**3 ; end
|
|
97
|
+
def tebi ; self * 1024**4 ; end
|
|
98
|
+
def pebi ; self * 1024**5 ; end
|
|
99
|
+
def exbi ; self * 1024**6 ; end
|
|
100
|
+
|
|
101
|
+
# Bits and Bytes
|
|
102
|
+
|
|
103
|
+
#def bit ; self ; end
|
|
104
|
+
#def bits ; self ; end
|
|
105
|
+
#def byte ; self * 8 ; end
|
|
106
|
+
#def bytes ; self * 8 ; end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
# = Multiton
|
|
2
|
+
#
|
|
3
|
+
# == Synopsis
|
|
4
|
+
#
|
|
5
|
+
# Multiton design pattern ensures only one object is allocated for a given state.
|
|
6
|
+
#
|
|
7
|
+
# The 'multiton' pattern is similar to a singleton, but instead of only one
|
|
8
|
+
# instance, there are several similar instances. It is useful when you want to
|
|
9
|
+
# avoid constructing objects many times because of some huge expense (connecting
|
|
10
|
+
# to a database for example), require a set of similar but not identical
|
|
11
|
+
# objects, and cannot easily control how many times a contructor may be called.
|
|
12
|
+
#
|
|
13
|
+
# class SomeMultitonClass
|
|
14
|
+
# include Multiton
|
|
15
|
+
# attr :arg
|
|
16
|
+
# def initialize(arg)
|
|
17
|
+
# @arg = arg
|
|
18
|
+
# end
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# a = SomeMultitonClass.new(4)
|
|
22
|
+
# b = SomeMultitonClass.new(4) # a and b are same object
|
|
23
|
+
# c = SomeMultitonClass.new(2) # c is a different object
|
|
24
|
+
#
|
|
25
|
+
# == Previous Behavior
|
|
26
|
+
#
|
|
27
|
+
# In previous versions of Multiton the #new method was made
|
|
28
|
+
# private and #instance had to be used in its stay --just like Singleton.
|
|
29
|
+
# But this is less desirable for Multiton since Multitions can
|
|
30
|
+
# have multiple instances, not just one.
|
|
31
|
+
#
|
|
32
|
+
# So instead Multiton now defines #create as a private alias of
|
|
33
|
+
# the original #new method (just in case it is needed) and then
|
|
34
|
+
# defines #new to handle the multiton; #instance is provided
|
|
35
|
+
# as an alias for it.
|
|
36
|
+
#
|
|
37
|
+
#--
|
|
38
|
+
# So if you must have the old behavior, all you need do is re-alias
|
|
39
|
+
# #new to #create and privatize it.
|
|
40
|
+
#
|
|
41
|
+
# class SomeMultitonClass
|
|
42
|
+
# include Multiton
|
|
43
|
+
# alias_method :new, :create
|
|
44
|
+
# private :new
|
|
45
|
+
# ...
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# Then only #instance will be available for creating the Multiton.
|
|
49
|
+
#++
|
|
50
|
+
#
|
|
51
|
+
# == How It Works
|
|
52
|
+
#
|
|
53
|
+
# A pool of objects is searched for a previously cached object,
|
|
54
|
+
# if one is not found we construct one and cache it in the pool
|
|
55
|
+
# based on class and the args given to the contructor.
|
|
56
|
+
#
|
|
57
|
+
# A limitation of this approach is that it is impossible to
|
|
58
|
+
# detect if different blocks were given to a contructor (if it takes a
|
|
59
|
+
# block). So it is the constructor arguments _only_ which determine
|
|
60
|
+
# the uniqueness of an object. To workaround this, define the _class_
|
|
61
|
+
# method ::multiton_id.
|
|
62
|
+
#
|
|
63
|
+
# def Klass.multiton_id(*args, &block)
|
|
64
|
+
# # ...
|
|
65
|
+
# end
|
|
66
|
+
#
|
|
67
|
+
# Which should return a hash key used to identify the object being
|
|
68
|
+
# constructed as (not) unique.
|
|
69
|
+
#
|
|
70
|
+
# == Authors
|
|
71
|
+
#
|
|
72
|
+
# * Christoph Rippel
|
|
73
|
+
# * Thomas Sawyer
|
|
74
|
+
#
|
|
75
|
+
# = Copying
|
|
76
|
+
#
|
|
77
|
+
# Copyright (c) 2007 Christoph Rippel, Thomas Sawyer
|
|
78
|
+
#
|
|
79
|
+
# Ruby License
|
|
80
|
+
#
|
|
81
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
|
82
|
+
# software under the same terms as Ruby.
|
|
83
|
+
#
|
|
84
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
85
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
86
|
+
# FOR A PARTICULAR PURPOSE.
|
|
87
|
+
|
|
88
|
+
require 'thread'
|
|
89
|
+
|
|
90
|
+
# = Multiton
|
|
91
|
+
#
|
|
92
|
+
# Multiton design pattern ensures only one object is allocated for a given state.
|
|
93
|
+
#
|
|
94
|
+
# The 'multiton' pattern is similar to a singleton, but instead of only one
|
|
95
|
+
# instance, there are several similar instances. It is useful when you want to
|
|
96
|
+
# avoid constructing objects many times because of some huge expense (connecting
|
|
97
|
+
# to a database for example), require a set of similar but not identical
|
|
98
|
+
# objects, and cannot easily control how many times a contructor may be called.
|
|
99
|
+
#
|
|
100
|
+
# class SomeMultitonClass
|
|
101
|
+
# include Multiton
|
|
102
|
+
# attr :arg
|
|
103
|
+
# def initialize(arg)
|
|
104
|
+
# @arg = arg
|
|
105
|
+
# end
|
|
106
|
+
# end
|
|
107
|
+
#
|
|
108
|
+
# a = SomeMultitonClass.new(4)
|
|
109
|
+
# b = SomeMultitonClass.new(4) # a and b are same object
|
|
110
|
+
# c = SomeMultitonClass.new(2) # c is a different object
|
|
111
|
+
#
|
|
112
|
+
# == How It Works
|
|
113
|
+
#
|
|
114
|
+
# A pool of objects is searched for a previously cached object,
|
|
115
|
+
# if one is not found we construct one and cache it in the pool
|
|
116
|
+
# based on class and the args given to the contructor.
|
|
117
|
+
#
|
|
118
|
+
# A limitation of this approach is that it is impossible to
|
|
119
|
+
# detect if different blocks were given to a contructor (if it takes a
|
|
120
|
+
# block). So it is the constructor arguments _only_ which determine
|
|
121
|
+
# the uniqueness of an object. To workaround this, define the _class_
|
|
122
|
+
# method ::multiton_id.
|
|
123
|
+
#
|
|
124
|
+
# def Klass.multiton_id(*args, &block)
|
|
125
|
+
# # ...
|
|
126
|
+
# end
|
|
127
|
+
#
|
|
128
|
+
# Which should return a hash key used to identify the object being
|
|
129
|
+
# constructed as (not) unique.
|
|
130
|
+
|
|
131
|
+
module Multiton
|
|
132
|
+
|
|
133
|
+
# disable build-in copying methods
|
|
134
|
+
|
|
135
|
+
def clone
|
|
136
|
+
raise TypeError, "can't clone Multiton #{self}"
|
|
137
|
+
#self
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def dup
|
|
141
|
+
raise TypeError, "can't dup Multiton #{self}"
|
|
142
|
+
#self
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# default marshalling strategy
|
|
146
|
+
|
|
147
|
+
protected
|
|
148
|
+
|
|
149
|
+
def _dump(depth=-1)
|
|
150
|
+
Marshal.dump(@multiton_initializer)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Mutex to safely store multiton instances.
|
|
154
|
+
|
|
155
|
+
class InstanceMutex < Hash #:nodoc:
|
|
156
|
+
def initialize
|
|
157
|
+
@global = Mutex.new
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def initialized(arg)
|
|
161
|
+
store(arg, DummyMutex)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def (DummyMutex = Object.new).synchronize
|
|
165
|
+
yield
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def default(arg)
|
|
169
|
+
@global.synchronize{ fetch(arg){ store(arg, Mutex.new) } }
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Multiton can be included in another module, in which case that module effectively becomes
|
|
174
|
+
# a multiton behavior distributor too. This is why we propogate #included to the base module.
|
|
175
|
+
# by putting it in another module.
|
|
176
|
+
#
|
|
177
|
+
#--
|
|
178
|
+
# def append_features(mod)
|
|
179
|
+
# # help out people counting on transitive mixins
|
|
180
|
+
# unless mod.instance_of?(Class)
|
|
181
|
+
# raise TypeError, "Inclusion of Multiton in module #{mod}"
|
|
182
|
+
# end
|
|
183
|
+
# super
|
|
184
|
+
# end
|
|
185
|
+
#++
|
|
186
|
+
|
|
187
|
+
module Inclusive
|
|
188
|
+
private
|
|
189
|
+
def included(base)
|
|
190
|
+
class << base
|
|
191
|
+
#alias_method(:new!, :new) unless method_defined?(:new!)
|
|
192
|
+
# gracefully handle multiple inclusions of Multiton
|
|
193
|
+
unless include?(Multiton::MetaMethods)
|
|
194
|
+
alias_method :new!, :new
|
|
195
|
+
private :allocate #, :new
|
|
196
|
+
include Multiton::MetaMethods
|
|
197
|
+
|
|
198
|
+
if method_defined?(:marshal_dump)
|
|
199
|
+
undef_method :marshal_dump
|
|
200
|
+
warn "warning: marshal_dump was undefined since it is incompatible with the Multiton pattern"
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
extend Inclusive
|
|
208
|
+
|
|
209
|
+
#
|
|
210
|
+
|
|
211
|
+
module MetaMethods
|
|
212
|
+
|
|
213
|
+
include Inclusive
|
|
214
|
+
|
|
215
|
+
def instance(*e, &b)
|
|
216
|
+
arg = multiton_id(*e, &b)
|
|
217
|
+
multiton_instance.fetch(arg) do
|
|
218
|
+
multiton_mutex[arg].synchronize do
|
|
219
|
+
multiton_instance.fetch(arg) do
|
|
220
|
+
val = multiton_instance[arg] = new!(*e, &b) #new(*e, &b)
|
|
221
|
+
val.instance_variable_set(:@multiton_initializer, e, &b)
|
|
222
|
+
multiton_mutex.initialized(arg)
|
|
223
|
+
val
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
alias_method :new, :instance
|
|
229
|
+
|
|
230
|
+
def initialized?(*e, &b)
|
|
231
|
+
multiton_instance.key?(multiton_id(*e, &b))
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
protected
|
|
235
|
+
|
|
236
|
+
def multiton_instance
|
|
237
|
+
@multiton_instance ||= Hash.new
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def multiton_mutex
|
|
241
|
+
@multiton_mutex ||= InstanceMutex.new
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def reinitialize
|
|
245
|
+
multiton_instance.clear
|
|
246
|
+
multiton_mutex.clear
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def _load(str)
|
|
250
|
+
instance(*Marshal.load(str))
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
private
|
|
254
|
+
|
|
255
|
+
# Default method to to create a key to cache already constructed
|
|
256
|
+
# instances. In the use case MultitonClass.new(e), MultiClass.new(f)
|
|
257
|
+
# must be semantically equal if multiton_id(e).eql?(multiton_id(f))
|
|
258
|
+
# evaluates to true.
|
|
259
|
+
def multiton_id(*e, &b)
|
|
260
|
+
e
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def singleton_method_added(sym)
|
|
264
|
+
super
|
|
265
|
+
if (sym == :marshal_dump) & singleton_methods.include?('marshal_dump')
|
|
266
|
+
raise TypeError, "Don't use marshal_dump - rely on _dump and _load instead"
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
=begin
|
|
278
|
+
# TODO Convert this into a real test and/or benchmark.
|
|
279
|
+
|
|
280
|
+
if $0 == __FILE__
|
|
281
|
+
|
|
282
|
+
### Simple marshalling test #######
|
|
283
|
+
class A
|
|
284
|
+
def initialize(a,*e)
|
|
285
|
+
@e = a
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
include Multiton
|
|
289
|
+
begin
|
|
290
|
+
def self.marshal_dump(depth = -1)
|
|
291
|
+
end
|
|
292
|
+
rescue => mes
|
|
293
|
+
p mes
|
|
294
|
+
class << self; undef marshal_dump end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
C = Class.new(A.clone)
|
|
299
|
+
s = C.instance('a','b')
|
|
300
|
+
|
|
301
|
+
raise unless Marshal.load(Marshal.dump(s)) == s
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
### Interdependent initialization example and threading benchmark ###
|
|
305
|
+
|
|
306
|
+
class Regular_SymPlane
|
|
307
|
+
def self.multiton_id(*e)
|
|
308
|
+
a,b = e
|
|
309
|
+
(a+b - 1)*(a+b )/2 + (a > b ? a : b)
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def initialize(a,b)
|
|
313
|
+
klass = self.class
|
|
314
|
+
if a < b
|
|
315
|
+
@l = b > 0 ? klass.instance(a,b-1) : nil
|
|
316
|
+
@r = a > 0 ? klass.instance(a-1,b) : nil
|
|
317
|
+
else
|
|
318
|
+
@l = a > 0 ? klass.instance(a-1,b) : nil
|
|
319
|
+
@r = b > 0 ? klass.instance(a,b-1) : nil
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
include Multiton
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def nap
|
|
329
|
+
# Thread.pass
|
|
330
|
+
sleep(rand(0.01))
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
class SymPlane < Regular_SymPlane
|
|
334
|
+
@m = Mutex.new
|
|
335
|
+
@count = 0
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
class << SymPlane
|
|
339
|
+
attr_reader :count
|
|
340
|
+
def reinitialize
|
|
341
|
+
super
|
|
342
|
+
@m = Mutex.new
|
|
343
|
+
@count = 0
|
|
344
|
+
end
|
|
345
|
+
def inherited(sub_class)
|
|
346
|
+
super
|
|
347
|
+
sub_class.instance_eval { @m = Mutex.new; @count = 0 }
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def multiton_id(*e)
|
|
351
|
+
nap()
|
|
352
|
+
super
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
def new!(*e) # NOTICE!!!
|
|
356
|
+
super
|
|
357
|
+
ensure
|
|
358
|
+
nap()
|
|
359
|
+
@m.synchronize { p @count if (@count += 1) % 15 == 0 }
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def run(k)
|
|
363
|
+
threads = 0
|
|
364
|
+
max = k * (k+1) / 2
|
|
365
|
+
puts ""
|
|
366
|
+
while count() < max
|
|
367
|
+
Thread.new { threads+= 1; instance(rand(30),rand(30)) }
|
|
368
|
+
end
|
|
369
|
+
puts "\nThe simulation created #{threads} threads"
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
require 'benchmark'
|
|
375
|
+
include Benchmark
|
|
376
|
+
|
|
377
|
+
bmbm do |x|
|
|
378
|
+
x.report('Initialize 465 SymPlane instances') { SymPlane.run(30) }
|
|
379
|
+
x.report('Reinitialize ') do
|
|
380
|
+
sleep 3
|
|
381
|
+
SymPlane.reinitialize
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
end
|
|
386
|
+
=end
|