Module: ViewComponentSubtemplates::CompilerExtension
- Defined in:
- lib/view_component_subtemplates/compiler_extension.rb
Overview
Extends ViewComponent’s compilation process to handle subtemplates.
Class Method Summary collapse
-
.gather_sub_templates_for(component_class) ⇒ Array<SubTemplate>
Discovers subtemplate files in the component’s subdirectory.
-
.process_component(component_class) ⇒ void
Compiles all subtemplates for a component into call_* methods.
Class Method Details
.gather_sub_templates_for(component_class) ⇒ Array<SubTemplate>
Discovers subtemplate files in the component’s subdirectory.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/view_component_subtemplates/compiler_extension.rb', line 22 def self.gather_sub_templates_for(component_class) component_subdir = ViewComponentSubtemplates.component_subdir_for(component_class) return [] unless Dir.exist?(component_subdir) template_extensions = ActionView::Template.template_handler_extensions Dir.glob(File.join(component_subdir, "*")).filter_map do |file_path| next unless File.file?(file_path) next unless template_extensions.include?(File.extname(file_path)[1..]) template_name = File.basename(file_path).split(".").first SubTemplate.new( component: component_class, path: file_path, template_name: template_name ) end end |
.process_component(component_class) ⇒ void
This method returns an undefined value.
Compiles all subtemplates for a component into call_* methods. Skips processing if already done for this component.
11 12 13 14 15 16 |
# File 'lib/view_component_subtemplates/compiler_extension.rb', line 11 def self.process_component(component_class) return if component_class.instance_variable_get(:@__subtemplates_processed) gather_sub_templates_for(component_class).each(&:compile_to_component) component_class.instance_variable_set(:@__subtemplates_processed, true) end |