zucker 3 → 4

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 CHANGED
@@ -1,3 +1,11 @@
1
+ 2010-09-01 | Zucker 4
2
+
3
+ * added RubyEngine constant
4
+ * added RubyVersion constant
5
+ * added OS constant
6
+ * added q debug method (like p but on one line)
7
+ * added String#-
8
+
1
9
  2010-08-14 | Zucker 3
2
10
  * added tap cube
3
11
  * added Object#not
@@ -24,3 +32,4 @@
24
32
 
25
33
  2010-08-05 | Zucker 0
26
34
  * pre-release for rug-b talk
35
+
data/Rakefile CHANGED
@@ -26,10 +26,10 @@ spec = Gem::Specification.new do |s|
26
26
  s.name = 'zucker'
27
27
  s.version = Zucker::VERSION
28
28
  s.date = Zucker::DATE
29
- s.authors = ['Based on the thoughts of many people ;)', 'Jan Lelis']
29
+ s.authors = ['Jan Lelis','and many others']
30
30
  s.email = 'mail@janlelis.de'
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.
31
+ s.summary = "Sweeten your Ruby code with this syntactic sugar :).
32
+ Adds a lot of little helpers that you do not want to miss again.
33
33
  See http://rubyzucker.info"
34
34
  s.homepage = 'http://rubyzucker.info'
35
35
  s.files = PKG_FILES.to_a
@@ -1,6 +1,8 @@
1
+ # documentation at http://rubyzucker.info or doc/zucker_doc.html
2
+
1
3
  module Zucker
2
- VERSION = '3'
3
- DATE = '2010-08-14'
4
+ VERSION = '4'
5
+ DATE = '2010-09-01' # version 3
4
6
  end
5
7
 
6
8
  # nothing further is done here
@@ -7,6 +7,11 @@ end
7
7
 
8
8
  class Array
9
9
  alias ** product
10
+ alias contains? include?
11
+ end
12
+
13
+ class String
14
+ alias contains? include?
10
15
  end
11
16
 
12
17
  class Hash
@@ -21,7 +26,7 @@ class Binding
21
26
  end
22
27
 
23
28
  # constants - who would use these in real-world code for other things?
24
- Infinity = 1.0 / 0.0 # or 2*Float::MAX
29
+ Infinity = 1.0 / 0.0 # or 2*Float::MAX or Float::INFINITY
25
30
  NaN = 0.0 / 0.0
26
31
 
27
32
  # J-_-L
@@ -4,7 +4,11 @@ class Binding
4
4
  if array.empty?
5
5
  ' - none'
6
6
  else
7
- array.map{|e| " - #{e}: #{ self.eval '#{e}'}"}*"\n"
7
+ array.map{|e|
8
+ val = self.eval "#{e}"
9
+ val = val.is_a?( Binding ) ? val.to_s : val.inspect
10
+ " - #{e}: #{ val }"
11
+ }.join "\n"
8
12
  end
9
13
  }
10
14
 
@@ -3,4 +3,4 @@ require 'zucker'
3
3
  require 'zucker/D'
4
4
  require 'zucker/mm'
5
5
  require 'zucker/binding'
6
-
6
+ require 'zucker/q'
@@ -9,6 +9,7 @@ array2proc
9
9
  blank
10
10
  class2proc
11
11
  egonil
12
+ engine
12
13
  enumerable
13
14
  hash
14
15
  hash2proc
@@ -18,6 +19,7 @@ ivars
18
19
  kernel
19
20
  mcopy
20
21
  not
22
+ os
21
23
  regexp2proc
22
24
  sandbox
23
25
  square_brackets_for
@@ -25,6 +27,7 @@ string
25
27
  tap
26
28
  unary
27
29
  union
30
+ version
28
31
  |
29
32
 
30
33
  # remove 1.9 if 1.8
@@ -0,0 +1,67 @@
1
+ module RubyEngine
2
+ # try to guess the interpreter
3
+ @interpreter = case
4
+ when RUBY_PLATFORM == 'parrot'
5
+ 'cardinal'
6
+ when Object.constants.include?( :RUBY_ENGINE ) ||
7
+ Object.constants.include?( 'RUBY_ENGINE' )
8
+ if RUBY_ENGINE == 'ruby'
9
+ if RUBY_DESCRIPTION =~ /Enterprise/
10
+ 'ree'
11
+ else
12
+ 'mri'
13
+ end
14
+ else
15
+ RUBY_ENGINE.to_sym # jruby, rbx, ironruby, macruby, etc.
16
+ end
17
+ else # probably 1.8
18
+ 'mri'
19
+ end
20
+
21
+ class << self
22
+ def is?(what)
23
+ what === @interpreter
24
+ end
25
+ alias is is?
26
+
27
+ def to_s
28
+ @interpreter.to_s
29
+ end
30
+
31
+ # ask methods
32
+
33
+ def mri?
34
+ RubyEngine.is? 'mri'
35
+ end
36
+ alias official_ruby? mri?
37
+ alias ruby? mri?
38
+
39
+ def jruby?
40
+ RubyEngine.is? 'jruby'
41
+ end
42
+ alias java? jruby?
43
+
44
+ def rubinius?
45
+ RubyEngine.is? 'rbx'
46
+ end
47
+ alias rbx? rubinius?
48
+
49
+ def ree?
50
+ RubyEngine.is? 'ree'
51
+ end
52
+ alias enterprise? ree?
53
+
54
+ def ironruby?
55
+ RubyEngine.is? 'ironruby'
56
+ end
57
+ alias iron_ruby? ironruby?
58
+
59
+ def cardinal?
60
+ RubyEngine.is? 'cardinal'
61
+ end
62
+ alias parrot? cardinal?
63
+ alias perl? cardinal?
64
+ end
65
+ end
66
+
67
+ # J-_-L
@@ -70,6 +70,10 @@ module Info
70
70
  ::RUBY_PLATFORM
71
71
  end
72
72
 
73
+ def os
74
+ RbConfig::CONFIG['host_os']
75
+ end
76
+
73
77
  def process_id
74
78
  $$
75
79
  end
@@ -2,46 +2,23 @@ module Kernel
2
2
  def activate_warnings!
3
3
  $VERBOSE = true
4
4
  end
5
-
5
+
6
6
  def deactivate_warnings!
7
7
  $VERBOSE = false
8
8
  end
9
-
9
+
10
10
  def library?
11
11
  __FILE__ != $PROGRAM_NAME
12
12
  end
13
-
13
+
14
14
  def executed_directly?
15
15
  __FILE__ == $PROGRAM_NAME
16
16
  end
17
17
  alias standalone? executed_directly?
18
-
18
+
19
19
  def ignore_sigint! # ctrl+c
20
20
  Signal.trap *%w|SIGINT IGNORE|
21
21
  end
22
-
23
- # version getter
24
- def ruby_1_9?
25
- RUBY_VERSION[2,1] == '9'
26
- end
27
-
28
- def ruby_1_8?
29
- RUBY_VERSION[2,1] == '8'
30
- end
31
-
32
- def ruby_1_9!
33
- if RUBY_VERSION[2,1] != '9'
34
- fail NotImplementedError, "Sorry, this script requires Ruby 1.9, but was executed with a different Ruby version!"
35
- end
36
- true
37
- end
38
-
39
- def ruby_1_8!
40
- if RUBY_VERSION[2,1] != '8'
41
- fail NotImplementedError, "Sorry, this script requires Ruby 1.8, but was executed with a different Ruby version!"
42
- end
43
- true
44
- end
45
22
  end
46
23
 
47
24
  # J-_-L
@@ -0,0 +1,46 @@
1
+ require 'rbconfig'
2
+
3
+ module OS
4
+ class << OS
5
+ def is?(what)
6
+ what === RbConfig::CONFIG['host_os']
7
+ end
8
+ alias is is?
9
+
10
+ def to_s
11
+ RbConfig::CONFIG['host_os']
12
+ end
13
+ end
14
+
15
+ module_function
16
+
17
+ def linux?
18
+ OS.is? /linux|cygwin/
19
+ end
20
+
21
+ def mac?
22
+ OS.is? /mac|darwin/
23
+ end
24
+
25
+ def bsd?
26
+ OS.is? /bsd/
27
+ end
28
+
29
+ def windows?
30
+ OS.is? /mswin|win|mingw/
31
+ end
32
+
33
+ def solaris?
34
+ OS.is? /solaris|sunos/
35
+ end
36
+
37
+ def posix?
38
+ linux? or mac? or bsd? or solaris? or Process.respond_to?(:fork)
39
+ end
40
+
41
+ #def symbian?
42
+ #TODO who knows what symbian returns?
43
+ #end
44
+ end
45
+
46
+ # J-_-L
@@ -0,0 +1,5 @@
1
+ module Kernel
2
+ def q(*args)
3
+ puts args.map( &:inspect ).join ' '
4
+ end
5
+ end
@@ -1,17 +1,19 @@
1
- def sandbox(rescueblock_or_default=nil)
2
- Thread.start do
3
- $SAFE = 4
4
- yield
5
- end.value
6
- rescue SecurityError => e
7
- if !rescueblock_or_default.nil?
8
- if rescueblock_or_default.is_a? Proc
9
- rescueblock_or_default.call e
1
+ module Kernel
2
+ def sandbox(rescueblock_or_default=nil)
3
+ Thread.start do
4
+ $SAFE = 4
5
+ yield
6
+ end.value
7
+ rescue SecurityError => e
8
+ if !rescueblock_or_default.nil?
9
+ if rescueblock_or_default.is_a? Proc
10
+ rescueblock_or_default.call e
11
+ else
12
+ rescueblock_or_default
13
+ end
10
14
  else
11
- rescueblock_or_default
15
+ raise e
12
16
  end
13
- else
14
- raise e
15
17
  end
16
18
  end
17
19
 
@@ -1,4 +1,8 @@
1
1
  class String
2
+ def -(rem)
3
+ gsub( Regexp === rem ? rem : rem.to_s, '' )
4
+ end
5
+
2
6
  def ^(pos)
3
7
  pos = pos.to_i
4
8
  if pos >= 0
@@ -9,15 +13,16 @@ class String
9
13
  end
10
14
 
11
15
  def lchomp(arg = $/)
12
- self.reverse.chomp(arg).reverse
16
+ reverse.chomp(arg).reverse
13
17
  end
14
18
 
15
19
  def lchomp!(arg = $/)
16
- self.reverse.chomp!(arg).reverse
20
+ reverse.chomp!(arg).reverse
17
21
  end
18
22
 
19
23
  def ords
20
- self.unpack 'C*'
24
+ unpack 'C*'
25
+ # bytes.to_a
21
26
  end
22
27
 
23
28
  def constantize(default_value = nil) # always uses global scope as in AS... is this good?
@@ -0,0 +1,113 @@
1
+ module RubyVersion
2
+ class << self
3
+ def to_s
4
+ RUBY_VERSION
5
+ end
6
+
7
+ def is?(other_version = nil)
8
+ compare other_version
9
+ end
10
+ alias is is?
11
+
12
+ # accessors
13
+
14
+ def major
15
+ RUBY_VERSION.to_i
16
+ end
17
+ alias main major
18
+
19
+ def minor
20
+ RUBY_VERSION.split('.')[1].to_i
21
+ end
22
+ alias mini minor
23
+
24
+ def tiny
25
+ RUBY_VERSION.split('.')[2].to_i
26
+ end
27
+ alias teeny tiny
28
+
29
+ def patchlevel
30
+ RUBY_PATCHLEVEL
31
+ end
32
+
33
+ def platform
34
+ RUBY_PLATFORM
35
+ end
36
+
37
+ def release_date
38
+ Date.parse RUBY_RELEASE_DATE
39
+ end
40
+ alias date release_date
41
+
42
+ def description
43
+ RUBY_DESCRIPTION
44
+ end
45
+
46
+ private
47
+
48
+ def compare(other_version)
49
+ case other_version
50
+ when nil
51
+ matcher
52
+ when Float
53
+ other_version == RUBY_VERSION.to_f
54
+ else
55
+ other_version.to_s == RUBY_VERSION
56
+ end
57
+ end
58
+
59
+
60
+ def matcher
61
+ return @ruby if @ruby
62
+
63
+ @ruby = RUBY_VERSION.dup
64
+ @ruby.instance_eval do
65
+ alias below <
66
+ alias below? <
67
+ alias at_most <=
68
+ alias at_most? <=
69
+ alias above >
70
+ alias above? >
71
+ alias at_least >=
72
+ alias at_least? >=
73
+ alias exactly ==
74
+ alias exactly? ==
75
+ def not(other)
76
+ self != other
77
+ end
78
+ alias not? not
79
+ alias between between?
80
+
81
+ def newer_than(other)
82
+ case other.class
83
+ when Date, Time
84
+ other.class.parse(RUBY_RELEASE_DATE) > other
85
+ else
86
+ RUBY_RELEASE_DATE > other.to_s
87
+ end
88
+ end
89
+ alias newer_than? newer_than
90
+
91
+ def older_than(other)
92
+ case other.class
93
+ when Date, Time
94
+ other.class.parse(RUBY_RELEASE_DATE) < other
95
+ else
96
+ RUBY_RELEASE_DATE < other.to_s
97
+ end
98
+ end
99
+ alias older_than? older_than
100
+
101
+ def released_today
102
+ RubyVersion.date == Date.today
103
+ end
104
+ alias released_today? released_today
105
+ end
106
+
107
+ @ruby.freeze
108
+ end
109
+
110
+ end
111
+ end
112
+
113
+ # J-_-L
metadata CHANGED
@@ -3,17 +3,17 @@ name: zucker
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 3
7
- version: "3"
6
+ - 4
7
+ version: "4"
8
8
  platform: ruby
9
9
  authors:
10
- - Based on the thoughts of many people ;)
11
10
  - Jan Lelis
11
+ - and many others
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
15
 
16
- date: 2010-08-14 00:00:00 +02:00
16
+ date: 2010-09-01 00:00:00 +02:00
17
17
  default_executable:
18
18
  dependencies: []
19
19
 
@@ -89,9 +89,12 @@ files:
89
89
  - lib/zucker/1/mcopy.rb
90
90
  - lib/zucker/1/debug.rb
91
91
  - lib/zucker/1/sandbox.rb
92
+ - lib/zucker/os.rb
92
93
  - lib/zucker/array.rb
94
+ - lib/zucker/engine.rb
93
95
  - lib/zucker/all.rb
94
96
  - lib/zucker/array2proc.rb
97
+ - lib/zucker/q.rb
95
98
  - lib/zucker/default.rb
96
99
  - lib/zucker/D.rb
97
100
  - lib/zucker/string.rb
@@ -132,6 +135,7 @@ files:
132
135
  - lib/zucker/2/sandbox.rb
133
136
  - lib/zucker/regexp2proc.rb
134
137
  - lib/zucker/square_brackets_for.rb
138
+ - lib/zucker/version.rb
135
139
  - lib/zucker/aliases.rb
136
140
  - lib/zucker/mm.rb
137
141
  - lib/zucker/enumerable.rb
@@ -173,6 +177,6 @@ rubyforge_project:
173
177
  rubygems_version: 1.3.7
174
178
  signing_key:
175
179
  specification_version: 3
176
- summary: Make your Ruby code even sweeter with syntactic sugar :) Adds lots of little helpers that you never want to miss again. See http://rubyzucker.info
180
+ summary: Sweeten your Ruby code with this syntactic sugar :). Adds a lot of little helpers that you do not want to miss again. See http://rubyzucker.info
177
181
  test_files: []
178
182