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 alias_for(m, *aliases)
2
4
  aliases.each{ |a|
3
5
  class_eval "alias #{a} #{m}"
@@ -1,4 +1,8 @@
1
- alias is_an? is_a?
1
+ require 'zucker'
2
+
3
+ class Object
4
+ alias is_an? is_a? # thanks to utility_belt
5
+ end
2
6
 
3
7
  module Enumerable
4
8
  alias with zip
@@ -25,6 +29,20 @@ class Binding
25
29
  end
26
30
  end
27
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
+
28
46
  # constants - who would use these in real-world code for other things?
29
47
  Infinity = 1.0 / 0.0 # or 2*Float::MAX or Float::INFINITY
30
48
  NaN = 0.0 / 0.0
@@ -1,6 +1,4 @@
1
- # require all the sugar ;)
2
- # see README for an explaination of what they do
3
-
4
- require 'zucker/default'
5
- require 'zucker/debug'
1
+ require 'zucker'
2
+ Zucker.require_all
6
3
 
4
+ # J-_-L
@@ -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|
@@ -23,6 +25,9 @@ block_given?
23
25
  - #{self.eval 'block_given?'}"
24
26
 
25
27
  end
28
+
29
+ alias v binding
30
+ alias vv binding
26
31
  end
27
32
 
28
33
  # J-_-L
@@ -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
@@ -0,0 +1,25 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ private
5
+
6
+ def c(show_irb = false)
7
+ method_stack = caller.reverse.map{ |m|
8
+ m.rindex( /:\d+(:in `(.*)')?$/ )
9
+ $2
10
+ }.compact
11
+
12
+ if !show_irb && a = method_stack.index( 'irb_binding' )
13
+ method_stack = [ method_stack[0], '(irb)', *method_stack[a+1..-1] ]
14
+ end
15
+
16
+ # puts method_stack.map.with_index{ |m, i|
17
+ method_stack.each_with_index{ |m, i|
18
+ puts " "*i + m
19
+ }
20
+ end
21
+
22
+ alias cc c
23
+ end
24
+
25
+ # J-_-L
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Class
2
4
  def to_proc
3
5
  Proc.new do |*args|
@@ -0,0 +1,4 @@
1
+ require 'zucker'
2
+ Zucker.require_this __FILE__
3
+
4
+ # J-_-L
@@ -0,0 +1,23 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ def d(*args, &block)
5
+ if args.empty?
6
+ tap{
7
+ if block_given?
8
+ puts yield self
9
+ else
10
+ puts self.inspect
11
+ end
12
+ }
13
+ else
14
+ raise ArgumentError, ".d - The parser thought that the code after .d are method arguments... Please don't put a space after d or use .d() or .d{} in this case!"
15
+ # eval ...
16
+ end
17
+ end
18
+
19
+ alias dd d
20
+ end
21
+
22
+ # J-_-L
23
+
@@ -1,6 +1,4 @@
1
1
  require 'zucker'
2
+ Zucker.require_this __FILE__
2
3
 
3
- require 'zucker/D'
4
- require 'zucker/mm'
5
- require 'zucker/binding'
6
- require 'zucker/q'
4
+ # J-_-L
@@ -1,38 +1,4 @@
1
1
  require 'zucker'
2
+ Zucker.require_all
2
3
 
3
- # default
4
- zucker = %w|
5
- alias_for
6
- aliases
7
- array
8
- array2proc
9
- blank
10
- class2proc
11
- egonil
12
- engine
13
- enumerable
14
- hash
15
- hash2proc
16
- info
17
- iterate
18
- ivars
19
- kernel
20
- mcopy
21
- not
22
- os
23
- regexp2proc
24
- sandbox
25
- square_brackets_for
26
- string
27
- tap
28
- unary
29
- union
30
- version
31
- |
32
-
33
- # remove 1.9 if 1.8
34
- if RUBY_VERSION < '1.9'
35
- zucker -= %w|not tap union|
36
- end
37
-
38
- zucker.each{|rb| require File.join( 'zucker', rb )}
4
+ # J-_-L
@@ -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 RubyEngine
2
4
  # try to guess the interpreter
3
5
  @interpreter = case
@@ -12,7 +14,7 @@ module RubyEngine
12
14
  'mri'
13
15
  end
14
16
  else
15
- RUBY_ENGINE.to_sym # jruby, rbx, ironruby, macruby, etc.
17
+ RUBY_ENGINE.to_s # jruby, rbx, ironruby, macruby, etc.
16
18
  end
17
19
  else # probably 1.8
18
20
  'mri'
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  module Enumerable
2
4
  def mash
3
5
  ret = {}
@@ -0,0 +1,4 @@
1
+ require 'zucker'
2
+ Zucker.require_this __FILE__
3
+
4
+ # J-_-L
@@ -0,0 +1,4 @@
1
+ require 'zucker'
2
+ Zucker.require_this __FILE__
3
+
4
+ # J-_-L
@@ -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 ]
@@ -13,6 +15,12 @@ class Hash
13
15
  raise TypeError, 'can only append other Hashs and Enumerables (or Classes that implement to_splat)'
14
16
  end
15
17
  end
18
+
19
+ def &(other)
20
+ Hash[ *select{ |k,v|
21
+ other[k] == v
22
+ }.flatten ]
23
+ end
16
24
  end
17
25
 
18
26
  # J-_-L
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Hash
2
4
  def to_proc
3
5
  Proc.new{ |obj|
@@ -1,5 +1,7 @@
1
+ require 'zucker'
2
+
1
3
  module Info
2
- class << Info
4
+ class << self
3
5
  # hash like access
4
6
  def [](what)
5
7
  send what
@@ -13,15 +15,6 @@ module Info
13
15
 
14
16
  module_function
15
17
 
16
- # current script file
17
- def current_file
18
- __FILE__
19
- end
20
-
21
- def current_file_directory
22
- File.dirname(__FILE__)
23
- end
24
-
25
18
  # input
26
19
  def last_input_file
27
20
  $FILENAME
@@ -83,12 +76,25 @@ module Info
83
76
  end
84
77
 
85
78
  # current
86
- def current_line
87
- __LINE__
79
+
80
+ def current_file # __FILE__
81
+ return $` if caller[0].rindex(/:\d+(:in `.*')?$/)
88
82
  end
89
83
 
90
- def current_method # 1.9
91
- __method__
84
+ def current_file_directory
85
+ if current_file[0,1] == '(' && current_file[-1,1] == ')'
86
+ current_file
87
+ else
88
+ File.dirname(current_file)
89
+ end
90
+ end
91
+
92
+ def current_line # __LINE__
93
+ return $1.to_i if caller[0].rindex( /:(\d+)(:in `.*')?$/ )
94
+ end
95
+
96
+ def current_method # __method__ (except aliases)
97
+ return $1.to_sym if caller(1)[0].rindex( /\`([^\']+)\'/ )
92
98
  end
93
99
 
94
100
  def current_callstack
@@ -139,9 +145,9 @@ module Info
139
145
  end
140
146
 
141
147
  # encoding (1.9)
142
- def source_encoding
143
- __ENCODING__
144
- end
148
+ #def source_encoding
149
+ # __ENCODING__
150
+ #end
145
151
 
146
152
  def external_encoding
147
153
  Encoding.default_external
@@ -1,5 +1,8 @@
1
+ require 'zucker'
2
+
1
3
  def iterate(*params)
2
4
  # params.shift.zip(*params).each{ |*elements| yield *elements }
5
+ raise ArgumentError, "wrong number of arguments (0)" if params.empty?
3
6
 
4
7
  first = params.shift
5
8
  if params.empty? # single param - like each
@@ -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,4 +1,8 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
4
+ private
5
+
2
6
  def activate_warnings!
3
7
  $VERBOSE = true
4
8
  end
@@ -8,18 +12,23 @@ module Kernel
8
12
  end
9
13
 
10
14
  def library?
11
- __FILE__ != $PROGRAM_NAME
15
+ caller[0].rindex(/:\d+(:in `.*')?$/)
16
+ $PROGRAM_NAME != $` # __FILE__
12
17
  end
13
18
 
14
19
  def executed_directly?
15
- __FILE__ == $PROGRAM_NAME
20
+ caller[0].rindex(/:\d+(:in `.*')?$/)
21
+ $PROGRAM_NAME == $` # __FILE__
16
22
  end
17
23
  alias standalone? executed_directly?
18
24
 
25
+ def irb?
26
+ !!(( IRB and $0 == 'irb' ) rescue nil)
27
+ end
28
+
19
29
  def ignore_sigint! # ctrl+c
20
30
  Signal.trap *%w|SIGINT IGNORE|
21
31
  end
22
32
  end
23
33
 
24
34
  # J-_-L
25
-
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Object
2
4
  def mcopy
3
5
  Marshal.load Marshal.dump self
@@ -1,5 +1,7 @@
1
+ require 'zucker'
2
+
1
3
  module Kernel
2
- def method_list(levels = 1)
4
+ def m(levels = 1)
3
5
  if self.is_a? Module
4
6
  klass, method_function = self, :public_methods
5
7
  else
@@ -24,7 +26,8 @@ module Kernel
24
26
  self # or whatever
25
27
  end
26
28
 
27
- alias mm method_list
29
+ alias mm m
30
+ alias method_list m
28
31
  end
29
32
 
30
33
  # J-_-L
@@ -1,3 +1,5 @@
1
+ require 'zucker'
2
+
1
3
  class Object
2
4
  def not
3
5
  NotClass.new self
@@ -0,0 +1,4 @@
1
+ require 'zucker'
2
+ Zucker.require_this __FILE__
3
+
4
+ # J-_-L
@@ -0,0 +1,17 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ private
5
+
6
+ def o(desc = nil)
7
+ caller[0].rindex( /:(\d+)(:in (`.*'))?$/ )
8
+ m = $3 ? "method #$3, " : ""
9
+ d = desc ? "#{desc}: r" : 'R'
10
+
11
+ puts ret = "#{d}eached #{m}line #$1 of file #$`"
12
+ # [$`, $1.to_i, $3.to_sym, desc]
13
+ end
14
+ alias oo o
15
+ end
16
+
17
+ # J-_-L