ruby-nuggets 0.4.5 → 0.5.0

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.
@@ -0,0 +1,62 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007-2008 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ module Nuggets
29
+ class Object
30
+ module BooleanMixin
31
+
32
+ # call-seq:
33
+ # object.boolean? => true or false
34
+ #
35
+ #
36
+ def boolean?
37
+ is_a?(::TrueClass) || is_a?(::FalseClass)
38
+ end
39
+
40
+ # call-seq:
41
+ # object.negate => true or false
42
+ #
43
+ #
44
+ def negate
45
+ !self
46
+ end
47
+
48
+ alias_method :false?, :negate
49
+
50
+ # call-seq:
51
+ # object.to_bool => true or false
52
+ #
53
+ #
54
+ def to_bool
55
+ !!self
56
+ end
57
+
58
+ alias_method :true?, :to_bool
59
+
60
+ end
61
+ end
62
+ end
@@ -1,55 +1,5 @@
1
- #--
2
- ###############################################################################
3
- # #
4
- # A component of ruby-nuggets, some extensions to the Ruby programming #
5
- # language. #
6
- # #
7
- # Copyright (C) 2007-2008 Jens Wille #
8
- # #
9
- # Authors: #
10
- # Jens Wille <jens.wille@uni-koeln.de> #
11
- # #
12
- # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
- # under the terms of the GNU General Public License as published by the Free #
14
- # Software Foundation; either version 3 of the License, or (at your option) #
15
- # any later version. #
16
- # #
17
- # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
- # more details. #
21
- # #
22
- # You should have received a copy of the GNU General Public License along #
23
- # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
- # #
25
- ###############################################################################
26
- #++
1
+ require 'nuggets/object/msend_mixin'
27
2
 
28
3
  class Object
29
-
30
- # call-seq:
31
- # object.msend(*messages) => anArray
32
- #
33
- # Sends _object_ multiple +messages+ and returns an array of the individual
34
- # return values.
35
- def msend(*messages)
36
- hash = messages.last.is_a?(Hash) ? messages.pop : {}
37
- (messages + hash.to_a).map { |msg| send *msg.is_a?(Array) ? msg : [msg] }
38
- end
39
-
40
- end
41
-
42
- if $0 == __FILE__
43
- o = 'foo bar'
44
- p o
45
- p o.msend(:length, :reverse)
46
-
47
- o = 42
48
- p o
49
- p o.msend(:to_s, :* => 2)
50
- p o.msend([:to_s, 2], '-@')
51
-
52
- o = Time.now
53
- p o
54
- p o.msend(:year, :month, :day)
4
+ include Nuggets::Object::MSendMixin
55
5
  end
@@ -0,0 +1,44 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007-2008 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ module Nuggets
29
+ class Object
30
+ module MSendMixin
31
+
32
+ # call-seq:
33
+ # object.msend(*messages) => anArray
34
+ #
35
+ # Sends _object_ multiple +messages+ and returns an array of the individual
36
+ # return values.
37
+ def msend(*messages)
38
+ hash = messages.last.is_a?(::Hash) ? messages.pop : {}
39
+ (messages + hash.to_a).map { |msg| send(*msg.is_a?(::Array) ? msg : [msg]) }
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,5 @@
1
+ require 'nuggets/object/silence_mixin'
2
+
3
+ class Object
4
+ include Nuggets::Object::SilenceMixin
5
+ end
@@ -0,0 +1,45 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007-2009 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ module Nuggets
29
+ class Object
30
+ module SilenceMixin
31
+
32
+ # call-seq:
33
+ # silence { ... }
34
+ #
35
+ # Silence warnings for block execution.
36
+ def silence
37
+ verbose, $VERBOSE = $VERBOSE, nil
38
+ yield
39
+ ensure
40
+ $VERBOSE = verbose
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -1,152 +1,5 @@
1
- #--
2
- ###############################################################################
3
- # #
4
- # A component of ruby-nuggets, some extensions to the Ruby programming #
5
- # language. #
6
- # #
7
- # Copyright (C) 2007-2008 Jens Wille #
8
- # #
9
- # Authors: #
10
- # Jens Wille <jens.wille@uni-koeln.de> #
11
- # #
12
- # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
- # under the terms of the GNU General Public License as published by the Free #
14
- # Software Foundation; either version 3 of the License, or (at your option) #
15
- # any later version. #
16
- # #
17
- # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
- # more details. #
21
- # #
22
- # You should have received a copy of the GNU General Public License along #
23
- # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
- # #
25
- ###############################################################################
26
- #++
1
+ require 'nuggets/object/singleton_class_mixin'
27
2
 
28
3
  class Object
29
-
30
- # call-seq:
31
- # object.singleton_class => aClass
32
- #
33
- # Returns the singleton (or virtual/eigen/meta) class associated with _object_.
34
- def singleton_class
35
- class << self; self; end
36
- end
37
-
38
- alias_method :virtual_class, :singleton_class
39
- alias_method :ghost_class, :singleton_class
40
- alias_method :eigenclass, :singleton_class
41
- alias_method :metaclass, :singleton_class
42
- alias_method :uniclass, :singleton_class
43
-
44
- # call-seq:
45
- # object.singleton_object => anObject
46
- #
47
- # Returns the object of which _object_ is the singleton_class.
48
- # Raises a TypeError if _object_ is not a singleton class.
49
- def singleton_object
50
- [true, false, nil].each { |obj|
51
- return obj if self.equal?(obj.singleton_class)
52
- }
53
-
54
- # raises TypeError if neither class nor module
55
- ObjectSpace.each_object(self) { |obj|
56
- return obj if self.equal?(obj.singleton_class)
57
- }
58
-
59
- # if we got here, it can't be a singleton class
60
- # or its singleton object doesn't exist anymore
61
- raise TypeError
62
- rescue TypeError
63
- raise TypeError, 'not a singleton class'
64
- end
65
-
66
- alias_method :virtual_object, :singleton_object
67
- alias_method :ghost_object, :singleton_object
68
- alias_method :eigenobject, :singleton_object
69
- alias_method :metaobject, :singleton_object
70
- alias_method :uniobject, :singleton_object
71
-
72
- alias_method :singleton_instance, :singleton_object
73
-
74
- # call-seq:
75
- # object.singleton_class? => true or false
76
- #
77
- # Returns true if _object_ is a singleton_class
78
- # (i.e., has a singleton_object), false otherwise.
79
- def singleton_class?
80
- singleton_object
81
- true
82
- rescue TypeError
83
- false
84
- end
85
-
86
- alias_method :virtual_class?, :singleton_class?
87
- alias_method :ghost_class?, :singleton_class?
88
- alias_method :eigenclass?, :singleton_class?
89
- alias_method :metaclass?, :singleton_class?
90
- alias_method :uniclass?, :singleton_class?
91
-
92
- end
93
-
94
- if $0 == __FILE__
95
- o = Object.new
96
- p o
97
- p o.singleton_class?
98
-
99
- begin
100
- p o.singleton_object
101
- rescue TypeError => err
102
- warn err
103
- end
104
-
105
- s = o.singleton_class
106
- p s
107
- p s.singleton_class?
108
- p s.singleton_object
109
-
110
- ###
111
-
112
- o = [1, 2]
113
- p o
114
-
115
- s = o.singleton_class
116
- p s
117
- p s.singleton_class?
118
- p s.singleton_object
119
-
120
- ###
121
-
122
- p Class.new.singleton_class?
123
- p Class.singleton_class?
124
-
125
- ###
126
-
127
- c = Class.new
128
- o = c.new
129
- p o
130
- p c.singleton_class?
131
-
132
- ###
133
-
134
- p nil.singleton_class
135
- p NilClass.singleton_class?
136
- p NilClass.singleton_object
137
-
138
- ###
139
-
140
- class A # :nodoc:
141
- end
142
- class B < A # :nodoc:
143
- end
144
-
145
- a = A.singleton_class
146
- b = B.singleton_class
147
-
148
- p a
149
- p a.singleton_object #=> A
150
- p b
151
- p b.singleton_object #=> B
4
+ include Nuggets::Object::SingletonClassMixin
152
5
  end
@@ -0,0 +1,96 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007-2008 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ module Nuggets
29
+ class Object
30
+ module SingletonClassMixin
31
+
32
+ # call-seq:
33
+ # object.singleton_class => aClass
34
+ #
35
+ # Returns the singleton (or virtual/eigen/meta) class associated with _object_.
36
+ def singleton_class
37
+ class << self; self; end
38
+ end
39
+
40
+ alias_method :virtual_class, :singleton_class
41
+ alias_method :ghost_class, :singleton_class
42
+ alias_method :eigenclass, :singleton_class
43
+ alias_method :metaclass, :singleton_class
44
+ alias_method :uniclass, :singleton_class
45
+
46
+ # call-seq:
47
+ # object.singleton_object => anObject
48
+ #
49
+ # Returns the object of which _object_ is the singleton_class.
50
+ # Raises a TypeError if _object_ is not a singleton class.
51
+ def singleton_object
52
+ [true, false, nil].each { |obj|
53
+ return obj if self.equal?(obj.singleton_class)
54
+ }
55
+
56
+ # raises TypeError if neither class nor module
57
+ ObjectSpace.each_object(self) { |obj|
58
+ return obj if self.equal?(obj.singleton_class)
59
+ }
60
+
61
+ # if we got here, it can't be a singleton class
62
+ # or its singleton object doesn't exist anymore
63
+ raise TypeError
64
+ rescue TypeError
65
+ raise TypeError, 'not a singleton class'
66
+ end
67
+
68
+ alias_method :virtual_object, :singleton_object
69
+ alias_method :ghost_object, :singleton_object
70
+ alias_method :eigenobject, :singleton_object
71
+ alias_method :metaobject, :singleton_object
72
+ alias_method :uniobject, :singleton_object
73
+
74
+ alias_method :singleton_instance, :singleton_object
75
+
76
+ # call-seq:
77
+ # object.singleton_class? => true or false
78
+ #
79
+ # Returns true if _object_ is a singleton_class
80
+ # (i.e., has a singleton_object), false otherwise.
81
+ def singleton_class?
82
+ singleton_object
83
+ true
84
+ rescue TypeError
85
+ false
86
+ end
87
+
88
+ alias_method :virtual_class?, :singleton_class?
89
+ alias_method :ghost_class?, :singleton_class?
90
+ alias_method :eigenclass?, :singleton_class?
91
+ alias_method :metaclass?, :singleton_class?
92
+ alias_method :uniclass?, :singleton_class?
93
+
94
+ end
95
+ end
96
+ end
@@ -1,68 +1,5 @@
1
- #--
2
- ###############################################################################
3
- # #
4
- # A component of ruby-nuggets, some extensions to the Ruby programming #
5
- # language. #
6
- # #
7
- # Copyright (C) 2007-2008 Jens Wille #
8
- # #
9
- # Authors: #
10
- # Jens Wille <jens.wille@uni-koeln.de> #
11
- # #
12
- # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
- # under the terms of the GNU General Public License as published by the Free #
14
- # Software Foundation; either version 3 of the License, or (at your option) #
15
- # any later version. #
16
- # #
17
- # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
- # more details. #
21
- # #
22
- # You should have received a copy of the GNU General Public License along #
23
- # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
- # #
25
- ###############################################################################
26
- #++
1
+ require 'nuggets/proc/bind_mixin'
27
2
 
28
3
  class Proc
29
-
30
- # call-seq:
31
- # proc.bind(object) => aMethod
32
- #
33
- # Straight from Rails' ActiveSupport -- effectively binds _proc_ to +object+.
34
- def bind(object)
35
- block, time = self, Time.now
36
-
37
- (class << object; self; end).class_eval {
38
- method_name = "__bind_#{time.to_i}_#{time.usec}"
39
- define_method(method_name, &block)
40
-
41
- method = instance_method(method_name)
42
- remove_method(method_name)
43
-
44
- method
45
- }.bind(object)
46
- end
47
-
48
- end
49
-
50
- if $0 == __FILE__
51
- l = lambda { bla }
52
-
53
- begin
54
- l.call
55
- rescue NameError => err
56
- puts "#{err} (#{err.class})"
57
- end
58
-
59
- module Bla # :nodoc:
60
-
61
- def self.bla
62
- puts 'blub'
63
- end
64
-
65
- end
66
-
67
- l.bind(Bla).call
4
+ include Nuggets::Proc::BindMixin
68
5
  end
@@ -0,0 +1,52 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007-2008 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ module Nuggets
29
+ class Proc
30
+ module BindMixin
31
+
32
+ # call-seq:
33
+ # proc.bind(object) => aMethod
34
+ #
35
+ # Straight from Rails' ActiveSupport -- effectively binds _proc_ to +object+.
36
+ def bind(object)
37
+ block, time = self, ::Time.now
38
+
39
+ (class << object; self; end).class_eval {
40
+ method_name = "__bind_#{time.to_i}_#{time.usec}"
41
+ define_method(method_name, &block)
42
+
43
+ method = instance_method(method_name)
44
+ remove_method(method_name)
45
+
46
+ method
47
+ }.bind(object)
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -29,26 +29,30 @@ require 'tempfile'
29
29
 
30
30
  class Tempfile
31
31
 
32
- alias_method :_nuggets_original_open, :open
33
-
34
- # If no block is given, this is a synonym for new().
35
- #
36
- # If a block is given, it will be passed tempfile as an argument,
37
- # and the tempfile will automatically be closed when the block
38
- # terminates. In this case, open() returns tempfile -- in contrast
39
- # to the original implementation, which returns nil.
40
- def self.open(*args)
41
- tempfile = new(*args)
42
-
43
- if block_given?
44
- begin
45
- yield tempfile
46
- ensure
47
- tempfile.close
32
+ class << self
33
+
34
+ alias_method :_nuggets_original_open, :open
35
+
36
+ # If no block is given, this is a synonym for new().
37
+ #
38
+ # If a block is given, it will be passed tempfile as an argument,
39
+ # and the tempfile will automatically be closed when the block
40
+ # terminates. In this case, open() returns tempfile -- in contrast
41
+ # to the original implementation, which returns nil.
42
+ def open(*args)
43
+ tempfile = new(*args)
44
+
45
+ if block_given?
46
+ begin
47
+ yield tempfile
48
+ ensure
49
+ tempfile.close
50
+ end
48
51
  end
52
+
53
+ tempfile
49
54
  end
50
55
 
51
- tempfile
52
56
  end
53
57
 
54
58
  end