facets 3.0.0 → 3.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 (748) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.md +112 -0
  3. data/HISTORY.md +179 -0
  4. data/LICENSE.txt +21 -343
  5. data/{README.rdoc → README.md} +74 -67
  6. data/lib/core/facets/array/arrange.rb +1 -42
  7. data/lib/core/facets/array/average.rb +15 -0
  8. data/lib/core/facets/array/before.rb +1 -1
  9. data/lib/core/facets/array/collapse.rb +4 -0
  10. data/lib/core/facets/array/delete_first.rb +21 -0
  11. data/lib/core/facets/array/delete_values_at.rb +1 -0
  12. data/lib/core/facets/array/divide.rb +7 -0
  13. data/lib/core/facets/array/duplicates.rb +15 -0
  14. data/lib/core/facets/array/each_pair.rb +1 -4
  15. data/lib/core/facets/array/first.rb +1 -0
  16. data/lib/core/facets/array/from.rb +11 -16
  17. data/lib/core/facets/array/indexes.rb +113 -0
  18. data/lib/core/facets/array/last.rb +1 -0
  19. data/lib/core/facets/array/mode.rb +2 -2
  20. data/lib/core/facets/array/nonuniq.rb +6 -8
  21. data/lib/core/facets/array/occurrence.rb +8 -4
  22. data/lib/core/facets/array/probability.rb +1 -1
  23. data/lib/core/facets/array/recursively.rb +2 -2
  24. data/lib/core/facets/array/remove.rb +39 -0
  25. data/lib/core/facets/array/span.rb +29 -0
  26. data/lib/core/facets/array/splice.rb +1 -1
  27. data/lib/core/facets/array/split_at.rb +25 -0
  28. data/lib/core/facets/array/standard_deviation.rb +28 -0
  29. data/lib/core/facets/array/step.rb +12 -14
  30. data/lib/core/facets/array/to_ranges.rb +48 -0
  31. data/lib/core/facets/array/uniq_by.rb +7 -3
  32. data/lib/core/facets/array/variance.rb +20 -0
  33. data/lib/core/facets/array.rb +1 -0
  34. data/lib/core/facets/binding/caller.rb +8 -2
  35. data/lib/core/facets/binding/op_get.rb +7 -11
  36. data/lib/core/facets/binding/self.rb +4 -10
  37. data/lib/core/facets/binding.rb +0 -1
  38. data/lib/core/facets/boolean.rb +1 -1
  39. data/lib/core/facets/class/descendants.rb +0 -2
  40. data/lib/core/facets/class.rb +2 -2
  41. data/lib/core/facets/comparable/bound.rb +13 -1
  42. data/lib/core/facets/comparable/clip.rb +3 -32
  43. data/lib/core/facets/denumerable.rb +0 -3
  44. data/lib/core/facets/dir/find.rb +20 -0
  45. data/lib/core/facets/dir/recurse.rb +8 -26
  46. data/lib/core/facets/enumerable/cluster.rb +6 -4
  47. data/lib/core/facets/enumerable/compact_map.rb +2 -12
  48. data/lib/core/facets/enumerable/defer.rb +2 -13
  49. data/lib/core/facets/enumerable/each_by.rb +0 -2
  50. data/lib/core/facets/enumerable/frequency.rb +2 -2
  51. data/lib/core/facets/enumerable/hashify.rb +27 -31
  52. data/lib/core/facets/enumerable/hinge.rb +3 -4
  53. data/lib/core/facets/enumerable/map_with_index.rb +3 -6
  54. data/lib/core/facets/enumerable/mash.rb +5 -28
  55. data/lib/core/facets/enumerable/uniq_by.rb +4 -8
  56. data/lib/core/facets/enumerable/with_position.rb +58 -0
  57. data/lib/core/facets/enumerator.rb +2 -75
  58. data/lib/core/facets/exception/error_print.rb +6 -71
  59. data/lib/core/facets/file/atomic_open.rb +1 -1
  60. data/lib/core/facets/file/null.rb +3 -15
  61. data/lib/core/facets/file/read_binary.rb +3 -12
  62. data/lib/core/facets/hash/except.rb +11 -6
  63. data/lib/core/facets/hash/fetch_nested.rb +8 -9
  64. data/lib/core/facets/hash/graph.rb +1 -1
  65. data/lib/core/facets/hash/rekey.rb +3 -3
  66. data/lib/core/facets/hash/revalue.rb +3 -3
  67. data/lib/core/facets/hash/{to_proc.rb → setter.rb} +8 -9
  68. data/lib/core/facets/hash/slice.rb +0 -26
  69. data/lib/core/facets/hash/update_keys.rb +4 -11
  70. data/lib/core/facets/hash/update_values.rb +4 -10
  71. data/lib/core/facets/indexable.rb +7 -5
  72. data/lib/core/facets/kernel/callstack.rb +5 -24
  73. data/lib/core/facets/kernel/eigenclass.rb +6 -6
  74. data/lib/core/facets/kernel/ergo.rb +3 -3
  75. data/lib/core/facets/kernel/extension.rb +3 -6
  76. data/lib/core/facets/kernel/functor.rb +16 -0
  77. data/lib/core/facets/kernel/instance_class.rb +4 -20
  78. data/lib/core/facets/kernel/instance_send.rb +5 -3
  79. data/lib/core/facets/kernel/like.rb +1 -1
  80. data/lib/core/facets/kernel/load_relative.rb +8 -20
  81. data/lib/core/facets/kernel/memo.rb +4 -26
  82. data/lib/core/facets/kernel/meta_class.rb +10 -6
  83. data/lib/core/facets/kernel/object_class.rb +5 -6
  84. data/lib/core/facets/kernel/object_send.rb +5 -26
  85. data/lib/core/facets/kernel/qua_class.rb +4 -20
  86. data/lib/core/facets/kernel/require_all.rb +8 -20
  87. data/lib/core/facets/kernel/returning.rb +3 -19
  88. data/lib/core/facets/kernel/tap.rb +3 -36
  89. data/lib/core/facets/kernel/tee.rb +2 -0
  90. data/lib/core/facets/kernel/try.rb +38 -28
  91. data/lib/core/facets/kernel.rb +2 -4
  92. data/lib/core/facets/lazy.rb +1 -1
  93. data/lib/core/facets/matchdata/matchtree.rb +2 -0
  94. data/lib/core/facets/module/alias_method_chain.rb +4 -43
  95. data/lib/core/facets/module/attr_setter.rb +3 -2
  96. data/lib/core/facets/module/can.rb +5 -16
  97. data/lib/core/facets/module/class_extend.rb +2 -2
  98. data/lib/core/facets/numeric/delimit.rb +20 -0
  99. data/lib/core/facets/object/dup.rb +0 -46
  100. data/lib/core/facets/proc/bind.rb +0 -2
  101. data/lib/core/facets/proc/compose.rb +7 -28
  102. data/lib/core/facets/proc/to_method.rb +0 -1
  103. data/lib/core/facets/proc/update.rb +8 -1
  104. data/lib/core/facets/range/intersection.rb +42 -0
  105. data/lib/core/facets/range/nudge.rb +27 -0
  106. data/lib/core/facets/string/ascii_only.rb +2 -2
  107. data/lib/core/facets/string/cleanlines.rb +0 -2
  108. data/lib/core/facets/string/dashcase.rb +21 -0
  109. data/lib/core/facets/string/indent.rb +0 -8
  110. data/lib/core/facets/string/lchomp.rb +7 -14
  111. data/lib/core/facets/string/margin.rb +0 -4
  112. data/lib/core/facets/string/newlines.rb +0 -2
  113. data/lib/core/facets/string/random.rb +13 -3
  114. data/lib/core/facets/string/similarity.rb +7 -6
  115. data/lib/core/facets/string/snakecase.rb +12 -5
  116. data/lib/core/facets/string/words.rb +13 -1
  117. data/lib/core/facets/string.rb +0 -3
  118. data/lib/core/facets/struct/attributes.rb +2 -3
  119. data/lib/core/facets/time/trunc.rb +12 -5
  120. data/lib/core/facets/unboundmethod/arguments.rb +1 -0
  121. data/lib/core/facets/version.rb +1 -17
  122. data/lib/core/facets.rb +0 -1
  123. data/lib/standard/facets/argvector.rb +1 -1
  124. data/lib/standard/facets/cgi/escape_html.rb +14 -25
  125. data/lib/standard/facets/cloneable.rb +4 -51
  126. data/lib/standard/facets/continuation.rb +2 -56
  127. data/lib/standard/facets/crypt3.rb +126 -0
  128. data/lib/standard/facets/date/cmp.rb +32 -0
  129. data/lib/standard/facets/date.rb +1 -0
  130. data/lib/standard/facets/digest.rb +0 -1
  131. data/lib/standard/facets/enumargs.rb +5 -0
  132. data/lib/standard/facets/fileutils/cp_rx.rb +0 -2
  133. data/lib/standard/facets/fileutils/ln_r.rb +0 -1
  134. data/lib/standard/facets/find/select.rb +0 -2
  135. data/lib/standard/facets/getoptlong.rb +3 -59
  136. data/lib/standard/facets/load_monitor.rb +2 -26
  137. data/lib/standard/facets/math/gini_coefficient.rb +5 -4
  138. data/lib/standard/facets/math/kldivergence.rb +8 -7
  139. data/lib/standard/facets/math/percentile.rb +2 -2
  140. data/lib/standard/facets/multiton.rb +1 -1
  141. data/lib/standard/facets/net/http.rb +33 -14
  142. data/lib/standard/facets/ostruct/initialize.rb +4 -19
  143. data/lib/standard/facets/ostruct/to_ostruct.rb +2 -1
  144. data/lib/standard/facets/ostruct.rb +0 -88
  145. data/lib/standard/facets/pathname/empty.rb +2 -10
  146. data/lib/standard/facets/pathname/glob.rb +19 -12
  147. data/lib/standard/facets/pathname/null.rb +3 -14
  148. data/lib/standard/facets/random.rb +47 -133
  149. data/lib/standard/facets/timer.rb +3 -3
  150. data/lib/standard/facets/tuple.rb +2 -4
  151. data/lib/standard/facets/uri.rb +3 -2
  152. metadata +84 -1181
  153. data/.index +0 -76
  154. data/.yardopts +0 -10
  155. data/CONTRIBUTE.md +0 -78
  156. data/NOTICE.rdoc +0 -167
  157. data/demo/applique/assertion_framework.rb +0 -1
  158. data/demo/applique/file_helpers.rb +0 -34
  159. data/demo/core/array/combination.rdoc +0 -19
  160. data/demo/core/array/delete.rdoc +0 -23
  161. data/demo/core/array/index.rdoc +0 -14
  162. data/demo/core/array/merge.rdoc +0 -15
  163. data/demo/core/array/only.rdoc +0 -9
  164. data/demo/core/array/pad.rdoc +0 -28
  165. data/demo/core/array/permutation.rdoc +0 -10
  166. data/demo/core/array/product.rdoc +0 -26
  167. data/demo/core/array/recursively.rdoc +0 -16
  168. data/demo/core/array/rotate.rdoc +0 -30
  169. data/demo/core/array/select.rdoc +0 -8
  170. data/demo/core/array/uniq_by.rdoc +0 -9
  171. data/demo/core/binding/caller.rdoc +0 -57
  172. data/demo/core/binding/defined.rdoc +0 -10
  173. data/demo/core/binding/eval.rdoc +0 -8
  174. data/demo/core/binding/local_variables.rdoc +0 -26
  175. data/demo/core/binding/opvars.rdoc +0 -16
  176. data/demo/core/binding/self.rdoc +0 -6
  177. data/demo/core/class/descendants.rdoc +0 -10
  178. data/demo/core/class/to_proc.rdoc +0 -8
  179. data/demo/core/comparable/cap.rdoc +0 -20
  180. data/demo/core/comparable/clip.rdoc +0 -37
  181. data/demo/core/comparable/cmp.rdoc +0 -18
  182. data/demo/core/comparable/op_get.rdoc +0 -29
  183. data/demo/core/dir/ascend.rdoc +0 -24
  184. data/demo/core/dir/descend.rdoc +0 -14
  185. data/demo/core/dir/multiglob.rdoc +0 -41
  186. data/demo/core/dir/parent.rdoc +0 -6
  187. data/demo/core/dir/recurse.rdoc +0 -41
  188. data/demo/core/exception/detail.rdoc +0 -12
  189. data/demo/core/facets.rdoc +0 -6
  190. data/demo/core/filetest/root.rdoc +0 -6
  191. data/demo/core/hash/recursively.rdoc +0 -21
  192. data/demo/core/indexable.rdoc +0 -95
  193. data/demo/core/integer/bitmask.rdoc +0 -46
  194. data/demo/core/integer/even.rdoc +0 -12
  195. data/demo/core/integer/factorial.rdoc +0 -10
  196. data/demo/core/integer/length.rdoc +0 -7
  197. data/demo/core/integer/multiple.rdoc +0 -10
  198. data/demo/core/integer/odd.rdoc +0 -12
  199. data/demo/core/integer/of.rdoc +0 -14
  200. data/demo/core/integer/ordinal.rdoc +0 -9
  201. data/demo/core/matchdata/match.rdoc +0 -7
  202. data/demo/core/matchdata/matchset.rdoc +0 -15
  203. data/demo/core/module/cattr.rdoc +0 -43
  204. data/demo/core/module/class_extend.rdoc +0 -64
  205. data/demo/core/module/class_inheritor.rdoc +0 -126
  206. data/demo/core/module/copy_inheritor.rdoc +0 -30
  207. data/demo/core/module/method_space.rdoc +0 -55
  208. data/demo/core/string/align.rdoc +0 -34
  209. data/demo/core/string/bracket.rdoc +0 -35
  210. data/demo/core/string/bytes.rdoc +0 -8
  211. data/demo/core/string/camelcase.rdoc +0 -47
  212. data/demo/core/string/capitalized.rdoc +0 -27
  213. data/demo/core/string/characters.rdoc +0 -11
  214. data/demo/core/string/cleanlines.rdoc +0 -10
  215. data/demo/core/string/cleave.rdoc +0 -49
  216. data/demo/core/string/divide.rdoc +0 -9
  217. data/demo/core/string/each_char.rdoc +0 -9
  218. data/demo/core/string/each_word.rdoc +0 -9
  219. data/demo/core/string/end_with.rdoc +0 -6
  220. data/demo/core/string/expand_tabs.rdoc +0 -69
  221. data/demo/core/string/fold.rdoc +0 -14
  222. data/demo/core/string/indent.rdoc +0 -65
  223. data/demo/core/string/interpolate.rdoc +0 -7
  224. data/demo/core/string/lchomp.rdoc +0 -14
  225. data/demo/core/string/line_wrap.rdoc +0 -7
  226. data/demo/core/string/lines.rdoc +0 -8
  227. data/demo/core/string/margin.rdoc +0 -92
  228. data/demo/core/string/methodize.rdoc +0 -22
  229. data/demo/core/string/modulize.rdoc +0 -22
  230. data/demo/core/string/mscan.rdoc +0 -10
  231. data/demo/core/string/natcmp.rdoc +0 -10
  232. data/demo/core/string/nchar.rdoc +0 -9
  233. data/demo/core/string/newlines.rdoc +0 -9
  234. data/demo/core/string/op_sub.rdoc +0 -7
  235. data/demo/core/string/pathize.rdoc +0 -22
  236. data/demo/core/string/quote.rdoc +0 -20
  237. data/demo/core/string/range.rdoc +0 -19
  238. data/demo/core/string/rewrite.rdoc +0 -9
  239. data/demo/core/string/shatter.rdoc +0 -9
  240. data/demo/core/string/snakecase.rdoc +0 -10
  241. data/demo/core/string/splice.rdoc +0 -28
  242. data/demo/core/string/start_with.rdoc +0 -7
  243. data/demo/core/string/subtract.rdoc +0 -8
  244. data/demo/core/string/tab.rdoc +0 -16
  245. data/demo/core/string/tabto.rdoc +0 -29
  246. data/demo/core/string/titlecase.rdoc +0 -8
  247. data/demo/core/string/to_re.rdoc +0 -22
  248. data/demo/core/string/unfold.rdoc +0 -9
  249. data/demo/core/string/unindent.rdoc +0 -65
  250. data/demo/core/string/unquote.rdoc +0 -6
  251. data/demo/core/string/variablize.rdoc +0 -7
  252. data/demo/core/string/word_wrap.rdoc +0 -54
  253. data/demo/core/string/words.rdoc +0 -13
  254. data/demo/core/string/xor.rdoc +0 -8
  255. data/demo/standard/02_cloneable.rdoc +0 -46
  256. data/demo/standard/03_enumargs.rdoc +0 -75
  257. data/demo/standard/04_equitable.rdoc +0 -35
  258. data/demo/standard/05_instantiable.rdoc +0 -42
  259. data/demo/standard/basic_object.rdoc +0 -22
  260. data/demo/standard/memoizable.rdoc +0 -134
  261. data/demo/standard/mulititon.rdoc +0 -156
  262. data/lib/core/facets/applique/file_helpers.rb +0 -33
  263. data/lib/core/facets/array/intersection.rb +0 -25
  264. data/lib/core/facets/array/op_pow.rb +0 -14
  265. data/lib/core/facets/array/to_h.rb +0 -22
  266. data/lib/core/facets/binding/local_variables.rb +0 -16
  267. data/lib/core/facets/class/singleton.rb +0 -1
  268. data/lib/core/facets/class/singleton_class.rb +0 -16
  269. data/lib/core/facets/class/subclasses.rb +0 -28
  270. data/lib/core/facets/dir/each_child.rb +0 -16
  271. data/lib/core/facets/enumerable/filter.rb +0 -33
  272. data/lib/core/facets/enumerable/sum.rb +0 -30
  273. data/lib/core/facets/exception/set_message.rb +0 -10
  274. data/lib/core/facets/file/write.rb +0 -24
  275. data/lib/core/facets/fixnum.rb +0 -7
  276. data/lib/core/facets/kernel/__dir__.rb +0 -28
  277. data/lib/core/facets/kernel/constant.rb +0 -22
  278. data/lib/core/facets/kernel/instance_exec.rb +0 -47
  279. data/lib/core/facets/kernel/p.rb +0 -24
  280. data/lib/core/facets/kernel/singleton_class.rb +0 -10
  281. data/lib/core/facets/matchdata/match.rb +0 -15
  282. data/lib/core/facets/method/curry.rb +0 -13
  283. data/lib/core/facets/numeric/negative.rb +0 -1
  284. data/lib/core/facets/numeric/positive.rb +0 -15
  285. data/lib/core/facets/object/itself.rb +0 -16
  286. data/lib/core/facets/object/try_dup.rb +0 -1
  287. data/lib/core/facets/process/daemon.rb +0 -32
  288. data/lib/core/facets/range/overlap.rb +0 -12
  289. data/lib/core/facets/string/characters.rb +0 -13
  290. data/lib/core/facets/string/crypt.rb +0 -22
  291. data/lib/core/facets/string/tab.rb +0 -2
  292. data/lib/core/facets/string/tabto.rb +0 -2
  293. data/lib/core/facets/symbol/succ.rb +0 -23
  294. data/lib/core/facets.yml +0 -76
  295. data/lib/standard/facets/basicobject.rb +0 -75
  296. data/lib/standard/facets/digest/base64digest.rb +0 -45
  297. data/lib/standard/facets/ostruct/each.rb +0 -11
  298. data/lib/standard/facets/ostruct/merge.rb +0 -21
  299. data/lib/standard/facets/ostruct/op_fetch.rb +0 -29
  300. data/lib/standard/facets/ostruct/op_store.rb +0 -1
  301. data/lib/standard/facets/ostruct/to_h.rb +0 -10
  302. data/test/core/array/test_after.rb +0 -27
  303. data/test/core/array/test_arrange.rb +0 -37
  304. data/test/core/array/test_before.rb +0 -27
  305. data/test/core/array/test_collapse.rb +0 -14
  306. data/test/core/array/test_combination.rb +0 -25
  307. data/test/core/array/test_commonality.rb +0 -35
  308. data/test/core/array/test_conjoin.rb +0 -50
  309. data/test/core/array/test_contains.rb +0 -14
  310. data/test/core/array/test_delete.rb +0 -42
  311. data/test/core/array/test_divide.rb +0 -14
  312. data/test/core/array/test_duplicates.rb +0 -29
  313. data/test/core/array/test_each_overlap.rb +0 -31
  314. data/test/core/array/test_entropy.rb +0 -23
  315. data/test/core/array/test_extract_options.rb +0 -28
  316. data/test/core/array/test_first.rb +0 -17
  317. data/test/core/array/test_index.rb +0 -20
  318. data/test/core/array/test_intersection.rb +0 -19
  319. data/test/core/array/test_last.rb +0 -17
  320. data/test/core/array/test_median.rb +0 -27
  321. data/test/core/array/test_merge.rb +0 -27
  322. data/test/core/array/test_missing.rb +0 -12
  323. data/test/core/array/test_mode.rb +0 -17
  324. data/test/core/array/test_nonuniq.rb +0 -25
  325. data/test/core/array/test_not_empty.rb +0 -17
  326. data/test/core/array/test_occur.rb +0 -52
  327. data/test/core/array/test_occurrence.rb +0 -20
  328. data/test/core/array/test_only.rb +0 -17
  329. data/test/core/array/test_pad.rb +0 -40
  330. data/test/core/array/test_peek.rb +0 -28
  331. data/test/core/array/test_permutation.rb +0 -20
  332. data/test/core/array/test_poke.rb +0 -21
  333. data/test/core/array/test_probability.rb +0 -18
  334. data/test/core/array/test_product.rb +0 -64
  335. data/test/core/array/test_pull.rb +0 -15
  336. data/test/core/array/test_recurse.rb +0 -40
  337. data/test/core/array/test_recursively.rb +0 -33
  338. data/test/core/array/test_reject_values.rb +0 -17
  339. data/test/core/array/test_rotate.rb +0 -38
  340. data/test/core/array/test_select.rb +0 -16
  341. data/test/core/array/test_splice.rb +0 -21
  342. data/test/core/array/test_split.rb +0 -22
  343. data/test/core/array/test_squeeze.rb +0 -22
  344. data/test/core/array/test_step.rb +0 -28
  345. data/test/core/array/test_store.rb +0 -22
  346. data/test/core/array/test_traverse.rb +0 -26
  347. data/test/core/array/test_uniq_by.rb +0 -17
  348. data/test/core/array/test_unique_permutation.rb +0 -23
  349. data/test/core/binding/test_caller.rb +0 -69
  350. data/test/core/binding/test_defined.rb +0 -18
  351. data/test/core/binding/test_eval.rb +0 -15
  352. data/test/core/binding/test_local_variables.rb +0 -36
  353. data/test/core/binding/test_op.rb +0 -24
  354. data/test/core/binding/test_self.rb +0 -16
  355. data/test/core/class/test_descendents.rb +0 -19
  356. data/test/core/class/test_preallocate.rb +0 -32
  357. data/test/core/class/test_subclasses.rb +0 -20
  358. data/test/core/class/test_to_proc.rb +0 -16
  359. data/test/core/comparable/test_bound.rb +0 -32
  360. data/test/core/comparable/test_cap.rb +0 -36
  361. data/test/core/comparable/test_clip.rb +0 -31
  362. data/test/core/comparable/test_cmp.rb +0 -16
  363. data/test/core/comparable/test_op_get.rb +0 -61
  364. data/test/core/denumerable_tc.rb +0 -194
  365. data/test/core/dir/test_ascend.rb +0 -40
  366. data/test/core/dir/test_descend.rb +0 -24
  367. data/test/core/dir/test_each_child.rb +0 -22
  368. data/test/core/dir/test_multiglob.rb +0 -25
  369. data/test/core/dir/test_parent.rb +0 -14
  370. data/test/core/dir/test_recurse.rb +0 -26
  371. data/test/core/enumerable/test_accumulate.rb +0 -44
  372. data/test/core/enumerable/test_cluster_by.rb +0 -30
  373. data/test/core/enumerable/test_compact_map.rb +0 -32
  374. data/test/core/enumerable/test_count.rb +0 -32
  375. data/test/core/enumerable/test_defer.rb +0 -27
  376. data/test/core/enumerable/test_each_by.rb +0 -49
  377. data/test/core/enumerable/test_each_with_object.rb +0 -18
  378. data/test/core/enumerable/test_every.rb +0 -33
  379. data/test/core/enumerable/test_ewise.rb +0 -30
  380. data/test/core/enumerable/test_exclude.rb +0 -15
  381. data/test/core/enumerable/test_expand.rb +0 -15
  382. data/test/core/enumerable/test_filter.rb +0 -19
  383. data/test/core/enumerable/test_find_yield.rb +0 -96
  384. data/test/core/enumerable/test_frequency.rb +0 -15
  385. data/test/core/enumerable/test_graph.rb +0 -42
  386. data/test/core/enumerable/test_group_by.rb +0 -36
  387. data/test/core/enumerable/test_key_by.rb +0 -22
  388. data/test/core/enumerable/test_map_by.rb +0 -27
  389. data/test/core/enumerable/test_map_send.rb +0 -26
  390. data/test/core/enumerable/test_map_with_index.rb +0 -23
  391. data/test/core/enumerable/test_mash.rb +0 -17
  392. data/test/core/enumerable/test_modulate.rb +0 -17
  393. data/test/core/enumerable/test_none.rb +0 -29
  394. data/test/core/enumerable/test_occur.rb +0 -40
  395. data/test/core/enumerable/test_one.rb +0 -34
  396. data/test/core/enumerable/test_only.rb +0 -40
  397. data/test/core/enumerable/test_per.rb +0 -19
  398. data/test/core/enumerable/test_purge.rb +0 -22
  399. data/test/core/enumerable/test_recursively.rb +0 -33
  400. data/test/core/enumerable/test_squeeze.rb +0 -35
  401. data/test/core/enumerable/test_sum.rb +0 -40
  402. data/test/core/enumerable/test_take.rb +0 -15
  403. data/test/core/enumerable/test_uniq_by.rb +0 -25
  404. data/test/core/enumerable/test_visit.rb +0 -14
  405. data/test/core/enumerator/lazy/test_squeeze.rb +0 -33
  406. data/test/core/enumerator/test_fx.rb +0 -16
  407. data/test/core/enumerator/test_new.rb +0 -21
  408. data/test/core/enumerator_tc.rb +0 -40
  409. data/test/core/exception/test_detail.rb +0 -15
  410. data/test/core/exception/test_raised.rb +0 -15
  411. data/test/core/exception/test_suppress.rb +0 -16
  412. data/test/core/file/test_append.rb +0 -22
  413. data/test/core/file/test_create.rb +0 -17
  414. data/test/core/file/test_ext.rb +0 -31
  415. data/test/core/file/test_null.rb +0 -14
  416. data/test/core/file/test_read_binary.rb +0 -19
  417. data/test/core/file/test_read_list.rb +0 -16
  418. data/test/core/file/test_rewrite.rb +0 -35
  419. data/test/core/file/test_rootname.rb +0 -13
  420. data/test/core/file/test_sanitize.rb +0 -32
  421. data/test/core/file/test_split_all.rb +0 -14
  422. data/test/core/file/test_write.rb +0 -22
  423. data/test/core/file/test_writelines.rb +0 -21
  424. data/test/core/filetest/test_root.rb +0 -14
  425. data/test/core/functor_tc.rb +0 -41
  426. data/test/core/hash/test_alias.rb +0 -25
  427. data/test/core/hash/test_argumentize.rb +0 -23
  428. data/test/core/hash/test_at.rb +0 -16
  429. data/test/core/hash/test_autonew.rb +0 -22
  430. data/test/core/hash/test_collate.rb +0 -61
  431. data/test/core/hash/test_count.rb +0 -23
  432. data/test/core/hash/test_data.rb +0 -35
  433. data/test/core/hash/test_dearray_values.rb +0 -26
  434. data/test/core/hash/test_deep_merge.rb +0 -31
  435. data/test/core/hash/test_deep_rekey.rb +0 -131
  436. data/test/core/hash/test_delete_at.rb +0 -18
  437. data/test/core/hash/test_delete_unless.rb +0 -18
  438. data/test/core/hash/test_delete_values.rb +0 -30
  439. data/test/core/hash/test_diff.rb +0 -16
  440. data/test/core/hash/test_each_with_key.rb +0 -16
  441. data/test/core/hash/test_expect.rb +0 -24
  442. data/test/core/hash/test_fetch_nested.rb +0 -24
  443. data/test/core/hash/test_graph.rb +0 -40
  444. data/test/core/hash/test_insert.rb +0 -20
  445. data/test/core/hash/test_inverse.rb +0 -20
  446. data/test/core/hash/test_join.rb +0 -32
  447. data/test/core/hash/test_keys.rb +0 -41
  448. data/test/core/hash/test_new_with.rb +0 -17
  449. data/test/core/hash/test_op_add.rb +0 -17
  450. data/test/core/hash/test_op_and.rb +0 -31
  451. data/test/core/hash/test_op_mul.rb +0 -17
  452. data/test/core/hash/test_op_or.rb +0 -17
  453. data/test/core/hash/test_op_push.rb +0 -34
  454. data/test/core/hash/test_op_sub.rb +0 -28
  455. data/test/core/hash/test_recurse.rb +0 -39
  456. data/test/core/hash/test_recursively.rb +0 -71
  457. data/test/core/hash/test_rekey.rb +0 -119
  458. data/test/core/hash/test_replace_each.rb +0 -17
  459. data/test/core/hash/test_revalue.rb +0 -98
  460. data/test/core/hash/test_reverse_merge.rb +0 -39
  461. data/test/core/hash/test_select.rb +0 -44
  462. data/test/core/hash/test_slice.rb +0 -36
  463. data/test/core/hash/test_stringify_keys.rb +0 -26
  464. data/test/core/hash/test_swap.rb +0 -15
  465. data/test/core/hash/test_symbolize_keys.rb +0 -26
  466. data/test/core/hash/test_to_mod.rb +0 -24
  467. data/test/core/hash/test_to_proc.rb +0 -23
  468. data/test/core/hash/test_to_struct.rb +0 -22
  469. data/test/core/hash/test_traverse.rb +0 -29
  470. data/test/core/hash/test_update_each.rb +0 -16
  471. data/test/core/hash/test_update_keys.rb +0 -21
  472. data/test/core/hash/test_update_values.rb +0 -15
  473. data/test/core/hash/test_url_params.rb +0 -26
  474. data/test/core/hash/test_weave.rb +0 -18
  475. data/test/core/hash/test_zip.rb +0 -16
  476. data/test/core/indexable_tc.rb +0 -226
  477. data/test/core/integer/test_bitmask.rb +0 -73
  478. data/test/core/integer/test_even.rb +0 -24
  479. data/test/core/integer/test_factorial.rb +0 -30
  480. data/test/core/integer/test_multiple.rb +0 -16
  481. data/test/core/integer/test_odd.rb +0 -24
  482. data/test/core/integer/test_of.rb +0 -36
  483. data/test/core/integer/test_ordinal.rb +0 -27
  484. data/test/core/kernel/test_as.rb +0 -74
  485. data/test/core/kernel/test_ask.rb +0 -9
  486. data/test/core/kernel/test_assign.rb +0 -61
  487. data/test/core/kernel/test_assign_from.rb +0 -48
  488. data/test/core/kernel/test_attr_singleton.rb +0 -51
  489. data/test/core/kernel/test_blank.rb +0 -103
  490. data/test/core/kernel/test_callstack.rb +0 -21
  491. data/test/core/kernel/test_class.rb +0 -14
  492. data/test/core/kernel/test_complete.rb +0 -19
  493. data/test/core/kernel/test_constant.rb +0 -18
  494. data/test/core/kernel/test_d.rb +0 -10
  495. data/test/core/kernel/test_deep_clone.rb +0 -31
  496. data/test/core/kernel/test_deep_copy.rb +0 -15
  497. data/test/core/kernel/test_dir.rb +0 -24
  498. data/test/core/kernel/test_disable_warnings.rb +0 -38
  499. data/test/core/kernel/test_ergo.rb +0 -32
  500. data/test/core/kernel/test_extension.rb +0 -18
  501. data/test/core/kernel/test_get.rb +0 -54
  502. data/test/core/kernel/test_here.rb +0 -13
  503. data/test/core/kernel/test_hierarchical_send.rb +0 -48
  504. data/test/core/kernel/test_in.rb +0 -14
  505. data/test/core/kernel/test_instance_assign.rb +0 -19
  506. data/test/core/kernel/test_instance_class.rb +0 -15
  507. data/test/core/kernel/test_instance_extract.rb +0 -28
  508. data/test/core/kernel/test_instance_send.rb +0 -26
  509. data/test/core/kernel/test_maybe.rb +0 -13
  510. data/test/core/kernel/test_meta_alias.rb +0 -18
  511. data/test/core/kernel/test_meta_class.rb +0 -33
  512. data/test/core/kernel/test_meta_def.rb +0 -15
  513. data/test/core/kernel/test_meta_eval.rb +0 -18
  514. data/test/core/kernel/test_method.rb +0 -20
  515. data/test/core/kernel/test_not.rb +0 -51
  516. data/test/core/kernel/test_not_nil.rb +0 -25
  517. data/test/core/kernel/test_object_class.rb +0 -22
  518. data/test/core/kernel/test_object_hexid.rb +0 -20
  519. data/test/core/kernel/test_object_send.rb +0 -25
  520. data/test/core/kernel/test_presence.rb +0 -37
  521. data/test/core/kernel/test_qua_class.rb +0 -25
  522. data/test/core/kernel/test_require_all.rb +0 -11
  523. data/test/core/kernel/test_require_relative.rb +0 -12
  524. data/test/core/kernel/test_respond.rb +0 -38
  525. data/test/core/kernel/test_returning.rb +0 -17
  526. data/test/core/kernel/test_silence.rb +0 -24
  527. data/test/core/kernel/test_singleton_class.rb +0 -15
  528. data/test/core/kernel/test_super_method.rb +0 -23
  529. data/test/core/kernel/test_tap.rb +0 -38
  530. data/test/core/kernel/test_temporarily.rb +0 -25
  531. data/test/core/kernel/test_true.rb +0 -31
  532. data/test/core/kernel/test_try.rb +0 -35
  533. data/test/core/kernel/test_val.rb +0 -30
  534. data/test/core/kernel/test_with.rb +0 -18
  535. data/test/core/kernel/test_writers.rb +0 -53
  536. data/test/core/matchdata/test_match.rb +0 -14
  537. data/test/core/matchdata/test_matchset.rb +0 -29
  538. data/test/core/method/test_composition.rb +0 -42
  539. data/test/core/module/test_abstract.rb +0 -24
  540. data/test/core/module/test_alias_accessor.rb +0 -27
  541. data/test/core/module/test_alias_method_chain.rb +0 -34
  542. data/test/core/module/test_alias_module_function.rb +0 -24
  543. data/test/core/module/test_all_instance_methods.rb +0 -27
  544. data/test/core/module/test_ancestor.rb +0 -16
  545. data/test/core/module/test_anonymous.rb +0 -18
  546. data/test/core/module/test_attr_setter.rb +0 -28
  547. data/test/core/module/test_basename.rb +0 -14
  548. data/test/core/module/test_can.rb +0 -22
  549. data/test/core/module/test_class.rb +0 -22
  550. data/test/core/module/test_class_def.rb +0 -22
  551. data/test/core/module/test_class_extend.rb +0 -73
  552. data/test/core/module/test_class_inheritor.rb +0 -135
  553. data/test/core/module/test_copy_inheritor.rb +0 -35
  554. data/test/core/module/test_enclosure.rb +0 -24
  555. data/test/core/module/test_instance_function.rb +0 -30
  556. data/test/core/module/test_instance_method.rb +0 -20
  557. data/test/core/module/test_instance_method_defined.rb +0 -38
  558. data/test/core/module/test_integrate.rb +0 -28
  559. data/test/core/module/test_is.rb +0 -50
  560. data/test/core/module/test_memoize.rb +0 -33
  561. data/test/core/module/test_method_clash.rb +0 -59
  562. data/test/core/module/test_method_space.rb +0 -72
  563. data/test/core/module/test_methodize.rb +0 -26
  564. data/test/core/module/test_modname.rb +0 -13
  565. data/test/core/module/test_module_def.rb +0 -22
  566. data/test/core/module/test_module_load.rb +0 -23
  567. data/test/core/module/test_nodef.rb +0 -19
  568. data/test/core/module/test_op.rb +0 -56
  569. data/test/core/module/test_pathize.rb +0 -25
  570. data/test/core/module/test_preextend.rb +0 -26
  571. data/test/core/module/test_redefine_method.rb +0 -30
  572. data/test/core/module/test_redirect_method.rb +0 -32
  573. data/test/core/module/test_remove.rb +0 -18
  574. data/test/core/module/test_rename_method.rb +0 -34
  575. data/test/core/module/test_revise.rb +0 -61
  576. data/test/core/module/test_set.rb +0 -30
  577. data/test/core/module/test_spacename.rb +0 -15
  578. data/test/core/module/test_to_obj.rb +0 -20
  579. data/test/core/module/test_wrap_method.rb +0 -32
  580. data/test/core/nilclass/test_to_f.rb +0 -13
  581. data/test/core/numeric/test_approx.rb +0 -26
  582. data/test/core/numeric/test_distance.rb +0 -16
  583. data/test/core/numeric/test_length.rb +0 -16
  584. data/test/core/numeric/test_round.rb +0 -76
  585. data/test/core/numeric/test_spacing.rb +0 -17
  586. data/test/core/object/test_dup.rb +0 -115
  587. data/test/core/object/test_object_state.rb +0 -75
  588. data/test/core/object/test_replace.rb +0 -69
  589. data/test/core/object/test_try_dup.rb +0 -59
  590. data/test/core/proc/test_bind.rb +0 -29
  591. data/test/core/proc/test_bind_to.rb +0 -17
  592. data/test/core/proc/test_compose.rb +0 -27
  593. data/test/core/proc/test_curry.rb +0 -38
  594. data/test/core/proc/test_partial.rb +0 -27
  595. data/test/core/proc/test_to_method.rb +0 -43
  596. data/test/core/proc/test_update.rb +0 -15
  597. data/test/core/range/test_combine.rb +0 -32
  598. data/test/core/range/test_op_add.rb +0 -24
  599. data/test/core/range/test_op_sub.rb +0 -34
  600. data/test/core/range/test_overlap.rb +0 -15
  601. data/test/core/range/test_to_r.rb +0 -20
  602. data/test/core/range/test_umbrella.rb +0 -32
  603. data/test/core/range/test_within.rb +0 -25
  604. data/test/core/regexp/test_arity.rb +0 -30
  605. data/test/core/regexp/test_multiline.rb +0 -19
  606. data/test/core/regexp/test_op_add.rb +0 -15
  607. data/test/core/regexp/test_op_or.rb +0 -16
  608. data/test/core/regexp/test_to_re.rb +0 -24
  609. data/test/core/string/test_align.rb +0 -32
  610. data/test/core/string/test_ascii_only.rb +0 -30
  611. data/test/core/string/test_bracket.rb +0 -37
  612. data/test/core/string/test_bytes.rb +0 -13
  613. data/test/core/string/test_camelcase.rb +0 -59
  614. data/test/core/string/test_capitalized.rb +0 -36
  615. data/test/core/string/test_characters.rb +0 -13
  616. data/test/core/string/test_cleanlines.rb +0 -12
  617. data/test/core/string/test_cleave.rb +0 -27
  618. data/test/core/string/test_cmp.rb +0 -18
  619. data/test/core/string/test_compress_lines.rb +0 -18
  620. data/test/core/string/test_divide.rb +0 -17
  621. data/test/core/string/test_each_char.rb +0 -17
  622. data/test/core/string/test_each_word.rb +0 -17
  623. data/test/core/string/test_edit_distance.rb +0 -20
  624. data/test/core/string/test_end_with.rb +0 -24
  625. data/test/core/string/test_exclude.rb +0 -23
  626. data/test/core/string/test_expand_tabs.rb +0 -83
  627. data/test/core/string/test_file.rb +0 -15
  628. data/test/core/string/test_fold.rb +0 -21
  629. data/test/core/string/test_indent.rb +0 -90
  630. data/test/core/string/test_index_all.rb +0 -18
  631. data/test/core/string/test_interpolate.rb +0 -16
  632. data/test/core/string/test_lchomp.rb +0 -25
  633. data/test/core/string/test_line_wrap.rb +0 -15
  634. data/test/core/string/test_lines.rb +0 -15
  635. data/test/core/string/test_lowercase.rb +0 -18
  636. data/test/core/string/test_margin.rb +0 -16
  637. data/test/core/string/test_methodize.rb +0 -28
  638. data/test/core/string/test_modulize.rb +0 -28
  639. data/test/core/string/test_mscan.rb +0 -18
  640. data/test/core/string/test_natcmp.rb +0 -17
  641. data/test/core/string/test_nchar.rb +0 -17
  642. data/test/core/string/test_newlines.rb +0 -14
  643. data/test/core/string/test_number.rb +0 -44
  644. data/test/core/string/test_op_div.rb +0 -15
  645. data/test/core/string/test_op_sub.rb +0 -15
  646. data/test/core/string/test_pathize.rb +0 -31
  647. data/test/core/string/test_quote.rb +0 -41
  648. data/test/core/string/test_range.rb +0 -35
  649. data/test/core/string/test_remove.rb +0 -36
  650. data/test/core/string/test_rewrite.rb +0 -17
  651. data/test/core/string/test_rotate.rb +0 -31
  652. data/test/core/string/test_shatter.rb +0 -17
  653. data/test/core/string/test_similarity.rb +0 -14
  654. data/test/core/string/test_snakecase.rb +0 -22
  655. data/test/core/string/test_splice.rb +0 -37
  656. data/test/core/string/test_squish.rb +0 -31
  657. data/test/core/string/test_start_with.rb +0 -24
  658. data/test/core/string/test_store.rb +0 -16
  659. data/test/core/string/test_subtract.rb +0 -16
  660. data/test/core/string/test_tab.rb +0 -16
  661. data/test/core/string/test_titlecase.rb +0 -16
  662. data/test/core/string/test_to_re.rb +0 -35
  663. data/test/core/string/test_trim.rb +0 -116
  664. data/test/core/string/test_unbracket.rb +0 -38
  665. data/test/core/string/test_underscore.rb +0 -21
  666. data/test/core/string/test_unfold.rb +0 -17
  667. data/test/core/string/test_unindent.rb +0 -105
  668. data/test/core/string/test_unquote.rb +0 -13
  669. data/test/core/string/test_uppercase.rb +0 -22
  670. data/test/core/string/test_variablize.rb +0 -15
  671. data/test/core/string/test_word_wrap.rb +0 -80
  672. data/test/core/string/test_words.rb +0 -24
  673. data/test/core/string/test_xor.rb +0 -16
  674. data/test/core/symbol/test_as_s.rb +0 -15
  675. data/test/core/symbol/test_bang.rb +0 -15
  676. data/test/core/symbol/test_chomp.rb +0 -22
  677. data/test/core/symbol/test_generate.rb +0 -20
  678. data/test/core/symbol/test_not.rb +0 -19
  679. data/test/core/symbol/test_op_div.rb +0 -15
  680. data/test/core/symbol/test_plain.rb +0 -19
  681. data/test/core/symbol/test_query.rb +0 -19
  682. data/test/core/symbol/test_setter.rb +0 -17
  683. data/test/core/symbol/test_succ.rb +0 -16
  684. data/test/core/symbol/test_thrown.rb +0 -22
  685. data/test/core/symbol/test_to_proc.rb +0 -35
  686. data/test/core/symbol/test_variablize.rb +0 -14
  687. data/test/core/time/test_ago.rb +0 -18
  688. data/test/core/time/test_change.rb +0 -17
  689. data/test/core/time/test_dst_adjustment.rb +0 -19
  690. data/test/core/time/test_elapse.rb +0 -15
  691. data/test/core/time/test_future.rb +0 -32
  692. data/test/core/time/test_hence.rb +0 -18
  693. data/test/core/time/test_in.rb +0 -18
  694. data/test/core/time/test_less.rb +0 -139
  695. data/test/core/time/test_past.rb +0 -32
  696. data/test/core/time/test_round_to.rb +0 -34
  697. data/test/core/time/test_set.rb +0 -43
  698. data/test/core/time/test_shift.rb +0 -135
  699. data/test/core/time/test_stamp.rb +0 -42
  700. data/test/core/time/test_to_time.rb +0 -15
  701. data/test/core/time/test_trunc.rb +0 -34
  702. data/test/core/to_hash_tc.rb +0 -210
  703. data/test/core/unboundmethod/test_arguments.rb +0 -25
  704. data/test/core/unboundmethod/test_name.rb +0 -19
  705. data/test/standard/binding/test_block_exec.rb +0 -21
  706. data/test/standard/math/test_abs.rb +0 -13
  707. data/test/standard/math/test_acot.rb +0 -23
  708. data/test/standard/math/test_acoth.rb +0 -22
  709. data/test/standard/math/test_beta.rb +0 -19
  710. data/test/standard/math/test_ceil.rb +0 -22
  711. data/test/standard/math/test_cosec.rb +0 -19
  712. data/test/standard/math/test_cosech.rb +0 -19
  713. data/test/standard/math/test_cot.rb +0 -13
  714. data/test/standard/math/test_coth.rb +0 -13
  715. data/test/standard/math/test_distance.rb +0 -16
  716. data/test/standard/math/test_exp10.rb +0 -14
  717. data/test/standard/math/test_exp2.rb +0 -14
  718. data/test/standard/math/test_factorial.rb +0 -13
  719. data/test/standard/math/test_floor.rb +0 -23
  720. data/test/standard/math/test_gcd.rb +0 -18
  721. data/test/standard/math/test_lcm.rb +0 -13
  722. data/test/standard/math/test_median.rb +0 -17
  723. data/test/standard/math/test_percentile.rb +0 -13
  724. data/test/standard/math/test_pow.rb +0 -30
  725. data/test/standard/math/test_root.rb +0 -15
  726. data/test/standard/math/test_sec.rb +0 -19
  727. data/test/standard/math/test_sech.rb +0 -19
  728. data/test/standard/math/test_sign.rb +0 -20
  729. data/test/standard/math/test_sinc.rb +0 -15
  730. data/test/standard/math/test_srq.rb +0 -20
  731. data/test/standard/pathname/test_chdir.rb +0 -16
  732. data/test/standard/pathname/test_readline.rb +0 -23
  733. data/test/standard/test_argvector.rb +0 -64
  734. data/test/standard/test_cloneable.rb +0 -60
  735. data/test/standard/test_date.rb +0 -82
  736. data/test/standard/test_enumargs.rb +0 -89
  737. data/test/standard/test_equitable.rb +0 -46
  738. data/test/standard/test_instantiable.rb +0 -40
  739. data/test/standard/test_math.rb +0 -3
  740. data/test/standard/test_memoizable.rb +0 -42
  741. data/test/standard/test_multipliers.rb +0 -141
  742. data/test/standard/test_ostruct.rb +0 -191
  743. data/test/standard/test_random.rb +0 -241
  744. data/test/standard/test_shellwords.rb +0 -74
  745. data/test/standard/test_thread.rb +0 -24
  746. data/test/standard/test_timer.rb +0 -62
  747. data/test/standard/test_tuple.rb +0 -68
  748. data/test/standard/test_uri.rb +0 -50
@@ -2,26 +2,25 @@ require 'cgi'
2
2
 
3
3
  class CGI
4
4
 
5
- # Extends `#escape_html` to support escape modes. By default all strings
6
- # are escaped on `&`, `>` and `<`. Add the `:nonstandard` mode to omit
7
- # this conversion.
5
+ # Extended HTML/XHTML escaping with mode support. Unlike Ruby's built-in
6
+ # `CGI.escape_html`, this supports additional escape modes.
8
7
  #
9
- # If no mode is given then the `:default` mode is used.
10
- #
11
- # Available modes include:
8
+ # Available modes:
12
9
  # * `:quote` - escapes single and double quotes
13
10
  # * `:newlines` - escapes newline characters (\r and \n)
14
11
  # * `:ampersand` - escapes the ampersand sign
15
12
  # * `:brackets` - escapes less-than and greater-than signs
16
13
  # * `:default` - escapes double quotes
17
14
  #
15
+ # By default all strings are escaped on `&`, `>`, `<` and `"`.
16
+ #
18
17
  # @example
19
- # escape_html("<tag>") #=> "&lt;tag&gt;"
20
- # escape_html("Example\nString", :newlines) #=> "Example&#13;&#10;String"
21
- # escape_html("\"QUOTE\"", false) #=> "\"QUOTE\""
18
+ # CGI.escape_xhtml("<tag>") #=> "&lt;tag&gt;"
19
+ # CGI.escape_xhtml("Example\nString", :newlines) #=> "Example&#13;&#10;String"
20
+ # CGI.escape_xhtml("\"QUOTE\"", false) #=> "\"QUOTE\""
22
21
  #
23
- def self.escape_html(string, *modes)
24
- modes << :defualt if modes.empty?
22
+ def self.escape_xhtml(string, *modes)
23
+ modes << :default if modes.empty?
25
24
 
26
25
  unless modes.include?(:nonstandard)
27
26
  string = string.gsub(/&/, '&amp;').gsub(/>/, '&gt;').gsub(/</, '&lt;')
@@ -32,7 +31,7 @@ class CGI
32
31
  case mode
33
32
  when :quote, :quotes
34
33
  string.gsub(%r|"|,'&quot;').gsub(%r|'|,'&#39;')
35
- when :newlines, :newlines
34
+ when :newlines
36
35
  string.gsub(/[\r\n]+/,'&#13;&#10;')
37
36
  when :ampersand
38
37
  string.gsub(/&/, '&amp;')
@@ -41,23 +40,13 @@ class CGI
41
40
  when :default, true
42
41
  string.gsub(/\"/, '&quot;')
43
42
  when false
43
+ string
44
44
  else
45
- raise ArgumentError, "unrecognized HTML escape mode -- #{node}"
45
+ raise ArgumentError, "unrecognized HTML escape mode -- #{mode}"
46
46
  end
47
47
  end
48
- end
49
48
 
50
- class << self
51
- # @deprecated
52
- alias :escapeHTML :escape_html
53
- end
54
-
55
- if RUBY_VERSION < '1.9'
56
- class << self
57
- alias :unescape_html :unescapeHTML
58
- alias :escape_element :escapeElement
59
- alias :unescape_element :unescapeElement
60
- end
49
+ string
61
50
  end
62
51
 
63
52
  end
@@ -1,67 +1,20 @@
1
- # Clonable provides a standard basis for adding deep cloneablity to a class
2
- # via the standard #dup and #clone methods.
3
- #
4
- # Cloneable was originally ported from Jim Weirich's Rake.
5
- # The current version is the work of Ken Bloom.
6
- #
7
- # DEPRECATED: A better approach is to provide a #deep_dup and and a #deep_clone,
8
- # then if a class needs these for #dup and #clone they can just alias them.
9
- #
10
- # CREDIT: Ken Bloom
1
+ # @deprecated Use deep_dup/deep_clone instead, or define your own
2
+ # initialize_copy method.
3
+ warn "facets/cloneable is deprecated. Use deep_dup/deep_clone instead.", uplevel: 1
11
4
 
12
5
  module Cloneable
13
6
 
14
7
  def initialize_copy(sibling)
15
- # First duplicate my superclass' state. Note that if it's duplicating
16
- # instance variables, this will be overwritten, but this is important
17
- # because we could be dealing with a C extension with state hidden from
18
- # the Ruby interpreter.
19
8
  super
20
-
21
- # We want to know if we're being dup'ed or clone'd, because we want to
22
- # preserve the state of our internals the same way our state is being
23
- # preserved. (If we can't figure it out, we'll just use #dup.)
24
9
  operation = (
25
10
  copy_call = caller.find{|x| x !~ /'initialize_copy'/}
26
11
  copy_match = copy_call.match(/`(dup|clone)'/)
27
12
  copy_match ? copy_match[1] : :dup
28
13
  )
29
-
30
14
  sibling.instance_variables.each do |ivar|
31
15
  value = sibling.instance_variable_get(ivar)
32
-
33
- # Set my instance variable to be a #dup or #clone
34
- # or my sibling, depending on what's happening to me right now.
35
16
  instance_variable_set(ivar, value.send(operation))
36
17
  end
37
18
  end
38
19
 
39
- # TODO: Is there a more robust means of determining if clone or dup is used?
40
- #def clone
41
- # @_copy_operation = :clone
42
- # super
43
- #end
44
- #
45
- #def dup
46
- # @_copy_operation = :dup
47
- # super
48
- #end
49
-
50
- end
51
-
52
-
53
-
54
- # OLD VERSION
55
-
56
- #module Cloneable
57
- # def clone
58
- # sibling = self.class.new
59
- # instance_variables.each do |ivar|
60
- # value = self.instance_variable_get(ivar)
61
- # sibling.instance_variable_set(ivar, value.dup) #rake_dup)
62
- # end
63
- # sibling
64
- # end
65
- # alias_method :dup, :clone
66
- #end
67
-
20
+ end
@@ -1,56 +1,2 @@
1
- if defined?(Continuation)
2
-
3
- # = Continuation Extension
4
- #
5
- # Creates a continuation in a way that is easier to use than callcc.
6
- # On the initial call this will return the created Continuation and
7
- # the arguments you gave to Continuation.create in an Array. If you
8
- # then issue .call() on the Continuation execution will jump back to
9
- # the point of time where you initially invoked Continuation.create,
10
- # but this time it will return the Continuation and the arguments
11
- # you supplied in an Array.
12
- #
13
- # You can supply a block instead of default arguments which will
14
- # cause that block to be executed once and its result to be returned
15
- # along side the created Continuation, but this form is confusing
16
- # and does only rarely make sense.
17
- #
18
- # # Count from 0 to 10
19
- # cc, counter = Continuation.create(0)
20
- # counter #~> 0..10
21
- # cc.call(counter + 1) if counter < 10
22
- #
23
- # # Implement something similar to Array#inject using Continuations.
24
- # # For simplicity's sake, this is not fully compatible with the real
25
- # # inject. Make sure that you understand Array#inject before you try
26
- # # to understand this.
27
- # class ::Array
28
- # def cc_inject(value = nil)
29
- # copy = self.clone
30
- # cc, result, item = Continuation.create(value, nil)
31
- # next_item = copy.shift
32
- # if result and item
33
- # # Aggregate the result using the block.
34
- # cc.call(yield(result, item), next_item)
35
- # elsif next_item
36
- # # item not yet set and Array is not empty:
37
- # # This means we did not get a value and thus need to use the
38
- # # first item from the Array before we can start using the
39
- # # block to aggregate the result.
40
- # cc.call(next_item, result)
41
- # end
42
- #
43
- # return result
44
- # end
45
- # end
46
- # [1,2,3,4,5].cc_inject { |acc, n| acc + n } # => 15
47
- #
48
- def Continuation.create(*args, &block)
49
- args = [args] if not args.nil? and not args.is_a? Array # 1.6.8 compatibility
50
- cc = nil; result = callcc {|c| cc = c; block.call(cc) if block and args.empty?}
51
- result ||= args
52
- return *[cc, *result]
53
- end
54
-
55
- end
56
-
1
+ # @deprecated callcc is obsolete in Ruby. Use Fiber instead.
2
+ warn "facets/continuation is deprecated. callcc is obsolete; use Fiber instead.", uplevel: 1
@@ -0,0 +1,126 @@
1
+ # Crypt3 is a pure Ruby version of crypt(3), a salted one-way hashing
2
+ # of a password.
3
+ #
4
+ # Supported hashing algorithms are: md5, sha1, sha256, sha384, sha512, rmd160.
5
+ #
6
+ # Only the md5 hashing algorithm is standard and compatible with crypt(3),
7
+ # the others are not standard.
8
+ #
9
+ # Originally written by Poul-Henning Kamp (Beer-Ware License).
10
+ # Adapted by guillaume.pierronnet based on FreeBSD src/lib/libcrypt/crypt.c
11
+ #
12
+ # Copyright (c) 2002 Poul-Henning Kamp
13
+ # License: BSD-2-Clause
14
+
15
+ module Crypt3
16
+
17
+ VERSION = '1.2.0'
18
+
19
+ # Base 64 character set.
20
+ ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
21
+
22
+ # A pure ruby version of crypt(3), a salted one-way hashing of a password.
23
+ #
24
+ # Automatically generates an 8-byte salt if none given.
25
+ #
26
+ # Crypt3.crypt('password') #=> "$1$xxxxxxxx$hash..."
27
+ # Crypt3.crypt('password', :sha256) #=> "$1$xxxxxxxx$hash..."
28
+ #
29
+ # password - The phrase to encrypt. [String]
30
+ # algo - The algorithm to use. [Symbol]
31
+ # salt - Cryptographic salt, random if nil. [String]
32
+ # magic - The magic prefix. [String]
33
+ #
34
+ # Returns the cryptographic hash. [String]
35
+ def self.crypt(password, algo = :md5, salt = nil, magic = '$1$')
36
+ salt ||= generate_salt(8)
37
+
38
+ case algo
39
+ when :md5
40
+ require "digest/md5"
41
+ when :sha1
42
+ require "digest/sha1"
43
+ when :rmd160
44
+ require "digest/rmd160"
45
+ when :sha256, :sha384, :sha512
46
+ require "digest/sha2"
47
+ else
48
+ raise(ArgumentError, "unknown algorithm: #{algo}")
49
+ end
50
+
51
+ digest_class = Digest.const_get(algo.to_s.upcase)
52
+
53
+ m = digest_class.new
54
+ m.update(password + magic + salt)
55
+
56
+ mixin = digest_class.new.update(password + salt + password).digest
57
+ password.length.times do |i|
58
+ m.update(mixin[i % 16].chr)
59
+ end
60
+
61
+ i = password.length
62
+ while i != 0
63
+ if (i & 1) != 0
64
+ m.update("\x00")
65
+ else
66
+ m.update(password[0].chr)
67
+ end
68
+ i >>= 1
69
+ end
70
+
71
+ final = m.digest
72
+
73
+ 1000.times do |i|
74
+ m2 = digest_class.new
75
+ m2.update((i & 1) != 0 ? password : final)
76
+ m2.update(salt) if (i % 3) != 0
77
+ m2.update(password) if (i % 7) != 0
78
+ m2.update((i & 1) != 0 ? final : password)
79
+ final = m2.digest
80
+ end
81
+
82
+ rearranged = ""
83
+ [[0, 6, 12], [1, 7, 13], [2, 8, 14], [3, 9, 15], [4, 10, 5]].each do |a, b, c|
84
+ v = final.getbyte(a) << 16 | final.getbyte(b) << 8 | final.getbyte(c)
85
+ 4.times do
86
+ rearranged += ITOA64[v & 0x3f]
87
+ v >>= 6
88
+ end
89
+ end
90
+
91
+ v = final.getbyte(11)
92
+ 2.times do
93
+ rearranged += ITOA64[v & 0x3f]
94
+ v >>= 6
95
+ end
96
+
97
+ magic + salt + '$' + rearranged
98
+ end
99
+
100
+ # Check the validity of a password against a hashed string.
101
+ #
102
+ # Crypt3.check('password', '$1$xxxxxxxx$hash...') #=> true
103
+ #
104
+ # password - The phrase that was encrypted. [String]
105
+ # hash - The cryptographic hash. [String]
106
+ # algo - The algorithm used. [Symbol]
107
+ #
108
+ # Returns true if valid. [Boolean]
109
+ def self.check(password, hash, algo = :md5)
110
+ magic, salt = hash.split('$')[1, 2]
111
+ magic = '$' + magic + '$'
112
+ self.crypt(password, algo, salt, magic) == hash
113
+ end
114
+
115
+ # Generate a random salt of the given size.
116
+ #
117
+ # Crypt3.generate_salt(8) #=> "xK3d9Wq2"
118
+ #
119
+ # size - The size of the salt. [Integer]
120
+ #
121
+ # Returns random salt. [String]
122
+ def self.generate_salt(size)
123
+ (1..size).map { ITOA64[rand(ITOA64.size)] }.join
124
+ end
125
+
126
+ end
@@ -0,0 +1,32 @@
1
+
2
+ require 'date'
3
+
4
+ class Time
5
+ alias_method :old_compare, :<=>
6
+ private :old_compare
7
+
8
+ # Allow for Date <=> DateTime <=> Time, to work as expected.
9
+
10
+ def <=>(other)
11
+ if Date === other or DateTime === other
12
+ self.to_datetime <=> other
13
+ else
14
+ old_compare(other)
15
+ end
16
+ end
17
+ end
18
+
19
+ class Date
20
+ alias_method :old_compare, :<=>
21
+ private :old_compare
22
+
23
+ # Allow for Date <=> DateTime <=> Time, to work as expected.
24
+
25
+ def <=>(other)
26
+ if Time === other
27
+ self.to_datetime <=> other.to_datetime
28
+ else
29
+ old_compare(other)
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,6 @@
1
1
  require 'date'
2
2
  require 'facets/time/stamp'
3
+ require 'facets/date/cmp'
3
4
 
4
5
  # = Date
5
6
  #
@@ -1,2 +1 @@
1
- require 'facets/digest/base64digest'
2
1
  require 'facets/digest/salted_digest'
@@ -51,6 +51,11 @@ module Enumerable
51
51
  end
52
52
  }
53
53
  else
54
+ # this branch is used when the method has a variable number of arguments
55
+ # resulting in an arity of -1. Right now this is bugged as it does
56
+ # not pass the argument to the each, and always passes the argument
57
+ # to the method. This makes methods like .min amdn .max to act
58
+ # in an unexpected manner.
54
59
  class_eval %{
55
60
  def #{m}( *args, &yld )
56
61
  enum_for(:each).#{m}( *args, &yld )
@@ -14,7 +14,6 @@ module FileUtils
14
14
  # subdirectory is automatically skipped as well.
15
15
 
16
16
  def cp_rx(src, dest, options = {}, &filter)
17
- fu_check_options(options, OPT_TABLE['cp_r'])
18
17
  if options[:verbose]
19
18
  fu_output_message("cp -r#{options[:preserve] ? 'p' : ''}#{options[:remove_destination] ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}")
20
19
  end
@@ -41,4 +40,3 @@ module FileUtils
41
40
  end
42
41
 
43
42
  end
44
-
@@ -27,7 +27,6 @@ module FileUtils
27
27
  #
28
28
  # TODO: Why --remove-destination and not just --force?
29
29
  def ln_r(src, dest, options = {})
30
- fu_check_options options, OPT_TABLE['ln_r']
31
30
  fu_output_message "ln -r#{options[:remove_destination] ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]
32
31
  return if options[:noop]
33
32
  options = options.dup
@@ -1,5 +1,3 @@
1
- require 'facets/enumerator'
2
-
3
1
  module Find
4
2
  # Identical to find except select returns the matching files as an array.
5
3
  # (find returns nil, which is not very useful if you actually wanted an array.)
@@ -1,59 +1,3 @@
1
- require 'getoptlong'
2
-
3
- # = GetoptLong
4
- #
5
- # Ruby's standard GetoptLong class with an added DSL.
6
- #
7
- # opts = GetoptLong.new do
8
- # reqs '--expect', '-x'
9
- # flag '--help', '-h'
10
- # end
11
- #
12
- # See GetoptLong::DSL for details.
13
-
14
- class GetoptLong
15
-
16
- alias :init :initialize
17
-
18
- #
19
- def initialize(*arguments, &block)
20
- if block_given?
21
- raise ArgumentError unless arguments.empty?
22
- arguments = DSL.new(&block).arguments
23
- end
24
- init(*arguments)
25
- end
26
-
27
- # DSL-mode parser.
28
- class DSL
29
- attr :arguments
30
-
31
- def initialize(&block)
32
- @arguments = []
33
- instance_eval(&block)
34
- end
35
-
36
- #
37
- def flag(*opts)
38
- @arguments << (opts << GetoptLong::NO_ARGUMENT)
39
- end
40
-
41
- #
42
- def required(*opts)
43
- @arguments << (opts << GetoptLong::REQUIRED_ARGUMENT)
44
- end
45
-
46
- #
47
- alias :reqs :required
48
-
49
- #
50
- def optional(*opts)
51
- @arguments << (opts << GetoptLong::OPTIONAL_ARGUMENT)
52
- end
53
-
54
- #
55
- alias :opts :optional
56
- end
57
-
58
- end
59
-
1
+ # @deprecated GetoptLong is a bundled gem heading for removal.
2
+ # Consider using OptionParser or a modern CLI library instead.
3
+ warn "facets/getoptlong is deprecated. Consider OptionParser instead.", uplevel: 1
@@ -1,26 +1,2 @@
1
- module ::Kernel
2
- class << self
3
- alias_method :require_without_monitor, :require
4
- alias_method :load_without_monitor, :load
5
- end
6
-
7
- alias_method :require_without_monitor, :require
8
- alias_method :load_without_monitor, :load
9
-
10
- # Require script and print what is being require.
11
- def require(file)
12
- $stderr.puts "monitor require: #{file}\n#{caller.inspect}\n\n"
13
- require_without_monitor(file)
14
- end
15
-
16
- module_function :require
17
-
18
- # Load script and print what is being loaded.
19
- def load(file, wrap=false)
20
- $stderr.puts "monitor load: #{file}\n#{caller.inspect}\n\n"
21
- load_without_monitor(file, wrap)
22
- end
23
-
24
- module_function :load
25
- end
26
-
1
+ # @deprecated Monkey-patching require/load globally is dangerous.
2
+ warn "facets/load_monitor is deprecated. It monkey-patches require/load globally.", uplevel: 1
@@ -1,4 +1,5 @@
1
1
  require 'facets/math/approx_equal'
2
+ require 'facets/math/mean'
2
3
 
3
4
  module Math
4
5
 
@@ -13,11 +14,11 @@ module Math
13
14
  # GC = \frac{\sum_{i=1}^N (2i-N-1)x_i}{N^2-\bar{x}}
14
15
  #
15
16
  def self.gini_coefficient(array)
16
- return -1 if size <= 0 or any? { |x| x < 0 }
17
- return 0 if size < 2 or all? { |x| approx_equal(x,0) }
17
+ return -1 if array.size <= 0 or array.any? { |x| x < 0 }
18
+ return 0 if array.size < 2 or array.all? { |x| approx_equal(x,0) }
18
19
  s = 0
19
- sort.each_with_index { |li,i| s += (2*i+1-size)*li }
20
- s.to_f/(size**2*mean).to_f
20
+ array.sort.each_with_index { |li,i| s += (2*i+1-array.size)*li }
21
+ s.to_f/(array.size**2*mean(array)).to_f
21
22
  end
22
23
 
23
24
  ## OLD WAY
@@ -1,19 +1,20 @@
1
1
  module Math
2
2
 
3
- # The Kullback-Leibler divergence from this array to that of +q+.
3
+ # The Kullback-Leibler divergence from distribution +p+ to distribution +q+.
4
+ #
5
+ # Both arrays must be the same size and represent probability distributions
6
+ # (values should be positive).
4
7
  #
5
8
  # NB: You will possibly want to sort both P and Q before calling this
6
9
  # depending on what you're actually trying to measure.
7
10
  #
8
11
  # http://en.wikipedia.org/wiki/Kullback-Leibler_divergence
9
12
  #
10
- def self.kldivergence(array, q)
11
- fail "Buggy."
12
- fail "Cannot compare differently sized arrays." unless size = q.size
13
- kld = 0
14
- each_with_index { |pi,i| kld += pi*Math::log(pi.to_f/q[i].to_f) }
13
+ def self.kldivergence(p, q)
14
+ raise ArgumentError, "Cannot compare differently sized arrays." unless p.size == q.size
15
+ kld = 0.0
16
+ p.each_with_index { |pi, i| kld += pi * Math.log(pi.to_f / q[i].to_f) }
15
17
  kld
16
18
  end
17
19
 
18
20
  end
19
-
@@ -5,7 +5,7 @@ module Math
5
5
  # +pcnt+ should be expressed as an integer, e.g. `percentile(90)` returns
6
6
  # the 90th percentile of the array.
7
7
  #
8
- # Algorithm from NIST[http://www.itl.nist.gov/div898/handbook/prc/section2/prc252.htm]
8
+ # Algorithm from NIST[http://www.itl.nist.gov/div898/handbook/prc/section2/prc262.htm]
9
9
  #
10
10
  # NOTE: This is not a common core extension and is not
11
11
  # loaded automatically when using <code>require 'facets'</code>.
@@ -13,7 +13,7 @@ module Math
13
13
  # CREDIT: Ben Koski
14
14
  #
15
15
  # @non-core
16
- # require 'facets/array/precentile'
16
+ # require 'facets/math/percentile'
17
17
  #
18
18
  def self.percentile(array, pcnt)
19
19
  sorted_array = array.sort
@@ -76,7 +76,7 @@
76
76
  #
77
77
  # Copyright (c) 2007 Christoph Rippel, Thomas Sawyer
78
78
  #
79
- # Ruby License
79
+ # Ruby License / BSD-2 License
80
80
  #
81
81
  # This module is free software. You may use, modify, and/or redistribute this
82
82
  # software under the same terms as Ruby.
@@ -2,13 +2,17 @@ require 'net/http'
2
2
 
3
3
  module Net
4
4
 
5
+ # Returns a response object for the given URL or raises
6
+ # an exception with the appropriate error status code if unable to
7
+ # complete the request
8
+ #
9
+ # Net.download('http://example.com/')
10
+ # Net.download('http://example.com/', 2) # fail after 2 redirects
11
+ #
5
12
  # CREDIT: Daniel Huckstep
6
- def self.download(url, limit=10)
7
- raise ArgumentError, 'HTTP redirect too deep' if limit == 0
8
- #url = URI.parse(url)
9
- #req = Net::HTTP::Get.new(url.path)
10
- #req['User-Agent'] = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.10 (intrepid) Firefox/3.0.7"
11
- #resp = Net::HTTP.new(url.host, url.port).start { |http| http.request(req) }
13
+ def self.download(url, limit = nil)
14
+ limit ||= 10
15
+ raise ArgumentError, 'HTTP redirect too deep' if limit.zero?
12
16
  resp = Net::HTTP.get_response(URI.parse(url))
13
17
  case resp
14
18
  when Net::HTTPSuccess then resp
@@ -17,16 +21,31 @@ module Net
17
21
  end
18
22
  end
19
23
 
24
+ # Downloads a given URL and saves it to disk at the specified path.
25
+ # If path is not provided or nil, then the last segment in the path of
26
+ # the URL is used as the file name.
27
+ #
28
+ # Takes a third parameters as a hash of options:
29
+ # * <tt>limit</tt> - passed to Net.download to limit number of redirects
30
+ # * <tt>mode</tt>, <tt>:open_args<tt>, etc - passed to File.write to save the file.
31
+ # For details on those options, see File.write
32
+ #
33
+ # # Saves robots.txt to PWD as robots.txt
34
+ # Net.download_and_save('http://example.com/robots.txt')
35
+ #
36
+ # # Saves robots.txt to PWD as example.txt
37
+ # Net.download_and_save('http://example.com/robots.txt', 'example.txt')
38
+ #
39
+ # # Saves robots.txt to PWD as robots.txt, and writes the result as binary
40
+ # Net.download_and_save('http://example.com/robots.txt', nil, mode: 'wb')
41
+ #
20
42
  # CREDIT: Daniel Huckstep
21
- def self.download_and_save(url, path=nil)
22
- if path.nil?
23
- path = File.expand_path(url.split('/').last)
24
- else
25
- path = File.expand_path(path)
26
- end
43
+ def self.download_and_save(url, path = nil, options = {})
44
+ opts = options.dup
45
+ path = File.expand_path(path || url.split('/').last)
27
46
  raise ArgumentError.new('Save path is a directory') if File.directory?(path)
28
- resp = download(url)
29
- open(path,'w') { |file| file.write(resp.body) } if resp.is_a?(Net::HTTPSuccess)
47
+ resp = download(url, opts.delete(:limit))
48
+ File.write(path, resp.body, opts) if resp.is_a?(Net::HTTPSuccess)
30
49
  end
31
50
  end
32
51