Skip to content

Commit 64cf0a5

Browse files
committed
Controller camelize_props: true
This allows the use of camelize props in controller actions. ```ruby render component: 'Example', props: my_props, camelize_props: true ```
1 parent 70add3f commit 64cf0a5

File tree

10 files changed

+53
-1
lines changed

10 files changed

+53
-1
lines changed

lib/react/rails/controller_renderer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def initialize(options={})
2828
# @return [String] HTML for `component_name` with `options[:props]`
2929
def call(component_name, options, &block)
3030
props = options.fetch(:props, {})
31-
options = default_options.merge(options.slice(:data, :aria, :tag, :class, :id, :prerender))
31+
options = default_options.merge(options.slice(:data, :aria, :tag, :class, :id, :prerender, :camelize_props))
3232
react_component(component_name, props, options, &block)
3333
end
3434

test/dummy_sprockets/app/controllers/server_controller.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ def inline_component_prerender_false
1616
render(component_options.merge(prerender: false))
1717
end
1818

19+
def inline_component_with_camelize_props_prerender_true
20+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true
21+
end
22+
23+
def inline_component_with_camelize_props_prerender_false
24+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false
25+
end
26+
1927
private
2028

2129
def component_options

test/dummy_sprockets/config/routes.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
get :console_example
77
get :inline_component_prerender_true
88
get :inline_component_prerender_false
9+
get :inline_component_with_camelize_props_prerender_true
10+
get :inline_component_with_camelize_props_prerender_false
911
end
1012
end
1113

test/dummy_webpacker1/app/controllers/server_controller.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ def inline_component_prerender_false
1616
render(component_options.merge(prerender: false))
1717
end
1818

19+
def inline_component_with_camelize_props_prerender_true
20+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true
21+
end
22+
23+
def inline_component_with_camelize_props_prerender_false
24+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false
25+
end
26+
1927
private
2028

2129
def component_options

test/dummy_webpacker1/config/routes.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
get :console_example
66
get :inline_component_prerender_true
77
get :inline_component_prerender_false
8+
get :inline_component_with_camelize_props_prerender_true
9+
get :inline_component_with_camelize_props_prerender_false
810
end
911
end
1012

test/dummy_webpacker2/app/controllers/server_controller.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ def inline_component_prerender_false
1616
render(component_options.merge(prerender: false))
1717
end
1818

19+
def inline_component_with_camelize_props_prerender_true
20+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true
21+
end
22+
23+
def inline_component_with_camelize_props_prerender_false
24+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false
25+
end
26+
1927
private
2028

2129
def component_options

test/dummy_webpacker2/config/routes.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
get :console_example
66
get :inline_component_prerender_true
77
get :inline_component_prerender_false
8+
get :inline_component_with_camelize_props_prerender_true
9+
get :inline_component_with_camelize_props_prerender_false
810
end
911
end
1012

test/dummy_webpacker3/app/controllers/server_controller.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ def inline_component_prerender_false
1616
render(component_options.merge(prerender: false))
1717
end
1818

19+
def inline_component_with_camelize_props_prerender_true
20+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true
21+
end
22+
23+
def inline_component_with_camelize_props_prerender_false
24+
render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false
25+
end
26+
1927
private
2028

2129
def component_options

test/dummy_webpacker3/config/routes.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
get :console_example
66
get :inline_component_prerender_true
77
get :inline_component_prerender_false
8+
get :inline_component_with_camelize_props_prerender_true
9+
get :inline_component_with_camelize_props_prerender_false
810
end
911
end
1012

test/server_rendered_html_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,5 +134,17 @@ def wait_to_ensure_asset_pipeline_detects_changes
134134
# make sure the tag closes immediately:
135135
assert_match(/<span.*data-react-class=\"TodoList\"[^<]*><\/span>/, rendered_html)
136136
end
137+
138+
test 'react inline component rendering with camelize_props (pre-rendered)' do
139+
get '/server/inline_component_with_camelize_props_prerender_true'
140+
rendered_html = response.body
141+
assert_match(/data-react-props.*testCamelizeProps.*true/, rendered_html)
142+
end
143+
144+
test 'react inline component rendering with camelize_props (not pre-rendered)' do
145+
get '/server/inline_component_with_camelize_props_prerender_false'
146+
rendered_html = response.body
147+
assert_match(/data-react-props.*testCamelizeProps.*true/, rendered_html)
148+
end
137149
end
138150
end

0 commit comments

Comments
 (0)