diff options
author | John Hawthorn <john@hawthorn.email> | 2019-03-18 10:18:36 -0700 |
---|---|---|
committer | John Hawthorn <john@hawthorn.email> | 2019-03-18 11:25:50 -0700 |
commit | 0eb9e1e51a9df554e1cf7a42ec339ca6f0120a04 (patch) | |
tree | a8e5e0ed4b50bdd6052474662af88ae8636b42ac | |
parent | ffc842a09927986819cf7a66ae6a15f97bfeed76 (diff) | |
download | rails-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).
-rw-r--r-- | actionview/lib/action_view/lookup_context.rb | 5 | ||||
-rw-r--r-- | actionview/test/template/lookup_context_test.rb | 8 |
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 |