zucker 7 → 8

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 (46) hide show
  1. data/CHANGELOG +6 -0
  2. data/Rakefile +2 -0
  3. data/lib/zucker.rb +2 -2
  4. data/lib/zucker/8/alias_for.rb +21 -0
  5. data/lib/zucker/8/aliases.rb +51 -0
  6. data/lib/zucker/8/all.rb +4 -0
  7. data/lib/zucker/8/array.rb +25 -0
  8. data/lib/zucker/8/array2proc.rb +18 -0
  9. data/lib/zucker/8/binding.rb +33 -0
  10. data/lib/zucker/8/blank.rb +28 -0
  11. data/lib/zucker/8/cc.rb +25 -0
  12. data/lib/zucker/8/class2proc.rb +12 -0
  13. data/lib/zucker/8/control.rb +4 -0
  14. data/lib/zucker/8/dd.rb +23 -0
  15. data/lib/zucker/8/debug.rb +4 -0
  16. data/lib/zucker/8/default.rb +4 -0
  17. data/lib/zucker/8/egonil.rb +27 -0
  18. data/lib/zucker/8/engine.rb +68 -0
  19. data/lib/zucker/8/enumerable.rb +14 -0
  20. data/lib/zucker/8/env.rb +4 -0
  21. data/lib/zucker/8/extensions.rb +4 -0
  22. data/lib/zucker/8/hash.rb +27 -0
  23. data/lib/zucker/8/hash2proc.rb +16 -0
  24. data/lib/zucker/8/info.rb +192 -0
  25. data/lib/zucker/8/iterate.rb +27 -0
  26. data/lib/zucker/8/ivars.rb +28 -0
  27. data/lib/zucker/8/kernel.rb +34 -0
  28. data/lib/zucker/8/mcopy.rb +10 -0
  29. data/lib/zucker/8/mm.rb +34 -0
  30. data/lib/zucker/8/not.rb +19 -0
  31. data/lib/zucker/8/object.rb +4 -0
  32. data/lib/zucker/8/oo.rb +17 -0
  33. data/lib/zucker/8/os.rb +54 -0
  34. data/lib/zucker/8/qq.rb +12 -0
  35. data/lib/zucker/8/regexp2proc.rb +12 -0
  36. data/lib/zucker/8/sandbox.rb +25 -0
  37. data/lib/zucker/8/shortcuts.rb +4 -0
  38. data/lib/zucker/8/square_brackets_for.rb +21 -0
  39. data/lib/zucker/8/string.rb +54 -0
  40. data/lib/zucker/8/tap.rb +11 -0
  41. data/lib/zucker/8/to_proc.rb +4 -0
  42. data/lib/zucker/8/unary.rb +24 -0
  43. data/lib/zucker/8/union.rb +16 -0
  44. data/lib/zucker/8/version.rb +118 -0
  45. data/lib/zucker/binding.rb +3 -4
  46. metadata +46 -5
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 2010-10-06 | Zucker 8
2
+ * fixed a little alias_for bug
3
+ * disabled rdoc creation when installing (in favour of the custom docs)
4
+ * changed Binding#inspect to Binding.variables (was too verbose and dangerous)
5
+
6
+
1
7
  2010-10-03 | Zucker 7
2
8
  * fixed critical OS.windows? bug
3
9
 
data/Rakefile CHANGED
@@ -39,6 +39,8 @@ See http://rubyzucker.info"
39
39
  s.require_paths = ["lib"]
40
40
  s.required_ruby_version = '>= 1.8.7' # 1.9 recommended
41
41
  s.add_development_dependency 'coderay'
42
+ s.has_rdoc = false
43
+ s.rdoc_options = '--version' # don't generate
42
44
  end
43
45
 
44
46
  Rake::GemPackageTask.new(spec) do |pkg|
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Zucker
4
4
  # version and date get modified by the :prepare_release rake task
5
- VERSION = '7'
6
- DATE = '2010-10-03'
5
+ VERSION = '8'
6
+ DATE = '2010-10-06'
7
7
 
8
8
  # cube list
9
9
  PACKAGES = {
@@ -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,51 @@
1
+ require 'zucker'
2
+
3
+ class Object
4
+ alias is_an? is_a? # thanks to utility_belt
5
+ end
6
+
7
+ module Enumerable
8
+ alias with zip
9
+ alias % zip
10
+ end
11
+
12
+ class Array
13
+ alias ** product
14
+ alias contains? include?
15
+ end
16
+
17
+ class String
18
+ alias contains? include?
19
+ end
20
+
21
+ class Hash
22
+ alias + merge
23
+ end
24
+
25
+ class Binding
26
+ #alias [] eval
27
+ def [](expr)
28
+ self.eval "#{expr}"
29
+ end
30
+ end
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
+
46
+ # constants - who would use these in real-world code for other things?
47
+ Infinity = 1.0 / 0.0 # or 2*Float::MAX or Float::INFINITY
48
+ NaN = 0.0 / 0.0
49
+
50
+ # J-_-L
51
+
@@ -0,0 +1,4 @@
1
+ require 'zucker'
2
+ Zucker.require_all
3
+
4
+ # J-_-L
@@ -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,33 @@
1
+ require 'zucker'
2
+
3
+ class Binding
4
+ def variables
5
+ put_vars = lambda { |array|
6
+ if array.empty?
7
+ ' - none'
8
+ else
9
+ array.map{|e|
10
+ val = self.eval "#{e}"
11
+ val = val.is_a?( Binding ) ? val.to_s : val.inspect
12
+ " - #{e}: #{ val }"
13
+ }.join "\n"
14
+ end
15
+ }
16
+
17
+ "#{self.to_s}
18
+ local vars
19
+ #{ put_vars[ self.eval 'local_variables' ] }
20
+ (instance vars)
21
+ #{ put_vars[ self.eval 'instance_variables' ] }
22
+ self
23
+ - #{self.eval 'self'}
24
+ block_given?
25
+ - #{self.eval 'block_given?'}"
26
+
27
+ end
28
+
29
+ alias vars variables
30
+ end
31
+
32
+ # J-_-L
33
+
@@ -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
+
@@ -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
@@ -0,0 +1,12 @@
1
+ require 'zucker'
2
+
3
+ class Class
4
+ def to_proc
5
+ Proc.new do |*args|
6
+ self.new *args
7
+ end
8
+ end
9
+ end
10
+
11
+ # J-_-L
12
+
@@ -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
+
@@ -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_all
3
+
4
+ # J-_-L
@@ -0,0 +1,27 @@
1
+ require 'zucker'
2
+
3
+ # code by Yohan, slightly edited and comments by me
4
+ def egonil(&block)
5
+ # grip methods
6
+ ori_method_missing = NilClass.instance_method(:method_missing)
7
+ catch_method_missing = NilClass.instance_method(:catch_method_missing)
8
+ # activate ego mode
9
+ NilClass.send :define_method, :method_missing, catch_method_missing
10
+ # run code
11
+ yield
12
+ ensure
13
+ # no matter what happens: restore default nil behaviour
14
+ NilClass.send :define_method, :method_missing, ori_method_missing
15
+ end
16
+
17
+ # this is the ego nil
18
+ class NilClass
19
+ def catch_method_missing(m, *args, &block)
20
+ nil
21
+ end
22
+ end
23
+
24
+ alias nn egonil
25
+
26
+ # J-_-L
27
+
@@ -0,0 +1,68 @@
1
+ require 'zucker'
2
+
3
+ module RubyEngine
4
+ # try to guess the interpreter
5
+ @interpreter = case
6
+ when RUBY_PLATFORM == 'parrot'
7
+ 'cardinal'
8
+ when Object.const_defined?(:RUBY_ENGINE)
9
+ if RUBY_ENGINE == 'ruby'
10
+ if RUBY_DESCRIPTION =~ /Enterprise/
11
+ 'ree'
12
+ else
13
+ 'mri'
14
+ end
15
+ else
16
+ RUBY_ENGINE.to_s # jruby, rbx, ironruby, macruby, etc.
17
+ end
18
+ else # probably 1.8
19
+ 'mri'
20
+ end
21
+
22
+ class << self
23
+ def is?(what)
24
+ what === @interpreter
25
+ end
26
+ alias is is?
27
+
28
+ def to_s
29
+ @interpreter.to_s
30
+ end
31
+
32
+ # ask methods
33
+
34
+ def mri?
35
+ RubyEngine.is? 'mri'
36
+ end
37
+ alias official_ruby? mri?
38
+ alias ruby? mri?
39
+
40
+ def jruby?
41
+ RubyEngine.is? 'jruby'
42
+ end
43
+ alias java? jruby?
44
+
45
+ def rubinius?
46
+ RubyEngine.is? 'rbx'
47
+ end
48
+ alias rbx? rubinius?
49
+
50
+ def ree?
51
+ RubyEngine.is? 'ree'
52
+ end
53
+ alias enterprise? ree?
54
+
55
+ def ironruby?
56
+ RubyEngine.is? 'ironruby'
57
+ end
58
+ alias iron_ruby? ironruby?
59
+
60
+ def cardinal?
61
+ RubyEngine.is? 'cardinal'
62
+ end
63
+ alias parrot? cardinal?
64
+ alias perl? cardinal?
65
+ end
66
+ end
67
+
68
+ # J-_-L
@@ -0,0 +1,14 @@
1
+ require 'zucker'
2
+
3
+ module Enumerable
4
+ def mash
5
+ ret = {}
6
+ each{ |kv|
7
+ ret.store *( yield(kv)[0,2] )
8
+ }
9
+ ret
10
+ end
11
+ end
12
+
13
+ # J-_-L
14
+
@@ -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
@@ -0,0 +1,27 @@
1
+ require 'zucker'
2
+
3
+ class Hash
4
+ def self.zip(keys,values)
5
+ Hash[ *keys.zip( values ).flatten ]
6
+ end
7
+
8
+ def <<(other)
9
+ case
10
+ when other.is_a?(Hash)
11
+ merge! other
12
+ when other.is_a?(Enumerable) || other.respond_to?(:to_splat)
13
+ merge! Hash[*other]
14
+ else
15
+ raise TypeError, 'can only append other Hashs and Enumerables (or Classes that implement to_splat)'
16
+ end
17
+ end
18
+
19
+ def &(other)
20
+ Hash[ *select{ |k,v|
21
+ other[k] == v
22
+ }.flatten ]
23
+ end
24
+ end
25
+
26
+ # J-_-L
27
+
@@ -0,0 +1,16 @@
1
+ require 'zucker'
2
+
3
+ class Hash
4
+ def to_proc
5
+ Proc.new{ |obj|
6
+ if self.member? obj
7
+ self[obj].to_proc.call obj
8
+ else
9
+ obj
10
+ end
11
+ }
12
+ end
13
+ end
14
+
15
+ # J-_-L
16
+
@@ -0,0 +1,192 @@
1
+ require 'zucker'
2
+ require 'rbconfig'
3
+ require 'etc'
4
+
5
+ module Info
6
+ class << self
7
+ # hash like access
8
+ def [](what)
9
+ send what
10
+ end
11
+
12
+ # list available info methods
13
+ def list
14
+ singleton_methods - [:[], :list, '[]', 'list']
15
+ end
16
+ end
17
+
18
+ module_function
19
+
20
+ # input
21
+ def last_input_file
22
+ $FILENAME
23
+ end
24
+
25
+ def last_input_line_number
26
+ $.
27
+ end
28
+
29
+ def last_input
30
+ $_
31
+ end
32
+
33
+ # program
34
+ def program_name
35
+ $0
36
+ end
37
+
38
+ def program_arguments
39
+ $:
40
+ end
41
+
42
+ def loaded_programs
43
+ $"
44
+ end
45
+
46
+ def program_data
47
+ ::DATA
48
+ end
49
+
50
+ def child_program_status
51
+ $CHILD_STATUS
52
+ end
53
+
54
+ # system info
55
+ def environment
56
+ ::ENV
57
+ end
58
+ alias env environment
59
+
60
+ def working_directory
61
+ Dir.pwd
62
+ end
63
+
64
+ def platform
65
+ ::RUBY_PLATFORM
66
+ end
67
+
68
+ def os
69
+ RbConfig::CONFIG['host_os']
70
+ end
71
+
72
+ def process_id
73
+ $$
74
+ end
75
+
76
+ def load_path
77
+ $:
78
+ end
79
+
80
+ # user
81
+ def user_login
82
+ Etc.getlogin
83
+ end
84
+
85
+ def user_name
86
+ Etc.getpwnam(user_login).gecos.split(',')[0]
87
+ end
88
+
89
+ # current
90
+
91
+ def current_file # __FILE__
92
+ return $` if caller[0].rindex(/:\d+(:in `.*')?$/)
93
+ end
94
+
95
+ def current_file_directory
96
+ if current_file[0,1] == '(' && current_file[-1,1] == ')'
97
+ current_file
98
+ else
99
+ File.dirname(current_file)
100
+ end
101
+ end
102
+
103
+ def current_line # __LINE__
104
+ return $1.to_i if caller[0].rindex( /:(\d+)(:in `.*')?$/ )
105
+ end
106
+
107
+ def current_method # __method__ (except aliases)
108
+ return $1.to_sym if caller(1)[0].rindex( /\`([^\']+)\'/ )
109
+ end
110
+
111
+ def current_callstack
112
+ caller
113
+ end
114
+
115
+ # dealing with strings
116
+ def gets_separator
117
+ $/
118
+ end
119
+
120
+ def join_separator
121
+ $,
122
+ end
123
+
124
+ def print_separator
125
+ $,
126
+ end
127
+
128
+ def split_separator
129
+ $;
130
+ end
131
+
132
+ # misc
133
+ def security_level
134
+ $SAFE
135
+ end
136
+
137
+ def warnings_activated?
138
+ $VERBOSE
139
+ end
140
+
141
+ def debug_activated?
142
+ $DEBUG
143
+ end
144
+
145
+ def last_exception
146
+ $!
147
+ end
148
+
149
+ # defined objects
150
+ def global_variables
151
+ Object.send :global_variables
152
+ end
153
+
154
+ def global_constants
155
+ Object.constants
156
+ end
157
+
158
+ # encoding (1.9)
159
+ #def source_encoding
160
+ # __ENCODING__
161
+ #end
162
+
163
+ def external_encoding
164
+ Encoding.default_external
165
+ end
166
+
167
+ def internal_encoding
168
+ Encoding.default_internal
169
+ end
170
+
171
+ # ruby version info
172
+ def ruby_version # also see the RubyVersion cube
173
+ ::RUBY_VERSION
174
+ end
175
+
176
+ def ruby_patchlevel
177
+ ::RUBY_PATCHLEVEL
178
+ end
179
+
180
+ def ruby_description
181
+ ::RUBY_DESCRIPTION
182
+ end
183
+
184
+ def ruby_release_date
185
+ ::RUBY_RELEASE_DATE
186
+ end
187
+
188
+ def ruby_engine # warning! not support by every implementation. It's saver to use the RubyEngine cube
189
+ ::RUBY_ENGINE
190
+ end
191
+ end
192
+
@@ -0,0 +1,27 @@
1
+ require 'zucker'
2
+
3
+ def iterate(*params)
4
+ # params.shift.zip(*params).each{ |*elements| yield *elements }
5
+ raise ArgumentError, "wrong number of arguments (0)" if params.empty?
6
+
7
+ first = params.shift
8
+ if params.empty? # single param - like each
9
+ if block_given?
10
+ first.map{|e| yield e }
11
+ else
12
+ first.map.to_enum
13
+ end
14
+ else # multiple params
15
+ max_size = [first, *params].max_by(&:count).size
16
+ padded_first = first.to_a + [nil]*(max_size - first.count) # append nils
17
+ obj = padded_first.zip *params
18
+ if block_given?
19
+ obj.map{|es| yield *es }
20
+ else
21
+ obj.map.to_enum
22
+ end
23
+ end
24
+ end
25
+
26
+ # J-_-L
27
+
@@ -0,0 +1,28 @@
1
+ require 'zucker'
2
+
3
+ def instance_variables_from(obj, *only)
4
+ iter =
5
+ if obj.is_a? Binding
6
+ obj.eval('local_variables').map{|e| [obj.eval("#{e}"), e] }
7
+ elsif obj.is_a? Hash
8
+ obj.map{|k,v| [v,k] }
9
+ else
10
+ # elsif obj.is_a? Enumerable
11
+ obj.each.with_index
12
+ end
13
+
14
+ ret = []
15
+ iter.each{ |value, arg|
16
+ arg = arg.to_s
17
+ if only.include?(arg) || only.include?(arg.to_sym) || only.empty?
18
+ arg = '_' + arg if (48..57).member? arg.unpack('C')[0] # 1.8+1.9
19
+ ret << ivar = :"@#{arg}"
20
+ self.instance_variable_set ivar, value
21
+ end
22
+ }
23
+ ret
24
+ end
25
+ alias ivars instance_variables_from
26
+
27
+ # J-_-L
28
+
@@ -0,0 +1,34 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ private
5
+
6
+ def activate_warnings!
7
+ $VERBOSE = true
8
+ end
9
+
10
+ def deactivate_warnings!
11
+ $VERBOSE = false
12
+ end
13
+
14
+ def library?
15
+ caller[0].rindex(/:\d+(:in `.*')?$/)
16
+ $PROGRAM_NAME != $` # __FILE__
17
+ end
18
+
19
+ def executed_directly?
20
+ caller[0].rindex(/:\d+(:in `.*')?$/)
21
+ $PROGRAM_NAME == $` # __FILE__
22
+ end
23
+ alias standalone? executed_directly?
24
+
25
+ def irb?
26
+ !!(( IRB and $0 == 'irb' ) rescue nil)
27
+ end
28
+
29
+ def ignore_sigint! # ctrl+c
30
+ Signal.trap *%w|SIGINT IGNORE|
31
+ end
32
+ end
33
+
34
+ # J-_-L
@@ -0,0 +1,10 @@
1
+ require 'zucker'
2
+
3
+ class Object
4
+ def mcopy
5
+ Marshal.load Marshal.dump self
6
+ end
7
+ end
8
+
9
+ # J-_-L
10
+
@@ -0,0 +1,34 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ def m(levels = 1)
5
+ if self.is_a? Module
6
+ klass, method_function = self, :public_methods
7
+ else
8
+ klass, method_function = self.class, :public_instance_methods
9
+
10
+ eigen = self.singleton_methods
11
+ if !eigen.empty?
12
+ puts :Eigenclass # sorry for not being up to date, I just love the word
13
+ p self.singleton_methods
14
+ end
15
+ end
16
+
17
+ levels.times{ |level|
18
+ if cur = klass.ancestors[level]
19
+ p cur # put class name
20
+ p cur.send method_function, false # put methods of the class
21
+ else
22
+ break
23
+ end
24
+ }
25
+
26
+ self # or whatever
27
+ end
28
+
29
+ alias mm m
30
+ alias method_list m
31
+ end
32
+
33
+ # J-_-L
34
+
@@ -0,0 +1,19 @@
1
+ require 'zucker'
2
+
3
+ class Object
4
+ def not
5
+ NotClass.new self
6
+ end
7
+
8
+ class NotClass < BasicObject
9
+ def initialize(receiver)
10
+ @receiver = receiver
11
+ end
12
+
13
+ def method_missing(m, *args, &block)
14
+ not @receiver.public_send( m, *args, &block )
15
+ end
16
+ end
17
+ end
18
+
19
+ # J-_-L
@@ -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 "#{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
@@ -0,0 +1,54 @@
1
+ require 'zucker'
2
+ require 'rbconfig'
3
+
4
+ module OS
5
+ class << self
6
+ def is?(what)
7
+ what === RbConfig::CONFIG['host_os']
8
+ end
9
+ alias is is?
10
+
11
+ def to_s
12
+ RbConfig::CONFIG['host_os']
13
+ end
14
+ end
15
+
16
+ module_function
17
+
18
+ def linux?
19
+ OS.is?( /linux|cygwin/ )
20
+ end
21
+
22
+ def mac?
23
+ OS.is?( /mac|darwin/ )
24
+ end
25
+
26
+ def bsd?
27
+ OS.is?( /bsd/ )
28
+ end
29
+
30
+ def windows?
31
+ OS.is?( /mswin|mingw/ )
32
+ end
33
+
34
+ def solaris?
35
+ OS.is?( /solaris|sunos/ )
36
+ end
37
+
38
+ def posix?
39
+ linux? or mac? or bsd? or solaris? or begin
40
+ fork do end
41
+ true
42
+ rescue NotImplementedError, NoMethodError
43
+ false
44
+ end
45
+ end
46
+
47
+ #def symbian?
48
+ #TODO who knows what symbian returns?
49
+ #end
50
+
51
+ # ...
52
+ end
53
+
54
+ # J-_-L
@@ -0,0 +1,12 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ private
5
+
6
+ def q(*args)
7
+ puts args.map( &:inspect )*' ' unless args.empty?
8
+ end
9
+ alias qq q
10
+ end
11
+
12
+ # J-_-L
@@ -0,0 +1,12 @@
1
+ require 'zucker'
2
+
3
+ class Regexp
4
+ def to_proc
5
+ proc do |e|
6
+ e.to_s[self]
7
+ end
8
+ end
9
+ end
10
+
11
+ # J-_-L
12
+
@@ -0,0 +1,25 @@
1
+ require 'zucker'
2
+
3
+ module Kernel
4
+ private
5
+
6
+ def sandbox(rescueblock_or_default=nil)
7
+ Thread.start do
8
+ $SAFE = 4
9
+ yield
10
+ end.value
11
+ rescue SecurityError => e
12
+ if !rescueblock_or_default.nil?
13
+ if rescueblock_or_default.is_a? Proc
14
+ rescueblock_or_default.call e
15
+ else
16
+ rescueblock_or_default
17
+ end
18
+ else
19
+ raise e
20
+ end
21
+ end
22
+ end
23
+
24
+ # J-_-L
25
+
@@ -0,0 +1,4 @@
1
+ require 'zucker'
2
+ Zucker.require_this __FILE__
3
+
4
+ # J-_-L
@@ -0,0 +1,21 @@
1
+ require 'zucker'
2
+
3
+ class Module
4
+ def square_brackets_for(ivar, assignment = true)
5
+ # undef [] if respond_to? :[]
6
+ # undef []= if respond_to? :[]=
7
+
8
+ define_method :[] do |key|
9
+ (instance_variable_get :"@#{ivar}")[key]
10
+ end
11
+
12
+ if assignment
13
+ define_method :[]= do |key, value|
14
+ (instance_variable_get :"@#{ivar}")[key] = value
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ # J-_-L
21
+
@@ -0,0 +1,54 @@
1
+ require 'zucker'
2
+
3
+ class String
4
+ def -(rem)
5
+ gsub( Regexp === rem ? rem : rem.to_s, '' )
6
+ end
7
+
8
+ def ^(pos)
9
+ pos = pos.to_i
10
+ if pos >= 0
11
+ self[pos..-1]
12
+ else
13
+ self[0...pos]
14
+ end
15
+ end
16
+
17
+ def lchomp(arg = $/)
18
+ reverse.chomp(arg).reverse
19
+ end
20
+
21
+ def lchomp!(arg = $/)
22
+ reverse.chomp!(arg).reverse
23
+ end
24
+
25
+ def ords
26
+ unpack 'C*'
27
+ # bytes.to_a
28
+ end
29
+
30
+ def constantize(default_value = nil) # always uses global scope as in AS... is this good?
31
+ get_constant = lambda{
32
+ self.split(/::/).inject( Object ){ |base_constant, current_constant|
33
+ base_constant.const_get current_constant
34
+ }
35
+ }
36
+
37
+ if !default_value && !block_given?
38
+ get_constant.call
39
+ else
40
+ begin
41
+ get_constant.call
42
+ rescue NameError
43
+ if block_given?
44
+ yield self
45
+ else
46
+ default_value
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ # J-_-L
54
+
@@ -0,0 +1,11 @@
1
+ require 'zucker'
2
+
3
+ def tap_on(obj, &block)
4
+ obj.tap &block
5
+ end
6
+
7
+ def make_new(what, *args, &block)
8
+ what.new(*args).tap &block
9
+ end
10
+
11
+ # J-_-L
@@ -0,0 +1,4 @@
1
+ require 'zucker'
2
+ Zucker.require_this __FILE__
3
+
4
+ # J-_-L
@@ -0,0 +1,24 @@
1
+ require 'zucker'
2
+
3
+ class String
4
+ def +@
5
+ self
6
+ end
7
+
8
+ def -@
9
+ to_sym
10
+ end
11
+ end
12
+
13
+ class Symbol
14
+ def +@
15
+ to_s
16
+ end
17
+
18
+ def -@
19
+ self
20
+ end
21
+ end
22
+
23
+ # J-_-L
24
+
@@ -0,0 +1,16 @@
1
+ require 'zucker'
2
+
3
+ class Regexp
4
+ def |(arg)
5
+ Regexp.union self, arg.is_a?(Regexp) ? arg : arg.to_s
6
+ end
7
+ end
8
+
9
+ class String
10
+ def |(arg)
11
+ Regexp.union self, arg.is_a?(Regexp) ? arg : arg.to_s
12
+ end
13
+ end
14
+
15
+ # J-_-L
16
+
@@ -0,0 +1,118 @@
1
+ require 'zucker'
2
+ require 'date'
3
+ require 'time'
4
+
5
+ module RubyVersion
6
+ class << self
7
+ def to_s
8
+ RUBY_VERSION
9
+ end
10
+
11
+ # comparable
12
+ def <=>(other)
13
+ value = case other
14
+ when Integer
15
+ RUBY_VERSION.to_i
16
+ when Float
17
+ RUBY_VERSION.to_f
18
+ when String
19
+ RUBY_VERSION
20
+ when Date, Time
21
+ other.class.parse(RUBY_RELEASE_DATE)
22
+ else
23
+ other = other.to_s
24
+ RUBY_VERSION
25
+ end
26
+ value <=> other
27
+ end
28
+ include Comparable
29
+
30
+ # chaining for dsl-like language
31
+ def is?(other = nil)
32
+ if other
33
+ RubyVersion == other
34
+ else
35
+ RubyVersion
36
+ end
37
+ end
38
+ alias is is?
39
+
40
+ # aliases
41
+ alias below <
42
+ alias below? <
43
+ alias at_most <=
44
+ alias at_most? <=
45
+ alias above >
46
+ alias above? >
47
+ alias at_least >=
48
+ alias at_least? >=
49
+ alias exactly ==
50
+ alias exactly? ==
51
+ def not(other)
52
+ self != other
53
+ end
54
+ alias not? not
55
+ alias between between?
56
+
57
+ # compare dates
58
+ def newer_than(other)
59
+ if other.is_a? Date or other.is_a? Time
60
+ RubyVersion > other
61
+ else
62
+ RUBY_RELEASE_DATE > other.to_s
63
+ end
64
+ end
65
+ alias newer_than? newer_than
66
+
67
+ def older_than(other)
68
+ if other.is_a? Date or other.is_a? Time
69
+ RubyVersion < other
70
+ else
71
+ RUBY_RELEASE_DATE < other.to_s
72
+ end
73
+ end
74
+ alias older_than? older_than
75
+
76
+ def released_today
77
+ RubyVersion.date == Date.today
78
+ end
79
+ alias released_today? released_today
80
+
81
+ # accessors
82
+
83
+ def major
84
+ RUBY_VERSION.to_i
85
+ end
86
+ alias main major
87
+
88
+ def minor
89
+ RUBY_VERSION.split('.')[1].to_i
90
+ end
91
+ alias mini minor
92
+
93
+ def tiny
94
+ RUBY_VERSION.split('.')[2].to_i
95
+ end
96
+
97
+ alias teeny tiny
98
+
99
+ def patchlevel
100
+ RUBY_PATCHLEVEL
101
+ end
102
+
103
+ def platform
104
+ RUBY_PLATFORM
105
+ end
106
+
107
+ def release_date
108
+ Date.parse RUBY_RELEASE_DATE
109
+ end
110
+ alias date release_date
111
+
112
+ def description
113
+ RUBY_DESCRIPTION
114
+ end
115
+ end
116
+ end
117
+
118
+ # J-_-L
@@ -1,7 +1,7 @@
1
1
  require 'zucker'
2
2
 
3
3
  class Binding
4
- def inspect
4
+ def variables
5
5
  put_vars = lambda { |array|
6
6
  if array.empty?
7
7
  ' - none'
@@ -25,10 +25,9 @@ block_given?
25
25
  - #{self.eval 'block_given?'}"
26
26
 
27
27
  end
28
- end
29
28
 
30
- alias v binding
31
- alias vv binding
29
+ alias vars variables
30
+ end
32
31
 
33
32
  # J-_-L
34
33
 
metadata CHANGED
@@ -3,8 +3,8 @@ name: zucker
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 7
7
- version: "7"
6
+ - 8
7
+ version: "8"
8
8
  platform: ruby
9
9
  authors:
10
10
  - Jan Lelis
@@ -13,7 +13,7 @@ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
15
 
16
- date: 2010-10-03 00:00:00 +02:00
16
+ date: 2010-10-06 00:00:00 +02:00
17
17
  default_executable:
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
@@ -87,6 +87,47 @@ files:
87
87
  - lib/zucker/4/version.rb
88
88
  - lib/zucker/4/union.rb
89
89
  - lib/zucker/control.rb
90
+ - lib/zucker/8/default.rb
91
+ - lib/zucker/8/qq.rb
92
+ - lib/zucker/8/all.rb
93
+ - lib/zucker/8/string.rb
94
+ - lib/zucker/8/sandbox.rb
95
+ - lib/zucker/8/regexp2proc.rb
96
+ - lib/zucker/8/ivars.rb
97
+ - lib/zucker/8/dd.rb
98
+ - lib/zucker/8/class2proc.rb
99
+ - lib/zucker/8/enumerable.rb
100
+ - lib/zucker/8/alias_for.rb
101
+ - lib/zucker/8/control.rb
102
+ - lib/zucker/8/unary.rb
103
+ - lib/zucker/8/hash.rb
104
+ - lib/zucker/8/hash2proc.rb
105
+ - lib/zucker/8/tap.rb
106
+ - lib/zucker/8/blank.rb
107
+ - lib/zucker/8/not.rb
108
+ - lib/zucker/8/array2proc.rb
109
+ - lib/zucker/8/info.rb
110
+ - lib/zucker/8/array.rb
111
+ - lib/zucker/8/binding.rb
112
+ - lib/zucker/8/extensions.rb
113
+ - lib/zucker/8/mm.rb
114
+ - lib/zucker/8/oo.rb
115
+ - lib/zucker/8/aliases.rb
116
+ - lib/zucker/8/to_proc.rb
117
+ - lib/zucker/8/iterate.rb
118
+ - lib/zucker/8/egonil.rb
119
+ - lib/zucker/8/mcopy.rb
120
+ - lib/zucker/8/shortcuts.rb
121
+ - lib/zucker/8/square_brackets_for.rb
122
+ - lib/zucker/8/kernel.rb
123
+ - lib/zucker/8/engine.rb
124
+ - lib/zucker/8/os.rb
125
+ - lib/zucker/8/object.rb
126
+ - lib/zucker/8/cc.rb
127
+ - lib/zucker/8/debug.rb
128
+ - lib/zucker/8/env.rb
129
+ - lib/zucker/8/version.rb
130
+ - lib/zucker/8/union.rb
90
131
  - lib/zucker/1/default.rb
91
132
  - lib/zucker/1/all.rb
92
133
  - lib/zucker/1/string.rb
@@ -325,8 +366,8 @@ homepage: http://rubyzucker.info
325
366
  licenses: []
326
367
 
327
368
  post_install_message:
328
- rdoc_options: []
329
-
369
+ rdoc_options:
370
+ - --version
330
371
  require_paths:
331
372
  - lib
332
373
  required_ruby_version: !ruby/object:Gem::Requirement