Handle TypeError from `where` filter gracefully (#9292)
Merge pull request 9292
This commit is contained in:
parent
052f1bd412
commit
d03742e994
|
@ -441,6 +441,14 @@ module Jekyll
|
||||||
property.split(".").reduce(liquid_data) do |data, key|
|
property.split(".").reduce(liquid_data) do |data, key|
|
||||||
data.respond_to?(:[]) && data[key]
|
data.respond_to?(:[]) && data[key]
|
||||||
end
|
end
|
||||||
|
rescue TypeError => e
|
||||||
|
msg = if liquid_data.is_a?(Array)
|
||||||
|
"Error accessing object (#{liquid_data.to_s[0...20]}) with given key. Expected an " \
|
||||||
|
"integer but got #{property.inspect} instead."
|
||||||
|
else
|
||||||
|
e.message
|
||||||
|
end
|
||||||
|
raise e, msg
|
||||||
end
|
end
|
||||||
|
|
||||||
FLOAT_LIKE = %r!\A\s*-?(?:\d+\.?\d*|\.\d+)\s*\Z!.freeze
|
FLOAT_LIKE = %r!\A\s*-?(?:\d+\.?\d*|\.\d+)\s*\Z!.freeze
|
||||||
|
|
|
@ -958,6 +958,18 @@ class TestFilters < JekyllUnitTest
|
||||||
results = @filter.where(SelectDummy.new, "obj", "1 == 1")
|
results = @filter.where(SelectDummy.new, "obj", "1 == 1")
|
||||||
assert_equal [], results
|
assert_equal [], results
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "gracefully handle invalid property type" do
|
||||||
|
hash = {
|
||||||
|
"members" => { "name" => %w(John Jane Jimmy) },
|
||||||
|
"roles" => %w(Admin Recruiter Manager),
|
||||||
|
}
|
||||||
|
err = assert_raises(TypeError) { @filter.where(hash, "name", "Jimmy") }
|
||||||
|
truncatd_arr_str = hash["roles"].to_liquid.to_s[0...20]
|
||||||
|
msg = "Error accessing object (#{truncatd_arr_str}) with given key. Expected an integer " \
|
||||||
|
'but got "name" instead.'
|
||||||
|
assert_equal msg, err.message
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "where_exp filter" do
|
context "where_exp filter" do
|
||||||
|
|
Loading…
Reference in New Issue