facets 2.9.0 → 2.9.1

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 (242) hide show
  1. data/HISTORY.rdoc +34 -0
  2. data/{meta/profile → PROFILE} +15 -1
  3. data/README.rdoc +11 -17
  4. data/Rakefile +74 -31
  5. data/VERSION +1 -0
  6. data/lib/core-uncommon/facets/array/median.rb +17 -0
  7. data/lib/core-uncommon/facets/array/op_pow.rb +9 -0
  8. data/lib/{tour → core-uncommon}/facets/array/percentile.rb +3 -0
  9. data/lib/{tour → core-uncommon}/facets/class/preallocate.rb +3 -0
  10. data/lib/core-uncommon/facets/enumerable/has.rb +22 -0
  11. data/lib/core-uncommon/facets/enumerable/have.rb +1 -0
  12. data/lib/{tour → core-uncommon}/facets/integer/roman.rb +9 -0
  13. data/lib/{tour → core-uncommon}/facets/kernel/demo.rb +3 -0
  14. data/lib/{tour → core-uncommon}/facets/kernel/eigenclass.rb +3 -0
  15. data/lib/{tour → core-uncommon}/facets/kernel/instance_exec.rb +6 -0
  16. data/lib/{tour → core-uncommon}/facets/kernel/memo.rb +3 -0
  17. data/lib/{tour → core-uncommon}/facets/kernel/trap_chain.rb +3 -0
  18. data/lib/{tour → core-uncommon}/facets/kernel/y.rb +3 -0
  19. data/lib/{tour → core-uncommon}/facets/method/memoize.rb +3 -0
  20. data/lib/{tour → core-uncommon}/facets/module/attr_class_accessor.rb +6 -0
  21. data/lib/{tour → core-uncommon}/facets/module/attr_inheritor.rb +2 -0
  22. data/lib/{tour → core-uncommon}/facets/module/attr_tester.rb +8 -0
  23. data/lib/{tour → core-uncommon}/facets/module/attr_validator.rb +6 -0
  24. data/lib/{tour → core-uncommon}/facets/module/cattr.rb +24 -0
  25. data/lib/core-uncommon/facets/module/class_accessor.rb +33 -0
  26. data/lib/{tour → core-uncommon}/facets/module/class_extend.rb +3 -0
  27. data/lib/{tour → core-uncommon}/facets/module/class_inheritor.rb +3 -0
  28. data/lib/{tour → core-uncommon}/facets/module/copy_inheritor.rb +3 -0
  29. data/lib/{tour → core-uncommon}/facets/module/enclosure.rb +6 -0
  30. data/lib/{tour → core-uncommon}/facets/module/enclosures.rb +0 -0
  31. data/lib/{tour → core-uncommon}/facets/module/include_as.rb +0 -0
  32. data/lib/{tour → core-uncommon}/facets/module/instance_function.rb +2 -0
  33. data/lib/{tour → core-uncommon}/facets/module/memoize.rb +0 -0
  34. data/lib/{tour → core-uncommon}/facets/module/method_space.rb +5 -0
  35. data/lib/{tour → core-uncommon}/facets/module/module_load.rb +6 -0
  36. data/lib/{tour → core-uncommon}/facets/module/preextend.rb +3 -0
  37. data/lib/{tour → core-uncommon}/facets/module/prepend.rb +3 -0
  38. data/lib/{tour → core-uncommon}/facets/regexp/op_or.rb +2 -0
  39. data/lib/{tour → core-uncommon}/facets/string/crypt.rb +3 -0
  40. data/lib/{tour → core-uncommon}/facets/string/roman.rb +0 -0
  41. data/lib/core/facets.rb +19 -0
  42. data/lib/core/facets.yml +1144 -0
  43. data/lib/core/facets/applique/file_helpers.rb +4 -4
  44. data/lib/core/facets/array.rb +0 -1
  45. data/lib/core/facets/binding.rb +1 -1
  46. data/lib/core/facets/class.rb +1 -1
  47. data/lib/core/facets/comparable.rb +1 -1
  48. data/lib/core/facets/dir.rb +1 -1
  49. data/lib/core/facets/dir/recurse.rb +1 -1
  50. data/lib/core/facets/enumerable.rb +1 -1
  51. data/lib/core/facets/exception.rb +1 -1
  52. data/lib/core/facets/file.rb +1 -1
  53. data/lib/core/facets/file/create.rb +1 -1
  54. data/lib/core/facets/file/read_binary.rb +2 -2
  55. data/lib/core/facets/file/rewrite.rb +4 -4
  56. data/lib/core/facets/file/write.rb +1 -1
  57. data/lib/core/facets/file/writelines.rb +1 -1
  58. data/lib/core/facets/filetest.rb +1 -1
  59. data/lib/core/facets/filetest/absolute.rb +1 -0
  60. data/lib/core/facets/filetest/contains.rb +12 -0
  61. data/lib/core/facets/filetest/relative.rb +38 -0
  62. data/lib/core/facets/filetest/safe.rb +20 -0
  63. data/lib/core/facets/filetest/separator_pattern.rb +19 -0
  64. data/lib/core/facets/float.rb +1 -1
  65. data/lib/core/facets/hash.rb +1 -1
  66. data/lib/core/facets/integer.rb +1 -1
  67. data/lib/core/facets/kernel.rb +1 -1
  68. data/lib/core/facets/kernel/no.rb +1 -0
  69. data/lib/core/facets/kernel/object_hexid.rb +3 -1
  70. data/lib/core/facets/kernel/yes.rb +25 -0
  71. data/lib/core/facets/matchdata.rb +1 -1
  72. data/lib/core/facets/method.rb +1 -1
  73. data/lib/core/facets/module.rb +1 -1
  74. data/lib/core/facets/module/redefine_method.rb +4 -4
  75. data/lib/core/facets/nilclass.rb +1 -1
  76. data/lib/core/facets/numeric.rb +1 -1
  77. data/lib/core/facets/object.rb +1 -1
  78. data/lib/core/facets/object/replace.rb +2 -2
  79. data/lib/core/facets/objectspace.rb +1 -1
  80. data/lib/core/facets/proc.rb +1 -1
  81. data/lib/core/facets/process.rb +1 -1
  82. data/lib/core/facets/range.rb +1 -1
  83. data/lib/core/facets/regexp.rb +1 -1
  84. data/lib/core/facets/string.rb +1 -1
  85. data/lib/core/facets/string/file.rb +4 -2
  86. data/lib/core/facets/string/random_binary.rb +10 -0
  87. data/lib/core/facets/string/unquote.rb +1 -1
  88. data/lib/core/facets/struct.rb +1 -1
  89. data/lib/core/facets/symbol.rb +1 -1
  90. data/lib/core/facets/time.rb +1 -1
  91. data/lib/core/facets/unboundmethod.rb +1 -1
  92. data/lib/{more → standard}/facets/basicobject.rb +0 -0
  93. data/lib/{more → standard}/facets/cgi.rb +0 -0
  94. data/lib/{more → standard}/facets/continuation.rb +0 -0
  95. data/lib/{more → standard}/facets/date.rb +0 -0
  96. data/lib/standard/facets/digest.rb +2 -0
  97. data/lib/standard/facets/digest/base64digest.rb +45 -0
  98. data/lib/standard/facets/digest/salted_digest.rb +44 -0
  99. data/lib/{more → standard}/facets/erb.rb +0 -0
  100. data/lib/{more → standard}/facets/fileutils.rb +5 -0
  101. data/lib/standard/facets/fileutils/amass.rb +33 -0
  102. data/lib/{more → standard}/facets/fileutils/cp_rx.rb +3 -1
  103. data/lib/{more → standard}/facets/fileutils/head.rb +0 -0
  104. data/lib/standard/facets/fileutils/ln_r.rb +92 -0
  105. data/lib/standard/facets/fileutils/outofdate.rb +38 -0
  106. data/lib/{more → standard}/facets/fileutils/safe_ln.rb +0 -0
  107. data/lib/{more → standard}/facets/fileutils/slice.rb +14 -12
  108. data/lib/standard/facets/fileutils/stage.rb +66 -0
  109. data/lib/{more → standard}/facets/fileutils/tail.rb +0 -0
  110. data/lib/{more → standard}/facets/fileutils/wc.rb +0 -0
  111. data/lib/{more → standard}/facets/fileutils/whereis.rb +0 -0
  112. data/lib/{more → standard}/facets/fileutils/which.rb +2 -0
  113. data/lib/{more → standard}/facets/find.rb +0 -0
  114. data/lib/{more → standard}/facets/getoptlong.rb +0 -0
  115. data/lib/{more → standard}/facets/math.rb +1 -1
  116. data/lib/{more → standard}/facets/math/abs.rb +0 -0
  117. data/lib/{more → standard}/facets/math/acot.rb +0 -0
  118. data/lib/{more → standard}/facets/math/acoth.rb +0 -0
  119. data/lib/{more → standard}/facets/math/acsc.rb +0 -0
  120. data/lib/{more → standard}/facets/math/acsch.rb +0 -0
  121. data/lib/{more → standard}/facets/math/amd.rb +0 -0
  122. data/lib/{more → standard}/facets/math/approx_equal.rb +1 -1
  123. data/lib/{more → standard}/facets/math/asec.rb +0 -0
  124. data/lib/{more → standard}/facets/math/asech.rb +0 -0
  125. data/lib/{more → standard}/facets/math/atkinson_index.rb +0 -0
  126. data/lib/{more → standard}/facets/math/beta.rb +0 -0
  127. data/lib/{more → standard}/facets/math/cdf.rb +0 -0
  128. data/lib/{more → standard}/facets/math/ceil.rb +0 -0
  129. data/lib/{more → standard}/facets/math/cot.rb +0 -0
  130. data/lib/{more → standard}/facets/math/coth.rb +0 -0
  131. data/lib/{more → standard}/facets/math/csc.rb +0 -0
  132. data/lib/{more → standard}/facets/math/csch.rb +0 -0
  133. data/lib/{more → standard}/facets/math/delta.rb +2 -1
  134. data/lib/{more → standard}/facets/math/epsilon.rb +0 -0
  135. data/lib/{more → standard}/facets/math/exp10.rb +0 -0
  136. data/lib/{more → standard}/facets/math/exp2.rb +0 -0
  137. data/lib/{more → standard}/facets/math/factorial.rb +0 -0
  138. data/lib/{more → standard}/facets/math/floor.rb +0 -0
  139. data/lib/{more → standard}/facets/math/gamma.rb +0 -0
  140. data/lib/{more → standard}/facets/math/gcd.rb +0 -0
  141. data/lib/{more → standard}/facets/math/gini_coefficient.rb +0 -0
  142. data/lib/{more → standard}/facets/math/kldivergence.rb +0 -0
  143. data/lib/{more → standard}/facets/math/lcm.rb +0 -0
  144. data/lib/{more → standard}/facets/math/lgamma.rb +0 -0
  145. data/lib/{more → standard}/facets/math/linsolve.rb +0 -0
  146. data/lib/{more → standard}/facets/math/log2.rb +0 -0
  147. data/lib/{more → standard}/facets/math/max.rb +0 -0
  148. data/lib/{more → standard}/facets/math/mean.rb +0 -0
  149. data/lib/{more → standard}/facets/math/median.rb +0 -0
  150. data/lib/{more → standard}/facets/math/min.rb +0 -0
  151. data/lib/{more → standard}/facets/math/pow.rb +0 -0
  152. data/lib/{more → standard}/facets/math/pstd.rb +0 -0
  153. data/lib/{more → standard}/facets/math/pvariance.rb +0 -0
  154. data/lib/{more → standard}/facets/math/rmd.rb +0 -0
  155. data/lib/{more → standard}/facets/math/root.rb +0 -0
  156. data/lib/{more → standard}/facets/math/sec.rb +0 -0
  157. data/lib/{more → standard}/facets/math/sech.rb +0 -0
  158. data/lib/{more → standard}/facets/math/sign.rb +0 -0
  159. data/lib/{more → standard}/facets/math/sinc.rb +0 -0
  160. data/lib/{more → standard}/facets/math/sqr.rb +0 -0
  161. data/lib/{more → standard}/facets/math/sqsolve.rb +0 -0
  162. data/lib/{more → standard}/facets/math/std.rb +0 -0
  163. data/lib/{more → standard}/facets/math/stderr.rb +0 -0
  164. data/lib/{more → standard}/facets/math/sum.rb +0 -0
  165. data/lib/{more → standard}/facets/math/summed_sqdevs.rb +0 -0
  166. data/lib/{more → standard}/facets/math/theil_index.rb +0 -0
  167. data/lib/{more → standard}/facets/math/variance.rb +0 -0
  168. data/lib/standard/facets/net/http.rb +32 -0
  169. data/lib/{more → standard}/facets/ostruct.rb +0 -0
  170. data/lib/{more → standard}/facets/pathname.rb +1 -0
  171. data/lib/{more → standard}/facets/random.rb +2 -2
  172. data/lib/standard/facets/rbconfig.rb +78 -0
  173. data/lib/{more → standard}/facets/set.rb +0 -0
  174. data/lib/{more → standard}/facets/shellwords.rb +2 -0
  175. data/lib/standard/facets/strscan.rb +16 -0
  176. data/lib/{more → standard}/facets/thread.rb +0 -0
  177. data/lib/{more → standard}/facets/uri.rb +0 -0
  178. data/lib/{more → standard}/facets/yaml.rb +0 -0
  179. data/lib/{more → standard}/facets/zlib.rb +0 -0
  180. data/lib/{more → supplemental}/facets/argvector.rb +0 -0
  181. data/lib/{more → supplemental}/facets/atomicfile.rb +0 -0
  182. data/lib/{more → supplemental}/facets/interval.rb +0 -0
  183. data/lib/{more → supplemental}/facets/main.rb +0 -0
  184. data/lib/{more → supplemental}/facets/memoizable.rb +0 -0
  185. data/lib/{more → supplemental}/facets/metaid.rb +0 -0
  186. data/lib/{more → supplemental}/facets/multipliers.rb +0 -0
  187. data/lib/{more → supplemental}/facets/multiton.rb +0 -0
  188. data/lib/{more → supplemental}/facets/nullclass.rb +0 -0
  189. data/lib/{more → supplemental}/facets/opesc.rb +0 -0
  190. data/lib/{more → supplemental}/facets/platform.rb +156 -5
  191. data/lib/{more → supplemental}/facets/reference.rb +0 -0
  192. data/lib/{more → supplemental}/facets/timer.rb +0 -0
  193. data/lib/{more → supplemental}/facets/tuple.rb +0 -0
  194. data/qed/applique/file_helpers.rb +10 -0
  195. data/qed/{tour → core-uncommon}/module/cattr.rdoc +0 -0
  196. data/qed/{tour → core-uncommon}/module/class_extend.rdoc +0 -0
  197. data/qed/{tour → core-uncommon}/module/class_inheritor.rdoc +0 -0
  198. data/qed/{tour → core-uncommon}/module/copy_inheritor.rdoc +0 -0
  199. data/qed/{tour → core-uncommon}/module/method_space.rdoc +0 -0
  200. data/qed/{more → standard}/basic_object.rdoc +0 -0
  201. data/qed/{more → supplemental}/memoizable.rdoc +0 -0
  202. data/qed/{more → supplemental}/mulititon.rdoc +0 -0
  203. data/test/{tour → core-uncommon}/array/test_median.rb +0 -0
  204. data/test/{tour → core-uncommon}/array/test_percentile.rb +0 -0
  205. data/test/{tour → core-uncommon}/class/test_preallocate.rb +0 -0
  206. data/test/{tour → core-uncommon}/module/test_cattr.rb +0 -0
  207. data/test/{tour → core-uncommon}/module/test_class_extend.rb +0 -0
  208. data/test/{tour → core-uncommon}/module/test_class_inheritor.rb +0 -0
  209. data/test/{tour → core-uncommon}/module/test_copy_inheritor.rb +0 -0
  210. data/test/{tour → core-uncommon}/module/test_enclosure.rb +0 -0
  211. data/test/{tour → core-uncommon}/module/test_instance_function.rb +0 -0
  212. data/test/{tour → core-uncommon}/module/test_memoize.rb +0 -0
  213. data/test/{tour → core-uncommon}/module/test_method_space.rb +0 -0
  214. data/test/{tour → core-uncommon}/module/test_module_load.rb +0 -0
  215. data/test/{tour → core-uncommon}/module/test_preextend.rb +0 -0
  216. data/test/{tour → core-uncommon}/module/test_prepend.rb +0 -0
  217. data/test/core/dir/test_each_child.rb +1 -1
  218. data/test/core/dir/test_multiglob.rb +2 -2
  219. data/test/core/hash/test_zip.rb +12 -0
  220. data/test/core/{kernel → object}/test_dup.rb +51 -1
  221. data/test/core/{kernel → object}/test_object_state.rb +1 -1
  222. data/test/core/{kernel → object}/test_replace.rb +12 -12
  223. data/test/core/{kernel → object}/test_try_dup.rb +2 -2
  224. data/test/{more → standard}/test_date.rb +0 -0
  225. data/test/{more → standard}/test_ostruct.rb +0 -0
  226. data/test/{more → standard}/test_random.rb +0 -0
  227. data/test/{more → standard}/test_shellwords.rb +0 -0
  228. data/test/{more → standard}/test_thread.rb +0 -0
  229. data/test/{more → standard}/test_timer.rb +0 -0
  230. data/test/{more → standard}/test_uri.rb +0 -0
  231. data/test/{more → supplemental}/test_argvector.rb +0 -0
  232. data/test/{more → supplemental}/test_memoizable.rb +0 -0
  233. data/test/{more → supplemental}/test_multipliers.rb +0 -0
  234. data/test/{more → supplemental}/test_tuple.rb +0 -0
  235. metadata +224 -204
  236. data/lib/more/facets/rbconfig.rb +0 -150
  237. data/lib/tour/facets/array/median.rb +0 -14
  238. data/lib/tour/facets/array/op_pow.rb +0 -5
  239. data/lib/tour/facets/module/class_accessor.rb +0 -27
  240. data/meta/data.rb +0 -29
  241. data/meta/package +0 -10
  242. data/test/core/hash/test_zipnew.rb +0 -12
@@ -23,11 +23,11 @@ end
23
23
 
24
24
  # Used for File extensions
25
25
  When "had a file '(((.*?)))'" do |name|
26
- name = name.sub(/^tmp\//, '')
27
- File.open("tmp/#{name}", 'w'){|f| f << "Hello World"}
26
+ name = name.sub(/^tmp\//, '') # b/c QED now runs from tmp/qed
27
+ File.open(name, 'w'){|f| f << "Hello World"}
28
28
  end
29
29
 
30
30
  When "had a binary file '(((.*?)))'" do |name|
31
- name = name.sub(/^tmp\//, '')
32
- File.open("tmp/#{name}", 'wb'){|f| f << "Hello\nWorld\n"}
31
+ name = name.sub(/^tmp\//, '') # b/c QED now runs from tmp/qed
32
+ File.open(name, 'wb'){|f| f << "Hello\nWorld\n"}
33
33
  end
@@ -4,4 +4,3 @@ Dir[File.join(path, '*.rb')].each do |lib|
4
4
  #require lib # why is this so much slower?
5
5
  require "facets/#{base}/#{File.basename(lib)}"
6
6
  end
7
-
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -2,7 +2,7 @@ class Dir
2
2
 
3
3
  # Recursively scan a directory and pass each file to the given block.
4
4
  #
5
- # Dir.recurse('tmp') do |path|
5
+ # Dir.recurse('.') do |path|
6
6
  # # ...
7
7
  # end
8
8
  #
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -6,7 +6,7 @@ class File
6
6
  # string is writ.
7
7
  #
8
8
  # str = 'The content for the file'
9
- # File.create('tmp/myfile.txt', str)
9
+ # File.create('myfile.txt', str)
10
10
  #
11
11
  # CREDIT: George Moschovitis
12
12
 
@@ -2,9 +2,9 @@ class File
2
2
 
3
3
  # Read in a file as binary data.
4
4
  #
5
- # Assuming we had a binary file 'tmp/binary.dat'.
5
+ # Assuming we had a binary file 'binary.dat'.
6
6
  #
7
- # File.read_binary('tmp/binary.dat')
7
+ # File.read_binary('binary.dat')
8
8
  #
9
9
  # CREDIT: George Moschovitis
10
10
 
@@ -16,10 +16,10 @@ class File
16
16
  # Assuming we had a file 'message.txt' and had a binary file 'binary.dat'.
17
17
  #
18
18
  # # Reverse contents of "message.txt"
19
- # File.rewrite("tmp/message.txt") { |str| str.reverse }
19
+ # File.rewrite("message.txt") { |str| str.reverse }
20
20
  #
21
21
  # # Replace "foo" by "bar" in "binary.dat".
22
- # File.rewrite("tmp/binary.dat", "b") { |str| str.gsub("foo", "bar") }
22
+ # File.rewrite("binary.dat", "b") { |str| str.gsub("foo", "bar") }
23
23
  #
24
24
  # IMPORTANT: The old version of this method required in place modification
25
25
  # of the file string. The new version will write whatever the block
@@ -56,10 +56,10 @@ class File
56
56
  # string be modified in place within the block.
57
57
  #
58
58
  # # Reverse contents of "message"
59
- # File.rewrite("tmp/message.txt") { |str| str.reverse! }
59
+ # File.rewrite("message.txt") { |str| str.reverse! }
60
60
  #
61
61
  # # Replace "foo" by "bar" in "binary"
62
- # File.rewrite("tmp/binary.dat", "b") { |str| str.gsub!("foo", "bar") }
62
+ # File.rewrite("binary.dat", "b") { |str| str.gsub!("foo", "bar") }
63
63
  #
64
64
  def self.rewrite!(name, mode = "") #:yield:
65
65
  unless block_given?
@@ -6,7 +6,7 @@ class File
6
6
  # done in binary mode, complementing <tt>IO.read</tt> in standard Ruby.
7
7
  #
8
8
  # str = 'The content for the file'
9
- # File.write('tmp/write.txt', str)
9
+ # File.write('write.txt', str)
10
10
  #
11
11
  # Returns the number of bytes written.
12
12
  #
@@ -10,7 +10,7 @@ class File
10
10
  # +writelines+ are not exact opposites.
11
11
  #
12
12
  # data = ['The content', ['for the file']]
13
- # File.writelines('tmp/writelines.txt', data)
13
+ # File.writelines('writelines.txt', data)
14
14
  #
15
15
  # Returns number of lines written.
16
16
  #
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -0,0 +1 @@
1
+ require 'facets/filetest/relative'
@@ -0,0 +1,12 @@
1
+ module FileTest
2
+
3
+ module_function
4
+
5
+ # Does the +parent+ contain the +child+?
6
+ def contains?(child, parent=Dir.pwd)
7
+ parent = File.expand_path(parent)
8
+ child = File.expand_path(child)
9
+ child.sub(parent,'') != child
10
+ end
11
+
12
+ end
@@ -0,0 +1,38 @@
1
+ require 'facets/filetest/separator_pattern'
2
+
3
+ module FileTest
4
+
5
+ module_function
6
+
7
+ # Predicate method for testing whether a path is absolute.
8
+ # It returns +true+ if the pathname begins with a slash.
9
+ def absolute?(path)
10
+ !relative?(path)
11
+ end
12
+
13
+ # The opposite of #absolute?
14
+ def relative?(path)
15
+ while r = chop_basename(path.to_s)
16
+ path, basename = r
17
+ end
18
+ path == ''
19
+ end
20
+
21
+ # List File.split, but preserves the file separators.
22
+ #
23
+ # FileTest.chop_basename('/usr/lib') #=> ['/usr/', 'lib']
24
+ # FileTest.chop_basename('/') #=> nil
25
+ #
26
+ # Returns Array of `[pre-basename, basename]` or `nil`.
27
+ #
28
+ # This method is here simply to support the #relative? and #absolute? methods.
29
+ def chop_basename(path)
30
+ base = File.basename(path)
31
+ if /\A#{SEPARATOR_PATTERN}?\z/ =~ base
32
+ return nil
33
+ else
34
+ return path[0, path.rindex(base)], base
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,20 @@
1
+ require 'facets/filetest/separator_pattern'
2
+
3
+ module FileTest
4
+
5
+ module_function
6
+
7
+ # Is a path considered reasonably "safe"?
8
+ #
9
+ # Do not mistake this for a perfect solution!
10
+ def safe?(path)
11
+ case path
12
+ when /\A(#{SEPARATOR_PATTERN}|\~)(#{SEPARATOR_PATTERN}|\*)+/
13
+ false
14
+ else
15
+ true
16
+ end
17
+ end
18
+
19
+ end
20
+
@@ -0,0 +1,19 @@
1
+ module FileTest
2
+
3
+ #
4
+ SEPARATOR_PATTERN = (
5
+ if File::ALT_SEPARATOR
6
+ /[#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}]/
7
+ else
8
+ /#{Regexp.quote File::SEPARATOR}/
9
+ end
10
+ ).freeze
11
+
12
+ #module_function
13
+ #
14
+ # #
15
+ # def separator_pattern
16
+ # SEPARATOR_PATTERN
17
+ # end
18
+
19
+ end
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -0,0 +1 @@
1
+ require 'facets/kernel/yes'
@@ -1,6 +1,8 @@
1
1
  module Kernel
2
2
 
3
- if RUBY_VERSION < '1.9'
3
+ arch_size = (['a'].pack('P').length > 4 ? 64 : 32)
4
+
5
+ if arch_size == 64
4
6
 
5
7
  # Returns the object id as a string in hexideciaml,
6
8
  # which is how Ruby reports them with inspect...
@@ -0,0 +1,25 @@
1
+ require 'facets/kernel/ask'
2
+
3
+ module Kernel
4
+
5
+ # Ask a question expecting a yes answer.
6
+ def yes?(question)
7
+ case ask(question).downcase
8
+ when 'y', 'yes'
9
+ true
10
+ else
11
+ false
12
+ end
13
+ end
14
+
15
+ # Ask a question expecting a no answer.
16
+ def no?(question)
17
+ case ask(question).downcase
18
+ when 'n', 'no'
19
+ true
20
+ else
21
+ false
22
+ end
23
+ end
24
+
25
+ end
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -24,10 +24,10 @@ class Module
24
24
  # CREDIT: Trans
25
25
 
26
26
  def redefine_method(sym, aka=nil, &blk)
27
- raise ArgumentError, "method does not exist" unless method_defined?( sym )
28
- alias_method( aka, sym ) if aka
29
- undef_method( sym )
30
- define_method( sym, &blk )
27
+ #raise ArgumentError, "method does not exist" unless method_defined?( sym )
28
+ alias_method(aka, sym) if aka
29
+ undef_method(sym)
30
+ define_method(sym, &blk)
31
31
  end
32
32
 
33
33
  alias_method :redef, :redefine_method
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -25,7 +25,7 @@ class Object
25
25
  # This is very similar to <code>instance.update</code>, but it is limited
26
26
  # by the class of objects, in the same manner as Array#replace.
27
27
  def replace(source)
28
- raise ArgumentError, "not a #{self.class}" unless source.is_a?(self.class)
28
+ raise ArgumentError, "not a #{self.class} -- #{source}" unless source.is_a?(self.class)
29
29
  instance_variables.each do |iv|
30
30
  instance_variable_set(iv, source.instance_variable_get(iv))
31
31
  end
@@ -35,7 +35,7 @@ end
35
35
 
36
36
  class Struct
37
37
 
38
- # Struct#replace can take a hash.
38
+ # Struct#replace can take any +source+ that responds to #each_pair.
39
39
  def replace(source)
40
40
  source.each_pair{ |k,v| send(k.to_s + "=", v) }
41
41
  end
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  dir, base = *File.split(__FILE__)
2
2
  base = base.chomp('.rb')
3
- Dir[File.join(dir, base, '*')].each do |lib|
3
+ Dir[File.join(dir, base, '*.rb')].each do |lib|
4
4
  require "facets/#{base}/#{File.basename(lib)}"
5
5
  end
6
6