Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support params in controllers and locals in views #5

Merged
merged 2 commits into from
Aug 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
## [Unreleased]

- Update Documentation
- Add support for params in controller and locals in view

## [0.1.0] - 2024-08-20

Expand Down
8 changes: 7 additions & 1 deletion lib/render_kit/implicit_render_monkey_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module RenderKit
module ImplicitRenderMonkeyPatch
def default_render
if renderable = find_renderable(action_name.to_s, _prefixes)
render(renderable.new)
render(renderable.new(**renderable_params))
else
super
end
Expand All @@ -15,5 +15,11 @@ def default_render
def find_renderable(action_name, prefixes)
RenderKit::RenderableRegistry.get_renderables([prefixes, action_name].join("_"), controller=true)
end

# unsafe_h is used to convert the params to a hash,
# this is fine because the validtion is done in the renderable initializer
def renderable_params
params.to_unsafe_h.symbolize_keys.except(:controller, :action)
end
end
end
4 changes: 2 additions & 2 deletions lib/render_kit/rendering_helper_monkey_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

module RenderKit
module RenderingHelperMonkeyPatch
def render(options = {}, locals = {}, &)
def render(options = {}, locals = {}, &block)
if renderable = RenderKit::RenderableRegistry.get_renderables(options)
renderable.new(locals).render_in(self, &)
renderable.new(**locals).render_in(self, &block)
else
super
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div> <%= @title %> </div>
9 changes: 9 additions & 0 deletions test/sandbox/app/components/implicit_args_render_component.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

class ImplicitArgsRenderComponent < ViewComponent::Base
ActionView::Base.register_renderable("implicit_args_render", ImplicitArgsRenderComponent)

def initialize(title:)
@title = title
end
end
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
<div> I have been implicity rendered by a controller </div>
<% if @title.present? %>
<div><%= @title %></div>
<% else %>
<div> I have been implicity rendered by a controller </div>
<% end %>
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@

class TestImplicitControllerRenderComponent < ViewComponent::Base
ActionView::Base.register_renderable("test_implicit_controller_render", TestImplicitControllerRenderComponent, controller_render=true)

def initialize(title: nil)
@title = title
end
end
3 changes: 3 additions & 0 deletions test/sandbox/app/controllers/test_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ class TestController < ActionController::Base
def component_implicit_render
end

def component_args_implicit_render
end

def implicit_controller_render
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
<%= render "implicit_args_render", title: 'I am using args' %>
</div>
1 change: 1 addition & 0 deletions test/sandbox/config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
get "service-worker" => "rails/pwa#service_worker", :as => :pwa_service_worker
get "manifest" => "rails/pwa#manifest", :as => :pwa_manifest
get "component_implicit_render", to: "test#component_implicit_render"
get "component_args_implicit_render", to: "test#component_args_implicit_render"
get "implicit_controller_render", to: "test#implicit_controller_render"
# Defines the root path route ("/")
# root "posts#index"
Expand Down
16 changes: 16 additions & 0 deletions test/sandbox/test/view_component_compatability_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,26 @@ def test_rendering_view_component
assert_match(/I have been implicity rendered/, @response.body)
end

def test_rendering_view_component_args
get :component_args_implicit_render
assert_response 200
assert_response :success
assert_match(/I am using args/, @response.body)
end

def test_rendering_view_component_with_controller_render
get :implicit_controller_render
assert_response 200
assert_response :success
assert_match(/I have been implicity rendered by a controller/, @response.body)
end

def test_rendering_view_component_with_controller_render
get :implicit_controller_render, params: { title: "I have rendered controller params" }
assert_response 200
assert_response :success
assert_match(/I have rendered controller params/, @response.body)
end


end