Skip to content

Commit dbe709c

Browse files
authored
Use to_liquid_value in uniq filter (#1948)
* Use to_liquid_value in uniq filter * Bump version to 5.8.4
1 parent 2b75bfa commit dbe709c

File tree

4 files changed

+50
-2
lines changed

4 files changed

+50
-2
lines changed

lib/liquid/standardfilters.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,10 @@ def reverse
10811081
end
10821082

10831083
def uniq(&block)
1084-
to_a.uniq(&block)
1084+
to_a.uniq do |item|
1085+
item = Utils.to_liquid_value(item)
1086+
block ? yield(item) : item
1087+
end
10851088
end
10861089

10871090
def compact

lib/liquid/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
# frozen_string_literal: true
33

44
module Liquid
5-
VERSION = "5.8.3"
5+
VERSION = "5.8.4"
66
end

test/integration/standard_filter_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,22 @@ def test_sum_with_non_string_property
13401340
assert_equal(0, @filters.sum(input, ""))
13411341
end
13421342

1343+
def test_uniq_with_to_liquid_value
1344+
input = [StringDrop.new("foo"), StringDrop.new("bar"), "foo"]
1345+
expected = [StringDrop.new("foo"), StringDrop.new("bar")]
1346+
result = @filters.uniq(input)
1347+
1348+
assert_equal(expected, result)
1349+
end
1350+
1351+
def test_uniq_with_to_liquid_value_pick_correct_classes
1352+
input = ["foo", StringDrop.new("foo"), StringDrop.new("bar")]
1353+
expected = [String, StringDrop]
1354+
result = @filters.uniq(input).map(&:class)
1355+
1356+
assert_equal(expected, result)
1357+
end
1358+
13431359
private
13441360

13451361
def with_timezone(tz)

test/test_helper.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,35 @@ def to_s
146146
end
147147
end
148148

149+
class StringDrop < Liquid::Drop
150+
include Comparable
151+
152+
def initialize(value)
153+
super()
154+
@value = value
155+
end
156+
157+
def to_liquid_value
158+
@value
159+
end
160+
161+
def to_s
162+
@value
163+
end
164+
165+
def to_str
166+
@value
167+
end
168+
169+
def inspect
170+
"#<StringDrop @value=#{@value.inspect}>"
171+
end
172+
173+
def <=>(other)
174+
to_liquid_value <=> Liquid::Utils.to_liquid_value(other)
175+
end
176+
end
177+
149178
class ErrorDrop < Liquid::Drop
150179
def standard_error
151180
raise Liquid::StandardError, 'standard error'

0 commit comments

Comments
 (0)