ruby-nuggets 0.0.3.159 → 0.0.4.171

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/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to ruby-nuggets version 0.0.3
5
+ This documentation refers to ruby-nuggets version 0.0.4
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -0,0 +1,117 @@
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 Enumerable
29
+
30
+ alias_method :original_max, :max
31
+ alias_method :original_min, :min
32
+
33
+ # call-seq:
34
+ # enum.minmax_by(meth, by) => aValue
35
+ #
36
+ # Finds the maximum/minimum (or whatever +meth+ is) value in _enum_ according
37
+ # to +by+ (which may be a symbol/string that is sent to each value, or a proc
38
+ # that receives each value as parameter).
39
+ def minmax_by(meth, by)
40
+ _by = by.is_a?(Proc) ? by : lambda { |i| i.send(by) }
41
+ send(meth) { |a, b| _by[a] <=> _by[b] }
42
+ end
43
+
44
+ # call-seq:
45
+ # enum.max_by(by) => aValue
46
+ #
47
+ # Maximum #minmax_by.
48
+ def max_by(by)
49
+ minmax_by(:max, by)
50
+ end
51
+
52
+ # call-seq:
53
+ # enum.min_by(by) => aValue
54
+ #
55
+ # Minimum #minmax_by.
56
+ def min_by(by)
57
+ minmax_by(:min, by)
58
+ end
59
+
60
+ # call-seq:
61
+ # enum.minmax(meth, what) => anObject
62
+ #
63
+ # Finds the #minmax_by according to +what+ and returns that "what".
64
+ #
65
+ # Example:
66
+ # %w[a bcd ef].max(:length) #=> 3
67
+ def minmax(meth, what)
68
+ #m = minmax_by(meth, what)
69
+ #what.is_a?(Proc) ? what[m] : m.send(what)
70
+
71
+ _what = what.is_a?(Proc) ? what : lambda { |i| i.send(what) }
72
+ map { |i| _what[i] }.send(meth)
73
+
74
+ # Benchmark (:max, :length; enum.size = 20, N = 100_000):
75
+ #
76
+ # max_by(:length).length 7.920000 0.890000 8.810000 ( 8.991915)
77
+ # map(:length).max 4.800000 0.600000 5.400000 ( 5.418114)
78
+ end
79
+
80
+ # call-seq:
81
+ # enum.max(what) => aValue
82
+ #
83
+ # Maximum #minmax. If +what+ is omitted, or nil, the original Enumerable#max
84
+ # is called (available as +original_max+).
85
+ def max(what = nil, &block)
86
+ what ? minmax(:max, what) : original_max(&block)
87
+ end
88
+
89
+ # call-seq:
90
+ # enum.min(what) => aValue
91
+ #
92
+ # Minimum #minmax. If +what+ is omitted, or nil, the original Enumerable#min
93
+ # is called (available as +original_min+).
94
+ def min(what = nil, &block)
95
+ what ? minmax(:min, what) : original_min(&block)
96
+ end
97
+
98
+ end
99
+
100
+ if $0 == __FILE__
101
+ e = %w[quux quuux quix]
102
+ p e
103
+
104
+ p e.max
105
+ p e.max_by(:length)
106
+ p e.max(:length)
107
+
108
+ e = [3, 222, 45]
109
+ p e
110
+
111
+ # the last digit counts ;-)
112
+ l = lambda { |i| i.to_s.split(//).last.to_i }
113
+
114
+ p e.max
115
+ p e.max_by(l)
116
+ p e.max(l)
117
+ end
@@ -4,7 +4,7 @@ module Nuggets
4
4
 
5
5
  MAJOR = 0
6
6
  MINOR = 0
7
- TINY = 3
7
+ TINY = 4
8
8
 
9
9
  class << self
10
10
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-nuggets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.159
4
+ version: 0.0.4.171
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-08 00:00:00 +01:00
12
+ date: 2008-01-10 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -27,6 +27,7 @@ files:
27
27
  - lib/nuggets/version.rb
28
28
  - lib/nuggets/object/singleton_class.rb
29
29
  - lib/nuggets/object/blank.rb
30
+ - lib/nuggets/enumerable/minmax.rb
30
31
  - lib/nuggets/all.rb
31
32
  - lib/nuggets/string/msub.rb
32
33
  - lib/nuggets/string/case.rb
@@ -54,15 +55,15 @@ has_rdoc: true
54
55
  homepage: http://prometheus.rubyforge.org/ruby-nuggets
55
56
  post_install_message:
56
57
  rdoc_options:
57
- - --all
58
- - --inline-source
59
58
  - --charset
60
59
  - UTF-8
61
- - --main
62
- - README
60
+ - --all
63
61
  - --title
64
62
  - ruby-nuggets Application documentation
63
+ - --main
64
+ - README
65
65
  - --line-numbers
66
+ - --inline-source
66
67
  require_paths:
67
68
  - lib
68
69
  required_ruby_version: !ruby/object:Gem::Requirement