Skip to content

Commit 61d43c2

Browse files
transclaude
andcommitted
Review Enumerable methods: deprecate 7 redundant methods
- Deprecate compact_map (use filter_map, Ruby 2.7+) - Deprecate defer (use lazy, Ruby 2.0+) - Deprecate frequency (use tally, Ruby 2.7+) - Deprecate hinge (use each_with_object) - Deprecate map_with_index (use map.with_index) - Deprecate mash (duplicate of graph) - Deprecate uniq_by (use uniq(&block), Ruby 1.9.2+) - Keep 27 unique methods including graph, find_yield, per/every, squeeze, purge, with_position, cluster, and others Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 503511d commit 61d43c2

8 files changed

Lines changed: 28 additions & 73 deletions

File tree

HISTORY.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@ Changes:
9393
* Deprecate `Hash#update_keys` (use `Hash#transform_keys!` or `Hash#rekey!`).
9494
* Deprecate `Hash#update_values` (use `Hash#transform_values!` or `Hash#revalue!`).
9595
* Deprecate `Hash#fetch_nested` (use `Hash#dig`, adopted by Ruby in 2.3).
96+
* Deprecate `Enumerable#compact_map` (use `Enumerable#filter_map`, adopted by Ruby in 2.7).
97+
* Deprecate `Enumerable#defer` (use `Enumerable#lazy`, adopted by Ruby in 2.0).
98+
* Deprecate `Enumerable#frequency` (use `Enumerable#tally`, adopted by Ruby in 2.7).
99+
* Deprecate `Enumerable#hinge` (use `Enumerable#each_with_object`, note: block args reversed).
100+
* Deprecate `Enumerable#map_with_index` (use `Enumerable#map.with_index`).
101+
* Deprecate `Enumerable#mash` (use `Enumerable#graph` instead).
102+
* Deprecate `Enumerable#uniq_by` (use `Enumerable#uniq(&block)`, Ruby 1.9.2+).
96103
* Fix dead requires for removed `kernel/singleton_class` in Proc and Kernel.
97104
* Remove misplaced `applique/file_helpers` from core (test infrastructure).
98105
* Drop unused `test_files` directive from gemspec. (PR#301)

lib/core/facets/enumerable/compact_map.rb

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,8 @@ module Enumerable
1515
# does almost the same thing and enum.map{}.compact works too.
1616

1717
def compact_map(&block)
18-
y = []
19-
if block_given?
20-
each do |*a|
21-
r = yield(*a)
22-
y << r unless r.nil?
23-
end
24-
else
25-
each do |r|
26-
y << r unless r.nil?
27-
end
28-
end
29-
y
18+
warn "Enumerable#compact_map is deprecated. Use Enumerable#filter_map instead.", uplevel: 1
19+
filter_map(&block)
3020
end
3121

3222
#

lib/core/facets/enumerable/defer.rb

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,8 @@ module Enumerable
2727
# to output each result and discard it.
2828
#
2929
def defer(&blk)
30-
if block_given?
31-
Denumerator.new do |output|
32-
each do |*input|
33-
yield(output, *input)
34-
end
35-
end
36-
else
37-
Denumerator.new do |output|
38-
each do |*input|
39-
output.yield(*input)
40-
end
41-
end
42-
end
30+
warn "Enumerable#defer is deprecated. Use Enumerable#lazy instead.", uplevel: 1
31+
lazy
4332
end
4433

4534
end

lib/core/facets/enumerable/frequency.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ module Enumerable
1616
#++
1717

1818
def frequency
19-
p = Hash.new(0); each{ |v| p[v] += 1 }; p
20-
19+
warn "Enumerable#frequency is deprecated. Use Enumerable#tally instead.", uplevel: 1
20+
tally
2121
end
2222

2323
end

lib/core/facets/enumerable/hinge.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@ module Enumerable
99
#
1010
# TODO: Enumerable#hinge will get a new name.
1111
#
12-
def hinge(init={})
13-
h = init
14-
each{ |v| yield(h,v) }
15-
h
12+
def hinge(init={}, &block)
13+
warn "Enumerable#hinge is deprecated. Use Enumerable#each_with_object instead (note: block args are reversed).", uplevel: 1
14+
each_with_object(init) { |e, obj| block.call(obj, e) }
1615
end
1716

1817
end

lib/core/facets/enumerable/map_with_index.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,9 @@ module Enumerable
77
#
88
# CREDIT: Gavin Sinclair
99

10-
def map_with_index
11-
r = []
12-
each_with_index do |e, i|
13-
r << yield(e, i)
14-
end
15-
r
10+
def map_with_index(&block)
11+
warn "Enumerable#map_with_index is deprecated. Use Enumerable#map.with_index instead.", uplevel: 1
12+
map.with_index(&block)
1613
end
1714

1815
# Alias for map_with_index.

lib/core/facets/enumerable/mash.rb

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,11 @@
1-
module Enumerable
1+
require 'facets/enumerable/graph'
22

3-
# Like `#map`/`#collect`, but generates a Hash. The block is expected
4-
# to return two values: the key and the value for the new hash.
5-
#
6-
# numbers = (1..3)
7-
# squares = numbers.mash{ |n| [n, n*n] } # { 1=>1, 2=>4, 3=>9 }
8-
# sq_roots = numbers.mash{ |n| [n*n, n] } # { 1=>1, 4=>2, 9=>3 }
9-
#
10-
# CREDIT: Andrew Dudzik (adudzik), Trans
3+
module Enumerable
114

5+
# @deprecated Use Enumerable#graph instead.
126
def mash(&yld)
13-
if yld
14-
h = {}
15-
each do |*kv|
16-
r = yld[*kv]
17-
case r
18-
when Hash
19-
nk, nv = *r.to_a[0]
20-
when Range
21-
nk, nv = r.first, r.last
22-
else
23-
nk, nv = *r
24-
end
25-
h[nk] = nv
26-
end
27-
h
28-
else
29-
Enumerator.new(self,:graph)
30-
end
7+
warn "Enumerable#mash is deprecated. Use Enumerable#graph instead.", uplevel: 1
8+
graph(&yld)
319
end
3210

3311
end
34-
Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
module Enumerable
22

3-
# Like #uniq, but determines uniqueness based on a given block.
4-
#
5-
# (-5..5).to_a.uniq_by {|i| i*i }
6-
# #=> [-5, -4, -3, -2, -1, 0]
7-
#
8-
def uniq_by #:yield:
9-
h = {}; inject([]) {|a,x| h[yield(x)] ||= a << x}
3+
# @deprecated Use Enumerable#uniq with a block instead (Ruby 1.9.2+).
4+
def uniq_by(&block)
5+
warn "Enumerable#uniq_by is deprecated. Use Enumerable#uniq(&block) instead.", uplevel: 1
6+
uniq(&block)
107
end
118

129
end
13-

0 commit comments

Comments
 (0)