facets 3.0.0 → 3.1.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 (353) hide show
  1. checksums.yaml +4 -4
  2. data/.index +11 -7
  3. data/CONTRIBUTING.md +112 -0
  4. data/HISTORY.md +38 -0
  5. data/{README.rdoc → README.md} +59 -59
  6. data/demo/core/array/after.md +13 -0
  7. data/demo/core/array/arrange.md +17 -0
  8. data/demo/core/array/before.md +14 -0
  9. data/demo/core/array/collapse.md +15 -0
  10. data/demo/core/array/collisions.md +30 -0
  11. data/demo/core/array/commonality.md +31 -0
  12. data/demo/core/array/conjoin.md +47 -0
  13. data/demo/core/array/contains.md +9 -0
  14. data/demo/core/array/delete_unless.md +13 -0
  15. data/demo/core/array/delete_values.md +10 -0
  16. data/demo/core/array/delete_values_at.md +15 -0
  17. data/demo/core/array/divide.md +14 -0
  18. data/demo/core/array/duplicates.md +14 -0
  19. data/demo/core/array/each_overlap.md +12 -0
  20. data/demo/core/array/each_pair.md +13 -0
  21. data/demo/core/array/each_value.md +12 -0
  22. data/demo/core/array/entropy.md +13 -0
  23. data/demo/core/array/extract_options.md +13 -0
  24. data/demo/core/array/first.md +11 -0
  25. data/demo/core/array/from.md +11 -0
  26. data/demo/core/array/ideal_entropy.md +11 -0
  27. data/demo/core/array/intersection.md +11 -0
  28. data/demo/core/array/last.md +11 -0
  29. data/demo/core/array/median.md +23 -0
  30. data/demo/core/array/merge.md +15 -0
  31. data/demo/core/array/missing.md +10 -0
  32. data/demo/core/array/mode.md +9 -0
  33. data/demo/core/array/nonuniq.md +16 -0
  34. data/demo/core/array/not_empty.md +8 -0
  35. data/demo/core/array/occur.md +18 -0
  36. data/demo/core/array/occurrence.md +13 -0
  37. data/demo/core/array/only.md +9 -0
  38. data/demo/core/array/op_pow.md +10 -0
  39. data/demo/core/array/pad.md +28 -0
  40. data/demo/core/array/peek.md +10 -0
  41. data/demo/core/array/poke.md +15 -0
  42. data/demo/core/array/probability +8 -0
  43. data/demo/core/array/pull.md +10 -0
  44. data/demo/core/array/recurse.md +10 -0
  45. data/demo/core/array/recursively.md +20 -0
  46. data/demo/core/array/reject_values.md +10 -0
  47. data/demo/core/array/splice.md +14 -0
  48. data/demo/core/array/split.md +13 -0
  49. data/demo/core/array/squeeze.md +14 -0
  50. data/demo/core/array/step.md +16 -0
  51. data/demo/core/array/store.md +9 -0
  52. data/demo/core/array/thru.md +12 -0
  53. data/demo/core/array/to_h.md +11 -0
  54. data/demo/core/array/traverse.md +20 -0
  55. data/demo/core/array/uniq_by.md +16 -0
  56. data/demo/core/array/unique_permutation.md +14 -0
  57. data/demo/core/array/zip.md +8 -0
  58. data/demo/core/binding/caller.md +57 -0
  59. data/demo/core/binding/defined.md +10 -0
  60. data/demo/core/binding/opvars.md +16 -0
  61. data/demo/core/binding/self.md +6 -0
  62. data/demo/core/class/descendants.md +13 -0
  63. data/demo/core/class/to_proc.md +11 -0
  64. data/demo/core/comparable/at_least.md +11 -0
  65. data/demo/core/comparable/at_most.md +11 -0
  66. data/demo/core/comparable/bound.md +13 -0
  67. data/demo/core/comparable/cap.md +11 -0
  68. data/demo/core/comparable/clip.md +29 -0
  69. data/demo/core/comparable/cmp.md +18 -0
  70. data/demo/core/comparable/op_get.md +32 -0
  71. data/demo/core/dir/ascend.md +24 -0
  72. data/demo/core/dir/descend.md +16 -0
  73. data/demo/core/dir/multiglob.md +41 -0
  74. data/demo/core/dir/parent.md +6 -0
  75. data/demo/core/dir/recurse.md +41 -0
  76. data/demo/core/exception/detail.md +19 -0
  77. data/demo/core/{facets.rdoc → facets.md} +1 -1
  78. data/demo/core/filetest/root.md +13 -0
  79. data/demo/core/hash/recursively.md +21 -0
  80. data/demo/core/indexable.md +95 -0
  81. data/demo/core/integer/bitmask.md +46 -0
  82. data/demo/core/integer/{factorial.rdoc → factorial.md} +1 -1
  83. data/demo/core/integer/{length.rdoc → length.md} +1 -1
  84. data/demo/core/integer/{multiple.rdoc → multiple.md} +3 -1
  85. data/demo/core/integer/of.md +11 -0
  86. data/demo/core/integer/{ordinal.rdoc → ordinal.md} +3 -1
  87. data/demo/core/integer/{of.rdoc → times_collect.md} +2 -7
  88. data/demo/core/matchdata/match.md +7 -0
  89. data/demo/core/matchdata/matchset.md +7 -0
  90. data/demo/core/matchdata/matchtree.md +10 -0
  91. data/demo/core/module/cattr.md +43 -0
  92. data/demo/core/module/class_extend.md +64 -0
  93. data/demo/core/module/{class_inheritor.rdoc → class_inheritor.md} +2 -2
  94. data/demo/core/module/{copy_inheritor.rdoc → copy_inheritor.md} +4 -4
  95. data/demo/core/module/include_as.md +31 -0
  96. data/demo/core/module/method_space.md +24 -0
  97. data/demo/core/string/acronym.md +9 -0
  98. data/demo/core/string/{align.rdoc → align.md} +10 -10
  99. data/demo/core/string/ascii_only.md +37 -0
  100. data/demo/core/string/{bracket.rdoc → bracket.md} +10 -10
  101. data/demo/core/string/camelcase.md +47 -0
  102. data/demo/core/string/{capitalized.rdoc → capitalized.md} +9 -9
  103. data/demo/core/string/characters.md +11 -0
  104. data/demo/core/string/{cleanlines.rdoc → cleanlines.md} +3 -3
  105. data/demo/core/string/cleave.md +49 -0
  106. data/demo/core/string/compress_lines.md +22 -0
  107. data/demo/core/string/crypt.md +15 -0
  108. data/demo/core/string/divide.md +9 -0
  109. data/demo/core/string/each_word.md +11 -0
  110. data/demo/core/string/edit_distance.md +15 -0
  111. data/demo/core/string/exclude.md +15 -0
  112. data/demo/core/string/expand_tabs.md +69 -0
  113. data/demo/core/string/fold.md +14 -0
  114. data/demo/core/string/indent.md +65 -0
  115. data/demo/core/string/index_all.md +14 -0
  116. data/demo/core/string/interpolate.md +8 -0
  117. data/demo/core/string/lchomp.md +14 -0
  118. data/demo/core/string/line_wrap.md +7 -0
  119. data/demo/core/string/lowercase.md +12 -0
  120. data/demo/core/string/methodize.md +22 -0
  121. data/demo/core/string/modulize.md +22 -0
  122. data/demo/core/string/mscan.md +10 -0
  123. data/demo/core/string/natcmp.md +10 -0
  124. data/demo/core/string/nchar.md +9 -0
  125. data/demo/core/string/{newlines.rdoc → newlines.md} +3 -3
  126. data/demo/core/string/number.md +27 -0
  127. data/demo/core/string/op_div.md +10 -0
  128. data/demo/core/string/op_sub.md +7 -0
  129. data/demo/core/string/pathize.md +22 -0
  130. data/demo/core/string/quote.md +20 -0
  131. data/demo/core/string/random.md +25 -0
  132. data/demo/core/string/range.md +19 -0
  133. data/demo/core/string/remove.md +33 -0
  134. data/demo/core/string/rewrite.md +9 -0
  135. data/demo/core/string/shatter.md +9 -0
  136. data/demo/core/string/similarity.md +12 -0
  137. data/demo/core/string/snakecase.md +14 -0
  138. data/demo/core/string/splice.md +28 -0
  139. data/demo/core/string/squish.md +27 -0
  140. data/demo/core/string/store.md +10 -0
  141. data/demo/core/string/subtract.md +8 -0
  142. data/demo/core/string/titlecase.md +8 -0
  143. data/demo/core/string/to_re.md +22 -0
  144. data/demo/core/string/{margin.rdoc → trim.md} +14 -14
  145. data/demo/core/string/unbracket.md +24 -0
  146. data/demo/core/string/underscore.md +17 -0
  147. data/demo/core/string/unfold.md +9 -0
  148. data/demo/core/string/unindent.md +65 -0
  149. data/demo/core/string/unquote.md +6 -0
  150. data/demo/core/string/uppercase.md +15 -0
  151. data/demo/core/string/variablize.md +7 -0
  152. data/demo/core/string/word_wrap.md +54 -0
  153. data/demo/core/string/words.md +13 -0
  154. data/demo/core/string/xor.md +8 -0
  155. data/lib/core/facets.yml +11 -7
  156. data/lib/core/facets/array.rb +1 -0
  157. data/lib/core/facets/array/average.rb +16 -0
  158. data/lib/core/facets/array/collapse.rb +4 -0
  159. data/lib/core/facets/array/delete_values_at.rb +1 -0
  160. data/lib/core/facets/array/divide.rb +7 -0
  161. data/lib/core/facets/array/duplicates.rb +2 -0
  162. data/lib/core/facets/array/each_pair.rb +1 -4
  163. data/lib/core/facets/array/first.rb +1 -0
  164. data/lib/core/facets/array/from.rb +11 -16
  165. data/lib/core/facets/array/intersection.rb +1 -1
  166. data/lib/core/facets/array/last.rb +1 -0
  167. data/lib/core/facets/array/mode.rb +2 -2
  168. data/lib/core/facets/array/occurrence.rb +4 -3
  169. data/lib/core/facets/array/op_pow.rb +0 -2
  170. data/lib/core/facets/array/probability.rb +1 -1
  171. data/lib/core/facets/array/recursively.rb +2 -2
  172. data/lib/core/facets/array/splice.rb +1 -1
  173. data/lib/core/facets/array/standard_deviation.rb +23 -0
  174. data/lib/core/facets/array/to_h.rb +0 -3
  175. data/lib/core/facets/array/uniq_by.rb +4 -0
  176. data/lib/core/facets/array/variance.rb +20 -0
  177. data/lib/core/facets/binding.rb +0 -1
  178. data/lib/core/facets/enumerable/cluster.rb +6 -4
  179. data/lib/core/facets/enumerable/hashify.rb +27 -31
  180. data/lib/core/facets/enumerable/sum.rb +12 -2
  181. data/lib/core/facets/file/atomic_open.rb +1 -1
  182. data/lib/core/facets/hash/except.rb +13 -1
  183. data/lib/core/facets/indexable.rb +1 -1
  184. data/lib/core/facets/kernel/ergo.rb +3 -3
  185. data/lib/core/facets/kernel/like.rb +1 -1
  186. data/lib/core/facets/matchdata/matchtree.rb +2 -0
  187. data/lib/core/facets/numeric/delimit.rb +20 -0
  188. data/lib/core/facets/range/nudge.rb +29 -0
  189. data/lib/core/facets/string.rb +0 -2
  190. data/lib/core/facets/string/indent.rb +0 -8
  191. data/lib/core/facets/string/margin.rb +0 -4
  192. data/lib/core/facets/string/random.rb +13 -3
  193. data/lib/core/facets/string/similarity.rb +7 -6
  194. data/lib/standard/facets/enumargs.rb +5 -0
  195. data/lib/standard/facets/math/percentile.rb +1 -1
  196. data/lib/standard/facets/net/http.rb +33 -14
  197. data/lib/standard/facets/timer.rb +3 -3
  198. data/test/core/array/test_average.rb +16 -0
  199. data/test/core/array/test_before.rb +21 -0
  200. data/test/core/array/test_collapse.rb +10 -1
  201. data/test/core/array/test_delete_unless.rb +17 -0
  202. data/test/core/array/test_delete_values.rb +31 -0
  203. data/test/core/array/test_divide.rb +10 -0
  204. data/test/core/array/test_each_pair.rb +16 -0
  205. data/test/core/array/test_each_value.rb +16 -0
  206. data/test/core/array/test_from.rb +42 -0
  207. data/test/core/array/test_op_pow.rb +13 -0
  208. data/test/core/array/test_standard_deviation.rb +18 -0
  209. data/test/core/array/test_to_h.rb +14 -0
  210. data/test/core/array/test_uniq_by.rb +7 -0
  211. data/test/core/array/test_variance.rb +17 -0
  212. data/test/core/array/test_zip.rb +13 -0
  213. data/test/core/dir/test_each_child.rb +1 -1
  214. data/test/core/dir/test_multiglob.rb +1 -1
  215. data/test/core/enumerable/test_cluster.rb +36 -0
  216. data/test/core/enumerable/test_hashify.rb +113 -0
  217. data/test/core/hash/test_expect.rb +11 -1
  218. data/test/core/kernel/test_ergo.rb +7 -5
  219. data/test/core/{object/test_replace.rb → kernel/test_instance_replace.rb} +6 -28
  220. data/test/core/numeric/test_delimit.rb +68 -0
  221. data/test/core/numeric/{test_round.rb → test_round_to.rb} +27 -27
  222. data/test/core/range/test_nudge.rb +32 -0
  223. data/test/core/range/{test_to_r.rb → test_to_rng.rb} +3 -3
  224. data/test/core/string/test_acronym.rb +14 -0
  225. data/test/core/string/test_ascii_only.rb +21 -0
  226. data/test/core/string/test_compress_lines.rb +9 -0
  227. data/test/core/string/test_crypt.rb +17 -0
  228. data/test/core/string/test_index_all.rb +4 -0
  229. data/test/core/string/test_random.rb +25 -0
  230. data/test/core/string/test_remove.rb +14 -0
  231. data/test/core/string/test_similarity.rb +9 -1
  232. data/test/core/struct/test_replace.rb +18 -0
  233. data/test/standard/test_enumargs.rb +26 -10
  234. data/test/standard/test_timer.rb +1 -1
  235. metadata +634 -588
  236. data/CONTRIBUTE.md +0 -78
  237. data/demo/core/array/combination.rdoc +0 -19
  238. data/demo/core/array/delete.rdoc +0 -23
  239. data/demo/core/array/index.rdoc +0 -14
  240. data/demo/core/array/merge.rdoc +0 -15
  241. data/demo/core/array/only.rdoc +0 -9
  242. data/demo/core/array/pad.rdoc +0 -28
  243. data/demo/core/array/permutation.rdoc +0 -10
  244. data/demo/core/array/product.rdoc +0 -26
  245. data/demo/core/array/recursively.rdoc +0 -16
  246. data/demo/core/array/rotate.rdoc +0 -30
  247. data/demo/core/array/select.rdoc +0 -8
  248. data/demo/core/array/uniq_by.rdoc +0 -9
  249. data/demo/core/binding/caller.rdoc +0 -57
  250. data/demo/core/binding/defined.rdoc +0 -10
  251. data/demo/core/binding/eval.rdoc +0 -8
  252. data/demo/core/binding/local_variables.rdoc +0 -26
  253. data/demo/core/binding/opvars.rdoc +0 -16
  254. data/demo/core/binding/self.rdoc +0 -6
  255. data/demo/core/class/descendants.rdoc +0 -10
  256. data/demo/core/class/to_proc.rdoc +0 -8
  257. data/demo/core/comparable/cap.rdoc +0 -20
  258. data/demo/core/comparable/clip.rdoc +0 -37
  259. data/demo/core/comparable/cmp.rdoc +0 -18
  260. data/demo/core/comparable/op_get.rdoc +0 -29
  261. data/demo/core/dir/ascend.rdoc +0 -24
  262. data/demo/core/dir/descend.rdoc +0 -14
  263. data/demo/core/dir/multiglob.rdoc +0 -41
  264. data/demo/core/dir/parent.rdoc +0 -6
  265. data/demo/core/dir/recurse.rdoc +0 -41
  266. data/demo/core/exception/detail.rdoc +0 -12
  267. data/demo/core/filetest/root.rdoc +0 -6
  268. data/demo/core/hash/recursively.rdoc +0 -21
  269. data/demo/core/indexable.rdoc +0 -95
  270. data/demo/core/integer/bitmask.rdoc +0 -46
  271. data/demo/core/integer/even.rdoc +0 -12
  272. data/demo/core/integer/odd.rdoc +0 -12
  273. data/demo/core/matchdata/match.rdoc +0 -7
  274. data/demo/core/matchdata/matchset.rdoc +0 -15
  275. data/demo/core/module/cattr.rdoc +0 -43
  276. data/demo/core/module/class_extend.rdoc +0 -64
  277. data/demo/core/module/method_space.rdoc +0 -55
  278. data/demo/core/string/bytes.rdoc +0 -8
  279. data/demo/core/string/camelcase.rdoc +0 -47
  280. data/demo/core/string/characters.rdoc +0 -11
  281. data/demo/core/string/cleave.rdoc +0 -49
  282. data/demo/core/string/divide.rdoc +0 -9
  283. data/demo/core/string/each_char.rdoc +0 -9
  284. data/demo/core/string/each_word.rdoc +0 -9
  285. data/demo/core/string/end_with.rdoc +0 -6
  286. data/demo/core/string/expand_tabs.rdoc +0 -69
  287. data/demo/core/string/fold.rdoc +0 -14
  288. data/demo/core/string/indent.rdoc +0 -65
  289. data/demo/core/string/interpolate.rdoc +0 -7
  290. data/demo/core/string/lchomp.rdoc +0 -14
  291. data/demo/core/string/line_wrap.rdoc +0 -7
  292. data/demo/core/string/lines.rdoc +0 -8
  293. data/demo/core/string/methodize.rdoc +0 -22
  294. data/demo/core/string/modulize.rdoc +0 -22
  295. data/demo/core/string/mscan.rdoc +0 -10
  296. data/demo/core/string/natcmp.rdoc +0 -10
  297. data/demo/core/string/nchar.rdoc +0 -9
  298. data/demo/core/string/op_sub.rdoc +0 -7
  299. data/demo/core/string/pathize.rdoc +0 -22
  300. data/demo/core/string/quote.rdoc +0 -20
  301. data/demo/core/string/range.rdoc +0 -19
  302. data/demo/core/string/rewrite.rdoc +0 -9
  303. data/demo/core/string/shatter.rdoc +0 -9
  304. data/demo/core/string/snakecase.rdoc +0 -10
  305. data/demo/core/string/splice.rdoc +0 -28
  306. data/demo/core/string/start_with.rdoc +0 -7
  307. data/demo/core/string/subtract.rdoc +0 -8
  308. data/demo/core/string/tab.rdoc +0 -16
  309. data/demo/core/string/tabto.rdoc +0 -29
  310. data/demo/core/string/titlecase.rdoc +0 -8
  311. data/demo/core/string/to_re.rdoc +0 -22
  312. data/demo/core/string/unfold.rdoc +0 -9
  313. data/demo/core/string/unindent.rdoc +0 -65
  314. data/demo/core/string/unquote.rdoc +0 -6
  315. data/demo/core/string/variablize.rdoc +0 -7
  316. data/demo/core/string/word_wrap.rdoc +0 -54
  317. data/demo/core/string/words.rdoc +0 -13
  318. data/demo/core/string/xor.rdoc +0 -8
  319. data/lib/core/facets/binding/local_variables.rb +0 -16
  320. data/lib/core/facets/string/tab.rb +0 -2
  321. data/lib/core/facets/string/tabto.rb +0 -2
  322. data/test/core/array/test_after.rb +0 -27
  323. data/test/core/array/test_combination.rb +0 -25
  324. data/test/core/array/test_index.rb +0 -20
  325. data/test/core/array/test_permutation.rb +0 -20
  326. data/test/core/array/test_product.rb +0 -64
  327. data/test/core/array/test_rotate.rb +0 -38
  328. data/test/core/array/test_select.rb +0 -16
  329. data/test/core/binding/test_eval.rb +0 -15
  330. data/test/core/binding/test_local_variables.rb +0 -36
  331. data/test/core/enumerable/test_cluster_by.rb +0 -30
  332. data/test/core/enumerable/test_count.rb +0 -32
  333. data/test/core/enumerable/test_each_with_object.rb +0 -18
  334. data/test/core/enumerable/test_group_by.rb +0 -36
  335. data/test/core/enumerable/test_none.rb +0 -29
  336. data/test/core/enumerable/test_one.rb +0 -34
  337. data/test/core/enumerable/test_take.rb +0 -15
  338. data/test/core/hash/test_select.rb +0 -44
  339. data/test/core/hash/test_url_params.rb +0 -26
  340. data/test/core/integer/test_even.rb +0 -24
  341. data/test/core/integer/test_odd.rb +0 -24
  342. data/test/core/kernel/test_require_relative.rb +0 -12
  343. data/test/core/nilclass/test_to_f.rb +0 -13
  344. data/test/core/proc/test_curry.rb +0 -38
  345. data/test/core/string/test_bytes.rb +0 -13
  346. data/test/core/string/test_each_char.rb +0 -17
  347. data/test/core/string/test_end_with.rb +0 -24
  348. data/test/core/string/test_lines.rb +0 -15
  349. data/test/core/string/test_start_with.rb +0 -24
  350. data/test/core/string/test_tab.rb +0 -16
  351. data/test/core/symbol/test_to_proc.rb +0 -35
  352. data/test/core/to_hash_tc.rb +0 -210
  353. data/test/core/unboundmethod/test_name.rb +0 -19
@@ -0,0 +1,47 @@
1
+ ## String#Camelcase
2
+
3
+ require 'facets/string/camelcase'
4
+
5
+ The `camelcase` method converts snakecase strings into camelcase strings.
6
+
7
+ "abc_xyz".camelcase.assert == "abcXyz"
8
+
9
+ Continious underscore characters are treated as if a single underscore
10
+ character.
11
+
12
+ "abc____xyz".camelcase.assert == "abcXyz"
13
+
14
+ Without an argument the first character is left alone.
15
+
16
+ "Camel_case".camelcase.assert == "CamelCase"
17
+
18
+ Passing +:upper+ or +true+ to #camelcase captializes the first letter.
19
+ This is known as upper-camelcase.
20
+
21
+ "Abc_xyz".camelcase(true).assert == "AbcXyz"
22
+ "Abc____xyz".camelcase(:upper).assert == "AbcXyz"
23
+
24
+ Where as passing +false+ or +:lower+ downcases the first character,
25
+ known as lower-camelcase.
26
+
27
+ "abc_xyz".camelcase(false).assert == "abcXyz"
28
+ "abc____xyz".camelcase(false).assert == "abcXyz"
29
+ "Abc_xyz".camelcase(:lower).assert == "abcXyz"
30
+ "Abc____xyz".camelcase(:lower).assert == "abcXyz"
31
+
32
+ By passing a match string to the method we can make +camelcase+
33
+ apply to each word in a string.
34
+
35
+ "abc xyz".camelcase(' ').assert == "abcXyz"
36
+ "abc xyz".camelcase(/\s/).assert == "abcXyz"
37
+ "abc\txyz".camelcase(/\s/).assert == "abcXyz"
38
+ "abc\nxyz".camelcase(/\s/).assert == "abcXyz"
39
+
40
+ ## String#lower_camelcase
41
+
42
+ "abc_xyz".lower_camelcase.assert == "abcXyz"
43
+
44
+ ## String#upper_camelcase
45
+
46
+ "abc_xyz".upper_camelcase.assert == "AbcXyz"
47
+
@@ -1,27 +1,27 @@
1
- == String#capitalized?
1
+ ## String#capitalized?
2
2
 
3
3
  String#capitalized? return true if a string begins with a capitalized
4
4
  letter, false otherwise.
5
5
 
6
- require 'facets/string/capitalized'
6
+ require 'facets/string/capitalized'
7
7
 
8
- 'Abc'.assert.capitalized?
8
+ 'Abc'.assert.capitalized?
9
9
 
10
- == String#downcase?
10
+ ## String#downcase?
11
11
 
12
12
  In addition String#downcase? is provided which checks to see if the
13
13
  whole string is composed of lowercase letters.
14
14
 
15
- 'abc'.assert.downcase?
15
+ 'abc'.assert.downcase?
16
16
 
17
- #'abc'.assert.lowercase?
17
+ #'abc'.assert.lowercase?
18
18
 
19
- == String#upcase?
19
+ ## String#upcase?
20
20
 
21
21
  And String#upcase? which checks to see if the whole string is composed
22
22
  of uppercase letters.
23
23
 
24
- 'ABC'.assert.upcase?
24
+ 'ABC'.assert.upcase?
25
25
 
26
- #'ABC'.assert.uppercase?
26
+ #'ABC'.assert.uppercase?
27
27
 
@@ -0,0 +1,11 @@
1
+ ## String#characters
2
+
3
+ The String#chars methods simply splits a string into
4
+ an Array of character strings.
5
+
6
+ require 'facets/string/characters'
7
+
8
+ "abc".characters.assert == ["a","b","c"]
9
+
10
+ "ab\nc".characters.assert == ["a","b","\n","c"]
11
+
@@ -1,10 +1,10 @@
1
- == String#cleanlines
1
+ ## String#cleanlines
2
2
 
3
3
  Thre String#cleanlines method works essentially the same as String#lines,
4
4
  returning an Array of line strings, but it also removes trailing whitespace
5
5
  from each line.
6
6
 
7
- require 'facets/string/cleanlines'
7
+ require 'facets/string/cleanlines'
8
8
 
9
- "a \n b \nc".cleanlines.to_a.assert == ["a","b","c"]
9
+ "a \n b \nc".cleanlines.to_a.assert == ["a","b","c"]
10
10
 
@@ -0,0 +1,49 @@
1
+ ## String#cleave
2
+
3
+ require 'facets/string/cleave'
4
+
5
+ no spaces short word
6
+
7
+ s, x = 'whole', ['whole', '']
8
+ s.cleave.assert == x
9
+
10
+ no spaces long word
11
+
12
+ s, x = 'Supercalifragilisticexpialidocious' , ['Supercalifragilisticexpialidocious', '']
13
+ s.cleave.assert == x
14
+
15
+ exact middle two words
16
+
17
+ s, x = 'fancy split', ['fancy', 'split']
18
+ s.cleave.assert == x
19
+
20
+ exact middle many words
21
+
22
+ s, x = 'All good Rubyists know how to party', ['All good Rubyists', 'know how to party']
23
+ s.cleave.assert == x
24
+
25
+ closer to start
26
+
27
+ s, x = 'short splitter', ['short', 'splitter']
28
+ s.cleave.assert == x
29
+
30
+ closer to start
31
+
32
+ s, x = 'Four score and seven years ago...', ['Four score and', 'seven years ago...']
33
+ s.cleave.assert == x
34
+
35
+ closer to start
36
+
37
+ s, x = 'abc def ghijklm nop', ['abc def', 'ghijklm nop']
38
+ s.cleave.assert == x
39
+
40
+ closer to end
41
+
42
+ s, x = 'extended split', ['extended', 'split']
43
+ s.cleave.assert == x
44
+
45
+ closer to end
46
+
47
+ s, x = 'abc defghi jklm nop', [ 'abc defghi', 'jklm nop']
48
+ s.cleave.assert == x
49
+
@@ -0,0 +1,22 @@
1
+ ## String#compress_lines
2
+
3
+ require 'facets/string/compress_lines'
4
+
5
+ Matches any whitespace (including newline) at beginning and end of lines,
6
+ and replaces with a single space.
7
+
8
+ string = <<-QUERY.compress_lines
9
+ SELECT name
10
+ FROM users
11
+ QUERY
12
+ string.assert == "SELECT name FROM users"
13
+
14
+ Matches any whitespace (including newline) at beginning and end of lines,
15
+ and removes it.
16
+
17
+ string = <<-QUERY.compress_lines(false)
18
+ SELECT name
19
+ FROM users
20
+ QUERY
21
+ string.assert == "SELECT nameFROM users"
22
+
@@ -0,0 +1,15 @@
1
+ ## String#crypt
2
+
3
+ require 'facets/string/crypt'
4
+
5
+ Adds a default salt to the built-in crypt method.
6
+
7
+ NOTE: This method is not a common core extension and is not
8
+ loaded automatically when using <code>require 'facets'</code>.
9
+
10
+ "abc".crypt('ZZ').assert.start_with?('ZZ')
11
+
12
+ encrypted = "abc".crypt
13
+ salt = encrypted[0..1]
14
+ "abc".crypt(salt).assert == encrypted
15
+
@@ -0,0 +1,9 @@
1
+ ## String#divide
2
+
3
+ require 'facets/string/divide'
4
+
5
+ s = "<p>This<b>is</b>a test.</p>"
6
+ d = s.divide(/<.*?>/)
7
+ e = ["<p>This", "<b>is", "</b>a test.", "</p>"]
8
+ d.assert == e
9
+
@@ -0,0 +1,11 @@
1
+ ## String#each_word
2
+
3
+ require 'facets/string/each_word'
4
+
5
+ a = []
6
+ i = "this is a test"
7
+
8
+ i.each_word{ |w| a << w }
9
+
10
+ a.assert == ['this', 'is', 'a', 'test']
11
+
@@ -0,0 +1,15 @@
1
+ ## String#edit_distance
2
+
3
+ require 'facets/string/edit_distance'
4
+
5
+ Levenshtein distance algorithm implementation for Ruby, with UTF-8 support.
6
+
7
+ The Levenshtein distance is a measure of how similar two strings s and t are,
8
+ calculated as the number of deletions/insertions/substitutions needed to
9
+ transform s into t. The greater the distance, the more the strings differ.
10
+
11
+ d = "pretzel".edit_distance('pretzil')
12
+ d.assert = 1
13
+
14
+ d = "zretzel".edit_distance('pretzil')
15
+ d.assert = 2
@@ -0,0 +1,15 @@
1
+ ## String#exclude?
2
+
3
+ require 'facets/string/exclude'
4
+
5
+ The inverse of include?.
6
+
7
+ "aaaa".assert.exclude?('bb')
8
+ "aaab".assert.exclude?('bb')
9
+ "aaba".assert.exclude?('bb')
10
+ "baaa".assert.exclude?('bb')
11
+
12
+ "abba".refute.exclude?('bb')
13
+ "aabb".refute.exclude?('bb')
14
+ "bbaa".refute.exclude?('bb')
15
+
@@ -0,0 +1,69 @@
1
+ ## String#expand_tab
2
+
3
+ require 'facets/string/expand_tab'
4
+
5
+ We will use this string as a basis for demonstration.
6
+
7
+ tabs = <<-EOF.gsub(/^\s+\|/, '')
8
+ |
9
+ |\tOne tab
10
+ | \tOne space and one tab
11
+ | \t Six spaces, a tab, and a space
12
+ EOF
13
+
14
+ Expanding tabs 0.
15
+
16
+ expected = <<-EOF.gsub(/^\s+\|/, '')
17
+ |
18
+ |One tab
19
+ | One space and one tab
20
+ | Six spaces, a tab, and a space
21
+ EOF
22
+
23
+ tabs.expand_tabs(0).assert == expected
24
+
25
+ Expanding tabs 1.
26
+
27
+ expected = <<-EOF.gsub(/^\s+\|/, '')
28
+ |
29
+ | One tab
30
+ | One space and one tab
31
+ | Six spaces, a tab, and a space
32
+ EOF
33
+
34
+ tabs.expand_tabs(1).assert == expected
35
+
36
+ Expanding tabs 4.
37
+
38
+ expected = <<-EOF.gsub(/^\s+\|/, '')
39
+ |
40
+ | One tab
41
+ | One space and one tab
42
+ | Six spaces, a tab, and a space
43
+ EOF
44
+
45
+ tabs.expand_tabs(4).assert == expected
46
+
47
+ Expanding tabs 8.
48
+
49
+ expected = <<-EOF.gsub(/^\s+\|/, '')
50
+ |
51
+ | One tab
52
+ | One space and one tab
53
+ | Six spaces, a tab, and a space
54
+ EOF
55
+
56
+ tabs.expand_tabs.assert == expected
57
+ tabs.expand_tabs(8).assert == expected
58
+
59
+ Expanding tabs 16.
60
+
61
+ expected = <<-EOF.gsub(/^\s+\|/, '')
62
+ |
63
+ | One tab
64
+ | One space and one tab
65
+ | Six spaces, a tab, and a space
66
+ EOF
67
+
68
+ tabs.expand_tabs(16).assert == expected
69
+
@@ -0,0 +1,14 @@
1
+ ## String#fold
2
+
3
+ require 'facets/string/fold'
4
+
5
+ s = "This is\na test.\n\nIt clumps\nlines of text."
6
+ o = "This is a test.\n\nIt clumps lines of text."
7
+ s.fold.assert == o
8
+
9
+ leave spaces
10
+
11
+ s = "This is\na test.\n\n This is pre.\n Leave alone.\n\nIt clumps\nlines of text."
12
+ o = "This is a test.\n\n This is pre.\n Leave alone.\n\nIt clumps lines of text."
13
+ s.fold(true).assert == o
14
+
@@ -0,0 +1,65 @@
1
+ ## String#indent
2
+
3
+ require 'facets/string/indent'
4
+
5
+ positive
6
+
7
+ "xyz".indent(4).assert == ' xyz'
8
+ " xyz".indent(2).assert == ' xyz'
9
+
10
+ multiline positive
11
+
12
+ "abc\nxyz".indent(2).assert == " abc\n xyz"
13
+
14
+ zero
15
+
16
+ 'xyz'.indent(0).assert == 'xyz'
17
+
18
+ negative
19
+
20
+ ' xyz'.indent(-2).assert == ' xyz'
21
+ ' xyz'. indent(-2).assert == 'xyz'
22
+
23
+ multiline negative
24
+
25
+ " abc\n xyz".indent(-2).assert == " abc\n xyz"
26
+
27
+ negative more than is possible
28
+
29
+ ' xyz'.indent(-3).assert == 'xyz'
30
+
31
+ non-space positive
32
+
33
+ "xyz".indent(4, '-').assert == '----xyz'
34
+
35
+ non-space zero
36
+
37
+ 'xyz'.indent(0, '-').assert == 'xyz'
38
+
39
+ non-space negative non-matching character
40
+
41
+ ' xyz'.indent(-2, '-').assert == ' xyz'
42
+ ' xyz'. indent(-2, '-').assert == ' xyz'
43
+
44
+ non-space negative
45
+
46
+ '----xyz'.indent(-2, '-').assert == '--xyz'
47
+ '--xyz'.indent(-2, '-').assert == 'xyz'
48
+
49
+ Special regular expresion characters are escaped.
50
+
51
+ Ensure '.' is treated literally and not as wildcard
52
+
53
+ ' xyz'.indent(-2, '.').assert == ' xyz'
54
+ '..xyz'.indent(-2, '.').assert == 'xyz'
55
+
56
+ Ensure '*' is treated literally and not as wildcard
57
+
58
+ ' xyz'.indent(-2, '*').assert == ' xyz'
59
+ '**xyz'.indent(-2, '*').assert == 'xyz'
60
+
61
+ Ensure '^' is treated literally and not as line start
62
+
63
+ ' xyz'.indent(-2, '^').assert == ' xyz'
64
+ '^^xyz'.indent(-2, '^').assert == 'xyz'
65
+
@@ -0,0 +1,14 @@
1
+ ## String#index_all
2
+
3
+ require 'facets/string/index_all'
4
+
5
+ Returns an array of all index locations. the reuse flag allows the trailing
6
+ portion of a match to be resued for subsequent matches.
7
+
8
+ "abcabcabc".index_all('a') #=> [0,3,6]
9
+
10
+ "a123a567a9".index_all(/a/) #=> [0,4,8]
11
+
12
+ "bbb".index_all('bb', false) #=> [0]
13
+ "bbb".index_all('bb', true) #=> [0,1]
14
+
@@ -0,0 +1,8 @@
1
+ ## String#interpolate
2
+
3
+ require 'facets/string/interpolate'
4
+
5
+ a = 1
6
+
7
+ String.interpolate{ 'this is #{a}' }.assert == 'this is 1'
8
+
@@ -0,0 +1,14 @@
1
+ ## String#lchomp
2
+
3
+ require 'facets/string/lchomp'
4
+
5
+ s = "xxboo"
6
+ r = s.lchomp("xx")
7
+ r.assert == "boo"
8
+
9
+ ## String#lchomp!
10
+
11
+ s = "xxboo"
12
+ s.lchomp!("xx")
13
+ s.assert == "boo"
14
+