facets 2.9.0 → 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,66 @@
1
+ require 'fileutils'
2
+
3
+ module FileUtils
4
+ module_function
5
+
6
+ # Stage by hard linking included files to a stage directory.
7
+ #
8
+ # stage_directory - Where to stage the files
9
+ # source_directory - Where to find files to stage
10
+ # files - Files to link in stage relative to source
11
+ #
12
+ # TODO: Rename to #link_stage or something less likely to name clash?
13
+ # TODO: Add options for :verbose, :noop and :dryrun ?
14
+ #
15
+ def stage(stage_directory, source_directory, files, options={})
16
+ return stage_directory if options[:noop] || options[:dryrun]
17
+
18
+ stage_directory, source_directory = stage_directory.to_s, source_directory.to_s
19
+ ## ensure existance of staging area
20
+ rm_r(stage_directory) if File.directory?(stage_directory)
21
+ mkdir_p(stage_directory)
22
+ ## link files into staging area
23
+ files.each do |f|
24
+ src = File.join(source_directory, f)
25
+ file = File.join(stage_directory, f)
26
+ if File.directory?(src)
27
+ mkdir_p(file) unless File.exist?(file)
28
+ else
29
+ fdir = File.dirname(file)
30
+ mkdir_p(fdir) unless File.exist?(fdir)
31
+ unless File.exist?(file) and File.mtime(file) >= File.mtime(src)
32
+ ln(src, file) #safe_ln ?
33
+ end
34
+ end
35
+ end
36
+ return stage_directory
37
+ end
38
+
39
+ # Make public (for all submodules too).
40
+ public :stage
41
+
42
+ module NoWrite
43
+ module_function
44
+ def stage(stage_directory, files, options={})
45
+ options[:noop] = true
46
+ FileUtils.stage(stage_directory, files, options={})
47
+ end
48
+ end
49
+
50
+ module Verbose
51
+ module_function
52
+ def stage(stage_directory, files, options={})
53
+ options[:verbose] = true
54
+ FileUtils.stage(stage_directory, files, options={})
55
+ end
56
+ end
57
+
58
+ module DryRun
59
+ module_function
60
+ def stage(stage_directory, files, options={})
61
+ options[:dryrun] = true
62
+ FileUtils.stage(stage_directory, files, options={})
63
+ end
64
+ end
65
+
66
+ end
@@ -9,6 +9,8 @@ module FileUtils
9
9
  Win32Exts = %w{.exe .com .bat .cmd}
10
10
  end
11
11
 
12
+ module_function
13
+
12
14
  # Looks for the first occurrence of _program_ within _path_.
13
15
  #
14
16
  # On the MS Windows platform, it looks for executables ending with .exe,
File without changes
@@ -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
 
@@ -5,7 +5,7 @@ module Math
5
5
 
6
6
  # Approximately equal.
7
7
  #
8
- # TODO: Use core extension Numeric#approx? instead.
8
+ # TODO: Use core extension Numeric#approx? instead (?)
9
9
  def self.approx_equal(a, b, epsilon=EPSILON)
10
10
  c = a - b
11
11
  c *= -1.0 if c < 0
@@ -1,6 +1,7 @@
1
1
  module Math
2
2
 
3
- # Kronecker symbol of +i+ and +j+ - 1 if +i+ and +j+ are equal, 0 otherwise.
3
+ # Kronecker symbol of +i+ and +j+.
4
+ # Returns 1 if +i+ and +j+ are equal, 0 otherwise.
4
5
  def self.delta(i, j)
5
6
  return Integer(i) == Integer(j) ? 1 : 0
6
7
  end
@@ -0,0 +1,32 @@
1
+ require 'net/http'
2
+
3
+ module Net
4
+
5
+ # 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) }
12
+ resp = Net::HTTP.get_response(URI.parse(url))
13
+ case resp
14
+ when Net::HTTPSuccess then resp
15
+ when Net::HTTPRedirection then download(resp['location'], limit - 1)
16
+ else resp.error!
17
+ end
18
+ end
19
+
20
+ # 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
27
+ 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)
30
+ end
31
+ end
32
+
File without changes
@@ -22,6 +22,7 @@
22
22
 
23
23
  require 'pathname'
24
24
  require 'facets/file/rootname'
25
+ require 'facets/fileutils/outofdate'
25
26
 
26
27
  class Pathname
27
28
 
@@ -1,4 +1,4 @@
1
- require 'facets/hash/zipnew'
1
+ require 'facets/hash/zip'
2
2
  require 'facets/string/shatter'
3
3
  require 'facets/kernel/maybe'
4
4
 
@@ -314,7 +314,7 @@ class Random
314
314
  # h.shuffle #~> {:b=>2, :c=>1, :a>3}
315
315
  #
316
316
  def shuffle
317
- ::Hash.zipnew( keys.sort_by{Random.number}, values.sort_by{Random.number} )
317
+ ::Hash.zip( keys.sort_by{Random.number}, values.sort_by{Random.number} )
318
318
  end
319
319
 
320
320
  # Destructive shuffle_hash. Arrange the values in
@@ -0,0 +1,78 @@
1
+ # An extended rendition of the Ruby's standard RbConfig module.
2
+ module RbConfig
3
+
4
+ #
5
+ def self.inspect
6
+ CONFIG.inspect
7
+ end
8
+
9
+ # Methodized lookup of config.
10
+ def self.method_missing(s,*a,&b)
11
+ s = s.to_s
12
+ if CONFIG.key?(s)
13
+ CONFIG[s]
14
+ elsif CONFIG.key?(s.upcase)
15
+ CONFIG[s.upcase]
16
+ else
17
+ super(s,*a,&b)
18
+ end
19
+ end
20
+
21
+ # TODO: parse configure_args into methods too?
22
+
23
+ # In case rubygems has already defined it.
24
+ unless method_defined?(:datadir)
25
+ # Return the path to the data directory associated with the
26
+ # given library/package name. Normally this is just
27
+ #
28
+ # "#{Config::CONFIG['datadir']}/#{name}"
29
+ #
30
+ # but may be modified by tools like RubyGems to handle
31
+ # versioned data directories.
32
+ def self.datadir(package_name)
33
+ File.join(CONFIG['datadir'], package_name)
34
+ end
35
+ end
36
+
37
+ #
38
+ def self.host_os
39
+ CONFIG['host_os']
40
+ end
41
+
42
+ def linux?
43
+ host_os =~ /linux|cygwin/
44
+ end
45
+
46
+ def mac?
47
+ host_os =~ /mac|darwin/
48
+ end
49
+
50
+ def bsd?
51
+ host_os =~ /bsd/
52
+ end
53
+
54
+ def windows?
55
+ host_os =~ /mswin|mingw/
56
+ end
57
+
58
+ def solaris?
59
+ host_os =~ /solaris|sunos/
60
+ end
61
+
62
+ # TODO: who knows what symbian returns?
63
+ def symbian?
64
+ host_os =~ /symbian/
65
+ end
66
+
67
+ #
68
+ def posix?
69
+ linux? or mac? or bsd? or solaris? or begin
70
+ fork do end
71
+ true
72
+ rescue NotImplementedError, NoMethodError
73
+ false
74
+ end
75
+ end
76
+
77
+ end
78
+
File without changes
@@ -25,6 +25,8 @@ module Shellwords
25
25
  # 1. Use platform condition?
26
26
  # 2. Use separate dos_xxx methods?
27
27
  # 3. Put in separate PowerShellwords module?
28
+ #
29
+ # CREDIT: Lavir the Whiolet
28
30
  def dos_escape(cmdline)
29
31
  '"' + cmdline.gsub(/\\(?=\\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\\$/, "\\\\\\").gsub("%", "%%") + '"'
30
32
  end
@@ -0,0 +1,16 @@
1
+ require 'strscan'
2
+
3
+ class StringScanner
4
+
5
+ # scans string until +pattern+ is encountered. If +pattern+ will not be
6
+ # encountered then it returns _nil_ but if +scan_anyway+ is _true_ then
7
+ # it scans until the end of the string.
8
+ def scan_before(pattern, scan_anyway = false)
9
+ if not check_until(pattern) and not scan_anyway then return nil; end
10
+ result = ""
11
+ result << getch until check(pattern) or eos?
12
+ return result
13
+ end
14
+
15
+ end
16
+
File without changes
File without changes
File without changes
File without changes
@@ -1,9 +1,12 @@
1
- # Original version from RubyGems, Copyright (c) 2007 Eric Hodel
1
+ require 'facets/rbconfig'
2
2
 
3
- require 'rbconfig'
3
+ unless defined?(RUBY_ENGINE)
4
+ RUBY_ENGINE = 'ruby'
5
+ end
4
6
 
5
7
  # Platform class
6
8
  #
9
+ # Original version from RubyGems, Copyright (c) 2007 Eric Hodel
7
10
  class Platform
8
11
 
9
12
  # A pure-ruby gem that may use Gem::Specification#extensions to build
@@ -197,15 +200,20 @@ class Platform
197
200
  self === other
198
201
  end
199
202
 
200
- # Byte order of CPU.
203
+ # B Y T E O R D E R
204
+
205
+ # Byte order of CPU. Determine byte order of underlying machine.
206
+ #
207
+ # Examines the byte order of the underlying machine. Returns <code>:big</code>
208
+ # if Big Endian and <code>:little</code> if Little Endian.
201
209
  #
202
210
  # TODO: This doesn't work well apearently. We need to use a chart for possible
203
211
  # cpus instead, maybe.
204
212
  def byte_order
205
213
  if [0x12345678].pack("L") == "\x12\x34\x56\x78"
206
- BigEndian
214
+ :big
207
215
  else
208
- LittleEndian
216
+ :little
209
217
  end
210
218
  end
211
219
 
@@ -222,5 +230,148 @@ class Platform
222
230
  byte_order == :big
223
231
  end
224
232
 
233
+ # R U B Y E N G I N E
234
+
235
+ # Return the name of the ruby interpreter.
236
+ def interpreter
237
+ @interpreter ||= (
238
+ if RUBY_PLATFORM == 'parrot'
239
+ 'cardinal'
240
+ elsif RUBY_ENGINE == 'ruby'
241
+ if RUBY_DESCRIPTION =~ /Enterprise/i
242
+ 'ree'
243
+ else
244
+ 'mri'
245
+ end
246
+ else
247
+ RUBY_ENGINE.to_s # jruby, rbx, ironruby, macruby, etc.
248
+ end
249
+ )
250
+ end
251
+
252
+ def mri?
253
+ 'mri' === interpreter
254
+ end
255
+ alias official_ruby? mri?
256
+ alias ruby? mri?
257
+
258
+ def jruby?
259
+ 'jruby' === interpreter
260
+ end
261
+ alias java? jruby?
262
+
263
+ def rubinius?
264
+ 'rbx' === interpreter
265
+ end
266
+ alias rbx? rubinius?
267
+
268
+ def ree?
269
+ 'ree' === interpreter
270
+ end
271
+ alias enterprise? ree?
272
+
273
+ def ironruby?
274
+ 'ironruby' === interpreter
275
+ end
276
+ alias iron_ruby? ironruby?
277
+
278
+ def cardinal?
279
+ 'cardinal' === interpreter
280
+ end
281
+ alias parrot? cardinal?
282
+ alias perl? cardinal?
283
+
284
+
285
+ # O P E R A T I N G S Y S T E M
286
+
287
+ def host_os
288
+ RbConfig::CONFIG['host_os']
289
+ end
290
+
291
+ def linux?
292
+ host_os =~ /linux|cygwin/
293
+ end
294
+
295
+ def mac?
296
+ host_os =~ /mac|darwin/
297
+ end
298
+
299
+ def bsd?
300
+ host_os =~ /bsd/
301
+ end
302
+
303
+ def windows?
304
+ host_os =~ /mswin|mingw/
305
+ end
306
+
307
+ def solaris?
308
+ host_os =~ /solaris|sunos/
309
+ end
310
+
311
+ # TODO: who knows what symbian returns?
312
+ def symbian?
313
+ host_os =~ /symbian/
314
+ end
315
+
316
+ #
317
+ def posix?
318
+ linux? or mac? or bsd? or solaris? or begin
319
+ fork do end
320
+ true
321
+ rescue NotImplementedError, NoMethodError
322
+ false
323
+ end
324
+ end
325
+
225
326
  end
226
327
 
328
+
329
+ # Current CPU's Byte Order
330
+ #BYTE_ORDER = RbConfig.byte_order
331
+
332
+ # Current CPU
333
+ #CPU = RbConfig.platform.cpu
334
+
335
+ # Current Operating System
336
+ #OS = RbConfig.platform.os
337
+
338
+ # Current Operating System Version
339
+ #OS_VERSION = RbConfig.platform.version
340
+
341
+
342
+ =begin
343
+ # platform
344
+ def current_platform
345
+ arch = Config::CONFIG['arch']
346
+ #cpu, os = arch.split '-', 2
347
+ return match_platform(arch)
348
+ end
349
+
350
+ #
351
+ def match_platform(arch)
352
+ cpu, os = arch.split '-', 2
353
+ cpu, os = nil, cpu if os.nil? # java
354
+
355
+ cpu = case cpu
356
+ when /i\d86/ then 'x86'
357
+ else cpu
358
+ end
359
+
360
+ os = case os
361
+ when /cygwin/ then [ 'cygwin', nil ]
362
+ when /darwin(\d+)?/ then [ 'darwin', $1 ]
363
+ when /freebsd(\d+)/ then [ 'freebsd', $1 ]
364
+ when /^java$/ then [ 'java', nil ]
365
+ when /^java([\d.]*)/ then [ 'java', $1 ]
366
+ when /linux/ then [ 'linux', $1 ]
367
+ when /mingw32/ then [ 'mingw32', nil ]
368
+ when /mswin32/ then [ 'mswin32', nil ]
369
+ when /openbsd(\d+\.\d+)/ then [ 'openbsd', $1 ]
370
+ when /solaris(\d+\.\d+)/ then [ 'solaris', $1 ]
371
+ else [ 'unknown', nil ]
372
+ end
373
+
374
+ [cpu, os].flatten.compact.join("-")
375
+ end
376
+ =end
377
+