Skip to content

Commit 1ba6b9f

Browse files
committed
Remove support for :format
1 parent b554fd3 commit 1ba6b9f

File tree

11 files changed

+74
-129
lines changed

11 files changed

+74
-129
lines changed

actionpack/CHANGELOG.md

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,21 @@
1-
* Accept render options and block in `render_to_string` calls made with `:renderable`
1+
* Accept render options and block in `render` calls made with `:renderable`
22

33
```ruby
44
class Greeting
5-
def render_in(view_context, locals: {}, formats: nil, &block)
5+
def render_in(view_context, **options, &block)
66
if block
7-
view_context.render plain: block.call
7+
view_context.render html: block.call
88
else
9-
case Array(formats).first
10-
when :json
11-
view_context.render plain: { greeting: "Hello, #{locals.fetch(:name, "World")}!" }.to_json
12-
else
13-
view_context.render inline: <<~ERB.strip, locals: locals
14-
Hello, <%= local_assigns.fetch(:name, "World") %>!
15-
ERB
16-
end
17-
end
9+
view_context.render inline: <<~ERB.strip, **options
10+
Hello, <%= local_assigns.fetch(:name, "World") %>!
11+
ERB
1812
end
1913
end
2014

21-
ApplicationController.render(Greeting.new, name: "Local") # => "Hello, Local!"
22-
ApplicationController.render(Greeting.new) { "Hello, Block!" } # => "Hello, Block!"
23-
ApplicationController.render(renderable: Greeting.new, formats: :json) # => "{\"greeting\":\"Hello, World!\"}"
15+
ApplicationController.render(Greeting.new) # => "Hello, World!"
16+
ApplicationController.render(Greeting.new) { "Hello, Block!" } # => "Hello, Block!"
17+
ApplicationController.render(renderable: Greeting.new) # => "Hello, World!"
18+
ApplicationController.render(renderable: Greeting.new, locals: { name: "Local" }) # => "Hello, Local!"
2419
```
2520

2621
*Sean Doyle*

actionpack/lib/action_controller/metal/rendering.rb

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def inherited(klass)
4646
# view_context.render html: block.call
4747
# else
4848
# view_context.render inline: <<~ERB.strip, **options
49-
# <%= Hello, <%= local_assigns.fetch(:name, "World") %>
49+
# <h1><%= Hello, <%= local_assigns.fetch(:name, "World") %></h1>
5050
# ERB
5151
# end
5252
# end
@@ -56,28 +56,12 @@ def inherited(klass)
5656
# end
5757
# end
5858
#
59-
# render(Greeting.new) # => "Hello, World"
60-
# render(renderable: Greeting.new) # => "Hello, World"
61-
# render(Greeting.new, name: "Local") # => "Hello, Local"
62-
# render(renderable: Greeting.new, locals: { name: "Local" }) # => "Hello, Local"
63-
# render(Greeting.new) { "Hello, Block" } # => "Hello, Block"
64-
# render(renderable: Greeting.new) { "Hello, Block" } # => "Hello, Block"
65-
#
66-
# class Greeting
67-
# def render_in(view_context)
68-
# view_context.render html: "<h1>Hello, World</h1>"
69-
# end
70-
#
71-
# def format
72-
# :html
73-
# end
74-
# end
75-
#
76-
# render(Greeting.new)
77-
# # => "<h1>Hello, World</h1>"
78-
#
79-
# render(renderable: Greeting.new)
80-
# # => "<h1>Hello, World</h1>"
59+
# render(Greeting.new) # => "<h1>Hello, World</h1>"
60+
# render(renderable: Greeting.new) # => "<h1>Hello, World</h1>"
61+
# render(Greeting.new, name: "Local") # => "<h1>Hello, Local</h1>"
62+
# render(renderable: Greeting.new, locals: { name: "Local" }) # => "<h1>Hello, Local</h1>"
63+
# render(Greeting.new) { "<h1>Hello, Block</h1>" } # => "<h1>Hello, Block</h1>"
64+
# render(renderable: Greeting.new) { "<h1>Hello, Block<h1>" } # => "<h1>Hello, Block</h1>"
8165
#
8266
# ==== \Rendering Mode
8367
#
@@ -142,7 +126,7 @@ def inherited(klass)
142126
# # => renders "<h1>Hello, World</h1>"
143127
#
144128
# render renderable: Greeting.new, locals: { name: "Local" }
145-
# # => renders "Hello, Local"
129+
# # => renders "<h1>Hello, Local</h1>"
146130
#
147131
# By default, when a rendering mode is specified, no layout template is
148132
# rendered.

actionpack/test/controller/render_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require "abstract_unit"
44
require "controller/fake_models"
5+
require "test_renderable"
56

67
class TestControllerWithExtraEtags < ActionController::Base
78
self.view_paths = [ActionView::FixtureResolver.new(
@@ -363,6 +364,10 @@ class MetalTestController < ActionController::Metal
363364
def accessing_logger_in_template
364365
render inline: "<%= logger.class %>"
365366
end
367+
368+
def render_renderable
369+
render renderable: TestRenderable.new, locals: params.fetch(:locals, {})
370+
end
366371
end
367372

368373
class ExpiresInRenderTest < ActionController::TestCase
@@ -790,6 +795,16 @@ def test_access_to_logger_in_view
790795
get :accessing_logger_in_template
791796
assert_equal "NilClass", @response.body
792797
end
798+
799+
def test_render_renderable
800+
get :render_renderable
801+
802+
assert_equal "Hello, World!", @response.parsed_body.text
803+
804+
get :render_renderable, params: { locals: { name: "Local" } }
805+
806+
assert_equal "Hello, Local!", @response.parsed_body.text
807+
end
793808
end
794809

795810
class ActionControllerRenderTest < ActionController::TestCase

actionpack/test/controller/renderer_test.rb

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -87,29 +87,16 @@ class RendererTest < ActiveSupport::TestCase
8787
)
8888
end
8989

90-
test "render a renderable object with :formats" do
91-
renderer = ApplicationController.renderer
92-
93-
assert_equal(
94-
{ greeting: "Hello, World!" }.to_json,
95-
renderer.render(renderable: TestRenderable.new, formats: :json)
96-
)
97-
assert_equal(
98-
{ greeting: "Hello, Local!" }.to_json,
99-
renderer.render(renderable: TestRenderable.new, locals: { name: "Local" }, formats: :json)
100-
)
101-
end
102-
10390
test "render a renderable object with block" do
10491
renderer = ApplicationController.renderer
10592

10693
assert_equal(
107-
%(Goodbye, World!),
108-
renderer.render(TestRenderable.new) { "Goodbye, World!" }
94+
%(<h1>Goodbye, World!</h1>),
95+
renderer.render(TestRenderable.new) { "<h1>Goodbye, World!</h1>".html_safe }
10996
)
11097
assert_equal(
111-
%(Goodbye, World!),
112-
renderer.render(renderable: TestRenderable.new) { "Goodbye, World!" }
98+
%(<h1>Goodbye, World!</h1>),
99+
renderer.render(renderable: TestRenderable.new) { "<h1>Goodbye, World!</h1>".html_safe }
113100
)
114101
end
115102

actionpack/test/lib/test_renderable.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
# frozen_string_literal: true
22

33
class TestRenderable
4-
def render_in(view_context, locals: {}, formats: nil, **options, &block)
4+
def render_in(view_context, locals: {}, **options, &block)
55
if block
6-
view_context.render plain: block.call
7-
elsif Array(formats).first == :json
8-
json = { greeting: "Hello, #{locals.fetch(:name, "World")}!" }
9-
10-
view_context.render plain: json.to_json
6+
view_context.render html: block.call
117
else
128
view_context.render inline: <<~ERB.strip, locals: locals
139
Hello, <%= local_assigns.fetch(:name, "World") %>!

actionview/CHANGELOG.md

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,21 @@
22

33
```ruby
44
class Greeting
5-
def render_in(view_context, locals: {}, formats: nil, **options, &block)
5+
def render_in(view_context, **options, &block)
66
if block
7-
view_context.render plain: block.call
7+
view_context.render html: block.call
88
else
9-
case Array(formats).first
10-
when :json
11-
json = { greeting: "Hello, #{locals.fetch(:name, "World")}!" }
12-
13-
view_context.render plain: json.to_json
14-
else
15-
view_context.render inline: <<~ERB.strip, locals: locals
16-
Hello, <%= local_assigns.fetch(:name, "World") %>!
17-
ERB
18-
end
9+
view_context.render inline: <<~ERB.strip, **options
10+
Hello, <%= local_assigns.fetch(:name, "World") %>!
11+
ERB
1912
end
2013
end
2114
end
2215

23-
render(Greeting.new, name: "Local") # => "Hello, Local!"
24-
render(Greeting.new) { "Hello, Block!" } # => "Hello, Block!"
25-
render(renderable: Greeting.new, formats: :json) # => "{\"greeting\":\"Hello, World!\"}"
16+
render(Greeting.new) # => "Hello, World!"
17+
render(Greeting.new, name: "Local") # => "Hello, Local!"
18+
render(renderable: Greeting.new, locals: { name: "Local" }) # => "Hello, Local!"
19+
render(Greeting.new) { "Hello, Block!" } # => "Hello, Block!"
2620
```
2721

2822
*Sean Doyle*

actionview/lib/action_view/renderer/template_renderer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def determine_template(options, &block)
4141
end
4242
Template::Inline.new(options[:inline], "inline template", handler, locals: keys, format: format)
4343
elsif options.key?(:renderable)
44-
Template::Renderable.new(options[:renderable], options[:formats], &block)
44+
Template::Renderable.new(options[:renderable], &block)
4545
elsif options.key?(:template)
4646
if options[:template].respond_to?(:render)
4747
options[:template]

actionview/lib/action_view/template/renderable.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ module ActionView
44
class Template
55
# = Action View Renderable Template for objects that respond to #render_in
66
class Renderable # :nodoc:
7-
def initialize(renderable, formats, &block)
7+
def initialize(renderable, &block)
88
@renderable = renderable
9-
@formats = formats
109
@block = block
1110
end
1211

@@ -25,14 +24,14 @@ def render(context, locals)
2524

2625
{}
2726
else
28-
{ formats: @formats, locals: locals }
27+
{ locals: locals }
2928
end
3029

3130
@renderable.render_in(context, **options, &@block)
3231
end
3332

3433
def format
35-
@renderable.try(:format) || Array(@formats).first
34+
@renderable.try(:format)
3635
end
3736
end
3837
end

actionview/test/lib/test_renderable.rb

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
# frozen_string_literal: true
22

33
class TestRenderable
4-
def render_in(view_context, locals: {}, formats: nil, **options, &block)
4+
def render_in(view_context, **options, &block)
55
if block
6-
view_context.render plain: block.call
7-
elsif Array(formats).first == :json
8-
json = { greeting: "Hello, #{locals.fetch(:name, "World")}!" }
9-
10-
view_context.render plain: json.to_json
6+
view_context.render html: block.call
117
else
12-
view_context.render inline: <<~ERB.strip, locals: locals
13-
Hello, <%= local_assigns.fetch(:name, "World") %>!
8+
view_context.render inline: <<~ERB.strip, **options
9+
<h1>Hello, <%= local_assigns.fetch(:name, "World") %>!</h1>
1410
ERB
1511
end
1612
end

actionview/test/template/render_test.rb

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -396,24 +396,22 @@ def renderable.render_in(view_context, &block)
396396
end
397397

398398
def test_render_renderable_render_in
399-
assert_equal "Hello, World!", @view.render(TestRenderable.new)
400-
assert_equal "Hello, World!", @view.render(renderable: TestRenderable.new)
399+
assert_equal "<h1>Hello, World!</h1>", @view.render(TestRenderable.new)
400+
assert_equal "<h1>Hello, World!</h1>", @view.render(renderable: TestRenderable.new)
401401

402-
assert_equal "Hello, Renderable!", @view.render(TestRenderable.new, name: "Renderable")
403-
assert_equal "Hello, Renderable!", @view.render(renderable: TestRenderable.new, locals: { name: "Renderable" })
402+
assert_equal "<h1>Hello, Renderable!</h1>", @view.render(TestRenderable.new, name: "Renderable")
403+
assert_equal "<h1>Hello, Renderable!</h1>", @view.render(renderable: TestRenderable.new, locals: { name: "Renderable" })
404404

405-
assert_equal "Goodbye, Block!", @view.render(TestRenderable.new) { "Goodbye, Block!" }
406-
assert_equal "Goodbye, Block!", @view.render(renderable: TestRenderable.new) { "Goodbye, Block!" }
407-
408-
assert_equal({ greeting: "Hello, World!" }.to_json, @view.render(renderable: TestRenderable.new, formats: :json))
405+
assert_equal "<h1>Goodbye, Block!</h1>", @view.render(TestRenderable.new) { @view.tag.h1 "Goodbye, Block!" }
406+
assert_equal "<h1>Goodbye, Block!</h1>", @view.render(renderable: TestRenderable.new) { @view.tag.h1 "Goodbye, Block!" }
409407
end
410408

411409
def test_render_renderable_render_in_excludes_renderable_key
412410
renderable = Object.new
413411
def renderable.render_in(view_context, **options)
414-
view_context.render plain: options.to_s, **options
412+
view_context.render plain: options, **options
415413
end
416-
options = { formats: :html, locals: { a: true, b: false } }
414+
options = { locals: { a: true, b: false } }
417415

418416
assert_equal options.to_s, @view.render(renderable: renderable, **options)
419417
end
@@ -801,7 +799,7 @@ def test_render_throws_exception_when_no_extensions_passed_to_register_template_
801799

802800
def test_render_object
803801
assert_equal(
804-
%(Hello, World!),
802+
%(<h1>Hello, World!</h1>),
805803
@view.render(TestRenderable.new)
806804
)
807805
end

0 commit comments

Comments
 (0)