zucker 2 → 3

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