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
@@ -8,7 +8,7 @@ class Exception
8
8
  # The Exception/StandardError object
9
9
  #
10
10
  # Output:
11
- # the pretty printed string
11
+ # The pretty printed string
12
12
  #
13
13
  # CREDIT: George Moschovitis
14
14
 
@@ -17,4 +17,3 @@ class Exception
17
17
  end
18
18
 
19
19
  end
20
-
@@ -3,14 +3,15 @@
3
3
  module Facets
4
4
  extend self
5
5
 
6
+ # REMOVED "facets/basicobject" b/c of coming 1.9.
7
+ # REMOVED "facets/continuaiton" b/c of coming 1.9.
8
+
6
9
  def require_core
7
10
  require "facets/array"
8
- require "facets/basicobject"
9
11
  require "facets/binding"
10
12
  require "facets/boolean"
11
13
  require "facets/class"
12
14
  require "facets/comparable"
13
- require "facets/continuation"
14
15
  require "facets/conversion"
15
16
  require "facets/curry"
16
17
  require "facets/dir"
@@ -1,22 +1,8 @@
1
- # TITLE:
2
- #
3
- # File Class Read Extensions
4
- #
5
- # DESCRIPTION:
6
- #
7
- # Class extensions to File for reading
8
- # and writing.
9
- #
10
- # AUTHORS:
11
- #
12
- # CREDIT Thomas Sawyer
13
- # CREDIT George Moschovitis
14
- # CREDIT Jeffrey Schwab
15
-
16
- #
17
1
  class File
18
2
 
19
3
  # Read in a file as binary data.
4
+ #
5
+ # CREDIT: George Moschovitis
20
6
 
21
7
  def self.read_binary(fname)
22
8
  open(fname, 'rb') {|f|
@@ -27,6 +13,8 @@ class File
27
13
  # Reads in a file, removes blank lines and remarks
28
14
  # (lines starting with '#') and then returns
29
15
  # an array of all the remaining lines.
16
+ #
17
+ # CREDIT: Trans
30
18
 
31
19
  def self.read_list(filepath, chomp_string='')
32
20
  farr = nil
@@ -39,46 +27,3 @@ class File
39
27
  end
40
28
 
41
29
  end
42
-
43
-
44
- # _____ _
45
- # |_ _|__ ___| |_
46
- # | |/ _ \/ __| __|
47
- # | | __/\__ \ |_
48
- # |_|\___||___/\__|
49
- #
50
- # TODO This isn't right. I'm not to clear on how to do File class-level Mocks.
51
-
52
- =begin #test
53
-
54
- require 'test/unit'
55
-
56
- class TestFileRead < Test::Unit::TestCase
57
-
58
- class MockFile < ::File
59
- def open( fname, mode, &blk )
60
- blk.call(self)
61
- end
62
- def read( fname=nil )
63
- @mock_content.clone
64
- end
65
- def write( str )
66
- @mock_content = str
67
- end
68
- def <<( str )
69
- (@mock_content ||="") << str
70
- end
71
- end
72
-
73
- File = MockFile.new
74
-
75
- def test_read_list
76
- f = File.write("A\nB\nC")
77
- s = File.read_list( f )
78
- r = ['A','B','C']
79
- assert_equal( r, s )
80
- end
81
-
82
- end
83
-
84
- =end
@@ -1,23 +1,9 @@
1
- # TITLE:
2
- #
3
- # Path Extensions
4
- #
5
- # DESCRIPTION:
6
- #
7
- # Path-related extensions.
8
- #
9
- # AUTHORS:
10
- #
11
- # CREDIT Thomas Sawyer
12
- # CREDIT Daniel Berger
13
-
14
- #
15
1
  class File
16
2
 
17
- # CREDIT Daniel Burger
18
-
19
3
  # Platform dependent null device.
20
4
  #
5
+ # CREDIT: Daniel Burger
6
+
21
7
  def self.null
22
8
  case RUBY_PLATFORM
23
9
  when /mswin/i
@@ -38,6 +24,8 @@ class File
38
24
  # File.rootname('/jump.rb') #=> '/'
39
25
  # File.rootname('jump.rb') #=> '.'
40
26
  #
27
+ # CREDIT: Trans
28
+
41
29
  def self.rootname( file_name )
42
30
  i = file_name.index('/')
43
31
  if i
@@ -54,6 +42,8 @@ class File
54
42
  #
55
43
  # File.split_all("a/b/c") => ['a', 'b', 'c']
56
44
  #
45
+ # CREDIT: Trans
46
+
57
47
  def self.split_all(path)
58
48
  head, tail = File.split(path)
59
49
  return [tail] if head == '.' || tail == '/'
@@ -63,6 +53,8 @@ class File
63
53
 
64
54
  # Cleans up a filename to ensure it will work on filesystem.
65
55
  #
56
+ # CREDIT: George Moschovitis
57
+
66
58
  def self.sanitize(filename)
67
59
  filename = File.basename(filename.gsub("\\", "/")) # work-around for IE
68
60
  filename.gsub!(/[^a-zA-Z0-9\.\-\+_]/,"_")
@@ -71,83 +63,3 @@ class File
71
63
  end
72
64
 
73
65
  end
74
-
75
- module FileTest
76
- # CREDIT Jeffrey Schwab
77
-
78
- # Is the specified directory the root directory?
79
- def self.root?(dir)
80
- pth = File.expand_path(dir)
81
- return true if pth == '/'
82
- return true if pth =~ /^(\w:)?\/$/
83
- false
84
- end
85
- end
86
-
87
-
88
-
89
- # _____ _
90
- # |_ _|__ ___| |_
91
- # | |/ _ \/ __| __|
92
- # | | __/\__ \ |_
93
- # |_|\___||___/\__|
94
- #
95
- =begin test
96
-
97
- require 'test/unit'
98
-
99
- # mock file
100
-
101
- class File
102
- def self.open( fname, mode, &blk )
103
- blk.call(self)
104
- end
105
- def self.read( fname=nil )
106
- @mock_content.clone
107
- end
108
- def self.write( str )
109
- @mock_content = str
110
- end
111
- def self.<<( str )
112
- (@mock_content ||="") << str
113
- end
114
- end
115
-
116
- # tests
117
-
118
- class TestFile < Test::Unit::TestCase
119
-
120
- # TODO Write file identity tests.
121
-
122
- def test_sanitize_01
123
- assert_equal( "This_is_a_test", File.sanitize('This is a test') )
124
- end
125
-
126
- def test_sanitize_02
127
- assert_equal( "test", File.sanitize('This\is\test') )
128
- end
129
-
130
- def test_sanitize_03
131
- assert_equal( "test", File.sanitize('This/is/test') )
132
- end
133
-
134
- def test_sanitize_04
135
- assert_equal( "te_____st", File.sanitize('This/te#$#@!st') )
136
- end
137
-
138
- def test_sanitize_05
139
- assert_equal( "_.", File.sanitize('.') )
140
- end
141
-
142
- def test_sanitize_06
143
- assert_equal( "_....", File.sanitize('....') )
144
- end
145
-
146
- def test_split_all
147
- fp = "this/is/test"
148
- assert_equal( ['this', 'is', 'test'], File.split_all(fp) )
149
- end
150
-
151
- end
152
-
153
- =end
@@ -1,30 +1,8 @@
1
- # TITLE:
2
- #
3
- # File Class Write Extensions
4
- #
5
- # DESCRIPTION:
6
- #
7
- # Class extensions to File for reading
8
- # and writing.
9
- #
10
- # AUTHORS:
11
- #
12
- # CREDIT Thomas Sawyer
13
- # CREDIT George Moschovitis
14
- # CREDIT Jeffrey Schwab
15
- #
16
- # LOG:
17
- #
18
- # - 2007.10.31 Trans
19
- # Added 'b' option to all write methods. Is this okay for Windows?
20
- #
21
- # - 2007.10.31 Trans
22
- # Added writelines method.
23
-
24
- #
25
1
  class File
26
2
 
27
3
  # Append to a file.
4
+ #
5
+ # CREDIT: George Moschovitis
28
6
 
29
7
  def self.append( file, str )
30
8
  File.open( file, 'ab' ) { |f|
@@ -32,8 +10,6 @@ class File
32
10
  }
33
11
  end
34
12
 
35
- # CREDIT George Moschovitis
36
-
37
13
  # Creates a new file, or overwrites an existing file,
38
14
  # and writes a string into it. Can also take a block
39
15
  # just like File#open, which is yielded _after_ the
@@ -41,34 +17,29 @@ class File
41
17
  #
42
18
  # str = 'The content for the file'
43
19
  # File.create('myfile.txt', str)
20
+ #
21
+ # CREDIT: George Moschovitis
44
22
 
45
23
  def self.create(path, str='', &blk)
46
- File.open(path, 'wb') { |f|
24
+ File.open(path, 'wb') do |f|
47
25
  f << str
48
26
  blk.call(f) if blk
49
- }
27
+ end
50
28
  end
51
29
 
52
- # Write file with string.
30
+ # Writes the given data to the given path and closes the file. This is
31
+ # done in binary mode, complementing <tt>IO.read</tt> in standard Ruby.
32
+ #
33
+ # Returns the number of bytes written.
34
+ #
35
+ # CREDIT: Gavin Sinclair
53
36
 
54
37
  def self.write(path, data)
55
- File.open(path, 'wb'){ |f| f.write(data) }
38
+ File.open(path, "wb") do |file|
39
+ return file.write(data)
40
+ end
56
41
  end
57
42
 
58
- # # Writes the given data to the given path and closes the file. This is
59
- # # done in binary mode, complementing <tt>IO.read</tt> in standard Ruby.
60
- # #
61
- # # Returns the number of bytes written.
62
- # #
63
- # # CREDIT Noah Gibbs
64
- # # CREDIT Gavin Sinclair
65
- #
66
- # def self.write(path, data)
67
- # File.open(path, "wb") do |file|
68
- # return file.write(data)
69
- # end
70
- # end
71
-
72
43
  # Writes the given array of data to the given path and closes the file.
73
44
  # This is done in binary mode, complementing <tt>IO.readlines</tt> in
74
45
  # standard Ruby.
@@ -76,12 +47,12 @@ class File
76
47
  # Note that +readlines+ (the standard Ruby method) returns an array of lines
77
48
  # <em>with newlines intact</em>, whereas +writelines+ uses +puts+, and so
78
49
  # appends newlines if necessary. In this small way, +readlines+ and
79
- # +writelines+ are not exact opposites.
50
+ # +writelines+ are not exact opposites.
80
51
  #
81
52
  # Returns +nil+.
82
53
  #
83
- # CREDIT Noah Gibbs
84
- # CREDIT Gavin Sinclair
54
+ # CREDIT: Noah Gibbs
55
+ # CREDIT: Gavin Sinclair
85
56
 
86
57
  def self.writelines(path, data)
87
58
  File.open(path, "wb") do |file|
@@ -103,11 +74,12 @@ class File
103
74
  # done) or to append to it.
104
75
  #
105
76
  # # Reverse contents of "message"
106
- # File.open_as_string("message") { |str| str.reverse! }
77
+ # File.rewrite("message") { |str| str.reverse! }
107
78
  #
108
79
  # # Replace "foo" by "bar" in "binary"
109
- # File.open_as_string("binary", "b") { |str| str.gsub!("foo", "bar") }
80
+ # File.rewrite("binary", "b") { |str| str.gsub!("foo", "bar") }
110
81
  #
82
+ # CREDIT: George Moschovitis
111
83
  #--
112
84
  # TODO Should it be in-place modification like this? Or would it be better
113
85
  # if whatever the block returns is written to the file instead?
@@ -1,12 +1,13 @@
1
-
2
1
  module FileTest
3
2
 
4
3
  module_function
5
4
 
6
- # Is this the root directory?
5
+ # Is the specified directory the root directory?
6
+ #
7
+ # CREDIT: Jeffrey Schwab
7
8
 
8
9
  def root?(dir=nil)
9
- pth = File.expand_path(dir||work)
10
+ pth = File.expand_path(dir||Dir.pwd)
10
11
  return true if pth == '/'
11
12
  return true if pth =~ /^(\w:)?\/$/
12
13
  false
@@ -14,16 +14,16 @@
14
14
  # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15
15
  # FOR A PARTICULAR PURPOSE.
16
16
  #
17
- # TODO:
18
- # - Consider renaming Functor to Dispatch or Dispatcher, or Func ?
19
- #
20
- # CREDIT:
17
+ # AUTHORS:
21
18
  # - Thomas Sawyer
22
19
  #
23
20
  # LOG:
24
21
  # - 2006-11-04 trans Deprecated #self. Call #self on the #binding instead.
25
22
  # - 2006-11-04 trans Deprecated #functor_function, renamed to #to_proc.
26
23
  # - 2006-11-04 trans All methods are now private except #binding and operators.
24
+ #
25
+ # TODO:
26
+ # - Consider renaming Functor to Dispatch or Dispatcher ?
27
27
 
28
28
  # = Functor
29
29
  #
@@ -46,7 +46,7 @@
46
46
  class Functor
47
47
 
48
48
  # Privatize all methods except vital methods, #binding and operators.
49
- private *instance_methods.select { |m| m !~ /(^__|^\W|^binding$)/ }
49
+ private(*instance_methods.select { |m| m !~ /(^__|^\W|^binding$)/ })
50
50
 
51
51
  def initialize(&function)
52
52
  @function = function
@@ -62,41 +62,3 @@ class Functor
62
62
  end
63
63
 
64
64
  end
65
-
66
-
67
-
68
- # _____ _
69
- # |_ _|__ ___| |_
70
- # | |/ _ \/ __| __|
71
- # | | __/\__ \ |_
72
- # |_|\___||___/\__|
73
- #
74
-
75
- =begin testing
76
-
77
- require 'test/unit'
78
-
79
- class TC_Functor < Test::Unit::TestCase
80
-
81
- def test_function
82
- f = Functor.new { |op, x| x.send(op, x) }
83
- assert_equal( 2, f + 1 ) #=> 2
84
- assert_equal( 4, f + 2 ) #=> 4
85
- assert_equal( 6, f + 3 ) #=> 6
86
- assert_equal( 1, f * 1 ) #=> 1
87
- assert_equal( 4, f * 2 ) #=> 4
88
- assert_equal( 9, f * 3 ) #=> 9
89
- end
90
-
91
- def test_decoration
92
- a = 'A'
93
- f = Functor.new{ |op, x| x.send(op, a + x) }
94
- assert_equal( 'BAB', f + 'B' )
95
- assert_equal( 'CAC', f + 'C' )
96
- assert_equal( 'DAD', f + 'D' )
97
- end
98
-
99
- end
100
-
101
- =end
102
-