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,103 @@
|
|
|
1
|
+
# TITLE:
|
|
2
|
+
#
|
|
3
|
+
# String Comparison Extensions
|
|
4
|
+
#
|
|
5
|
+
# SUMMARY:
|
|
6
|
+
#
|
|
7
|
+
# String comparison extensions.
|
|
8
|
+
#
|
|
9
|
+
# AUTHORS:
|
|
10
|
+
#
|
|
11
|
+
# - Derek Lewis
|
|
12
|
+
|
|
13
|
+
#require 'facets/string/cmp'
|
|
14
|
+
#require 'facets/blank'
|
|
15
|
+
#require 'facets/string/natcmp'
|
|
16
|
+
|
|
17
|
+
class String
|
|
18
|
+
|
|
19
|
+
# A fuzzy matching mechanism. Returns a score from 0-1,
|
|
20
|
+
# based on the number of shared edges.
|
|
21
|
+
# To be effective, the strings must be of length 2 or greater.
|
|
22
|
+
#
|
|
23
|
+
# "Alexsander".fuzzy_match( "Aleksander" ) #=> 0.9
|
|
24
|
+
#
|
|
25
|
+
# The way it works:
|
|
26
|
+
#
|
|
27
|
+
# * Converts each string into a "graph like" object, with edges
|
|
28
|
+
# "alexsander" -> [ alexsander, alexsand, alexsan ... lexsand ... san ... an, etc ]
|
|
29
|
+
# "aleksander" -> [ aleksander, aleksand ... etc. ]
|
|
30
|
+
# * Perform match, then remove any subsets from this matched set (i.e. a hit
|
|
31
|
+
# on "san" is a subset of a hit on "sander")
|
|
32
|
+
# Above example, once reduced -> [ ale, sander ]
|
|
33
|
+
# * See's how many of the matches remain, and calculates a score based
|
|
34
|
+
# on how many matches, their length, and compare to the length of the
|
|
35
|
+
# larger of the two words.
|
|
36
|
+
#--
|
|
37
|
+
# Credit goes to Derek Lewis. Thanks Derek!
|
|
38
|
+
# Still a bit rough. Any suggestions for improvement are welcome.
|
|
39
|
+
#++
|
|
40
|
+
|
|
41
|
+
def similarity( str_in )
|
|
42
|
+
return 0 if str_in == nil
|
|
43
|
+
return 1 if self == str_in
|
|
44
|
+
|
|
45
|
+
# Make a graph of each word (okay, so its not a true graph, but is similar)
|
|
46
|
+
graph_A = Array.new
|
|
47
|
+
graph_B = Array.new
|
|
48
|
+
|
|
49
|
+
# "graph" self
|
|
50
|
+
last = self.length
|
|
51
|
+
(0..last).each do |ff|
|
|
52
|
+
loc = self.length
|
|
53
|
+
break if ff == last - 1
|
|
54
|
+
wordB = (1..(last-1)).to_a.reverse!
|
|
55
|
+
if (wordB != nil)
|
|
56
|
+
wordB.each do |ss|
|
|
57
|
+
break if ss == ff
|
|
58
|
+
graph_A.push( "#{self[ff..ss]}" )
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# "graph" input string
|
|
64
|
+
last = str_in.length
|
|
65
|
+
(0..last).each{ |ff|
|
|
66
|
+
loc = str_in.length
|
|
67
|
+
break if ff == last - 1
|
|
68
|
+
wordB = (1..(last-1)).to_a.reverse!
|
|
69
|
+
wordB.each do |ss|
|
|
70
|
+
break if ss == ff
|
|
71
|
+
graph_B.push( "#{str_in[ff..ss]}" )
|
|
72
|
+
end
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# count how many of these "graph edges" we have that are the same
|
|
76
|
+
matches = graph_A & graph_B
|
|
77
|
+
#matches = Array.new
|
|
78
|
+
#graph_A.each do |aa|
|
|
79
|
+
# matches.push( aa ) if( graph_B.include?( aa ) )
|
|
80
|
+
#end
|
|
81
|
+
|
|
82
|
+
# For eliminating subsets, we want to start with the smallest hits.
|
|
83
|
+
matches.sort!{|x,y| x.length <=> y.length}
|
|
84
|
+
|
|
85
|
+
# eliminate any subsets
|
|
86
|
+
mclone = matches.dup
|
|
87
|
+
mclone.each_index do |ii|
|
|
88
|
+
reg = Regexp.compile( Regexp.escape(mclone[ii]) )
|
|
89
|
+
count = 0.0
|
|
90
|
+
matches.each{|xx| count += 1 if xx =~ reg}
|
|
91
|
+
matches.delete(mclone[ii]) if count > 1
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
score = 0.0
|
|
95
|
+
matches.each{ |mm| score += mm.length }
|
|
96
|
+
self.length > str_in.length ? largest = self.length : largest = str_in.length
|
|
97
|
+
return score/largest
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
alias_method :fuzzy_match, :similarity
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# = TITLE:
|
|
2
|
+
# Soundex
|
|
3
|
+
#
|
|
4
|
+
# = SYNOPSIS:
|
|
5
|
+
# Ruby implementation of the Soundex algorithm,
|
|
6
|
+
# as described by Knuth in volume 3 of The Art
|
|
7
|
+
# of Computer Programming.
|
|
8
|
+
#
|
|
9
|
+
# = AUTHOR:
|
|
10
|
+
# Michael Neumann (neumann@s-direktnet.de)
|
|
11
|
+
|
|
12
|
+
module English # :nodoc:
|
|
13
|
+
|
|
14
|
+
# Ruby implementation of the Soundex algorithm,
|
|
15
|
+
# as described by Knuth in volume 3 of The Art
|
|
16
|
+
# of Computer Programming.
|
|
17
|
+
|
|
18
|
+
module Soundex
|
|
19
|
+
|
|
20
|
+
module_function
|
|
21
|
+
|
|
22
|
+
# Returns nil if the value couldn't be calculated b/c of
|
|
23
|
+
# empty-string or invalid character.
|
|
24
|
+
#
|
|
25
|
+
# "Ruby".soundex #=> "R100"
|
|
26
|
+
|
|
27
|
+
def soundex(str)
|
|
28
|
+
return nil if str.empty?
|
|
29
|
+
|
|
30
|
+
str = str.upcase
|
|
31
|
+
last_code = soundex_code(str[0,1])
|
|
32
|
+
soundex_code = str[0,1]
|
|
33
|
+
|
|
34
|
+
for index in 1...(str.size) do
|
|
35
|
+
return soundex_code if soundex_code.size == 4
|
|
36
|
+
|
|
37
|
+
code = soundex_code(str[index,1])
|
|
38
|
+
|
|
39
|
+
if code == "0" then
|
|
40
|
+
last_code = nil
|
|
41
|
+
elsif code == nil then
|
|
42
|
+
return nil
|
|
43
|
+
elsif code != last_code then
|
|
44
|
+
soundex_code += code
|
|
45
|
+
last_code = code
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
return soundex_code + "000"[0,4-soundex_code.size]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Support function for String#soundex.
|
|
53
|
+
# Returns code for a single character.
|
|
54
|
+
|
|
55
|
+
def soundex_code(char)
|
|
56
|
+
char.tr! "AEIOUYWHBPFVCSKGJQXZDTLMNR", "00000000111122222222334556"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end # module Soundex
|
|
60
|
+
|
|
61
|
+
end # module English
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class String
|
|
65
|
+
|
|
66
|
+
def soundex
|
|
67
|
+
English::Soundex.soundex(self)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
module English
|
|
2
|
+
|
|
3
|
+
module String
|
|
4
|
+
|
|
5
|
+
# Returns an array of characters.
|
|
6
|
+
#
|
|
7
|
+
# "abc 123".words #=> ["abc","123"]
|
|
8
|
+
#
|
|
9
|
+
def words
|
|
10
|
+
self.split(/\s+/)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Iterate through each word of a string.
|
|
14
|
+
#
|
|
15
|
+
# "a string".each_word { |word, range| ... }
|
|
16
|
+
#
|
|
17
|
+
def each_word_with_range(&yld)
|
|
18
|
+
rest_of_string = self
|
|
19
|
+
wordfind = /([-'\w]+)/
|
|
20
|
+
arity = yld.arity
|
|
21
|
+
offset = 0
|
|
22
|
+
while wmatch = wordfind.match(rest_of_string)
|
|
23
|
+
word = wmatch[0]
|
|
24
|
+
range = offset+wmatch.begin(0) ... offset+wmatch.end(0)
|
|
25
|
+
rest_of_string = wmatch.post_match
|
|
26
|
+
if arity == 1
|
|
27
|
+
yld.call(word)
|
|
28
|
+
else
|
|
29
|
+
yld.call(word, range)
|
|
30
|
+
end
|
|
31
|
+
offset = self.length - rest_of_string.length
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Filters out words from a string based on block test.
|
|
36
|
+
#
|
|
37
|
+
# "a string".word_filter { |word| word =~ /^a/ } #=> "string"
|
|
38
|
+
#
|
|
39
|
+
# CREDIT: George Moschovitis
|
|
40
|
+
|
|
41
|
+
def word_filter( &blk )
|
|
42
|
+
s = self.dup
|
|
43
|
+
s.word_filter!( &blk )
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# In place version of #word_filter.
|
|
47
|
+
#
|
|
48
|
+
# "a string".word_filter { |word| ... }
|
|
49
|
+
#
|
|
50
|
+
# CREDIT: George Moschovitis
|
|
51
|
+
|
|
52
|
+
def word_filter! #:yield:
|
|
53
|
+
rest_of_string = self
|
|
54
|
+
wordfind = /(\w+)/
|
|
55
|
+
offset = 0
|
|
56
|
+
while wmatch = wordfind.match(rest_of_string)
|
|
57
|
+
word = wmatch[0]
|
|
58
|
+
range = offset+wmatch.begin(0) ... offset+wmatch.end(0)
|
|
59
|
+
rest_of_string = wmatch.post_match
|
|
60
|
+
self[range] = yield( word ).to_s
|
|
61
|
+
offset = self.length - rest_of_string.length
|
|
62
|
+
end
|
|
63
|
+
self
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# TODO: This is alternateive from glue: worth providing?
|
|
67
|
+
#
|
|
68
|
+
# Enforces a maximum width of a string inside an
|
|
69
|
+
# html container. If the string exceeds this maximum width
|
|
70
|
+
# the string gets wraped.
|
|
71
|
+
#
|
|
72
|
+
# Not really useful, better use the CSS overflow: hidden
|
|
73
|
+
# functionality.
|
|
74
|
+
#
|
|
75
|
+
# === Input:
|
|
76
|
+
# the string to be wrapped
|
|
77
|
+
# the enforced width
|
|
78
|
+
# the separator used for wrapping
|
|
79
|
+
#
|
|
80
|
+
# === Output:
|
|
81
|
+
# the wrapped string
|
|
82
|
+
#
|
|
83
|
+
# === Example:
|
|
84
|
+
# text = "1111111111111111111111111111111111111111111"
|
|
85
|
+
# text = wrap(text, 10, " ")
|
|
86
|
+
# p text # => "1111111111 1111111111 1111111111"
|
|
87
|
+
#
|
|
88
|
+
# See the test cases to better understand the behaviour!
|
|
89
|
+
|
|
90
|
+
# def wrap(width = 20, separator = " ")
|
|
91
|
+
# re = /([^#{separator}]{1,#{width}})/
|
|
92
|
+
# scan(re).join(separator)
|
|
93
|
+
# end
|
|
94
|
+
|
|
95
|
+
# Word wrap a string not exceeding max width.
|
|
96
|
+
#
|
|
97
|
+
# puts "this is a test".word_wrap(4)
|
|
98
|
+
#
|
|
99
|
+
# _produces_
|
|
100
|
+
#
|
|
101
|
+
# this
|
|
102
|
+
# is a
|
|
103
|
+
# test
|
|
104
|
+
#
|
|
105
|
+
# CREDIT: Gavin Kistner
|
|
106
|
+
# CREDIT: Dayne Broderson
|
|
107
|
+
|
|
108
|
+
def word_wrap( col_width=80 )
|
|
109
|
+
self.dup.word_wrap!( col_width )
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# As with #word_wrap, but modifies the string in place.
|
|
113
|
+
#
|
|
114
|
+
# CREDIT: Gavin Kistner
|
|
115
|
+
# CREDIT: Dayne Broderson
|
|
116
|
+
|
|
117
|
+
def word_wrap!( col_width=80 )
|
|
118
|
+
self.gsub!( /(\S{#{col_width}})(?=\S)/, '\1 ' )
|
|
119
|
+
self.gsub!( /(.{1,#{col_width}})(?:\s+|$)/, "\\1\n" )
|
|
120
|
+
self
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# old def
|
|
124
|
+
|
|
125
|
+
#def word_wrap(max=80)
|
|
126
|
+
# c = dup
|
|
127
|
+
# c.word_wrap!(max)
|
|
128
|
+
# c
|
|
129
|
+
#end
|
|
130
|
+
|
|
131
|
+
#def word_wrap!(max=80)
|
|
132
|
+
# raise ArgumentError, "Wrap margin too low: #{n}" if max <= 2
|
|
133
|
+
# #gsub!( Regexp.new( "(.{1,#{max-1}}\\w)\\b\\s*" ), "\\1\n")
|
|
134
|
+
# gsub!( /(.{1,#{max-1}}\S)([ ]|\n)/, "\\1\n")
|
|
135
|
+
#end
|
|
136
|
+
|
|
137
|
+
# Returns a new string with all new lines removed from
|
|
138
|
+
# adjacent lines of text.
|
|
139
|
+
#
|
|
140
|
+
# s = "This is\na test.\n\nIt clumps\nlines of text."
|
|
141
|
+
# s.fold
|
|
142
|
+
#
|
|
143
|
+
# _produces_
|
|
144
|
+
#
|
|
145
|
+
# "This is a test.\n\nIt clumps lines of text. "
|
|
146
|
+
#
|
|
147
|
+
# One arguable flaw with this, that might need a fix:
|
|
148
|
+
# if the given string ends in a newline, it is replaced with
|
|
149
|
+
# a single space.
|
|
150
|
+
#
|
|
151
|
+
# CREDIT: Trans
|
|
152
|
+
|
|
153
|
+
def fold(ignore_indented=false)
|
|
154
|
+
ns = ''
|
|
155
|
+
i = 0
|
|
156
|
+
br = self.scan(/(\n\s*\n|\Z)/m) do |m|
|
|
157
|
+
b = $~.begin(1)
|
|
158
|
+
e = $~.end(1)
|
|
159
|
+
nl = $&
|
|
160
|
+
tx = slice(i...b)
|
|
161
|
+
if ignore_indented and slice(i...b) =~ /^[ ]+/
|
|
162
|
+
ns << tx
|
|
163
|
+
else
|
|
164
|
+
ns << tx.gsub(/[ ]*\n+/,' ')
|
|
165
|
+
end
|
|
166
|
+
ns << nl
|
|
167
|
+
i = e
|
|
168
|
+
end
|
|
169
|
+
ns
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Returns short abstract of long strings; not exceeding +range+
|
|
173
|
+
# characters. If range is an integer then the minimum is 20%
|
|
174
|
+
# of the maximum. The string is chopped at the nearest word
|
|
175
|
+
# if possible, and appended by +ellipsis+, which defaults
|
|
176
|
+
# to '...'.
|
|
177
|
+
#
|
|
178
|
+
# CREDIT: George Moschovitis
|
|
179
|
+
# CREDIT: Trans
|
|
180
|
+
#
|
|
181
|
+
def brief(range=76, ellipsis="...")
|
|
182
|
+
if Range===range
|
|
183
|
+
min = range.first
|
|
184
|
+
max = range.last
|
|
185
|
+
else
|
|
186
|
+
max = range
|
|
187
|
+
min = max - (max/5).to_i
|
|
188
|
+
range = min..max
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
if size > max
|
|
192
|
+
cut_at = rindex(/\b/, max) || max
|
|
193
|
+
cut_at = max if cut_at < min
|
|
194
|
+
xstring = slice(0, cut_at)
|
|
195
|
+
xstring.chomp(" ") + ellipsis
|
|
196
|
+
else
|
|
197
|
+
self
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class String #:nodoc:
|
|
207
|
+
include English::String
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
module English
|
|
2
|
+
#require 'english/inflect'
|
|
3
|
+
|
|
4
|
+
# The Style mixin provides a means of applying common alteration
|
|
5
|
+
# patterns to strings.
|
|
6
|
+
#
|
|
7
|
+
# This module is automatically mixed into the String class, but the
|
|
8
|
+
# Style mixin is designed in such a way that it can be mixed into
|
|
9
|
+
# any class that supports the #to_s method.
|
|
10
|
+
#
|
|
11
|
+
# Examples
|
|
12
|
+
#
|
|
13
|
+
# "SuperMan".snakecase #=> "super_man"
|
|
14
|
+
# "super_man".dasherize #=> "super-man"
|
|
15
|
+
#
|
|
16
|
+
#--
|
|
17
|
+
# TODO: Would like to provide a means for mixing into Symbol
|
|
18
|
+
# so that Symbols are returned. Use #to_self(obj)?
|
|
19
|
+
#
|
|
20
|
+
# TODO: With #pathize, is downcasing really needed? After all paths
|
|
21
|
+
# can have capitalize letters ;p
|
|
22
|
+
#
|
|
23
|
+
# TODO: With #methodize, is downcasing any but the first letter
|
|
24
|
+
# really needed? Desipite Matz preference methods can have
|
|
25
|
+
# capitalized letters.
|
|
26
|
+
#++
|
|
27
|
+
module Style
|
|
28
|
+
|
|
29
|
+
# Case Styles
|
|
30
|
+
# ______________________________________________________________
|
|
31
|
+
|
|
32
|
+
# Standard downcase style.
|
|
33
|
+
def downcase
|
|
34
|
+
to_s.downcase
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Same as downcase style.
|
|
38
|
+
def lowercase
|
|
39
|
+
to_s.downcase
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Standard upcase style.
|
|
43
|
+
def upcase
|
|
44
|
+
to_s.upcase
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Same as upcase style.
|
|
48
|
+
def uppercase
|
|
49
|
+
to_s.upcase
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Standard capitialize style.
|
|
53
|
+
#
|
|
54
|
+
# NOTE: I hate this definition and think it
|
|
55
|
+
# should be as capitalcase, but Matz
|
|
56
|
+
# doesn't agree.
|
|
57
|
+
def capitalize
|
|
58
|
+
to_s.capitalize
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Upcase first letter.
|
|
62
|
+
def capitalcase
|
|
63
|
+
str = to_s
|
|
64
|
+
str[0,1].upcase + str[1..-1]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Downcase first letter.
|
|
68
|
+
def uncapitalize
|
|
69
|
+
str = to_s
|
|
70
|
+
str[0,1].downcase + str[1..-1]
|
|
71
|
+
end
|
|
72
|
+
alias_method :uncapitalcase, :uncapitalize
|
|
73
|
+
|
|
74
|
+
# Convert a phrase into a title.
|
|
75
|
+
#
|
|
76
|
+
# "this is a string".titlecase
|
|
77
|
+
# => "This Is A String"
|
|
78
|
+
#
|
|
79
|
+
def titlecase
|
|
80
|
+
to_s.gsub(/\b\w/){$&.upcase}
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# The reverse of +camelize+. Converts a CamelCase word into an
|
|
84
|
+
# underscored form.
|
|
85
|
+
#
|
|
86
|
+
# This also changes '::' to '/', usefule for converting namespaces
|
|
87
|
+
# to pathnames.
|
|
88
|
+
#
|
|
89
|
+
# Examples
|
|
90
|
+
# "ActiveRecord".underscore #=> "active_record"
|
|
91
|
+
# "ActiveRecord::Errors".underscore #=> active_record/errors
|
|
92
|
+
#
|
|
93
|
+
def snakecase
|
|
94
|
+
to_s.
|
|
95
|
+
gsub(/::/, '/').
|
|
96
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
97
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
98
|
+
tr("-", "_").
|
|
99
|
+
downcase
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# By default, camelize converts strings to UpperCamelCase. If the
|
|
103
|
+
# argument to camelize is set to ":lower" then camelize produces
|
|
104
|
+
# lowerCamelCase.
|
|
105
|
+
#
|
|
106
|
+
# camelize will also convert '/' to '::' which is useful for
|
|
107
|
+
# converting paths to namespaces
|
|
108
|
+
#
|
|
109
|
+
# "active_record".camelcase #=> "ActiveRecord"
|
|
110
|
+
# "active_record/errors".camelcase #=> "ActiveRecord::Errors"
|
|
111
|
+
#
|
|
112
|
+
def camelcase
|
|
113
|
+
to_s.gsub(/\/(.?)/){ "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/){ $1.upcase }
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Convert a snakecase phrase into a camelcase phrase, making
|
|
117
|
+
# the first letter uppercase.
|
|
118
|
+
#def upper_camelcase
|
|
119
|
+
# to_s.gsub(/\/(.?)/){ "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/){ $1.upcase }
|
|
120
|
+
#end
|
|
121
|
+
|
|
122
|
+
# Convert a snakecase phrase into a camelcase phrase, but making
|
|
123
|
+
# the first letter lowercase.
|
|
124
|
+
#
|
|
125
|
+
# "active_record".camelcase #=> "activeRecord"
|
|
126
|
+
# "active_record/errors".camelcase #=> "activeRecord::Errors"
|
|
127
|
+
#
|
|
128
|
+
def subcamelcase
|
|
129
|
+
upper_camelcase.uncapitalize
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Numeral Styles
|
|
133
|
+
# ______________________________________________________________
|
|
134
|
+
|
|
135
|
+
# Ordinalize turns a number string into an ordinal string
|
|
136
|
+
# used to denote the position in an ordered sequence such
|
|
137
|
+
# as 1st, 2nd, 3rd, 4th.
|
|
138
|
+
#
|
|
139
|
+
# '1'.ordinalize # => "1st"
|
|
140
|
+
# '2'.ordinalize # => "2nd"
|
|
141
|
+
# '1002'.ordinalize # => "1002nd"
|
|
142
|
+
# '1003'.ordinalize # => "1003rd"
|
|
143
|
+
#
|
|
144
|
+
def ordinalize
|
|
145
|
+
number_string = to_s
|
|
146
|
+
if number_string =~ /\d{1,2}$/
|
|
147
|
+
number = $1.to_i
|
|
148
|
+
if (11..13).include?(number.to_i % 100)
|
|
149
|
+
r = "#{number}th"
|
|
150
|
+
else
|
|
151
|
+
r = case number.to_i % 10
|
|
152
|
+
when 1; "#{number}st"
|
|
153
|
+
when 2; "#{number}nd"
|
|
154
|
+
when 3; "#{number}rd"
|
|
155
|
+
else "#{number}th"
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
number_string.sub(/\d{1,2}$/, r)
|
|
159
|
+
else
|
|
160
|
+
number_string
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
#
|
|
165
|
+
# Obfuscation Styles
|
|
166
|
+
#______________________________________________________________
|
|
167
|
+
|
|
168
|
+
# Jumble string.
|
|
169
|
+
def jumble
|
|
170
|
+
j = ''
|
|
171
|
+
to_s.split(//).each_with_index{ |c,i| j << ( i % 2 == 0 ? c.downcase : c.upcase ) }
|
|
172
|
+
j
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Dresener Obfuscation.
|
|
176
|
+
#
|
|
177
|
+
# Scramble the inner characters of words leaving the text still readable
|
|
178
|
+
# (research at Cambridge University, code by KurtDresner).
|
|
179
|
+
#
|
|
180
|
+
# For example, the above text may result in:
|
|
181
|
+
#
|
|
182
|
+
# Srblamce the iennr cchrteaars of wodrs lvenaig the txet stlil rbeaadle
|
|
183
|
+
# (rreceash at Cbamigdre Uverintisy, cdoe by KrneruestDr?)
|
|
184
|
+
#
|
|
185
|
+
# :credit: Kurt Dresener
|
|
186
|
+
def dresner
|
|
187
|
+
to_s.gsub(/\B\w+\B/){$&.split(//).sort_by{rand}}
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
#
|
|
191
|
+
# Code Styles
|
|
192
|
+
# ______________________________________________________________
|
|
193
|
+
|
|
194
|
+
# Converts a module or method name into a unix pathname.
|
|
195
|
+
# This method is geared toward code reflection.
|
|
196
|
+
#
|
|
197
|
+
# "MyModule::MyClass".pathize #=> my_module/my_class
|
|
198
|
+
# "my_module__my_class".pathize #=> my_module/my_class
|
|
199
|
+
#
|
|
200
|
+
# TODO: Make sure that all scenarios return a valid unix path.
|
|
201
|
+
# TODO: Make sure it is revertible.
|
|
202
|
+
#
|
|
203
|
+
# See also #modulize, #methodize
|
|
204
|
+
def pathize
|
|
205
|
+
to_s.
|
|
206
|
+
gsub(/__/, '/').
|
|
207
|
+
gsub(/::/, '/').
|
|
208
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
209
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
210
|
+
tr("-", "_").
|
|
211
|
+
downcase
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Converts a module name into a valid method name.
|
|
215
|
+
# This method is geared toward code reflection.
|
|
216
|
+
#
|
|
217
|
+
# Examples
|
|
218
|
+
# "SuperMan".methodize #=> "super_man"
|
|
219
|
+
# "SuperMan::Errors".methodize #=> "super_man__errors
|
|
220
|
+
# "MyModule::MyClass".methodize #=> "my_module__my_class"
|
|
221
|
+
#
|
|
222
|
+
# See also #modulize, #pathize
|
|
223
|
+
def methodize
|
|
224
|
+
to_s.
|
|
225
|
+
gsub(/\//, '__').
|
|
226
|
+
gsub(/::/, '__').
|
|
227
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
228
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
229
|
+
tr("-", "_").
|
|
230
|
+
downcase
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Converts a pathized or methodized string into a valid ruby
|
|
234
|
+
# class or module name. This method is geared toward code
|
|
235
|
+
# reflection.
|
|
236
|
+
#
|
|
237
|
+
# "camel_case".modulize #=> "CamelCase"
|
|
238
|
+
# "camel/case".modulize #=> "Camel::Case"
|
|
239
|
+
# "my_module__my_path".modulize #=> "MyModule::MyPath"
|
|
240
|
+
#
|
|
241
|
+
# See also #methodize, #pathize
|
|
242
|
+
def modulize
|
|
243
|
+
to_s.
|
|
244
|
+
gsub(/__(.?)/){ "::#{$1.upcase}" }.
|
|
245
|
+
gsub(/\/(.?)/){ "::#{$1.upcase}" }.
|
|
246
|
+
gsub(/(?:_+)([a-z])/){ $1.upcase }.
|
|
247
|
+
gsub(/(^|\s+)([a-z])/){ $1 + $2.upcase }
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Removes the module part from a modularized expression.
|
|
251
|
+
#
|
|
252
|
+
# "English::Style".demodulize #=> "Style"
|
|
253
|
+
# "Style".demodulize #=> "Style"
|
|
254
|
+
#
|
|
255
|
+
def demodulize
|
|
256
|
+
to_s.gsub(/^.*::/, '')
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
# TODO: Replace this will dynamic generate of inplace methods.
|
|
262
|
+
# But only when the base defines #replace (?) Need to
|
|
263
|
+
# think about this some more.
|
|
264
|
+
module Style::Replace
|
|
265
|
+
def downcase! ; replace(downcase) ; end
|
|
266
|
+
def lowercase! ; replace(lowercase) ; end
|
|
267
|
+
def upcase! ; replace(upcase) ; end
|
|
268
|
+
def uppercase! ; replace(uppercase) ; end
|
|
269
|
+
def capitalize! ; replace(capitalize) ; end
|
|
270
|
+
def capitalcase! ; replace(capitalcase) ; end
|
|
271
|
+
def uncapitalcase! ; replace(uncapitalcase) ; end
|
|
272
|
+
def titlecase! ; replace(titlecase) ; end
|
|
273
|
+
def snakecase! ; replace(snakecase) ; end
|
|
274
|
+
def camelcase! ; replace(camelcase) ; end
|
|
275
|
+
def subcamelcase! ; replace(subcamelcase) ; end
|
|
276
|
+
|
|
277
|
+
def ordinalize! ; replace(ordinalize) ; end
|
|
278
|
+
|
|
279
|
+
def jumble! ; replace(jumble) ; end
|
|
280
|
+
def dresner! ; replace(dresner) ; end
|
|
281
|
+
|
|
282
|
+
def pathize! ; replace(pathize) ; end
|
|
283
|
+
def methodize! ; replace(methodize) ; end
|
|
284
|
+
def modulize! ; replace(modulize) ; end
|
|
285
|
+
def demodulize! ; replace(demodulize) ; end
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
class String #:nodoc:
|
|
291
|
+
include English::Style
|
|
292
|
+
include English::Style::Replace
|
|
293
|
+
end
|
|
294
|
+
|