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
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def iterate(*params)
2
4
  # params.shift.zip(*params).each{ |*elements| yield *elements }
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def instance_variables_from(obj, *only)
2
4
  iter =
3
5
  if obj.is_a? Binding
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def activate_warnings!
2
4
  $VERBOSE = true
3
5
  end
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Object
2
4
  def mcopy
3
5
  Marshal.load Marshal.dump self
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
2
4
  def method_list(levels = 1)
3
5
  if self.is_a? Module
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Regexp
2
4
  def to_proc
3
5
  proc do |e|
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def sandbox(rescueblock_or_default=nil)
2
4
  Thread.start do
3
5
  $SAFE = 4
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def square_brackets_for(ivar, assignment = true)
2
4
  # undef [] if respond_to? :[]
3
5
  # undef []= if respond_to? :[]=
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class String
2
4
  def ^(pos)
3
5
  pos = pos.to_i
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class String
2
4
  def +@
3
5
  self
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Regexp
2
4
  def |(arg)
3
5
  Regexp.union self, arg.is_a?(Regexp) ? arg : arg.to_s
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
2
4
  def D(*args, &block)
3
5
  if args.empty?
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def alias_for(m, *aliases)
2
4
  aliases.each{ |a|
3
5
  class_eval "alias #{a} #{m}"
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  alias is_an? is_a?
2
4
 
3
5
  module Enumerable
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  # require all the sugar ;)
2
4
  # see README for an explaination of what they do
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Array
2
4
  def ^(other) # TODO: more efficient
3
5
  (self - other) +
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Array
2
4
  def to_proc
3
5
  Proc.new{ |obj|
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Binding
2
4
  def inspect
3
5
  put_vars = lambda { |array|
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Object
2
4
  def blank?
3
5
  if respond_to? :empty? then empty? else !self end
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Class
2
4
  def to_proc
3
5
  Proc.new do |*args|
@@ -1,5 +1,7 @@
1
1
  require 'zucker'
2
2
 
3
+ require 'zucker'
4
+
3
5
  require 'zucker/3/D'
4
6
  require 'zucker/3/mm'
5
7
  require 'zucker/3/binding'
@@ -1,5 +1,7 @@
1
1
  require 'zucker'
2
2
 
3
+ require 'zucker'
4
+
3
5
  # default
4
6
  zucker = %w|
5
7
  alias_for
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def egonil(nil_value = nil)
2
4
  yield
3
5
  rescue NoMethodError => e
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Enumerable
2
4
  def mash
3
5
  ret = {}
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Hash
2
4
  def self.zip(keys,values)
3
5
  Hash[ *keys.zip( values ).flatten ]
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Hash
2
4
  def to_proc
3
5
  Proc.new{ |obj|
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Info
2
4
  class << Info
3
5
  # hash like access
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def iterate(*params)
2
4
  # params.shift.zip(*params).each{ |*elements| yield *elements }
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def instance_variables_from(obj, *only)
2
4
  iter =
3
5
  if obj.is_a? Binding
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
2
4
  def activate_warnings!
3
5
  $VERBOSE = true
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Object
2
4
  def mcopy
3
5
  Marshal.load Marshal.dump self
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
2
4
  def method_list(levels = 1)
3
5
  if self.is_a? Module
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Object
2
4
  def not
3
5
  NotClass.new self
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Regexp
2
4
  def to_proc
3
5
  proc do |e|
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def sandbox(rescueblock_or_default=nil)
2
4
  Thread.start do
3
5
  $SAFE = 4
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def square_brackets_for(ivar, assignment = true)
2
4
  # undef [] if respond_to? :[]
3
5
  # undef []= if respond_to? :[]=
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class String
2
4
  def ^(pos)
3
5
  pos = pos.to_i
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  def tap_on(obj, &block)
2
4
  obj.tap &block
3
5
  end
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class String
2
4
  def +@
3
5
  self
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Regexp
2
4
  def |(arg)
3
5
  Regexp.union self, arg.is_a?(Regexp) ? arg : arg.to_s
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
2
4
  def D(*args, &block)
3
5
  if args.empty?
@@ -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,35 @@
1
+ require 'zucker'
2
+
3
+ alias is_an? is_a?
4
+
5
+ module Enumerable
6
+ alias with zip
7
+ alias % zip
8
+ end
9
+
10
+ class Array
11
+ alias ** product
12
+ alias contains? include?
13
+ end
14
+
15
+ class String
16
+ alias contains? include?
17
+ end
18
+
19
+ class Hash
20
+ alias + merge
21
+ end
22
+
23
+ class Binding
24
+ #alias [] eval
25
+ def [](expr)
26
+ self.eval "#{expr}"
27
+ end
28
+ end
29
+
30
+ # constants - who would use these in real-world code for other things?
31
+ Infinity = 1.0 / 0.0 # or 2*Float::MAX or Float::INFINITY
32
+ NaN = 0.0 / 0.0
33
+
34
+ # J-_-L
35
+
@@ -0,0 +1,8 @@
1
+ require 'zucker'
2
+
3
+ # require all the sugar ;)
4
+ # see README for an explaination of what they do
5
+
6
+ require 'zucker/4/default'
7
+ require 'zucker/4/debug'
8
+
@@ -0,0 +1,25 @@
1
+ require 'zucker'
2
+
3
+ class Array
4
+ def ^(other) # TODO: more efficient
5
+ (self - other) +
6
+ (other - self)
7
+ end
8
+
9
+ # can take an argument & block to be Rails compatible
10
+ def sum(identity = 0, &block)
11
+ # inject(:+)
12
+ if block_given?
13
+ map(&block).sum( identity )
14
+ else
15
+ inject(:+) || identity
16
+ end
17
+ end
18
+
19
+ def chrs
20
+ self.pack 'C*'
21
+ end
22
+ end
23
+
24
+ # J-_-L
25
+
@@ -0,0 +1,18 @@
1
+ require 'zucker'
2
+
3
+ class Array
4
+ def to_proc
5
+ Proc.new{ |obj|
6
+ if self.first.is_a? Array
7
+ self.inject(obj){ |result, nested_array|
8
+ nested_array.to_proc.call result
9
+ }
10
+ else
11
+ obj.send *self
12
+ end
13
+ }
14
+ end
15
+ end
16
+
17
+ # J-_-L
18
+
@@ -0,0 +1,27 @@
1
+ require 'zucker'
2
+
3
+ class Binding
4
+ def inspect
5
+ put_vars = lambda { |array|
6
+ if array.empty?
7
+ ' - none'
8
+ else
9
+ array.map{|e| " - #{e}: #{ self.eval '#{e}'}"}*"\n"
10
+ end
11
+ }
12
+
13
+ "#{self.to_s}
14
+ local vars
15
+ #{ put_vars[ self.eval 'local_variables' ] }
16
+ (instance vars)
17
+ #{ put_vars[ self.eval 'instance_variables' ] }
18
+ self
19
+ - #{self.eval 'self'}
20
+ block_given?
21
+ - #{self.eval 'block_given?'}"
22
+
23
+ end
24
+ end
25
+
26
+ # J-_-L
27
+
@@ -0,0 +1,28 @@
1
+ require 'zucker'
2
+
3
+ class Object
4
+ def blank?
5
+ if respond_to? :empty? then empty? else !self end
6
+ end
7
+
8
+ def present?
9
+ !blank?
10
+ end
11
+ end
12
+
13
+
14
+ { # what to do # for which classes
15
+ lambda{ true } => [FalseClass, NilClass],
16
+ lambda{ false } => [TrueClass, Numeric],
17
+ lambda{ empty? } => [Array, Hash],
18
+ lambda{ self !~ /\S/ } => [String],
19
+ lambda{ self == // } => [Regexp],
20
+
21
+ }.each{ |action, klass_array|
22
+ klass_array.each{ |klass|
23
+ klass.send :define_method, :blank?, &action
24
+ }
25
+ }
26
+
27
+ # J-_-L
28
+