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.
Files changed (303) hide show
  1. data/AUTHORS +14 -12
  2. data/CHANGES +45 -2
  3. data/NOTES +9 -7
  4. data/lib/core/facets/1stclassmethod.rb +15 -11
  5. data/lib/core/facets/array.rb +0 -1
  6. data/lib/core/facets/array/conjoin.rb +40 -8
  7. data/lib/core/facets/array/delete.rb +8 -2
  8. data/lib/core/facets/array/indexable.rb +30 -3
  9. data/lib/core/facets/array/merge.rb +11 -0
  10. data/lib/core/facets/array/only.rb +3 -3
  11. data/lib/core/facets/array/pad.rb +4 -46
  12. data/lib/core/facets/array/rotate.rb +4 -4
  13. data/lib/core/facets/array/select.rb +2 -0
  14. data/lib/core/facets/array/splice.rb +16 -2
  15. data/lib/core/facets/array/stackable.rb +6 -40
  16. data/lib/core/facets/binding.rb +3 -0
  17. data/lib/core/facets/binding/cflow.rb +10 -64
  18. data/lib/core/facets/binding/defined.rb +10 -0
  19. data/lib/core/facets/binding/eval.rb +10 -76
  20. data/lib/core/facets/binding/here.rb +9 -0
  21. data/lib/core/facets/binding/self.rb +10 -0
  22. data/lib/core/facets/binding/vars.rb +0 -45
  23. data/lib/core/facets/boolean.rb +31 -103
  24. data/lib/core/facets/class/descendents.rb +17 -44
  25. data/lib/core/facets/comparable/bound.rb +8 -70
  26. data/lib/core/facets/comparable/cmp.rb +12 -92
  27. data/lib/core/facets/conversion.rb +122 -321
  28. data/lib/core/facets/dir/multiglob.rb +0 -13
  29. data/lib/core/facets/dir/traverse.rb +61 -111
  30. data/lib/core/facets/enumerable.rb +4 -2
  31. data/lib/core/facets/enumerable/cartesian.rb +36 -85
  32. data/lib/core/facets/enumerable/collect.rb +64 -152
  33. data/lib/core/facets/enumerable/combination.rb +40 -42
  34. data/lib/core/facets/enumerable/count.rb +99 -174
  35. data/lib/core/facets/enumerable/each.rb +86 -0
  36. data/lib/core/facets/enumerable/mash.rb +58 -0
  37. data/lib/core/facets/enumerable/permutation.rb +39 -44
  38. data/lib/core/facets/enumerable/probability.rb +16 -90
  39. data/lib/core/facets/enumerable/split.rb +113 -0
  40. data/lib/core/facets/exception/detail.rb +1 -2
  41. data/lib/core/facets/facets.rb +3 -2
  42. data/lib/core/facets/file/read.rb +4 -59
  43. data/lib/core/facets/file/topath.rb +8 -96
  44. data/lib/core/facets/file/write.rb +21 -49
  45. data/lib/core/facets/filetest/root.rb +4 -3
  46. data/lib/core/facets/functor.rb +5 -43
  47. data/lib/core/facets/hash/at.rb +7 -37
  48. data/lib/core/facets/hash/delete.rb +9 -58
  49. data/lib/core/facets/hash/has_keys.rb +4 -43
  50. data/lib/core/facets/hash/insert.rb +5 -38
  51. data/lib/core/facets/hash/inverse.rb +2 -41
  52. data/lib/core/facets/hash/iterate.rb +4 -45
  53. data/lib/core/facets/hash/keyize.rb +24 -92
  54. data/lib/core/facets/hash/merge.rb +4 -38
  55. data/lib/core/facets/hash/new.rb +5 -38
  56. data/lib/core/facets/hash/op.rb +20 -66
  57. data/lib/core/facets/hash/rekey.rb +9 -87
  58. data/lib/core/facets/hash/select.rb +1 -1
  59. data/lib/core/facets/hash/slice.rb +42 -0
  60. data/lib/core/facets/hash/traverse.rb +6 -46
  61. data/lib/core/facets/hash/update.rb +27 -67
  62. data/lib/core/facets/hash/weave.rb +22 -42
  63. data/lib/core/facets/indexable.rb +42 -14
  64. data/lib/core/facets/integer/bitmask.rb +69 -106
  65. data/lib/core/facets/integer/factorial.rb +1 -44
  66. data/lib/core/facets/integer/multiples.rb +27 -22
  67. data/lib/core/facets/integer/of.rb +1 -33
  68. data/lib/core/facets/kernel.rb +4 -2
  69. data/lib/core/facets/kernel/ask.rb +15 -3
  70. data/lib/core/facets/kernel/callstack.rb +38 -69
  71. data/lib/core/facets/kernel/constant.rb +2 -38
  72. data/lib/core/facets/kernel/deepcopy.rb +3 -55
  73. data/lib/core/facets/kernel/dir.rb +2 -0
  74. data/lib/core/facets/kernel/ergo.rb +2 -2
  75. data/lib/core/facets/kernel/instance.rb +51 -120
  76. data/lib/core/facets/kernel/metaid.rb +35 -73
  77. data/lib/core/facets/kernel/object.rb +14 -39
  78. data/lib/core/facets/kernel/op_esc.rb +24 -2
  79. data/lib/core/facets/kernel/populate.rb +6 -69
  80. data/lib/core/facets/kernel/report.rb +28 -33
  81. data/lib/core/facets/kernel/require.rb +7 -21
  82. data/lib/core/facets/kernel/respond.rb +11 -1
  83. data/lib/core/facets/kernel/returning.rb +50 -0
  84. data/lib/core/facets/kernel/silence.rb +12 -24
  85. data/lib/core/facets/kernel/super.rb +12 -76
  86. data/lib/core/facets/kernel/tap.rb +25 -107
  87. data/lib/core/facets/kernel/val.rb +7 -46
  88. data/lib/core/facets/kernel/withattr.rb +6 -64
  89. data/lib/core/facets/matchdata/matchset.rb +8 -50
  90. data/lib/core/facets/module.rb +3 -1
  91. data/lib/core/facets/module/abstract.rb +9 -47
  92. data/lib/core/facets/module/alias.rb +11 -68
  93. data/lib/core/facets/module/attr.rb +36 -15
  94. data/lib/core/facets/module/cattr.rb +8 -76
  95. data/lib/core/facets/module/clone.rb +15 -66
  96. data/lib/core/facets/module/include.rb +54 -114
  97. data/lib/core/facets/module/methods.rb +15 -13
  98. data/lib/core/facets/module/modify.rb +20 -206
  99. data/lib/core/facets/module/name.rb +19 -83
  100. data/lib/core/facets/module/require.rb +48 -53
  101. data/lib/core/facets/module/traits.rb +74 -33
  102. data/lib/core/facets/nilclass/status.rb +25 -2
  103. data/lib/core/facets/numeric/round.rb +24 -89
  104. data/lib/core/facets/proc/bind.rb +16 -59
  105. data/lib/core/facets/proc/compose.rb +6 -40
  106. data/lib/core/facets/proc/fn.rb +2 -0
  107. data/lib/core/facets/range/combine.rb +15 -51
  108. data/lib/core/facets/range/overlap.rb +8 -64
  109. data/lib/core/facets/regexp/arity.rb +6 -41
  110. data/lib/core/facets/stackable.rb +43 -4
  111. data/lib/core/facets/string.rb +2 -0
  112. data/lib/core/facets/string/align.rb +45 -55
  113. data/lib/core/facets/string/blank.rb +2 -46
  114. data/lib/core/facets/string/bracket.rb +14 -87
  115. data/lib/core/facets/string/case.rb +45 -32
  116. data/lib/core/facets/string/crypt.rb +3 -40
  117. data/lib/core/facets/string/filter.rb +7 -49
  118. data/lib/core/facets/string/format.rb +24 -126
  119. data/lib/core/facets/string/indexable.rb +50 -133
  120. data/lib/core/facets/string/interpolate.rb +24 -59
  121. data/lib/core/facets/string/natcmp.rb +5 -39
  122. data/lib/core/facets/string/nchar.rb +37 -45
  123. data/lib/core/facets/string/op.rb +13 -0
  124. data/lib/core/facets/string/partitions.rb +38 -99
  125. data/lib/core/facets/string/range.rb +8 -49
  126. data/lib/core/facets/string/regesc.rb +9 -42
  127. data/lib/core/facets/string/scan.rb +6 -52
  128. data/lib/core/facets/string/splice.rb +8 -13
  129. data/lib/core/facets/string/tabs.rb +16 -153
  130. data/lib/core/facets/symbol.rb +3 -1
  131. data/lib/core/facets/symbol/chomp.rb +11 -29
  132. data/lib/core/facets/symbol/generate.rb +4 -43
  133. data/lib/core/facets/symbol/not.rb +13 -25
  134. data/lib/core/facets/symbol/shadow.rb +2 -40
  135. data/lib/core/facets/symbol/succ.rb +14 -13
  136. data/lib/core/facets/symbol/to_proc.rb +33 -28
  137. data/lib/core/facets/time.rb +1 -0
  138. data/lib/core/facets/time/change.rb +5 -38
  139. data/lib/core/facets/time/elapse.rb +2 -41
  140. data/lib/core/facets/time/stamp.rb +47 -0
  141. data/lib/core/facets/unboundmethod.rb +3 -0
  142. data/lib/core/facets/unboundmethod/arguments.rb +27 -4
  143. data/lib/core/facets/unboundmethod/name.rb +21 -7
  144. data/lib/methods/facets/enumerable/cluster_by.rb +1 -1
  145. data/lib/methods/facets/enumerable/collate.rb +1 -0
  146. data/lib/methods/facets/enumerable/divide.rb +1 -1
  147. data/lib/methods/facets/enumerable/each_by.rb +1 -1
  148. data/lib/methods/facets/enumerable/each_pair.rb +1 -1
  149. data/lib/methods/facets/enumerable/eachn.rb +1 -1
  150. data/lib/methods/facets/enumerable/graph.rb +1 -1
  151. data/lib/methods/facets/enumerable/group_by.rb +1 -1
  152. data/lib/methods/facets/enumerable/inject.rb +1 -0
  153. data/lib/methods/facets/enumerable/map_send.rb +1 -0
  154. data/lib/methods/facets/enumerable/modulate.rb +1 -0
  155. data/lib/methods/facets/enumerable/partition_by.rb +1 -1
  156. data/lib/methods/facets/hash/collate.rb +1 -1
  157. data/lib/methods/facets/hash/except.rb +1 -0
  158. data/lib/methods/facets/hash/graph.rb +1 -1
  159. data/lib/methods/facets/hash/mash.rb +1 -0
  160. data/lib/methods/facets/kernel/Bit.rb +1 -0
  161. data/lib/methods/facets/kernel/complete.rb +1 -1
  162. data/lib/methods/facets/kernel/here.rb +1 -1
  163. data/lib/methods/facets/kernel/non_nil.rb +1 -0
  164. data/lib/methods/facets/kernel/respond_with_value.rb +1 -0
  165. data/lib/methods/facets/kernel/with.rb +1 -1
  166. data/lib/methods/facets/module/class_def.rb +1 -0
  167. data/lib/methods/facets/string/camelcase.rb +1 -0
  168. data/lib/methods/facets/string/op_minus.rb +1 -0
  169. data/lib/methods/facets/string/snakecase.rb +1 -0
  170. data/lib/more/facets/attributes.rb +5 -5
  171. data/lib/more/facets/basicobject.rb +0 -62
  172. data/lib/{core/facets/continuation/create.rb → more/facets/continuation.rb} +4 -21
  173. data/lib/more/facets/duration.rb +534 -0
  174. data/lib/more/facets/lazy.rb +3 -3
  175. data/lib/more/facets/namespace.rb +23 -71
  176. data/lib/more/facets/rbsystem.rb +42 -8
  177. data/lib/more/facets/stylize.rb +6 -3
  178. data/lib/more/facets/thread.rb +55 -0
  179. data/meta/MANIFEST +49 -18
  180. data/meta/ROLLRC +1 -1
  181. data/meta/project.yaml +2 -2
  182. data/task/install +1 -1
  183. data/task/test/general +8 -2
  184. data/test/unit/array/test_pad.rb +30 -45
  185. data/test/unit/array/test_stackable.rb +14 -28
  186. data/test/unit/binding/test_cflow.rb +34 -49
  187. data/test/unit/binding/test_defined.rb +17 -0
  188. data/test/unit/binding/test_eval.rb +11 -39
  189. data/test/unit/binding/test_here.rb +17 -0
  190. data/test/unit/binding/test_self.rb +17 -0
  191. data/test/unit/binding/test_vars.rb +22 -37
  192. data/test/unit/class/test_descendents.rb +15 -30
  193. data/test/unit/class/test_initializer.rb +1 -8
  194. data/test/unit/comparable/test_bound.rb +38 -53
  195. data/test/unit/comparable/test_cmp.rb +45 -60
  196. data/test/unit/dir/test_traverse.rb +56 -0
  197. data/test/unit/enumerable/test_cartesian.rb +34 -47
  198. data/test/unit/enumerable/test_collect.rb +16 -125
  199. data/test/unit/enumerable/test_combination.rb +1 -8
  200. data/test/unit/enumerable/test_count.rb +51 -66
  201. data/test/unit/enumerable/test_each.rb +77 -0
  202. data/test/unit/enumerable/test_mash.rb +51 -0
  203. data/test/unit/enumerable/test_permutation.rb +1 -7
  204. data/test/unit/enumerable/test_probability.rb +42 -55
  205. data/test/unit/enumerable/test_split.rb +52 -0
  206. data/test/unit/exception/test_detail.rb +19 -0
  207. data/test/unit/file/test_read.rb +34 -0
  208. data/test/unit/file/test_topath.rb +17 -25
  209. data/test/unit/file/test_write.rb +6 -12
  210. data/test/unit/filetest/test_root.rb +14 -0
  211. data/test/unit/hash/test_at.rb +9 -21
  212. data/test/unit/hash/test_delete.rb +22 -37
  213. data/test/unit/hash/test_has_keys.rb +13 -28
  214. data/test/unit/hash/test_insert.rb +9 -23
  215. data/test/unit/hash/test_inverse.rb +11 -26
  216. data/test/unit/hash/test_iterate.rb +16 -31
  217. data/test/unit/hash/test_keyize.rb +40 -55
  218. data/test/unit/hash/test_merge.rb +10 -25
  219. data/test/unit/hash/test_new.rb +9 -24
  220. data/test/unit/hash/test_op.rb +1 -7
  221. data/test/unit/hash/test_rekey.rb +47 -62
  222. data/test/unit/hash/test_traverse.rb +17 -32
  223. data/test/unit/hash/test_update.rb +30 -45
  224. data/test/unit/hash/test_weave.rb +10 -23
  225. data/test/unit/integer/test_bitmask.rb +48 -44
  226. data/test/unit/integer/test_factorial.rb +11 -26
  227. data/test/unit/integer/test_multiples.rb +1 -5
  228. data/test/unit/integer/test_of.rb +14 -29
  229. data/test/unit/kernel/test_callstack.rb +13 -28
  230. data/test/unit/kernel/test_constant.rb +14 -28
  231. data/test/unit/kernel/test_deepcopy.rb +20 -35
  232. data/test/unit/kernel/test_instance.rb +46 -61
  233. data/test/unit/kernel/test_metaid.rb +42 -57
  234. data/test/unit/kernel/test_object.rb +14 -29
  235. data/test/unit/kernel/test_populate.rb +38 -53
  236. data/test/unit/kernel/test_report.rb +1 -7
  237. data/test/unit/kernel/test_returning.rb +16 -0
  238. data/test/unit/kernel/test_silence.rb +8 -23
  239. data/test/unit/kernel/test_super.rb +41 -56
  240. data/test/unit/kernel/test_tap.rb +15 -39
  241. data/test/unit/kernel/test_val.rb +7 -20
  242. data/test/unit/kernel/test_withattr.rb +29 -44
  243. data/test/unit/matchdata/test_matchset.rb +20 -35
  244. data/test/unit/module/test_abstract.rb +15 -30
  245. data/test/unit/module/test_alias.rb +32 -45
  246. data/test/unit/module/test_cattr.rb +39 -54
  247. data/test/unit/module/test_clone.rb +31 -43
  248. data/test/unit/module/test_include.rb +1 -35
  249. data/test/unit/module/test_modify.rb +102 -114
  250. data/test/unit/module/test_name.rb +1 -7
  251. data/test/unit/numeric/test_round.rb +46 -61
  252. data/test/unit/proc/test_bind.rb +29 -44
  253. data/test/unit/proc/test_compose.rb +20 -35
  254. data/test/unit/range/test_combine.rb +14 -29
  255. data/test/unit/range/test_overlap.rb +34 -51
  256. data/test/unit/regexp/test_arity.rb +14 -29
  257. data/test/unit/string/test_align.rb +13 -27
  258. data/test/unit/string/test_blank.rb +12 -27
  259. data/test/unit/string/test_bracket.rb +52 -67
  260. data/test/unit/string/test_case.rb +19 -38
  261. data/test/unit/string/test_crypt.rb +10 -25
  262. data/test/unit/string/test_filter.rb +1 -7
  263. data/test/unit/string/test_format.rb +2 -7
  264. data/test/unit/string/test_indexable.rb +54 -69
  265. data/test/unit/string/test_interpolate.rb +8 -21
  266. data/test/unit/string/test_natcmp.rb +11 -26
  267. data/test/unit/string/test_nchar.rb +1 -14
  268. data/test/unit/string/test_op.rb +14 -0
  269. data/test/unit/string/test_partitions.rb +39 -54
  270. data/test/unit/string/test_range.rb +17 -32
  271. data/test/unit/string/test_regesc.rb +1 -7
  272. data/test/unit/string/test_scan.rb +23 -38
  273. data/test/unit/string/test_stackable.rb +79 -98
  274. data/test/unit/string/test_tabs.rb +1 -7
  275. data/test/unit/symbol/test_chomp.rb +10 -21
  276. data/test/unit/symbol/test_generate.rb +7 -22
  277. data/test/unit/symbol/test_not.rb +10 -25
  278. data/test/unit/symbol/test_shadow.rb +8 -23
  279. data/test/unit/symbol/test_succ.rb +1 -7
  280. data/test/unit/symbol/test_to_proc.rb +1 -7
  281. data/test/unit/test_attributes.rb +1 -1
  282. data/test/unit/test_continuation.rb +13 -0
  283. data/test/unit/test_conversion.rb +1 -14
  284. data/test/unit/test_namespace.rb +30 -3
  285. data/test/unit/test_thread.rb +23 -0
  286. data/test/unit/time/test_change.rb +11 -26
  287. data/test/unit/time/test_elapse.rb +10 -25
  288. data/test/unit/time/test_stamp.rb +28 -0
  289. metadata +65 -25
  290. data/lib/core/facets/array/unzip.rb +0 -14
  291. data/lib/core/facets/continuation.rb +0 -1
  292. data/lib/core/facets/enumerable/collate.rb +0 -104
  293. data/lib/core/facets/kernel/require_esc.rb +0 -44
  294. data/lib/more/facets/mapsend.rb +0 -98
  295. data/lib/more/facets/pp_s.rb +0 -30
  296. data/log/history.rd +0 -38
  297. data/log/todo.rd +0 -4
  298. data/task/special/quickopts +0 -15
  299. data/test/unit/continuation/test_create.rb +0 -28
  300. data/test/unit/enumerable/test_collate.rb +0 -51
  301. data/test/unit/kernel/test_require_esc.rb +0 -29
  302. data/test/unit/test_mapsend.rb +0 -18
  303. data/test/unit/test_pp_s.rb +0 -17
@@ -1,22 +1,11 @@
1
- # TITLE:
2
- #
3
- # String Range Extension
4
- #
5
- # SUMMARY:
6
- #
7
- # Extensions to string for localing ranges of substrings.
8
- #
9
- # CREDIT:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class String
15
2
 
16
3
  # Like #index but returns a Range.
17
4
  #
18
5
  # "This is a test!".range('test') #=> 10..13
19
6
  #
7
+ # CREDIT: Trans
8
+
20
9
  def range(s, offset=0)
21
10
  if index(s, offset)
22
11
  return ($~.begin(0))..($~.end(0)-1)
@@ -28,9 +17,10 @@ class String
28
17
  #
29
18
  # "abc123abc123".range_all('abc') #=> [0..2, 6..8]
30
19
  #
31
- #--
32
- # Note: should add offset ?
33
- #++
20
+ # TODO: Add offset, perhaps ?
21
+ #
22
+ # CREDIT: Trans
23
+
34
24
  def range_all(s, reuse=false)
35
25
  r = []; i = 0
36
26
  while i < self.length
@@ -51,6 +41,8 @@ class String
51
41
  # "this\nis\na\ntest".range_of_line
52
42
  # #=> [0..4, 5..7, 8..9, 10..13]
53
43
  #
44
+ # CREDIT: Trans
45
+
54
46
  def range_of_line
55
47
  offset=0; charmap = []
56
48
  self.each do |line|
@@ -60,36 +52,3 @@ class String
60
52
  charmap
61
53
  end
62
54
  end
63
-
64
-
65
- # _____ _
66
- # |_ _|__ ___| |_
67
- # | |/ _ \/ __| __|
68
- # | | __/\__ \ |_
69
- # |_|\___||___/\__|
70
- #
71
- =begin test
72
-
73
- require 'test/unit'
74
-
75
- class TestStringRange < Test::Unit::TestCase
76
-
77
- def test_range
78
- assert_equal( (1..3), "a123a567a9".range(/123/) )
79
- assert_equal( (0..0), "a123a567a9".range(/a/) )
80
- end
81
-
82
- def test_range_all
83
- assert_equal( [ (1..3), (5..7) ], "a123a123a9".range_all(/123/) )
84
- assert_equal( [ (0..0), (4..4), (8..8) ], "a123a567a9".range_all(/a/) )
85
- end
86
-
87
- def test_range_of_line
88
- a = "0123\n456\n78"
89
- ltcm = a.range_of_line
90
- assert_equal( [0..4, 5..8, 9..10], ltcm )
91
- end
92
-
93
- end
94
-
95
- =end
@@ -1,19 +1,10 @@
1
- # TITLE:
2
- #
3
- # Regesc
4
- #
5
- # SUMMARY:
6
- #
7
- # Qucik and easy Regular expression from string.
8
- #
9
- # CREDIT:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class String
15
2
 
16
3
  # Escape string for Regexp use.
4
+ #
5
+ # "H..LO".regesc #=> "H\\.\\.LO"
6
+ #
7
+ # CREDIT: Trans
17
8
 
18
9
  def regesc
19
10
  Regexp.escape(self)
@@ -26,38 +17,14 @@ module Kernel
26
17
 
27
18
  # Provides a shortcut to the Regexp.escape module method.
28
19
  #
29
- # Will be deprecated in favor of String#regesc.
20
+ # resc("H..LO") #=> "H\\.\\.LO"
21
+ #
22
+ # TODO: Should this be deprecated in favor of String#regesc ?
23
+ #
24
+ # CREDIT: Trans
30
25
 
31
26
  def resc(str)
32
27
  Regexp.escape(str)
33
28
  end
34
29
 
35
30
  end
36
-
37
- # _____ _
38
- # |_ _|__ ___| |_
39
- # | |/ _ \/ __| __|
40
- # | | __/\__ \ |_
41
- # |_|\___||___/\__|
42
- #
43
- =begin test
44
-
45
- require 'test/unit'
46
-
47
- class TestStringRegesc < Test::Unit::TestCase
48
-
49
- def test_regesc
50
- a = "?"
51
- b = /#{a.regesc}/
52
- assert( b =~ "?" )
53
- end
54
-
55
- def test_resc
56
- assert_equal( Regexp.escape("'jfiw0[]4"), resc("'jfiw0[]4") )
57
- assert_equal( Regexp.escape("/////"), resc("/////") )
58
- end
59
-
60
- end
61
-
62
- =end
63
-
@@ -1,16 +1,3 @@
1
- # TITLE:
2
- #
3
- # String Scan-like Extensions
4
- #
5
- # SUMMARY:
6
- #
7
- # Extensions providing alternate methods akin to scanning.
8
- #
9
- # CREDIT:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class String
15
2
 
16
3
  # Breaks a string up into an array based on a regular expression.
@@ -23,6 +10,8 @@ class String
23
10
  #
24
11
  # ["<p>This", "<b>is", "</b>a test.", "</p>"]
25
12
  #
13
+ # CREDIT: Trans
14
+
26
15
  def divide( re )
27
16
  re2 = /#{re}.*?(?=#{re}|\Z)/
28
17
  scan(re2) #{re}(?=#{re})/)
@@ -31,6 +20,8 @@ class String
31
20
  # Like #scan but returns MatchData ($~) rather
32
21
  # then matched string ($&).
33
22
  #
23
+ # CREDIT: Trans
24
+
34
25
  def mscan(re) #:yield:
35
26
  if block_given?
36
27
  scan(re) { yield($~) }
@@ -51,6 +42,8 @@ class String
51
42
  #
52
43
  # ["<p>", "This", "<b>", "is", "</b>", "a test.", "</p>"]
53
44
  #
45
+ # CREDIT: Trans
46
+
54
47
  def shatter( re )
55
48
  r = self.gsub( re ){ |s| "\1" + s + "\1" }
56
49
  while r[0,1] == "\1" ; r[0] = '' ; end
@@ -59,42 +52,3 @@ class String
59
52
  end
60
53
 
61
54
  end
62
-
63
-
64
- # _____ _
65
- # |_ _|__ ___| |_
66
- # | |/ _ \/ __| __|
67
- # | | __/\__ \ |_
68
- # |_|\___||___/\__|
69
- #
70
- =begin test
71
-
72
- require 'test/unit'
73
-
74
- class TestStringScan < Test::Unit::TestCase
75
-
76
- def test_mscan
77
- r = 'abc,def,gh'.mscan(/[,]/)
78
- assert( r.all?{ |md| MatchData === md } )
79
- assert_equal( 2, r.to_a.length )
80
- assert_equal( ',', r[0][0] )
81
- assert_equal( ',', r[1][0] )
82
- end
83
-
84
- def test_divide
85
- s = "<p>This<b>is</b>a test.</p>"
86
- d = s.divide( /<.*?>/ )
87
- e = ["<p>This", "<b>is", "</b>a test.", "</p>"]
88
- assert_equal(e, d)
89
- end
90
-
91
- def test_shatter
92
- s = "<p>This<b>is</b>a test.</p>"
93
- sh = s.shatter( /<.*?>/ )
94
- e = ["<p>", "This", "<b>", "is", "</b>", "a test.", "</p>"]
95
- assert_equal(e, sh)
96
- end
97
-
98
- end
99
-
100
- =end
@@ -1,22 +1,17 @@
1
- # TITLE:
2
- #
3
- # Splice
4
- #
5
- # SUMMARY:
6
- #
7
- # Like #slice, but writes rather than reads.
8
- #
9
- # CREDIT:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class String
15
2
 
3
+ # Alias for []=.
16
4
  alias_method :store, :[]=
17
5
 
6
+ # Like #slice, but writes rather than reads.
18
7
  # Like #store, but acts like slice!
19
8
  # when given only one argument.
9
+ #
10
+ # a = "HELLO"
11
+ # a.splice(1) #=> "E"
12
+ # a #=> "HLLO"
13
+ #
14
+ # CREDIT: Trans
20
15
 
21
16
  def splice(*args)
22
17
  if args.size == 1
@@ -1,25 +1,14 @@
1
- # TITLE:
2
- #
3
- # String Tab Extensions
4
- #
5
- # SUMMARY:
6
- #
7
- # Tabs, indention and margin extensions for String.
8
- #
9
- # CREDIT:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class String
15
2
 
16
3
  # Aligns each line n spaces.
17
- # (This used to be #taballto.)
4
+ #
5
+ # CREDIT: Gavin Sinclair
18
6
 
19
7
  def tab(n)
20
8
  gsub(/^ */, ' ' * n)
21
9
  end
22
10
 
11
+ # Alias will be deprecated.
23
12
  alias_method :taballto, :tab
24
13
 
25
14
  # Expands tabs to +n+ spaces. Non-destructive. If +n+ is 0, then tabs are
@@ -27,9 +16,9 @@ class String
27
16
  #
28
17
  # Thanks to GGaramuno for a more efficient algorithm. Very nice.
29
18
  #
30
- # CREDIT Noah Gibbs
31
- # CREDIT Gavin Sinclair
32
- # CREDIT GGaramuno
19
+ # CREDIT: Gavin Sinclair
20
+ # CREDIT: Noah Gibbs
21
+ # CREDIT: GGaramuno
33
22
 
34
23
  def expand_tabs(n=8)
35
24
  n = n.to_int
@@ -48,6 +37,8 @@ class String
48
37
 
49
38
  # Preserves relative tabbing.
50
39
  # The first non-empty line ends up with n spaces before nonspace.
40
+ #
41
+ # CREDIT: Gavin Sinclair
51
42
 
52
43
  def tabto(n)
53
44
  if self =~ /^( *)\S/
@@ -59,6 +50,9 @@ class String
59
50
 
60
51
  # Indent left or right by n spaces.
61
52
  # (This used to be called #tab and aliased as #indent.)
53
+ #
54
+ # CREDIT: Gavin Sinclair
55
+ # CREDIT: Trans
62
56
 
63
57
  def indent(n)
64
58
  if n >= 0
@@ -70,7 +64,7 @@ class String
70
64
 
71
65
  # Outdent just indents a negative number of spaces.
72
66
  #
73
- # CREDIT Noah Gibbs
67
+ # CREDIT: Noah Gibbs
74
68
 
75
69
  def outdent(n)
76
70
  indent(-n)
@@ -84,9 +78,10 @@ class String
84
78
  # | margin controlled!
85
79
  # }.margin
86
80
  #
87
- #--
88
- # This may still need a bit of tweaking.
89
- #++
81
+ #
82
+ # NOTE: This may still need a bit of tweaking.
83
+ #
84
+ # CREDIT: Trans
90
85
 
91
86
  def margin(n=0)
92
87
  #d = /\A.*\n\s*(.)/.match( self )[1]
@@ -102,135 +97,3 @@ class String
102
97
  end
103
98
 
104
99
  end
105
-
106
-
107
- # _____ _
108
- # |_ _|__ ___| |_
109
- # | |/ _ \/ __| __|
110
- # | | __/\__ \ |_
111
- # |_|\___||___/\__|
112
- #
113
- =begin test
114
-
115
- require 'test/unit'
116
-
117
- class TestStringTabs < Test::Unit::TestCase
118
-
119
- def test_tab
120
- a = "xyz".tab(4)
121
- assert_equal( ' ', a[0..3] )
122
- # Need to expand on this
123
- end
124
-
125
- def test_tabto
126
- a = "xyz".tabto(4)
127
- assert_equal( ' ', a[0..3] )
128
- # Need to expand on this
129
- end
130
-
131
- def test_indent
132
- a = "xyz".indent(4)
133
- assert_equal( ' ', a[0..3] )
134
- # Need to expand on this
135
- end
136
-
137
- def test_margin
138
- s = %q{
139
- |ABC
140
- |123
141
- |TEST
142
- }.margin
143
- assert_equal( "ABC\n123\nTEST", s )
144
-
145
- s = %q{
146
- |ABC
147
- |123
148
- |TEST
149
- }.margin
150
- assert_equal( "ABC\n123\nTEST", s )
151
-
152
- s = %q{|ABC
153
- |123
154
- |TEST
155
- }.margin
156
- assert_equal( "ABC\n123\nTEST", s )
157
-
158
- s = %q{
159
- |ABC
160
- |123
161
- |TEST}.margin
162
- assert_equal( "ABC\n123\nTEST", s )
163
-
164
- s = %q{|ABC
165
- |123
166
- |TEST}.margin
167
- assert_equal( "ABC\n123\nTEST", s )
168
-
169
- s = %q{ |ABC
170
- |123
171
- |TEST}.margin
172
- assert_equal( "ABC\n123\nTEST", s )
173
-
174
- s = %q{ABC
175
- |123
176
- |TEST
177
- }.margin
178
- assert_equal( "ABC\n123\nTEST", s )
179
- end
180
-
181
- #
182
-
183
- def test_spacing
184
- s = %q{
185
- | ABC
186
- | 123
187
- | TEST
188
- }.margin
189
- assert_equal( " ABC\n 123\n TEST", s )
190
-
191
- s = %q{
192
- |ABC
193
- |123
194
- |TEST
195
- }.margin(1)
196
- assert_equal( " ABC\n 123\n TEST", s )
197
-
198
- s = %q{
199
- |ABC
200
- |123
201
- |TEST
202
- }.margin(2)
203
- assert_equal( " ABC\n 123\n TEST", s )
204
-
205
- s = %q{ ABC
206
- - 123
207
- - TEST
208
- }.margin
209
- assert_equal( " ABC\n 123\n TEST", s )
210
- end
211
-
212
- #
213
-
214
- def test_random_placement
215
- @volly = {}
216
- 100.times{ |n|
217
- k = []
218
- a = []
219
- 5.times{ |i|
220
- k << ( ( ' ' * Integer(rand*10) ) + '|' + i.to_s )
221
- a << ( i.to_s )
222
- }
223
- @volly[k.join("\n")] = a.join("\n")
224
- }
225
- @volly.each{ |k,v|
226
- assert_equal( v, k.margin )
227
- }
228
- end
229
-
230
- end
231
-
232
- =end
233
-
234
-
235
-
236
-