aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
diff options
context:
space:
mode:
authorJohn Hawthorn <john@hawthorn.email>2019-03-18 10:18:36 -0700
committerJohn Hawthorn <john@hawthorn.email>2019-03-18 11:25:50 -0700
commit0eb9e1e51a9df554e1cf7a42ec339ca6f0120a04 (patch)
treea8e5e0ed4b50bdd6052474662af88ae8636b42ac /actionview
parentffc842a09927986819cf7a66ae6a15f97bfeed76 (diff)
downloadrails-0eb9e1e51a9df554e1cf7a42ec339ca6f0120a04.tar.gz
rails-0eb9e1e51a9df554e1cf7a42ec339ca6f0120a04.tar.bz2
rails-0eb9e1e51a9df554e1cf7a42ec339ca6f0120a04.zip
Raise in LookupContext#formats= on invalid format
This is a developer quality of life improvement, to ensure that unknown formats aren't assigned (which it would previously accept, but wouldn't work 100% correctly due to caching).
Diffstat (limited to 'actionview')
-rw-r--r--actionview/lib/action_view/lookup_context.rb5
-rw-r--r--actionview/test/template/lookup_context_test.rb8
2 files changed, 13 insertions, 0 deletions
diff --git a/actionview/lib/action_view/lookup_context.rb b/actionview/lib/action_view/lookup_context.rb
index 41751c2963..8d92130957 100644
--- a/actionview/lib/action_view/lookup_context.rb
+++ b/actionview/lib/action_view/lookup_context.rb
@@ -284,6 +284,11 @@ module ActionView
values.concat(default_formats) if values.delete "*/*"
values.uniq!
+ invalid_types = (values - Template::Types.symbols)
+ unless invalid_types.empty?
+ raise ArgumentError, "Invalid formats: #{invalid_types.map(&:inspect).join(", ")}"
+ end
+
if values == [:js]
values << :html
@html_fallback_for_js = true
diff --git a/actionview/test/template/lookup_context_test.rb b/actionview/test/template/lookup_context_test.rb
index ce5b4c4f66..02a9948e38 100644
--- a/actionview/test/template/lookup_context_test.rb
+++ b/actionview/test/template/lookup_context_test.rb
@@ -80,6 +80,14 @@ class LookupContextTest < ActiveSupport::TestCase
assert_equal [:js, :html], @lookup_context.formats
end
+ test "raises on invalid format assignment" do
+ ex = assert_raises ArgumentError do
+ @lookup_context.formats = [:html, :javascript]
+ end
+
+ assert_equal "Invalid formats: :javascript", ex.message
+ end
+
test "provides getters and setters for locale" do
@lookup_context.locale = :pt
assert_equal :pt, @lookup_context.locale