zucker 2 → 3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. data/CHANGELOG +12 -0
  2. data/README +4 -1
  3. data/Rakefile +17 -7
  4. data/lib/zucker.rb +7 -1
  5. data/lib/zucker/2/all.rb +2 -2
  6. data/lib/zucker/2/debug.rb +3 -3
  7. data/lib/zucker/2/default.rb +1 -1
  8. data/lib/zucker/3/D.rb +19 -0
  9. data/lib/zucker/3/alias_for.rb +19 -0
  10. data/lib/zucker/3/aliases.rb +28 -0
  11. data/lib/zucker/3/all.rb +6 -0
  12. data/lib/zucker/3/array.rb +23 -0
  13. data/lib/zucker/3/array2proc.rb +16 -0
  14. data/lib/zucker/3/binding.rb +25 -0
  15. data/lib/zucker/3/blank.rb +26 -0
  16. data/lib/zucker/3/class2proc.rb +10 -0
  17. data/lib/zucker/3/debug.rb +6 -0
  18. data/lib/zucker/3/default.rb +35 -0
  19. data/lib/zucker/3/egonil.rb +14 -0
  20. data/lib/zucker/3/enumerable.rb +12 -0
  21. data/lib/zucker/3/hash.rb +19 -0
  22. data/lib/zucker/3/hash2proc.rb +14 -0
  23. data/lib/zucker/3/info.rb +167 -0
  24. data/lib/zucker/3/iterate.rb +23 -0
  25. data/lib/zucker/3/ivars.rb +26 -0
  26. data/lib/zucker/3/kernel.rb +48 -0
  27. data/lib/zucker/3/mcopy.rb +8 -0
  28. data/lib/zucker/3/mm.rb +31 -0
  29. data/lib/zucker/3/not.rb +17 -0
  30. data/lib/zucker/3/regexp2proc.rb +10 -0
  31. data/lib/zucker/3/sandbox.rb +19 -0
  32. data/lib/zucker/3/square_brackets_for.rb +20 -0
  33. data/lib/zucker/3/string.rb +47 -0
  34. data/lib/zucker/3/tap.rb +9 -0
  35. data/lib/zucker/3/unary.rb +22 -0
  36. data/lib/zucker/3/union.rb +14 -0
  37. data/lib/zucker/alias_for.rb +19 -0
  38. data/lib/zucker/array.rb +8 -2
  39. data/lib/zucker/debug.rb +2 -0
  40. data/lib/zucker/default.rb +11 -1
  41. data/lib/zucker/info.rb +5 -2
  42. data/lib/zucker/kernel.rb +41 -11
  43. data/lib/zucker/mcopy.rb +0 -1
  44. data/lib/zucker/not.rb +17 -0
  45. data/lib/zucker/string.rb +24 -2
  46. data/lib/zucker/tap.rb +9 -0
  47. metadata +41 -160
  48. data/lib/zucker/1/desc/D.yaml +0 -23
  49. data/lib/zucker/1/desc/aliases.yaml +0 -16
  50. data/lib/zucker/1/desc/array.yaml +0 -14
  51. data/lib/zucker/1/desc/array2proc.yaml +0 -13
  52. data/lib/zucker/1/desc/binding.yaml +0 -10
  53. data/lib/zucker/1/desc/blank.yaml +0 -12
  54. data/lib/zucker/1/desc/class2proc.yaml +0 -12
  55. data/lib/zucker/1/desc/egonil.yaml +0 -17
  56. data/lib/zucker/1/desc/enumerable.yaml +0 -11
  57. data/lib/zucker/1/desc/hash.yaml +0 -12
  58. data/lib/zucker/1/desc/hash2proc.yaml +0 -11
  59. data/lib/zucker/1/desc/iterate.yaml +0 -17
  60. data/lib/zucker/1/desc/ivars.yaml +0 -20
  61. data/lib/zucker/1/desc/kernel.yaml +0 -13
  62. data/lib/zucker/1/desc/mcopy.yaml +0 -12
  63. data/lib/zucker/1/desc/mm.yaml +0 -12
  64. data/lib/zucker/1/desc/regexp2proc.yaml +0 -13
  65. data/lib/zucker/1/desc/sandbox.yaml +0 -14
  66. data/lib/zucker/1/desc/square_brackets_for.yaml +0 -23
  67. data/lib/zucker/1/desc/string.yaml +0 -13
  68. data/lib/zucker/1/desc/unary.yaml +0 -15
  69. data/lib/zucker/1/desc/union.yaml +0 -11
  70. data/lib/zucker/1/doc/meta.yaml +0 -4
  71. data/lib/zucker/1/doc/zucker_doc.html +0 -1286
  72. data/lib/zucker/1/doc/zucker_doc.rb +0 -493
  73. data/lib/zucker/1/spec/D_spec.rb +0 -27
  74. data/lib/zucker/1/spec/aliases_spec.rb +0 -34
  75. data/lib/zucker/1/spec/array2proc_spec.rb +0 -8
  76. data/lib/zucker/1/spec/array_spec.rb +0 -23
  77. data/lib/zucker/1/spec/binding_spec.rb +0 -6
  78. data/lib/zucker/1/spec/blank_spec.rb +0 -20
  79. data/lib/zucker/1/spec/class2proc_spec.rb +0 -9
  80. data/lib/zucker/1/spec/egonil_spec.rb +0 -30
  81. data/lib/zucker/1/spec/enumerable_spec.rb +0 -8
  82. data/lib/zucker/1/spec/hash2proc_spec.rb +0 -12
  83. data/lib/zucker/1/spec/hash_spec.rb +0 -10
  84. data/lib/zucker/1/spec/iterate_spec.rb +0 -54
  85. data/lib/zucker/1/spec/ivars_spec.rb +0 -20
  86. data/lib/zucker/1/spec/kernel_spec.rb +0 -34
  87. data/lib/zucker/1/spec/mcopy_spec.rb +0 -13
  88. data/lib/zucker/1/spec/mm_spec.rb +0 -6
  89. data/lib/zucker/1/spec/regexp2proc_spec.rb +0 -9
  90. data/lib/zucker/1/spec/sandbox_spec.rb +0 -7
  91. data/lib/zucker/1/spec/square_brackets_for_spec.rb +0 -59
  92. data/lib/zucker/1/spec/string_spec.rb +0 -29
  93. data/lib/zucker/1/spec/unary_spec.rb +0 -26
  94. data/lib/zucker/1/spec/union_spec.rb +0 -13
  95. data/lib/zucker/2/desc/D.yaml +0 -23
  96. data/lib/zucker/2/desc/aliases.yaml +0 -16
  97. data/lib/zucker/2/desc/array.yaml +0 -14
  98. data/lib/zucker/2/desc/array2proc.yaml +0 -17
  99. data/lib/zucker/2/desc/binding.yaml +0 -10
  100. data/lib/zucker/2/desc/blank.yaml +0 -10
  101. data/lib/zucker/2/desc/class2proc.yaml +0 -12
  102. data/lib/zucker/2/desc/egonil.yaml +0 -17
  103. data/lib/zucker/2/desc/enumerable.yaml +0 -11
  104. data/lib/zucker/2/desc/hash.yaml +0 -14
  105. data/lib/zucker/2/desc/hash2proc.yaml +0 -11
  106. data/lib/zucker/2/desc/info.yaml +0 -12
  107. data/lib/zucker/2/desc/iterate.yaml +0 -17
  108. data/lib/zucker/2/desc/ivars.yaml +0 -20
  109. data/lib/zucker/2/desc/kernel.yaml +0 -13
  110. data/lib/zucker/2/desc/mcopy.yaml +0 -12
  111. data/lib/zucker/2/desc/mm.yaml +0 -12
  112. data/lib/zucker/2/desc/regexp2proc.yaml +0 -13
  113. data/lib/zucker/2/desc/sandbox.yaml +0 -19
  114. data/lib/zucker/2/desc/square_brackets_for.yaml +0 -23
  115. data/lib/zucker/2/desc/string.yaml +0 -13
  116. data/lib/zucker/2/desc/unary.yaml +0 -15
  117. data/lib/zucker/2/desc/union.yaml +0 -11
  118. data/lib/zucker/2/doc/zucker_doc.html +0 -1494
  119. data/lib/zucker/2/doc/zucker_doc.rb +0 -498
  120. data/lib/zucker/2/spec/D_spec.rb +0 -35
  121. data/lib/zucker/2/spec/aliases_spec.rb +0 -13
  122. data/lib/zucker/2/spec/array2proc_spec.rb +0 -12
  123. data/lib/zucker/2/spec/array_spec.rb +0 -23
  124. data/lib/zucker/2/spec/binding_spec.rb +0 -8
  125. data/lib/zucker/2/spec/blank_spec.rb +0 -20
  126. data/lib/zucker/2/spec/class2proc_spec.rb +0 -9
  127. data/lib/zucker/2/spec/egonil_spec.rb +0 -30
  128. data/lib/zucker/2/spec/enumerable_spec.rb +0 -8
  129. data/lib/zucker/2/spec/hash2proc_spec.rb +0 -12
  130. data/lib/zucker/2/spec/hash_spec.rb +0 -17
  131. data/lib/zucker/2/spec/info_spec.rb +0 -8
  132. data/lib/zucker/2/spec/iterate_spec.rb +0 -54
  133. data/lib/zucker/2/spec/ivars_spec.rb +0 -20
  134. data/lib/zucker/2/spec/kernel_spec.rb +0 -28
  135. data/lib/zucker/2/spec/mcopy_spec.rb +0 -13
  136. data/lib/zucker/2/spec/mm_spec.rb +0 -8
  137. data/lib/zucker/2/spec/regexp2proc_spec.rb +0 -9
  138. data/lib/zucker/2/spec/sandbox_spec.rb +0 -26
  139. data/lib/zucker/2/spec/spec_helper.rb +0 -18
  140. data/lib/zucker/2/spec/square_brackets_for_spec.rb +0 -59
  141. data/lib/zucker/2/spec/string_spec.rb +0 -29
  142. data/lib/zucker/2/spec/unary_spec.rb +0 -26
  143. data/lib/zucker/2/spec/union_spec.rb +0 -15
  144. data/lib/zucker/desc/D.yaml +0 -23
  145. data/lib/zucker/desc/aliases.yaml +0 -16
  146. data/lib/zucker/desc/array.yaml +0 -14
  147. data/lib/zucker/desc/array2proc.yaml +0 -17
  148. data/lib/zucker/desc/binding.yaml +0 -10
  149. data/lib/zucker/desc/blank.yaml +0 -10
  150. data/lib/zucker/desc/class2proc.yaml +0 -12
  151. data/lib/zucker/desc/egonil.yaml +0 -17
  152. data/lib/zucker/desc/enumerable.yaml +0 -11
  153. data/lib/zucker/desc/hash.yaml +0 -14
  154. data/lib/zucker/desc/hash2proc.yaml +0 -11
  155. data/lib/zucker/desc/info.yaml +0 -12
  156. data/lib/zucker/desc/iterate.yaml +0 -17
  157. data/lib/zucker/desc/ivars.yaml +0 -20
  158. data/lib/zucker/desc/kernel.yaml +0 -13
  159. data/lib/zucker/desc/mcopy.yaml +0 -12
  160. data/lib/zucker/desc/mm.yaml +0 -12
  161. data/lib/zucker/desc/regexp2proc.yaml +0 -13
  162. data/lib/zucker/desc/sandbox.yaml +0 -19
  163. data/lib/zucker/desc/square_brackets_for.yaml +0 -23
  164. data/lib/zucker/desc/string.yaml +0 -13
  165. data/lib/zucker/desc/unary.yaml +0 -15
  166. data/lib/zucker/desc/union.yaml +0 -11
  167. data/lib/zucker/doc/zucker_doc.html +0 -1494
  168. data/lib/zucker/doc/zucker_doc.rb +0 -498
  169. data/lib/zucker/edge/ideas/args.rb +0 -22
  170. data/lib/zucker/edge/ideas/args.yaml +0 -19
  171. data/lib/zucker/edge/ideas/args_spec.rb +0 -19
  172. data/lib/zucker/edge/ideas/clone_deep.rb +0 -21
  173. data/lib/zucker/edge/ideas/clone_deep_spec.rb +0 -12
  174. data/lib/zucker/edge/ideas/dclone.yaml +0 -12
  175. data/lib/zucker/edge/ideas/hash.rb +0 -18
  176. data/lib/zucker/edge/ideas/require_directory.rb +0 -6
  177. data/lib/zucker/spec/D_spec.rb +0 -35
  178. data/lib/zucker/spec/aliases_spec.rb +0 -13
  179. data/lib/zucker/spec/array2proc_spec.rb +0 -12
  180. data/lib/zucker/spec/array_spec.rb +0 -23
  181. data/lib/zucker/spec/binding_spec.rb +0 -8
  182. data/lib/zucker/spec/blank_spec.rb +0 -20
  183. data/lib/zucker/spec/class2proc_spec.rb +0 -9
  184. data/lib/zucker/spec/egonil_spec.rb +0 -30
  185. data/lib/zucker/spec/enumerable_spec.rb +0 -8
  186. data/lib/zucker/spec/hash2proc_spec.rb +0 -12
  187. data/lib/zucker/spec/hash_spec.rb +0 -17
  188. data/lib/zucker/spec/info_spec.rb +0 -8
  189. data/lib/zucker/spec/iterate_spec.rb +0 -54
  190. data/lib/zucker/spec/ivars_spec.rb +0 -20
  191. data/lib/zucker/spec/kernel_spec.rb +0 -28
  192. data/lib/zucker/spec/mcopy_spec.rb +0 -13
  193. data/lib/zucker/spec/mm_spec.rb +0 -8
  194. data/lib/zucker/spec/regexp2proc_spec.rb +0 -9
  195. data/lib/zucker/spec/sandbox_spec.rb +0 -26
  196. data/lib/zucker/spec/spec_helper.rb +0 -18
  197. data/lib/zucker/spec/square_brackets_for_spec.rb +0 -59
  198. data/lib/zucker/spec/string_spec.rb +0 -29
  199. data/lib/zucker/spec/unary_spec.rb +0 -26
  200. data/lib/zucker/spec/union_spec.rb +0 -15
data/CHANGELOG CHANGED
@@ -1,3 +1,15 @@
1
+ 2010-08-14 | Zucker 3
2
+ * added tap cube
3
+ * added Object#not
4
+ * added alias_for for an alternative alias syntax
5
+ * added String#constantize (improved AS version)
6
+ * improved Info module
7
+ * made Array#sum Rails compatibile
8
+ * improved docs
9
+ * changed directory layout (no changes for requiring)
10
+ * more small changes
11
+
12
+
1
13
  2010-08-08 | Zucker 2
2
14
  * added info cube
3
15
  * added chaining for array2proc
data/README CHANGED
@@ -1,4 +1,7 @@
1
- See http://rubyzucker.info
1
+ See http://rubyzucker.info or doc/zucker_doc.html
2
+
3
+ Please see the github wiki page, for discussion and contributing: http://wiki.github.com/janlelis/zucker
2
4
 
3
5
  Copyright (c) 2010 Jan Lelis, http://rbjl.net, released under the MIT license
4
6
 
7
+ J-_-L
data/Rakefile CHANGED
@@ -3,28 +3,38 @@ require 'rake'
3
3
  require 'rake/gempackagetask'
4
4
  require 'spec/rake/spectask'
5
5
 
6
+ if RUBY_VERSION >= '1.9.2'
7
+ require_relative 'lib/zucker'
8
+ else
9
+ require 'lib/zucker'
10
+ end
11
+
6
12
  desc 'Build documentation'
7
13
  task 'doc' do
8
- zucker_path = "#{ Rake.application.find_rakefile_location[1] }/lib/zucker"
14
+ zucker_path = Rake.application.find_rakefile_location[1]
9
15
  ruby File.join(zucker_path, 'doc/zucker_doc.rb'), zucker_path
10
16
  end
11
17
 
18
+ task 'default' => 'spec'
12
19
  Spec::Rake::SpecTask.new('spec') do |t|
13
- t.spec_files = FileList['lib/zucker/spec/**/*.rb']
20
+ t.spec_files = FileList['spec/*.rb']
14
21
  end
15
22
 
16
23
  # gem
17
24
  PKG_FILES = FileList[ '[a-zA-Z]*', 'lib/**/*' ]
18
25
  spec = Gem::Specification.new do |s|
19
26
  s.name = 'zucker'
20
- s.version = '2'
21
- s.date = '2010-08-08'
22
- s.authors = ['Jan Lelis']
27
+ s.version = Zucker::VERSION
28
+ s.date = Zucker::DATE
29
+ s.authors = ['Based on the thoughts of many people ;)', 'Jan Lelis']
23
30
  s.email = 'mail@janlelis.de'
24
- s.summary = 'Make your Ruby code even sweeter with this syntacitcal sugar: http://rubyzucker.info :)'
31
+ s.summary = "Make your Ruby code even sweeter with syntactic sugar :)
32
+ Adds lots of little helpers that you never want to miss again.
33
+ See http://rubyzucker.info"
25
34
  s.homepage = 'http://rubyzucker.info'
26
35
  s.files = PKG_FILES.to_a
27
- s.require_paths = [".","lib"]
36
+ s.require_paths = ["lib"]
37
+ s.required_ruby_version = '>= 1.8.7' # 1.9 recommended
28
38
  end
29
39
 
30
40
  Rake::GemPackageTask.new(spec) do |pkg|
@@ -1,4 +1,9 @@
1
- # nothing is done here
1
+ module Zucker
2
+ VERSION = '3'
3
+ DATE = '2010-08-14'
4
+ end
5
+
6
+ # nothing further is done here
2
7
  # to use zucker:
3
8
 
4
9
  # require 'zucker/default'
@@ -9,3 +14,4 @@
9
14
 
10
15
  # or cherry-pick the cubes you want ;)
11
16
 
17
+ # eg. require 'zucker/egonil'
@@ -1,6 +1,6 @@
1
1
  # require all the sugar ;)
2
2
  # see README for an explaination of what they do
3
3
 
4
- require 'zucker/default'
5
- require 'zucker/debug'
4
+ require 'zucker/2/default'
5
+ require 'zucker/2/debug'
6
6
 
@@ -1,4 +1,4 @@
1
- require 'zucker/D'
2
- require 'zucker/mm'
3
- require 'zucker/binding'
1
+ require 'zucker/2/D'
2
+ require 'zucker/2/mm'
3
+ require 'zucker/2/binding'
4
4
 
@@ -21,5 +21,5 @@ unary
21
21
  union
22
22
  |
23
23
 
24
- zucker.each{|rb| require "zucker/#{rb}"}
24
+ zucker.each{|rb| require "zucker/2/#{rb}"}
25
25
 
@@ -0,0 +1,19 @@
1
+ module Kernel
2
+ def D(*args, &block)
3
+ if args.empty?
4
+ tap{
5
+ if block_given?
6
+ puts yield self
7
+ else
8
+ puts self.inspect
9
+ end
10
+ }
11
+ else
12
+ 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!"
13
+ # eval ...
14
+ end
15
+ end
16
+ end
17
+
18
+ # J-_-L
19
+
@@ -0,0 +1,19 @@
1
+ def alias_for(m, *aliases)
2
+ aliases.each{ |a|
3
+ class_eval "alias #{a} #{m}"
4
+ }
5
+ end
6
+ alias aliases_for alias_for
7
+
8
+ class Module
9
+ def alias_method_for(m, *alias_methods)
10
+ alias_methods.each{ |a|
11
+ class_eval do
12
+ alias_method a.to_sym, m.to_sym
13
+ end
14
+ }
15
+ end
16
+ alias alias_methods_for alias_method_for
17
+ end
18
+
19
+ # J-_-L
@@ -0,0 +1,28 @@
1
+ alias is_an? is_a?
2
+
3
+ module Enumerable
4
+ alias with zip
5
+ alias % zip
6
+ end
7
+
8
+ class Array
9
+ alias ** product
10
+ end
11
+
12
+ class Hash
13
+ alias + merge
14
+ end
15
+
16
+ class Binding
17
+ #alias [] eval
18
+ def [](expr)
19
+ self.eval "#{expr}"
20
+ end
21
+ end
22
+
23
+ # constants - who would use these in real-world code for other things?
24
+ Infinity = 1.0 / 0.0 # or 2*Float::MAX
25
+ NaN = 0.0 / 0.0
26
+
27
+ # J-_-L
28
+
@@ -0,0 +1,6 @@
1
+ # require all the sugar ;)
2
+ # see README for an explaination of what they do
3
+
4
+ require 'zucker/3/default'
5
+ require 'zucker/3/debug'
6
+
@@ -0,0 +1,23 @@
1
+ class Array
2
+ def ^(other) # TODO: more efficient
3
+ (self - other) +
4
+ (other - self)
5
+ end
6
+
7
+ # can take an argument & block to be Rails compatible
8
+ def sum(identity = 0, &block)
9
+ # inject(:+)
10
+ if block_given?
11
+ map(&block).sum( identity )
12
+ else
13
+ inject(:+) || identity
14
+ end
15
+ end
16
+
17
+ def chrs
18
+ self.pack 'C*'
19
+ end
20
+ end
21
+
22
+ # J-_-L
23
+
@@ -0,0 +1,16 @@
1
+ class Array
2
+ def to_proc
3
+ Proc.new{ |obj|
4
+ if self.first.is_a? Array
5
+ self.inject(obj){ |result, nested_array|
6
+ nested_array.to_proc.call result
7
+ }
8
+ else
9
+ obj.send *self
10
+ end
11
+ }
12
+ end
13
+ end
14
+
15
+ # J-_-L
16
+
@@ -0,0 +1,25 @@
1
+ class Binding
2
+ def inspect
3
+ put_vars = lambda { |array|
4
+ if array.empty?
5
+ ' - none'
6
+ else
7
+ array.map{|e| " - #{e}: #{ self.eval '#{e}'}"}*"\n"
8
+ end
9
+ }
10
+
11
+ "#{self.to_s}
12
+ local vars
13
+ #{ put_vars[ self.eval 'local_variables' ] }
14
+ (instance vars)
15
+ #{ put_vars[ self.eval 'instance_variables' ] }
16
+ self
17
+ - #{self.eval 'self'}
18
+ block_given?
19
+ - #{self.eval 'block_given?'}"
20
+
21
+ end
22
+ end
23
+
24
+ # J-_-L
25
+
@@ -0,0 +1,26 @@
1
+ class Object
2
+ def blank?
3
+ if respond_to? :empty? then empty? else !self end
4
+ end
5
+
6
+ def present?
7
+ !blank?
8
+ end
9
+ end
10
+
11
+
12
+ { # what to do # for which classes
13
+ lambda{ true } => [FalseClass, NilClass],
14
+ lambda{ false } => [TrueClass, Numeric],
15
+ lambda{ empty? } => [Array, Hash],
16
+ lambda{ self !~ /\S/ } => [String],
17
+ lambda{ self == // } => [Regexp],
18
+
19
+ }.each{ |action, klass_array|
20
+ klass_array.each{ |klass|
21
+ klass.send :define_method, :blank?, &action
22
+ }
23
+ }
24
+
25
+ # J-_-L
26
+
@@ -0,0 +1,10 @@
1
+ class Class
2
+ def to_proc
3
+ Proc.new do |*args|
4
+ self.new *args
5
+ end
6
+ end
7
+ end
8
+
9
+ # J-_-L
10
+
@@ -0,0 +1,6 @@
1
+ require 'zucker'
2
+
3
+ require 'zucker/3/D'
4
+ require 'zucker/3/mm'
5
+ require 'zucker/3/binding'
6
+
@@ -0,0 +1,35 @@
1
+ require 'zucker'
2
+
3
+ # default
4
+ zucker = %w|
5
+ alias_for
6
+ aliases
7
+ array
8
+ array2proc
9
+ blank
10
+ class2proc
11
+ egonil
12
+ enumerable
13
+ hash
14
+ hash2proc
15
+ info
16
+ iterate
17
+ ivars
18
+ kernel
19
+ mcopy
20
+ not
21
+ regexp2proc
22
+ sandbox
23
+ square_brackets_for
24
+ string
25
+ tap
26
+ unary
27
+ union
28
+ |
29
+
30
+ # remove 1.9 if 1.8
31
+ if RUBY_VERSION < '1.9'
32
+ zucker -= %w|not tap union|
33
+ end
34
+
35
+ zucker.each{|rb| require File.join( 'zucker', '3', rb )}
@@ -0,0 +1,14 @@
1
+ def egonil(nil_value = nil)
2
+ yield
3
+ rescue NoMethodError => e
4
+ if e.message =~ /NilClass$/
5
+ nil_value
6
+ else
7
+ raise NoMethodError
8
+ end
9
+ end
10
+
11
+ alias nn egonil
12
+
13
+ # J-_-L
14
+
@@ -0,0 +1,12 @@
1
+ module Enumerable
2
+ def mash
3
+ ret = {}
4
+ each{ |kv|
5
+ ret.store *( yield(kv)[0,2] )
6
+ }
7
+ ret
8
+ end
9
+ end
10
+
11
+ # J-_-L
12
+
@@ -0,0 +1,19 @@
1
+ class Hash
2
+ def self.zip(keys,values)
3
+ Hash[ *keys.zip( values ).flatten ]
4
+ end
5
+
6
+ def <<(other)
7
+ case
8
+ when other.is_a?(Hash)
9
+ merge! other
10
+ when other.is_a?(Enumerable) || other.respond_to?(:to_splat)
11
+ merge! Hash[*other]
12
+ else
13
+ raise TypeError, 'can only append other Hashs and Enumerables (or Classes that implement to_splat)'
14
+ end
15
+ end
16
+ end
17
+
18
+ # J-_-L
19
+
@@ -0,0 +1,14 @@
1
+ class Hash
2
+ def to_proc
3
+ Proc.new{ |obj|
4
+ if self.member? obj
5
+ self[obj].to_proc.call obj
6
+ else
7
+ obj
8
+ end
9
+ }
10
+ end
11
+ end
12
+
13
+ # J-_-L
14
+
@@ -0,0 +1,167 @@
1
+ module Info
2
+ class << Info
3
+ # hash like access
4
+ def [](what)
5
+ send what
6
+ end
7
+
8
+ # list available info methods
9
+ def list
10
+ singleton_methods - [:[], :list, '[]', 'list']
11
+ end
12
+ end
13
+
14
+ module_function
15
+
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
+ # input
26
+ def last_input_file
27
+ $FILENAME
28
+ end
29
+
30
+ def last_input_line_number
31
+ $.
32
+ end
33
+
34
+ def last_input
35
+ $_
36
+ end
37
+
38
+ # program
39
+ def program_name
40
+ $0
41
+ end
42
+
43
+ def program_arguments
44
+ $:
45
+ end
46
+
47
+ def loaded_programs
48
+ $"
49
+ end
50
+
51
+ def program_data
52
+ ::DATA
53
+ end
54
+
55
+ def child_program_status
56
+ $CHILD_STATUS
57
+ end
58
+
59
+ # system info
60
+ def environment
61
+ ::ENV
62
+ end
63
+ alias env environment
64
+
65
+ def working_directory
66
+ Dir.pwd
67
+ end
68
+
69
+ def platform
70
+ ::RUBY_PLATFORM
71
+ end
72
+
73
+ def process_id
74
+ $$
75
+ end
76
+
77
+ def load_path
78
+ $:
79
+ end
80
+
81
+ # current
82
+ def current_line
83
+ __LINE__
84
+ end
85
+
86
+ def current_method # 1.9
87
+ __method__
88
+ end
89
+
90
+ def current_callstack
91
+ caller
92
+ end
93
+
94
+ # dealing with strings
95
+ def gets_separator
96
+ $/
97
+ end
98
+
99
+ def join_separator
100
+ $,
101
+ end
102
+
103
+ def print_separator
104
+ $,
105
+ end
106
+
107
+ def split_separator
108
+ $;
109
+ end
110
+
111
+ # misc
112
+ def security_level
113
+ $SAFE
114
+ end
115
+
116
+ def warnings_activated?
117
+ $VERBOSE
118
+ end
119
+
120
+ def debug_activated?
121
+ $DEBUG
122
+ end
123
+
124
+ def last_exception
125
+ $!
126
+ end
127
+
128
+ # defined objects
129
+ def global_variables
130
+ Object.send :global_variables
131
+ end
132
+
133
+ def global_constants
134
+ Object.constants
135
+ end
136
+
137
+ # encoding (1.9)
138
+ def source_encoding
139
+ __ENCODING__
140
+ end
141
+
142
+ def external_encoding
143
+ Encoding.default_external
144
+ end
145
+
146
+ def internal_encoding
147
+ Encoding.default_internal
148
+ end
149
+
150
+ # ruby version info
151
+ def ruby_version
152
+ ::RUBY_VERSION
153
+ end
154
+
155
+ def ruby_patchlevel
156
+ ::RUBY_PATCHLEVEL
157
+ end
158
+
159
+ def ruby_description
160
+ ::RUBY_DESCRIPTION
161
+ end
162
+
163
+ def ruby_release_date
164
+ ::RUBY_RELEASE_DATE
165
+ end
166
+ end
167
+