From d6709bcf4a320423e61ae556efa690664be8781c Mon Sep 17 00:00:00 2001 From: Joel Hawksley Date: Wed, 2 Oct 2019 11:01:36 -0600 Subject: [PATCH 1/3] Allow sidecar CSS files [Fixes #55] --- lib/action_view/component/base.rb | 8 ++++---- test/action_view/component_test.rb | 6 ++++++ test/app/components/css_sidecar_file_component.css | 3 +++ test/app/components/css_sidecar_file_component.html.erb | 1 + test/app/components/css_sidecar_file_component.rb | 6 ++++++ 5 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 test/app/components/css_sidecar_file_component.css create mode 100644 test/app/components/css_sidecar_file_component.html.erb create mode 100644 test/app/components/css_sidecar_file_component.rb diff --git a/lib/action_view/component/base.rb b/lib/action_view/component/base.rb index 2eccca1c5..ec0440adb 100644 --- a/lib/action_view/component/base.rb +++ b/lib/action_view/component/base.rb @@ -117,19 +117,19 @@ def template_file_path filename = self.instance_method(:initialize).source_location[0] filename_without_extension = filename[0..-(File.extname(filename).length + 1)] - sibling_files = Dir["#{filename_without_extension}.*"] - [filename] + sibling_template_files = Dir["#{filename_without_extension}.html.{#{ActionView::Template.template_handler_extensions.join(",")}}"] - [filename] - if sibling_files.length > 1 + if sibling_template_files.length > 1 raise StandardError.new("More than one template found for #{self}. There can only be one sidecar template file per component.") end - if sibling_files.length == 0 + if sibling_template_files.length == 0 raise NotImplementedError.new( "Could not find a template file for #{self}." ) end - sibling_files[0] + sibling_template_files[0] end end diff --git a/test/action_view/component_test.rb b/test/action_view/component_test.rb index 67372afb8..15454f4ab 100644 --- a/test/action_view/component_test.rb +++ b/test/action_view/component_test.rb @@ -130,6 +130,12 @@ def test_renders_another_component assert_equal trim_result(result.css("div").first.to_html), "
hello,world!
" end + def test_renders_component_with_css_sidecar + result = render_inline(CssSidecarFileComponent) + + assert_equal trim_result(result.css("div").first.to_html), "
hello,world!
" + end + def test_template_changes_are_not_reflected_in_production ActionView::Base.cache_template_loading = true diff --git a/test/app/components/css_sidecar_file_component.css b/test/app/components/css_sidecar_file_component.css new file mode 100644 index 000000000..1c3383459 --- /dev/null +++ b/test/app/components/css_sidecar_file_component.css @@ -0,0 +1,3 @@ +div { + font-weight: bold; +} diff --git a/test/app/components/css_sidecar_file_component.html.erb b/test/app/components/css_sidecar_file_component.html.erb new file mode 100644 index 000000000..c1e51cf92 --- /dev/null +++ b/test/app/components/css_sidecar_file_component.html.erb @@ -0,0 +1 @@ +
hello, world!
diff --git a/test/app/components/css_sidecar_file_component.rb b/test/app/components/css_sidecar_file_component.rb new file mode 100644 index 000000000..526faa0de --- /dev/null +++ b/test/app/components/css_sidecar_file_component.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class CssSidecarFileComponent < ActionView::Component::Base + def initialize(*) + end +end From fbbeab1a754e80c4cb0f7aa675f0ee54bba4ac9c Mon Sep 17 00:00:00 2001 From: Joel Hawksley Date: Wed, 2 Oct 2019 11:07:48 -0600 Subject: [PATCH 2/3] don't couple to HTML templates at least --- lib/action_view/component/base.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/action_view/component/base.rb b/lib/action_view/component/base.rb index ec0440adb..e5628b15f 100644 --- a/lib/action_view/component/base.rb +++ b/lib/action_view/component/base.rb @@ -117,7 +117,7 @@ def template_file_path filename = self.instance_method(:initialize).source_location[0] filename_without_extension = filename[0..-(File.extname(filename).length + 1)] - sibling_template_files = Dir["#{filename_without_extension}.html.{#{ActionView::Template.template_handler_extensions.join(",")}}"] - [filename] + sibling_template_files = Dir["#{filename_without_extension}.????.{#{ActionView::Template.template_handler_extensions.join(",")}}"] - [filename] if sibling_template_files.length > 1 raise StandardError.new("More than one template found for #{self}. There can only be one sidecar template file per component.") From 8990b8d9beb37302f3a33eb1998c91530b76a134 Mon Sep 17 00:00:00 2001 From: Joel Hawksley Date: Wed, 2 Oct 2019 13:11:36 -0600 Subject: [PATCH 3/3] use single quotes --- lib/action_view/component/base.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/action_view/component/base.rb b/lib/action_view/component/base.rb index e5628b15f..cdb785e47 100644 --- a/lib/action_view/component/base.rb +++ b/lib/action_view/component/base.rb @@ -117,7 +117,7 @@ def template_file_path filename = self.instance_method(:initialize).source_location[0] filename_without_extension = filename[0..-(File.extname(filename).length + 1)] - sibling_template_files = Dir["#{filename_without_extension}.????.{#{ActionView::Template.template_handler_extensions.join(",")}}"] - [filename] + sibling_template_files = Dir["#{filename_without_extension}.????.{#{ActionView::Template.template_handler_extensions.join(',')}}"] - [filename] if sibling_template_files.length > 1 raise StandardError.new("More than one template found for #{self}. There can only be one sidecar template file per component.")