zucker 4 → 5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. data/CHANGELOG +15 -1
  2. data/Rakefile +44 -0
  3. data/lib/zucker.rb +71 -10
  4. data/lib/zucker/1/D.rb +2 -0
  5. data/lib/zucker/1/aliases.rb +2 -0
  6. data/lib/zucker/1/all.rb +2 -0
  7. data/lib/zucker/1/array.rb +2 -0
  8. data/lib/zucker/1/array2proc.rb +2 -0
  9. data/lib/zucker/1/binding.rb +2 -0
  10. data/lib/zucker/1/blank.rb +2 -0
  11. data/lib/zucker/1/class2proc.rb +2 -0
  12. data/lib/zucker/1/debug.rb +2 -0
  13. data/lib/zucker/1/default.rb +2 -0
  14. data/lib/zucker/1/egonil.rb +2 -0
  15. data/lib/zucker/1/enumerable.rb +2 -0
  16. data/lib/zucker/1/hash.rb +2 -0
  17. data/lib/zucker/1/hash2proc.rb +2 -0
  18. data/lib/zucker/1/iterate.rb +2 -0
  19. data/lib/zucker/1/ivars.rb +2 -0
  20. data/lib/zucker/1/kernel.rb +2 -0
  21. data/lib/zucker/1/mcopy.rb +2 -0
  22. data/lib/zucker/1/mm.rb +2 -0
  23. data/lib/zucker/1/regexp2proc.rb +2 -0
  24. data/lib/zucker/1/sandbox.rb +2 -0
  25. data/lib/zucker/1/square_brackets_for.rb +2 -0
  26. data/lib/zucker/1/string.rb +2 -0
  27. data/lib/zucker/1/unary.rb +2 -0
  28. data/lib/zucker/1/union.rb +2 -0
  29. data/lib/zucker/2/D.rb +2 -0
  30. data/lib/zucker/2/aliases.rb +2 -0
  31. data/lib/zucker/2/all.rb +2 -0
  32. data/lib/zucker/2/array.rb +2 -0
  33. data/lib/zucker/2/array2proc.rb +2 -0
  34. data/lib/zucker/2/binding.rb +2 -0
  35. data/lib/zucker/2/blank.rb +2 -0
  36. data/lib/zucker/2/class2proc.rb +2 -0
  37. data/lib/zucker/2/debug.rb +2 -0
  38. data/lib/zucker/2/default.rb +2 -0
  39. data/lib/zucker/2/egonil.rb +2 -0
  40. data/lib/zucker/2/enumerable.rb +2 -0
  41. data/lib/zucker/2/hash.rb +2 -0
  42. data/lib/zucker/2/hash2proc.rb +2 -0
  43. data/lib/zucker/2/info.rb +2 -0
  44. data/lib/zucker/2/iterate.rb +2 -0
  45. data/lib/zucker/2/ivars.rb +2 -0
  46. data/lib/zucker/2/kernel.rb +2 -0
  47. data/lib/zucker/2/mcopy.rb +2 -0
  48. data/lib/zucker/2/mm.rb +2 -0
  49. data/lib/zucker/2/regexp2proc.rb +2 -0
  50. data/lib/zucker/2/sandbox.rb +2 -0
  51. data/lib/zucker/2/square_brackets_for.rb +2 -0
  52. data/lib/zucker/2/string.rb +2 -0
  53. data/lib/zucker/2/unary.rb +2 -0
  54. data/lib/zucker/2/union.rb +2 -0
  55. data/lib/zucker/3/D.rb +2 -0
  56. data/lib/zucker/3/alias_for.rb +2 -0
  57. data/lib/zucker/3/aliases.rb +2 -0
  58. data/lib/zucker/3/all.rb +2 -0
  59. data/lib/zucker/3/array.rb +2 -0
  60. data/lib/zucker/3/array2proc.rb +2 -0
  61. data/lib/zucker/3/binding.rb +2 -0
  62. data/lib/zucker/3/blank.rb +2 -0
  63. data/lib/zucker/3/class2proc.rb +2 -0
  64. data/lib/zucker/3/debug.rb +2 -0
  65. data/lib/zucker/3/default.rb +2 -0
  66. data/lib/zucker/3/egonil.rb +2 -0
  67. data/lib/zucker/3/enumerable.rb +2 -0
  68. data/lib/zucker/3/hash.rb +2 -0
  69. data/lib/zucker/3/hash2proc.rb +2 -0
  70. data/lib/zucker/3/info.rb +2 -0
  71. data/lib/zucker/3/iterate.rb +2 -0
  72. data/lib/zucker/3/ivars.rb +2 -0
  73. data/lib/zucker/3/kernel.rb +2 -0
  74. data/lib/zucker/3/mcopy.rb +2 -0
  75. data/lib/zucker/3/mm.rb +2 -0
  76. data/lib/zucker/3/not.rb +2 -0
  77. data/lib/zucker/3/regexp2proc.rb +2 -0
  78. data/lib/zucker/3/sandbox.rb +2 -0
  79. data/lib/zucker/3/square_brackets_for.rb +2 -0
  80. data/lib/zucker/3/string.rb +2 -0
  81. data/lib/zucker/3/tap.rb +2 -0
  82. data/lib/zucker/3/unary.rb +2 -0
  83. data/lib/zucker/3/union.rb +2 -0
  84. data/lib/zucker/{D.rb → 4/D.rb} +2 -0
  85. data/lib/zucker/4/alias_for.rb +21 -0
  86. data/lib/zucker/4/aliases.rb +35 -0
  87. data/lib/zucker/4/all.rb +8 -0
  88. data/lib/zucker/4/array.rb +25 -0
  89. data/lib/zucker/4/array2proc.rb +18 -0
  90. data/lib/zucker/4/binding.rb +27 -0
  91. data/lib/zucker/4/blank.rb +28 -0
  92. data/lib/zucker/4/class2proc.rb +12 -0
  93. data/lib/zucker/4/debug.rb +8 -0
  94. data/lib/zucker/4/default.rb +40 -0
  95. data/lib/zucker/4/egonil.rb +16 -0
  96. data/lib/zucker/4/engine.rb +69 -0
  97. data/lib/zucker/4/enumerable.rb +14 -0
  98. data/lib/zucker/4/hash.rb +21 -0
  99. data/lib/zucker/4/hash2proc.rb +16 -0
  100. data/lib/zucker/4/info.rb +173 -0
  101. data/lib/zucker/4/iterate.rb +25 -0
  102. data/lib/zucker/4/ivars.rb +28 -0
  103. data/lib/zucker/4/kernel.rb +27 -0
  104. data/lib/zucker/4/mcopy.rb +10 -0
  105. data/lib/zucker/4/mm.rb +33 -0
  106. data/lib/zucker/4/not.rb +19 -0
  107. data/lib/zucker/4/os.rb +50 -0
  108. data/lib/zucker/{q.rb → 4/q.rb} +2 -0
  109. data/lib/zucker/4/regexp2proc.rb +12 -0
  110. data/lib/zucker/4/sandbox.rb +23 -0
  111. data/lib/zucker/4/square_brackets_for.rb +22 -0
  112. data/lib/zucker/4/string.rb +54 -0
  113. data/lib/zucker/4/tap.rb +11 -0
  114. data/lib/zucker/4/unary.rb +24 -0
  115. data/lib/zucker/4/union.rb +16 -0
  116. data/lib/zucker/4/version.rb +115 -0
  117. data/lib/zucker/5/alias_for.rb +21 -0
  118. data/lib/zucker/5/aliases.rb +51 -0
  119. data/lib/zucker/5/all.rb +4 -0
  120. data/lib/zucker/5/array.rb +25 -0
  121. data/lib/zucker/5/array2proc.rb +18 -0
  122. data/lib/zucker/5/binding.rb +34 -0
  123. data/lib/zucker/5/blank.rb +28 -0
  124. data/lib/zucker/5/cc.rb +25 -0
  125. data/lib/zucker/5/class2proc.rb +12 -0
  126. data/lib/zucker/5/control.rb +4 -0
  127. data/lib/zucker/5/dd.rb +24 -0
  128. data/lib/zucker/5/debug.rb +4 -0
  129. data/lib/zucker/5/default.rb +4 -0
  130. data/lib/zucker/5/egonil.rb +16 -0
  131. data/lib/zucker/5/engine.rb +69 -0
  132. data/lib/zucker/5/enumerable.rb +14 -0
  133. data/lib/zucker/5/env.rb +4 -0
  134. data/lib/zucker/5/extensions.rb +4 -0
  135. data/lib/zucker/5/hash.rb +27 -0
  136. data/lib/zucker/5/hash2proc.rb +16 -0
  137. data/lib/zucker/5/info.rb +177 -0
  138. data/lib/zucker/5/iterate.rb +26 -0
  139. data/lib/zucker/5/ivars.rb +28 -0
  140. data/lib/zucker/5/kernel.rb +34 -0
  141. data/lib/zucker/5/mcopy.rb +10 -0
  142. data/lib/zucker/5/mm.rb +34 -0
  143. data/lib/zucker/5/not.rb +19 -0
  144. data/lib/zucker/5/object.rb +4 -0
  145. data/lib/zucker/5/oo.rb +17 -0
  146. data/lib/zucker/5/os.rb +49 -0
  147. data/lib/zucker/5/qq.rb +12 -0
  148. data/lib/zucker/5/regexp2proc.rb +12 -0
  149. data/lib/zucker/5/sandbox.rb +25 -0
  150. data/lib/zucker/5/shortcuts.rb +4 -0
  151. data/lib/zucker/5/square_brackets_for.rb +21 -0
  152. data/lib/zucker/5/string.rb +54 -0
  153. data/lib/zucker/5/tap.rb +11 -0
  154. data/lib/zucker/5/to_proc.rb +4 -0
  155. data/lib/zucker/5/unary.rb +24 -0
  156. data/lib/zucker/5/union.rb +16 -0
  157. data/lib/zucker/5/version.rb +118 -0
  158. data/lib/zucker/alias_for.rb +2 -0
  159. data/lib/zucker/aliases.rb +19 -1
  160. data/lib/zucker/all.rb +3 -5
  161. data/lib/zucker/array.rb +2 -0
  162. data/lib/zucker/array2proc.rb +2 -0
  163. data/lib/zucker/binding.rb +5 -0
  164. data/lib/zucker/blank.rb +2 -0
  165. data/lib/zucker/cc.rb +25 -0
  166. data/lib/zucker/class2proc.rb +2 -0
  167. data/lib/zucker/control.rb +4 -0
  168. data/lib/zucker/dd.rb +23 -0
  169. data/lib/zucker/debug.rb +2 -4
  170. data/lib/zucker/default.rb +2 -36
  171. data/lib/zucker/egonil.rb +2 -0
  172. data/lib/zucker/engine.rb +3 -1
  173. data/lib/zucker/enumerable.rb +2 -0
  174. data/lib/zucker/env.rb +4 -0
  175. data/lib/zucker/extensions.rb +4 -0
  176. data/lib/zucker/hash.rb +8 -0
  177. data/lib/zucker/hash2proc.rb +2 -0
  178. data/lib/zucker/info.rb +23 -17
  179. data/lib/zucker/iterate.rb +3 -0
  180. data/lib/zucker/ivars.rb +2 -0
  181. data/lib/zucker/kernel.rb +12 -3
  182. data/lib/zucker/mcopy.rb +2 -0
  183. data/lib/zucker/mm.rb +5 -2
  184. data/lib/zucker/not.rb +2 -0
  185. data/lib/zucker/object.rb +4 -0
  186. data/lib/zucker/oo.rb +17 -0
  187. data/lib/zucker/os.rb +5 -2
  188. data/lib/zucker/qq.rb +12 -0
  189. data/lib/zucker/regexp2proc.rb +2 -0
  190. data/lib/zucker/sandbox.rb +4 -0
  191. data/lib/zucker/shortcuts.rb +4 -0
  192. data/lib/zucker/square_brackets_for.rb +13 -12
  193. data/lib/zucker/string.rb +2 -0
  194. data/lib/zucker/tap.rb +2 -0
  195. data/lib/zucker/to_proc.rb +4 -0
  196. data/lib/zucker/unary.rb +2 -0
  197. data/lib/zucker/union.rb +2 -0
  198. data/lib/zucker/version.rb +72 -67
  199. metadata +87 -5
@@ -0,0 +1,10 @@
1
+ require 'zucker'
2
+
3
+ class Object
4
+ def mcopy
5
+ Marshal.load Marshal.dump self
6
+ end
7
+ end
8
+
9
+ # J-_-L
10
+
@@ -0,0 +1,33 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ def method_list(levels = 1)
5
+ if self.is_a? Module
6
+ klass, method_function = self, :public_methods
7
+ else
8
+ klass, method_function = self.class, :public_instance_methods
9
+
10
+ eigen = self.singleton_methods
11
+ if !eigen.empty?
12
+ puts :Eigenclass # sorry for not being up to date, I just love the word
13
+ p self.singleton_methods
14
+ end
15
+ end
16
+
17
+ levels.times{ |level|
18
+ if cur = klass.ancestors[level]
19
+ p cur # put class name
20
+ p cur.send method_function, false # put methods of the class
21
+ else
22
+ break
23
+ end
24
+ }
25
+
26
+ self # or whatever
27
+ end
28
+
29
+ alias mm method_list
30
+ end
31
+
32
+ # J-_-L
33
+
@@ -0,0 +1,19 @@
1
+ require 'zucker'
2
+
3
+ class Object
4
+ def not
5
+ NotClass.new self
6
+ end
7
+
8
+ class NotClass < BasicObject
9
+ def initialize(receiver)
10
+ @receiver = receiver
11
+ end
12
+
13
+ def method_missing(m, *args, &block)
14
+ not @receiver.public_send( m, *args, &block )
15
+ end
16
+ end
17
+ end
18
+
19
+ # J-_-L
@@ -0,0 +1,50 @@
1
+ require 'zucker'
2
+
3
+ require 'rbconfig'
4
+
5
+ module OS
6
+ class << OS
7
+ def is?(what)
8
+ what === RbConfig::CONFIG['host_os']
9
+ end
10
+ alias is is?
11
+
12
+ def to_s
13
+ RbConfig::CONFIG['host_os']
14
+ end
15
+ end
16
+
17
+ module_function
18
+
19
+ def linux?
20
+ OS.is? /linux|cygwin/
21
+ end
22
+
23
+ def mac?
24
+ OS.is? /mac|darwin/
25
+ end
26
+
27
+ def bsd?
28
+ OS.is? /bsd/
29
+ end
30
+
31
+ def windows?
32
+ OS.is? /mswin|win|mingw/
33
+ end
34
+
35
+ def solaris?
36
+ OS.is? /solaris|sunos/
37
+ end
38
+
39
+ def posix?
40
+ linux? or mac? or bsd? or solaris? or Process.respond_to?(:fork)
41
+ end
42
+
43
+ #def symbian?
44
+ #TODO who knows what symbian returns?
45
+ #end
46
+
47
+ # ...
48
+ end
49
+
50
+ # J-_-L
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
2
4
  def q(*args)
3
5
  puts args.map( &:inspect ).join ' '
@@ -0,0 +1,12 @@
1
+ require 'zucker'
2
+
3
+ class Regexp
4
+ def to_proc
5
+ proc do |e|
6
+ e.to_s[self]
7
+ end
8
+ end
9
+ end
10
+
11
+ # J-_-L
12
+
@@ -0,0 +1,23 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ def sandbox(rescueblock_or_default=nil)
5
+ Thread.start do
6
+ $SAFE = 4
7
+ yield
8
+ end.value
9
+ rescue SecurityError => e
10
+ if !rescueblock_or_default.nil?
11
+ if rescueblock_or_default.is_a? Proc
12
+ rescueblock_or_default.call e
13
+ else
14
+ rescueblock_or_default
15
+ end
16
+ else
17
+ raise e
18
+ end
19
+ end
20
+ end
21
+
22
+ # J-_-L
23
+
@@ -0,0 +1,22 @@
1
+ require 'zucker'
2
+
3
+ def square_brackets_for(ivar, assignment = true)
4
+ # undef [] if respond_to? :[]
5
+ # undef []= if respond_to? :[]=
6
+
7
+ #instance_eval do
8
+ define_method :[] do |key|
9
+ (instance_variable_get :"@#{ivar}")[key]
10
+ end
11
+
12
+ if assignment
13
+ define_method :[]= do |key, value|
14
+ (instance_variable_get :"@#{ivar}")[key] = value
15
+ end
16
+ end
17
+ #end
18
+
19
+ end
20
+
21
+ # J-_-L
22
+
@@ -0,0 +1,54 @@
1
+ require 'zucker'
2
+
3
+ class String
4
+ def -(rem)
5
+ gsub( Regexp === rem ? rem : rem.to_s, '' )
6
+ end
7
+
8
+ def ^(pos)
9
+ pos = pos.to_i
10
+ if pos >= 0
11
+ self[pos..-1]
12
+ else
13
+ self[0...pos]
14
+ end
15
+ end
16
+
17
+ def lchomp(arg = $/)
18
+ reverse.chomp(arg).reverse
19
+ end
20
+
21
+ def lchomp!(arg = $/)
22
+ reverse.chomp!(arg).reverse
23
+ end
24
+
25
+ def ords
26
+ unpack 'C*'
27
+ # bytes.to_a
28
+ end
29
+
30
+ def constantize(default_value = nil) # always uses global scope as in AS... is this good?
31
+ get_constant = lambda{
32
+ self.split(/::/).inject( Object ){ |base_constant, current_constant|
33
+ base_constant.const_get current_constant
34
+ }
35
+ }
36
+
37
+ if !default_value && !block_given?
38
+ get_constant.call
39
+ else
40
+ begin
41
+ get_constant.call
42
+ rescue NameError
43
+ if block_given?
44
+ yield self
45
+ else
46
+ default_value
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ # J-_-L
54
+
@@ -0,0 +1,11 @@
1
+ require 'zucker'
2
+
3
+ def tap_on(obj, &block)
4
+ obj.tap &block
5
+ end
6
+
7
+ def make_new(what, *args, &block)
8
+ what.new(*args).tap &block
9
+ end
10
+
11
+ # J-_-L
@@ -0,0 +1,24 @@
1
+ require 'zucker'
2
+
3
+ class String
4
+ def +@
5
+ self
6
+ end
7
+
8
+ def -@
9
+ to_sym
10
+ end
11
+ end
12
+
13
+ class Symbol
14
+ def +@
15
+ to_s
16
+ end
17
+
18
+ def -@
19
+ self
20
+ end
21
+ end
22
+
23
+ # J-_-L
24
+
@@ -0,0 +1,16 @@
1
+ require 'zucker'
2
+
3
+ class Regexp
4
+ def |(arg)
5
+ Regexp.union self, arg.is_a?(Regexp) ? arg : arg.to_s
6
+ end
7
+ end
8
+
9
+ class String
10
+ def |(arg)
11
+ Regexp.union self, arg.is_a?(Regexp) ? arg : arg.to_s
12
+ end
13
+ end
14
+
15
+ # J-_-L
16
+
@@ -0,0 +1,115 @@
1
+ require 'zucker'
2
+
3
+ module RubyVersion
4
+ class << self
5
+ def to_s
6
+ RUBY_VERSION
7
+ end
8
+
9
+ def is?(other_version = nil)
10
+ compare other_version
11
+ end
12
+ alias is is?
13
+
14
+ # accessors
15
+
16
+ def major
17
+ RUBY_VERSION.to_i
18
+ end
19
+ alias main major
20
+
21
+ def minor
22
+ RUBY_VERSION.split('.')[1].to_i
23
+ end
24
+ alias mini minor
25
+
26
+ def tiny
27
+ RUBY_VERSION.split('.')[2].to_i
28
+ end
29
+ alias teeny tiny
30
+
31
+ def patchlevel
32
+ RUBY_PATCHLEVEL
33
+ end
34
+
35
+ def platform
36
+ RUBY_PLATFORM
37
+ end
38
+
39
+ def release_date
40
+ Date.parse RUBY_RELEASE_DATE
41
+ end
42
+ alias date release_date
43
+
44
+ def description
45
+ RUBY_DESCRIPTION
46
+ end
47
+
48
+ private
49
+
50
+ def compare(other_version)
51
+ case other_version
52
+ when nil
53
+ matcher
54
+ when Float
55
+ other_version == RUBY_VERSION.to_f
56
+ else
57
+ other_version.to_s == RUBY_VERSION
58
+ end
59
+ end
60
+
61
+
62
+ def matcher
63
+ return @ruby if @ruby
64
+
65
+ @ruby = RUBY_VERSION.dup
66
+ @ruby.instance_eval do
67
+ alias below <
68
+ alias below? <
69
+ alias at_most <=
70
+ alias at_most? <=
71
+ alias above >
72
+ alias above? >
73
+ alias at_least >=
74
+ alias at_least? >=
75
+ alias exactly ==
76
+ alias exactly? ==
77
+ def not(other)
78
+ self != other
79
+ end
80
+ alias not? not
81
+ alias between between?
82
+
83
+ def newer_than(other)
84
+ case other.class
85
+ when Date, Time
86
+ other.class.parse(RUBY_RELEASE_DATE) > other
87
+ else
88
+ RUBY_RELEASE_DATE > other.to_s
89
+ end
90
+ end
91
+ alias newer_than? newer_than
92
+
93
+ def older_than(other)
94
+ case other.class
95
+ when Date, Time
96
+ other.class.parse(RUBY_RELEASE_DATE) < other
97
+ else
98
+ RUBY_RELEASE_DATE < other.to_s
99
+ end
100
+ end
101
+ alias older_than? older_than
102
+
103
+ def released_today
104
+ RubyVersion.date == Date.today
105
+ end
106
+ alias released_today? released_today
107
+ end
108
+
109
+ @ruby.freeze
110
+ end
111
+
112
+ end
113
+ end
114
+
115
+ # J-_-L
@@ -0,0 +1,21 @@
1
+ require 'zucker'
2
+
3
+ def alias_for(m, *aliases)
4
+ aliases.each{ |a|
5
+ class_eval "alias #{a} #{m}"
6
+ }
7
+ end
8
+ alias aliases_for alias_for
9
+
10
+ class Module
11
+ def alias_method_for(m, *alias_methods)
12
+ alias_methods.each{ |a|
13
+ class_eval do
14
+ alias_method a.to_sym, m.to_sym
15
+ end
16
+ }
17
+ end
18
+ alias alias_methods_for alias_method_for
19
+ end
20
+
21
+ # J-_-L
@@ -0,0 +1,51 @@
1
+ require 'zucker'
2
+
3
+ class Object
4
+ alias is_an? is_a? # thanks to utility_belt
5
+ end
6
+
7
+ module Enumerable
8
+ alias with zip
9
+ alias % zip
10
+ end
11
+
12
+ class Array
13
+ alias ** product
14
+ alias contains? include?
15
+ end
16
+
17
+ class String
18
+ alias contains? include?
19
+ end
20
+
21
+ class Hash
22
+ alias + merge
23
+ end
24
+
25
+ class Binding
26
+ #alias [] eval
27
+ def [](expr)
28
+ self.eval "#{expr}"
29
+ end
30
+ end
31
+
32
+ class << File
33
+ alias filename basename # thanks rdp :)
34
+ end
35
+
36
+ class << Dir
37
+ def join(*args)
38
+ File.join(*args)
39
+ end
40
+
41
+ def split(*args)
42
+ File.split(*args)
43
+ end
44
+ end
45
+
46
+ # constants - who would use these in real-world code for other things?
47
+ Infinity = 1.0 / 0.0 # or 2*Float::MAX or Float::INFINITY
48
+ NaN = 0.0 / 0.0
49
+
50
+ # J-_-L
51
+