facets 2.1.3 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +14 -12
- data/CHANGES +45 -2
- data/NOTES +9 -7
- data/lib/core/facets/1stclassmethod.rb +15 -11
- data/lib/core/facets/array.rb +0 -1
- data/lib/core/facets/array/conjoin.rb +40 -8
- data/lib/core/facets/array/delete.rb +8 -2
- data/lib/core/facets/array/indexable.rb +30 -3
- data/lib/core/facets/array/merge.rb +11 -0
- data/lib/core/facets/array/only.rb +3 -3
- data/lib/core/facets/array/pad.rb +4 -46
- data/lib/core/facets/array/rotate.rb +4 -4
- data/lib/core/facets/array/select.rb +2 -0
- data/lib/core/facets/array/splice.rb +16 -2
- data/lib/core/facets/array/stackable.rb +6 -40
- data/lib/core/facets/binding.rb +3 -0
- data/lib/core/facets/binding/cflow.rb +10 -64
- data/lib/core/facets/binding/defined.rb +10 -0
- data/lib/core/facets/binding/eval.rb +10 -76
- data/lib/core/facets/binding/here.rb +9 -0
- data/lib/core/facets/binding/self.rb +10 -0
- data/lib/core/facets/binding/vars.rb +0 -45
- data/lib/core/facets/boolean.rb +31 -103
- data/lib/core/facets/class/descendents.rb +17 -44
- data/lib/core/facets/comparable/bound.rb +8 -70
- data/lib/core/facets/comparable/cmp.rb +12 -92
- data/lib/core/facets/conversion.rb +122 -321
- data/lib/core/facets/dir/multiglob.rb +0 -13
- data/lib/core/facets/dir/traverse.rb +61 -111
- data/lib/core/facets/enumerable.rb +4 -2
- data/lib/core/facets/enumerable/cartesian.rb +36 -85
- data/lib/core/facets/enumerable/collect.rb +64 -152
- data/lib/core/facets/enumerable/combination.rb +40 -42
- data/lib/core/facets/enumerable/count.rb +99 -174
- data/lib/core/facets/enumerable/each.rb +86 -0
- data/lib/core/facets/enumerable/mash.rb +58 -0
- data/lib/core/facets/enumerable/permutation.rb +39 -44
- data/lib/core/facets/enumerable/probability.rb +16 -90
- data/lib/core/facets/enumerable/split.rb +113 -0
- data/lib/core/facets/exception/detail.rb +1 -2
- data/lib/core/facets/facets.rb +3 -2
- data/lib/core/facets/file/read.rb +4 -59
- data/lib/core/facets/file/topath.rb +8 -96
- data/lib/core/facets/file/write.rb +21 -49
- data/lib/core/facets/filetest/root.rb +4 -3
- data/lib/core/facets/functor.rb +5 -43
- data/lib/core/facets/hash/at.rb +7 -37
- data/lib/core/facets/hash/delete.rb +9 -58
- data/lib/core/facets/hash/has_keys.rb +4 -43
- data/lib/core/facets/hash/insert.rb +5 -38
- data/lib/core/facets/hash/inverse.rb +2 -41
- data/lib/core/facets/hash/iterate.rb +4 -45
- data/lib/core/facets/hash/keyize.rb +24 -92
- data/lib/core/facets/hash/merge.rb +4 -38
- data/lib/core/facets/hash/new.rb +5 -38
- data/lib/core/facets/hash/op.rb +20 -66
- data/lib/core/facets/hash/rekey.rb +9 -87
- data/lib/core/facets/hash/select.rb +1 -1
- data/lib/core/facets/hash/slice.rb +42 -0
- data/lib/core/facets/hash/traverse.rb +6 -46
- data/lib/core/facets/hash/update.rb +27 -67
- data/lib/core/facets/hash/weave.rb +22 -42
- data/lib/core/facets/indexable.rb +42 -14
- data/lib/core/facets/integer/bitmask.rb +69 -106
- data/lib/core/facets/integer/factorial.rb +1 -44
- data/lib/core/facets/integer/multiples.rb +27 -22
- data/lib/core/facets/integer/of.rb +1 -33
- data/lib/core/facets/kernel.rb +4 -2
- data/lib/core/facets/kernel/ask.rb +15 -3
- data/lib/core/facets/kernel/callstack.rb +38 -69
- data/lib/core/facets/kernel/constant.rb +2 -38
- data/lib/core/facets/kernel/deepcopy.rb +3 -55
- data/lib/core/facets/kernel/dir.rb +2 -0
- data/lib/core/facets/kernel/ergo.rb +2 -2
- data/lib/core/facets/kernel/instance.rb +51 -120
- data/lib/core/facets/kernel/metaid.rb +35 -73
- data/lib/core/facets/kernel/object.rb +14 -39
- data/lib/core/facets/kernel/op_esc.rb +24 -2
- data/lib/core/facets/kernel/populate.rb +6 -69
- data/lib/core/facets/kernel/report.rb +28 -33
- data/lib/core/facets/kernel/require.rb +7 -21
- data/lib/core/facets/kernel/respond.rb +11 -1
- data/lib/core/facets/kernel/returning.rb +50 -0
- data/lib/core/facets/kernel/silence.rb +12 -24
- data/lib/core/facets/kernel/super.rb +12 -76
- data/lib/core/facets/kernel/tap.rb +25 -107
- data/lib/core/facets/kernel/val.rb +7 -46
- data/lib/core/facets/kernel/withattr.rb +6 -64
- data/lib/core/facets/matchdata/matchset.rb +8 -50
- data/lib/core/facets/module.rb +3 -1
- data/lib/core/facets/module/abstract.rb +9 -47
- data/lib/core/facets/module/alias.rb +11 -68
- data/lib/core/facets/module/attr.rb +36 -15
- data/lib/core/facets/module/cattr.rb +8 -76
- data/lib/core/facets/module/clone.rb +15 -66
- data/lib/core/facets/module/include.rb +54 -114
- data/lib/core/facets/module/methods.rb +15 -13
- data/lib/core/facets/module/modify.rb +20 -206
- data/lib/core/facets/module/name.rb +19 -83
- data/lib/core/facets/module/require.rb +48 -53
- data/lib/core/facets/module/traits.rb +74 -33
- data/lib/core/facets/nilclass/status.rb +25 -2
- data/lib/core/facets/numeric/round.rb +24 -89
- data/lib/core/facets/proc/bind.rb +16 -59
- data/lib/core/facets/proc/compose.rb +6 -40
- data/lib/core/facets/proc/fn.rb +2 -0
- data/lib/core/facets/range/combine.rb +15 -51
- data/lib/core/facets/range/overlap.rb +8 -64
- data/lib/core/facets/regexp/arity.rb +6 -41
- data/lib/core/facets/stackable.rb +43 -4
- data/lib/core/facets/string.rb +2 -0
- data/lib/core/facets/string/align.rb +45 -55
- data/lib/core/facets/string/blank.rb +2 -46
- data/lib/core/facets/string/bracket.rb +14 -87
- data/lib/core/facets/string/case.rb +45 -32
- data/lib/core/facets/string/crypt.rb +3 -40
- data/lib/core/facets/string/filter.rb +7 -49
- data/lib/core/facets/string/format.rb +24 -126
- data/lib/core/facets/string/indexable.rb +50 -133
- data/lib/core/facets/string/interpolate.rb +24 -59
- data/lib/core/facets/string/natcmp.rb +5 -39
- data/lib/core/facets/string/nchar.rb +37 -45
- data/lib/core/facets/string/op.rb +13 -0
- data/lib/core/facets/string/partitions.rb +38 -99
- data/lib/core/facets/string/range.rb +8 -49
- data/lib/core/facets/string/regesc.rb +9 -42
- data/lib/core/facets/string/scan.rb +6 -52
- data/lib/core/facets/string/splice.rb +8 -13
- data/lib/core/facets/string/tabs.rb +16 -153
- data/lib/core/facets/symbol.rb +3 -1
- data/lib/core/facets/symbol/chomp.rb +11 -29
- data/lib/core/facets/symbol/generate.rb +4 -43
- data/lib/core/facets/symbol/not.rb +13 -25
- data/lib/core/facets/symbol/shadow.rb +2 -40
- data/lib/core/facets/symbol/succ.rb +14 -13
- data/lib/core/facets/symbol/to_proc.rb +33 -28
- data/lib/core/facets/time.rb +1 -0
- data/lib/core/facets/time/change.rb +5 -38
- data/lib/core/facets/time/elapse.rb +2 -41
- data/lib/core/facets/time/stamp.rb +47 -0
- data/lib/core/facets/unboundmethod.rb +3 -0
- data/lib/core/facets/unboundmethod/arguments.rb +27 -4
- data/lib/core/facets/unboundmethod/name.rb +21 -7
- data/lib/methods/facets/enumerable/cluster_by.rb +1 -1
- data/lib/methods/facets/enumerable/collate.rb +1 -0
- data/lib/methods/facets/enumerable/divide.rb +1 -1
- data/lib/methods/facets/enumerable/each_by.rb +1 -1
- data/lib/methods/facets/enumerable/each_pair.rb +1 -1
- data/lib/methods/facets/enumerable/eachn.rb +1 -1
- data/lib/methods/facets/enumerable/graph.rb +1 -1
- data/lib/methods/facets/enumerable/group_by.rb +1 -1
- data/lib/methods/facets/enumerable/inject.rb +1 -0
- data/lib/methods/facets/enumerable/map_send.rb +1 -0
- data/lib/methods/facets/enumerable/modulate.rb +1 -0
- data/lib/methods/facets/enumerable/partition_by.rb +1 -1
- data/lib/methods/facets/hash/collate.rb +1 -1
- data/lib/methods/facets/hash/except.rb +1 -0
- data/lib/methods/facets/hash/graph.rb +1 -1
- data/lib/methods/facets/hash/mash.rb +1 -0
- data/lib/methods/facets/kernel/Bit.rb +1 -0
- data/lib/methods/facets/kernel/complete.rb +1 -1
- data/lib/methods/facets/kernel/here.rb +1 -1
- data/lib/methods/facets/kernel/non_nil.rb +1 -0
- data/lib/methods/facets/kernel/respond_with_value.rb +1 -0
- data/lib/methods/facets/kernel/with.rb +1 -1
- data/lib/methods/facets/module/class_def.rb +1 -0
- data/lib/methods/facets/string/camelcase.rb +1 -0
- data/lib/methods/facets/string/op_minus.rb +1 -0
- data/lib/methods/facets/string/snakecase.rb +1 -0
- data/lib/more/facets/attributes.rb +5 -5
- data/lib/more/facets/basicobject.rb +0 -62
- data/lib/{core/facets/continuation/create.rb → more/facets/continuation.rb} +4 -21
- data/lib/more/facets/duration.rb +534 -0
- data/lib/more/facets/lazy.rb +3 -3
- data/lib/more/facets/namespace.rb +23 -71
- data/lib/more/facets/rbsystem.rb +42 -8
- data/lib/more/facets/stylize.rb +6 -3
- data/lib/more/facets/thread.rb +55 -0
- data/meta/MANIFEST +49 -18
- data/meta/ROLLRC +1 -1
- data/meta/project.yaml +2 -2
- data/task/install +1 -1
- data/task/test/general +8 -2
- data/test/unit/array/test_pad.rb +30 -45
- data/test/unit/array/test_stackable.rb +14 -28
- data/test/unit/binding/test_cflow.rb +34 -49
- data/test/unit/binding/test_defined.rb +17 -0
- data/test/unit/binding/test_eval.rb +11 -39
- data/test/unit/binding/test_here.rb +17 -0
- data/test/unit/binding/test_self.rb +17 -0
- data/test/unit/binding/test_vars.rb +22 -37
- data/test/unit/class/test_descendents.rb +15 -30
- data/test/unit/class/test_initializer.rb +1 -8
- data/test/unit/comparable/test_bound.rb +38 -53
- data/test/unit/comparable/test_cmp.rb +45 -60
- data/test/unit/dir/test_traverse.rb +56 -0
- data/test/unit/enumerable/test_cartesian.rb +34 -47
- data/test/unit/enumerable/test_collect.rb +16 -125
- data/test/unit/enumerable/test_combination.rb +1 -8
- data/test/unit/enumerable/test_count.rb +51 -66
- data/test/unit/enumerable/test_each.rb +77 -0
- data/test/unit/enumerable/test_mash.rb +51 -0
- data/test/unit/enumerable/test_permutation.rb +1 -7
- data/test/unit/enumerable/test_probability.rb +42 -55
- data/test/unit/enumerable/test_split.rb +52 -0
- data/test/unit/exception/test_detail.rb +19 -0
- data/test/unit/file/test_read.rb +34 -0
- data/test/unit/file/test_topath.rb +17 -25
- data/test/unit/file/test_write.rb +6 -12
- data/test/unit/filetest/test_root.rb +14 -0
- data/test/unit/hash/test_at.rb +9 -21
- data/test/unit/hash/test_delete.rb +22 -37
- data/test/unit/hash/test_has_keys.rb +13 -28
- data/test/unit/hash/test_insert.rb +9 -23
- data/test/unit/hash/test_inverse.rb +11 -26
- data/test/unit/hash/test_iterate.rb +16 -31
- data/test/unit/hash/test_keyize.rb +40 -55
- data/test/unit/hash/test_merge.rb +10 -25
- data/test/unit/hash/test_new.rb +9 -24
- data/test/unit/hash/test_op.rb +1 -7
- data/test/unit/hash/test_rekey.rb +47 -62
- data/test/unit/hash/test_traverse.rb +17 -32
- data/test/unit/hash/test_update.rb +30 -45
- data/test/unit/hash/test_weave.rb +10 -23
- data/test/unit/integer/test_bitmask.rb +48 -44
- data/test/unit/integer/test_factorial.rb +11 -26
- data/test/unit/integer/test_multiples.rb +1 -5
- data/test/unit/integer/test_of.rb +14 -29
- data/test/unit/kernel/test_callstack.rb +13 -28
- data/test/unit/kernel/test_constant.rb +14 -28
- data/test/unit/kernel/test_deepcopy.rb +20 -35
- data/test/unit/kernel/test_instance.rb +46 -61
- data/test/unit/kernel/test_metaid.rb +42 -57
- data/test/unit/kernel/test_object.rb +14 -29
- data/test/unit/kernel/test_populate.rb +38 -53
- data/test/unit/kernel/test_report.rb +1 -7
- data/test/unit/kernel/test_returning.rb +16 -0
- data/test/unit/kernel/test_silence.rb +8 -23
- data/test/unit/kernel/test_super.rb +41 -56
- data/test/unit/kernel/test_tap.rb +15 -39
- data/test/unit/kernel/test_val.rb +7 -20
- data/test/unit/kernel/test_withattr.rb +29 -44
- data/test/unit/matchdata/test_matchset.rb +20 -35
- data/test/unit/module/test_abstract.rb +15 -30
- data/test/unit/module/test_alias.rb +32 -45
- data/test/unit/module/test_cattr.rb +39 -54
- data/test/unit/module/test_clone.rb +31 -43
- data/test/unit/module/test_include.rb +1 -35
- data/test/unit/module/test_modify.rb +102 -114
- data/test/unit/module/test_name.rb +1 -7
- data/test/unit/numeric/test_round.rb +46 -61
- data/test/unit/proc/test_bind.rb +29 -44
- data/test/unit/proc/test_compose.rb +20 -35
- data/test/unit/range/test_combine.rb +14 -29
- data/test/unit/range/test_overlap.rb +34 -51
- data/test/unit/regexp/test_arity.rb +14 -29
- data/test/unit/string/test_align.rb +13 -27
- data/test/unit/string/test_blank.rb +12 -27
- data/test/unit/string/test_bracket.rb +52 -67
- data/test/unit/string/test_case.rb +19 -38
- data/test/unit/string/test_crypt.rb +10 -25
- data/test/unit/string/test_filter.rb +1 -7
- data/test/unit/string/test_format.rb +2 -7
- data/test/unit/string/test_indexable.rb +54 -69
- data/test/unit/string/test_interpolate.rb +8 -21
- data/test/unit/string/test_natcmp.rb +11 -26
- data/test/unit/string/test_nchar.rb +1 -14
- data/test/unit/string/test_op.rb +14 -0
- data/test/unit/string/test_partitions.rb +39 -54
- data/test/unit/string/test_range.rb +17 -32
- data/test/unit/string/test_regesc.rb +1 -7
- data/test/unit/string/test_scan.rb +23 -38
- data/test/unit/string/test_stackable.rb +79 -98
- data/test/unit/string/test_tabs.rb +1 -7
- data/test/unit/symbol/test_chomp.rb +10 -21
- data/test/unit/symbol/test_generate.rb +7 -22
- data/test/unit/symbol/test_not.rb +10 -25
- data/test/unit/symbol/test_shadow.rb +8 -23
- data/test/unit/symbol/test_succ.rb +1 -7
- data/test/unit/symbol/test_to_proc.rb +1 -7
- data/test/unit/test_attributes.rb +1 -1
- data/test/unit/test_continuation.rb +13 -0
- data/test/unit/test_conversion.rb +1 -14
- data/test/unit/test_namespace.rb +30 -3
- data/test/unit/test_thread.rb +23 -0
- data/test/unit/time/test_change.rb +11 -26
- data/test/unit/time/test_elapse.rb +10 -25
- data/test/unit/time/test_stamp.rb +28 -0
- metadata +65 -25
- data/lib/core/facets/array/unzip.rb +0 -14
- data/lib/core/facets/continuation.rb +0 -1
- data/lib/core/facets/enumerable/collate.rb +0 -104
- data/lib/core/facets/kernel/require_esc.rb +0 -44
- data/lib/more/facets/mapsend.rb +0 -98
- data/lib/more/facets/pp_s.rb +0 -30
- data/log/history.rd +0 -38
- data/log/todo.rd +0 -4
- data/task/special/quickopts +0 -15
- data/test/unit/continuation/test_create.rb +0 -28
- data/test/unit/enumerable/test_collate.rb +0 -51
- data/test/unit/kernel/test_require_esc.rb +0 -29
- data/test/unit/test_mapsend.rb +0 -18
- data/test/unit/test_pp_s.rb +0 -17
data/lib/core/facets/string.rb
CHANGED
@@ -1,23 +1,27 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# String Alignment Extensions
|
4
|
-
#
|
5
|
-
# SUMMARY:
|
6
|
-
#
|
7
|
-
# String extensions for alignment.
|
8
|
-
#
|
9
|
-
# CREDIT:
|
10
|
-
#
|
11
|
-
# - Thomas Sawyer
|
12
|
-
|
13
1
|
class String
|
14
2
|
|
15
3
|
# Align a string to the right.
|
16
4
|
# The defualt alignment seperation is a new line ("/n")
|
17
5
|
# This can be changes as can be the padding string which
|
18
6
|
# defaults to a single space (' ').
|
7
|
+
#
|
8
|
+
# s = <<-EOS
|
9
|
+
# This is a test
|
10
|
+
# and
|
11
|
+
# so on
|
12
|
+
# EOS
|
13
|
+
#
|
14
|
+
# puts s.align_right(2)
|
15
|
+
#
|
16
|
+
# _produces_
|
17
|
+
#
|
18
|
+
# This is a test
|
19
|
+
# and
|
20
|
+
# so on
|
21
|
+
#
|
22
|
+
# CREDIT: Trans
|
19
23
|
|
20
|
-
def align_right(
|
24
|
+
def align_right(n, sep="\n", c=' ')
|
21
25
|
return rjust(n.to_i,c.to_s) if sep==nil
|
22
26
|
q = split(sep.to_s).collect { |line|
|
23
27
|
line.rjust(n.to_i,c.to_s)
|
@@ -26,11 +30,28 @@ class String
|
|
26
30
|
end
|
27
31
|
|
28
32
|
# Align a string to the left.
|
33
|
+
#
|
29
34
|
# The defualt alignment seperation is a new line ("/n")
|
30
35
|
# This can be changes as can be the padding string which
|
31
36
|
# defaults to a single space (' ').
|
37
|
+
#
|
38
|
+
# s = <<-EOS
|
39
|
+
# This is a test
|
40
|
+
# and
|
41
|
+
# so on
|
42
|
+
# EOS
|
43
|
+
#
|
44
|
+
# puts s.align_left(2)
|
45
|
+
#
|
46
|
+
# _produces_
|
47
|
+
#
|
48
|
+
# This is a test
|
49
|
+
# and
|
50
|
+
# so on
|
51
|
+
#
|
52
|
+
# CREDIT: Trans
|
32
53
|
|
33
|
-
def align_left(
|
54
|
+
def align_left(n, sep="\n", c=' ')
|
34
55
|
return ljust(n.to_i,c.to_s) if sep==nil
|
35
56
|
q = split(sep.to_s).collect { |line|
|
36
57
|
line.ljust(n.to_i,c.to_s)
|
@@ -40,11 +61,16 @@ class String
|
|
40
61
|
|
41
62
|
# Centers each line of a string.
|
42
63
|
#
|
64
|
+
# The defualt alignment seperation is a new line ("/n")
|
65
|
+
# This can be changed as can be the padding string which
|
66
|
+
# defaults to a single space (' ').
|
67
|
+
#
|
43
68
|
# s = <<-EOS
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
69
|
+
# This is a test
|
70
|
+
# and
|
71
|
+
# so on
|
47
72
|
# EOS
|
73
|
+
#
|
48
74
|
# puts s.align_center(14)
|
49
75
|
#
|
50
76
|
# _produces_
|
@@ -53,12 +79,9 @@ class String
|
|
53
79
|
# and
|
54
80
|
# so on
|
55
81
|
#
|
56
|
-
#
|
57
|
-
# The defualt alignment seperation is a new line ("/n")
|
58
|
-
# This can be changed as can be the padding string which
|
59
|
-
# defaults to a single space (' ').
|
82
|
+
# CREDIT: Trans
|
60
83
|
|
61
|
-
def align_center(
|
84
|
+
def align_center(n, sep="\n", c=' ')
|
62
85
|
return center(n.to_i,c.to_s) if sep==nil
|
63
86
|
q = split(sep.to_s).collect { |line|
|
64
87
|
line.center(n.to_i,c.to_s)
|
@@ -66,37 +89,4 @@ class String
|
|
66
89
|
q.join(sep.to_s)
|
67
90
|
end
|
68
91
|
|
69
|
-
# Deprecated alias for #align_center.
|
70
|
-
#alias_method :center_lines, :align_center
|
71
92
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
# _____ _
|
77
|
-
# |_ _|__ ___| |_
|
78
|
-
# | |/ _ \/ __| __|
|
79
|
-
# | | __/\__ \ |_
|
80
|
-
# |_|\___||___/\__|
|
81
|
-
#
|
82
|
-
=begin test
|
83
|
-
|
84
|
-
require 'test/unit'
|
85
|
-
|
86
|
-
class TestStringAlign < Test::Unit::TestCase
|
87
|
-
|
88
|
-
def test_align_right
|
89
|
-
assert_equal( " xxx", "xxx".align_right(9) )
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_align_left
|
93
|
-
assert_equal( "xxx ", "xxx".align_left(9) )
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_align_center
|
97
|
-
assert_equal( " xxx ", "xxx".align_center(9) )
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
=end
|
@@ -1,29 +1,11 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# String Blank Extension
|
4
|
-
#
|
5
|
-
# SUMMARY:
|
6
|
-
#
|
7
|
-
# String blank extensions.
|
8
|
-
#
|
9
|
-
# CREDIT:
|
10
|
-
#
|
11
|
-
# - Martin Pool
|
12
|
-
# - Alan Davies
|
13
|
-
# - Derek Lewis
|
14
|
-
# - Peter Vanbroekhoven
|
15
|
-
#
|
16
|
-
# TODO:
|
17
|
-
#
|
18
|
-
# - Does #blank? really belong here?
|
19
|
-
|
20
|
-
#
|
21
1
|
class String
|
22
2
|
|
23
3
|
# Is this string just whitespace?
|
24
4
|
#
|
25
5
|
# "abc".blank? #=> false
|
26
6
|
# " ".blank? #=> true
|
7
|
+
#
|
8
|
+
# CREDIT: ?
|
27
9
|
|
28
10
|
def blank?
|
29
11
|
self !~ /\S/
|
@@ -32,29 +14,3 @@ class String
|
|
32
14
|
alias whitespace? blank?
|
33
15
|
|
34
16
|
end
|
35
|
-
|
36
|
-
|
37
|
-
# _____ _
|
38
|
-
# |_ _|__ ___| |_
|
39
|
-
# | |/ _ \/ __| __|
|
40
|
-
# | | __/\__ \ |_
|
41
|
-
# |_|\___||___/\__|
|
42
|
-
#
|
43
|
-
=begin test
|
44
|
-
|
45
|
-
require 'test/unit'
|
46
|
-
|
47
|
-
class TestStringBlank < Test::Unit::TestCase
|
48
|
-
|
49
|
-
def test_blank?
|
50
|
-
assert( ! "xyz".blank? )
|
51
|
-
assert( " ".blank? )
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_whitespace?
|
55
|
-
assert( ! "xyz".whitespace? )
|
56
|
-
assert( " ".whitespace? )
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
=end
|
@@ -1,16 +1,3 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# String Bracketing Extensoins
|
4
|
-
#
|
5
|
-
# SUMMARY:
|
6
|
-
#
|
7
|
-
# String extension methods which enclose on unenclose a striong.
|
8
|
-
#
|
9
|
-
# CREDITS:
|
10
|
-
#
|
11
|
-
# - Thomas Sawyer
|
12
|
-
|
13
|
-
#
|
14
1
|
class String
|
15
2
|
|
16
3
|
BRA2KET = { '['=>']', '('=>')', '{'=>'}', '<'=>'>' }
|
@@ -21,6 +8,8 @@ class String
|
|
21
8
|
#
|
22
9
|
# "wrap me".bracket('{') #=> "{wrap me}"
|
23
10
|
# "wrap me".bracket('--','!') #=> "--wrap me!"
|
11
|
+
#
|
12
|
+
# CREDIT: Trans
|
24
13
|
|
25
14
|
def bracket(bra, ket=nil)
|
26
15
|
#ket = String.bra2ket[$&] if ! ket && /^[\[({<]$/ =~ bra
|
@@ -29,6 +18,8 @@ class String
|
|
29
18
|
end
|
30
19
|
|
31
20
|
# Inplace version of #braket.
|
21
|
+
#
|
22
|
+
# CREDIT: Trans
|
32
23
|
|
33
24
|
def bracket!(bra, ket=nil)
|
34
25
|
self.replace(bracket(bra, ket))
|
@@ -40,6 +31,8 @@ class String
|
|
40
31
|
#
|
41
32
|
# "{unwrap me}".debracket('{') #=> "unwrap me"
|
42
33
|
# "--unwrap me!".debracket('--','!') #=> "unwrap me!"
|
34
|
+
#
|
35
|
+
# CREDIT: Trans
|
43
36
|
|
44
37
|
def unbracket(bra=nil, ket=nil)
|
45
38
|
if bra
|
@@ -58,6 +51,8 @@ class String
|
|
58
51
|
end
|
59
52
|
|
60
53
|
# Inplace version of #debraket.
|
54
|
+
#
|
55
|
+
# CREDIT: Trans
|
61
56
|
|
62
57
|
def unbracket!(bra=nil, ket=nil)
|
63
58
|
self.replace( unbracket(bra, ket) )
|
@@ -68,6 +63,8 @@ class String
|
|
68
63
|
#
|
69
64
|
# "quote me".quote #=> "'quote me'"
|
70
65
|
# "quote me".quote(2) #=> "\"quote me\""
|
66
|
+
#
|
67
|
+
# CREDIT: Trans
|
71
68
|
|
72
69
|
def quote(type=:s)
|
73
70
|
case type.to_s.downcase
|
@@ -83,6 +80,10 @@ class String
|
|
83
80
|
end
|
84
81
|
|
85
82
|
# Remove quotes from string.
|
83
|
+
#
|
84
|
+
# "'hi'".dequite #=> "hi"
|
85
|
+
#
|
86
|
+
# CREDIT: Trans
|
86
87
|
|
87
88
|
def dequote
|
88
89
|
s = self.dup
|
@@ -100,77 +101,3 @@ class String
|
|
100
101
|
return s
|
101
102
|
end
|
102
103
|
end
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
# _____ _
|
107
|
-
# |_ _|__ ___| |_
|
108
|
-
# | |/ _ \/ __| __|
|
109
|
-
# | | __/\__ \ |_
|
110
|
-
# |_|\___||___/\__|
|
111
|
-
#
|
112
|
-
=begin test
|
113
|
-
|
114
|
-
require 'test/unit'
|
115
|
-
|
116
|
-
class TestStringBracket < Test::Unit::TestCase
|
117
|
-
|
118
|
-
def test_bracket
|
119
|
-
assert_equal( '#X#', 'X'.bracket('#') )
|
120
|
-
assert_equal( 'xX!', 'X'.bracket('x','!') )
|
121
|
-
assert_equal( '{X}', 'X'.bracket('{','}') )
|
122
|
-
assert_equal( '<X>', 'X'.bracket('<') )
|
123
|
-
assert_equal( '(X)', 'X'.bracket('(') )
|
124
|
-
assert_equal( '[X]', 'X'.bracket('[') )
|
125
|
-
assert_equal( '{X}', 'X'.bracket('{') )
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_braket!
|
129
|
-
a = 'X' ; a.bracket!('#')
|
130
|
-
assert_equal( '#X#', a )
|
131
|
-
a = 'X' ; a.bracket!('x','!')
|
132
|
-
assert_equal( 'xX!', a )
|
133
|
-
a = 'X' ; a.bracket!('{','}')
|
134
|
-
assert_equal( '{X}', a )
|
135
|
-
a = 'X' ; a.bracket!('<')
|
136
|
-
assert_equal( '<X>', a )
|
137
|
-
a = 'X' ; a.bracket!('(')
|
138
|
-
assert_equal( '(X)', a )
|
139
|
-
a = 'X' ; a.bracket!('[')
|
140
|
-
assert_equal( '[X]', a )
|
141
|
-
a = 'X' ; a.bracket!('{')
|
142
|
-
assert_equal( '{X}', a )
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_quote_01
|
146
|
-
a = "hi"
|
147
|
-
assert_raises( ArgumentError ) { a.quote(1,2) }
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_quote_02
|
151
|
-
a = "hi"
|
152
|
-
assert_equal( %{'hi'}, a.quote )
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_quote_03
|
156
|
-
a = "hi"
|
157
|
-
assert_equal( %{"hi"}, a.quote(:d) )
|
158
|
-
assert_equal( %{"hi"}, a.quote(:double) )
|
159
|
-
end
|
160
|
-
|
161
|
-
def test_quote_04
|
162
|
-
a = "hi"
|
163
|
-
assert_equal( %{'hi'}, a.quote(:s) )
|
164
|
-
assert_equal( %{'hi'}, a.quote(:single) )
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_quote_05
|
168
|
-
a = "hi"
|
169
|
-
assert_equal( %{`hi`}, a.quote(:b) )
|
170
|
-
assert_equal( %{`hi`}, a.quote(:back) )
|
171
|
-
end
|
172
|
-
|
173
|
-
end
|
174
|
-
|
175
|
-
=end
|
176
|
-
|
@@ -1,54 +1,31 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# String Case Extensions
|
4
|
-
#
|
5
|
-
# SUMMARY:
|
6
|
-
#
|
7
|
-
# String case-related extensions.
|
8
|
-
#
|
9
|
-
# CREDIT:
|
10
|
-
#
|
11
|
-
# - Phil Tomson
|
12
|
-
# - Thomas Sawyer
|
13
|
-
#
|
14
|
-
# TODO:
|
15
|
-
#
|
16
|
-
# - Perhaps add camelcase methods.
|
17
|
-
|
18
|
-
#
|
19
1
|
class String
|
20
2
|
|
21
|
-
# Title case.
|
22
|
-
|
23
|
-
def titlecase
|
24
|
-
gsub(/\b\w/){$&.upcase}
|
25
|
-
end
|
26
|
-
|
27
3
|
# Return true if the string is capitalized, otherwise false.
|
28
4
|
#
|
29
5
|
# "THIS".capitalized? #=> true
|
30
6
|
# "This".capitalized? #=> true
|
31
7
|
# "this".capitalized? #=> false
|
32
8
|
#
|
33
|
-
#
|
9
|
+
# CREDIT: Phil Tomson
|
34
10
|
|
35
11
|
def capitalized?
|
36
12
|
self =~ /^[A-Z]/
|
37
13
|
end
|
38
14
|
|
39
|
-
|
40
15
|
# Return true if the string is lowercase (downcase), otherwise false.
|
41
16
|
#
|
42
17
|
# "THIS".downcase? #=> false
|
43
18
|
# "This".downcase? #=> false
|
44
19
|
# "this".downcase? #=> true
|
45
20
|
#
|
46
|
-
#
|
21
|
+
# CREDIT: Phil Tomson
|
47
22
|
|
48
23
|
def downcase?
|
49
24
|
downcase == self
|
50
25
|
end
|
51
26
|
|
27
|
+
# Alias for #downcase? method.
|
28
|
+
alias_method :lowercase?, :downcase?
|
52
29
|
|
53
30
|
# Is the string upcase/uppercase?
|
54
31
|
#
|
@@ -56,16 +33,52 @@ class String
|
|
56
33
|
# "This".upcase? #=> false
|
57
34
|
# "this".upcase? #=> false
|
58
35
|
#
|
59
|
-
#
|
36
|
+
# CREDIT: Phil Tomson
|
60
37
|
|
61
38
|
def upcase?
|
62
39
|
self.upcase == self
|
63
40
|
end
|
64
41
|
|
65
|
-
# Alias for #downcase? method.
|
66
|
-
alias_method :lowercase?, :downcase?
|
67
|
-
|
68
42
|
# Alias for #upcase? method.
|
69
43
|
alias_method :uppercase?, :upcase?
|
70
|
-
end
|
71
44
|
|
45
|
+
# Title case.
|
46
|
+
#
|
47
|
+
# "this is a string".titlecase
|
48
|
+
# => "This Is A String"
|
49
|
+
#
|
50
|
+
# CREDIT: Eliazar Parra
|
51
|
+
|
52
|
+
def titlecase
|
53
|
+
gsub(/\b\w/){$&.upcase}
|
54
|
+
end
|
55
|
+
|
56
|
+
# Converts a string to camelcase. By default capitalization
|
57
|
+
# occurs on whitespace and underscores. By setting the first
|
58
|
+
# parameter to <tt>true</tt> the first character can also be
|
59
|
+
# captizlized. The second parameter can be assigned a valid
|
60
|
+
# Regualr Expression characeter set to determine which
|
61
|
+
# characters to match for capitalizing subsequent parts of
|
62
|
+
# the string.
|
63
|
+
#
|
64
|
+
# "this_is a test".camelcase #=> "thisIsATest"
|
65
|
+
# "this_is a test".camelcase(true) #=> "ThisIsATest"
|
66
|
+
# "this_is a test".camelcase(true, ' ') #=> "This_isATest"
|
67
|
+
#
|
68
|
+
# CREDIT: Trans
|
69
|
+
|
70
|
+
def camelcase(first=false, on='_\s')
|
71
|
+
if first
|
72
|
+
gsub(/(^|[#{on}]+)([A-Za-z])/){ $2.upcase }
|
73
|
+
else
|
74
|
+
gsub(/([#{on}]+)([A-Za-z])/){ $2.upcase }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Snakecase (underscore) string based on camelcase characteristics.
|
79
|
+
|
80
|
+
def snakecase #(camel_cased_word)
|
81
|
+
gsub(/([A-Z]+)([A-Z])/,'\1_\2').gsub(/([a-z])([A-Z])/,'\1_\2').downcase
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|