class ViewComponent::Template
def call_method_name
def call_method_name @call_method_name ||= ["call", (normalized_variant_name if variant.present?), (format unless default_format?)] .compact.join("_").to_sym end
def compile_to_component
def compile_to_component @component.silence_redefinition_of_method(call_method_name) # rubocop:disable Style/EvalWithLocation @component.class_eval <<~RUBY, @path, @lineno - 1 def #{call_method_name} @view_context.instance_variable_set(:@virtual_path, virtual_path) #{compiled_source} end RUBY # rubocop:enable Style/EvalWithLocation @component.define_method(safe_method_name, @component.instance_method(@call_method_name)) end
def compiled_source
def compiled_source handler = details.handler_class this_source = source this_source.rstrip! if @component.strip_trailing_whitespace? short_identifier = defined?(Rails.root) ? @path.sub("#{Rails.root}/", "") : @path format = self.format || DEFAULT_FORMAT type = ActionView::Template::Types[format] handler.call(DataWithSource.new(format:, identifier: @path, short_identifier:, type:), this_source) end
def default_format?
def default_format? format.nil? || format == DEFAULT_FORMAT end
def initialize(component:, details:, lineno: nil, path: nil)
def initialize(component:, details:, lineno: nil, path: nil) @component = component @details = details @lineno = lineno @path = path end
def inline_call?
def inline_call? type == :inline_call end
def normalized_variant_name
def normalized_variant_name variant.to_s.gsub("-", "__") end
def requires_compiled_superclass?
def requires_compiled_superclass? inline_call? && !defined_on_self? end
def safe_method_name
def safe_method_name "_#{call_method_name}_#{@component.name.underscore.gsub("/", "__")}" end
def safe_method_name_call
def safe_method_name_call m = safe_method_name proc { send(m) } end