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.
- data/CHANGELOG +6 -0
- data/Rakefile +2 -0
- data/lib/zucker.rb +2 -2
- data/lib/zucker/8/alias_for.rb +21 -0
- data/lib/zucker/8/aliases.rb +51 -0
- data/lib/zucker/8/all.rb +4 -0
- data/lib/zucker/8/array.rb +25 -0
- data/lib/zucker/8/array2proc.rb +18 -0
- data/lib/zucker/8/binding.rb +33 -0
- data/lib/zucker/8/blank.rb +28 -0
- data/lib/zucker/8/cc.rb +25 -0
- data/lib/zucker/8/class2proc.rb +12 -0
- data/lib/zucker/8/control.rb +4 -0
- data/lib/zucker/8/dd.rb +23 -0
- data/lib/zucker/8/debug.rb +4 -0
- data/lib/zucker/8/default.rb +4 -0
- data/lib/zucker/8/egonil.rb +27 -0
- data/lib/zucker/8/engine.rb +68 -0
- data/lib/zucker/8/enumerable.rb +14 -0
- data/lib/zucker/8/env.rb +4 -0
- data/lib/zucker/8/extensions.rb +4 -0
- data/lib/zucker/8/hash.rb +27 -0
- data/lib/zucker/8/hash2proc.rb +16 -0
- data/lib/zucker/8/info.rb +192 -0
- data/lib/zucker/8/iterate.rb +27 -0
- data/lib/zucker/8/ivars.rb +28 -0
- data/lib/zucker/8/kernel.rb +34 -0
- data/lib/zucker/8/mcopy.rb +10 -0
- data/lib/zucker/8/mm.rb +34 -0
- data/lib/zucker/8/not.rb +19 -0
- data/lib/zucker/8/object.rb +4 -0
- data/lib/zucker/8/oo.rb +17 -0
- data/lib/zucker/8/os.rb +54 -0
- data/lib/zucker/8/qq.rb +12 -0
- data/lib/zucker/8/regexp2proc.rb +12 -0
- data/lib/zucker/8/sandbox.rb +25 -0
- data/lib/zucker/8/shortcuts.rb +4 -0
- data/lib/zucker/8/square_brackets_for.rb +21 -0
- data/lib/zucker/8/string.rb +54 -0
- data/lib/zucker/8/tap.rb +11 -0
- data/lib/zucker/8/to_proc.rb +4 -0
- data/lib/zucker/8/unary.rb +24 -0
- data/lib/zucker/8/union.rb +16 -0
- data/lib/zucker/8/version.rb +118 -0
- data/lib/zucker/binding.rb +3 -4
- 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|
|
data/lib/zucker.rb
CHANGED
@@ -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
|
+
|
data/lib/zucker/8/all.rb
ADDED
@@ -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,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
|
+
|
data/lib/zucker/8/cc.rb
ADDED
@@ -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
|
data/lib/zucker/8/dd.rb
ADDED
@@ -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,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
|
data/lib/zucker/8/env.rb
ADDED
@@ -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,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
|
data/lib/zucker/8/mm.rb
ADDED
@@ -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
|
+
|
data/lib/zucker/8/not.rb
ADDED
@@ -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
|
data/lib/zucker/8/oo.rb
ADDED
@@ -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
|
data/lib/zucker/8/os.rb
ADDED
@@ -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
|
data/lib/zucker/8/qq.rb
ADDED
@@ -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,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
|
+
|
data/lib/zucker/8/tap.rb
ADDED
@@ -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
|
data/lib/zucker/binding.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'zucker'
|
2
2
|
|
3
3
|
class Binding
|
4
|
-
def
|
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
|
31
|
-
|
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
|
-
version: "
|
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-
|
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
|