zucker 4 → 5

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 (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
+