Sha256: 8abe61ee626d0a27eda892d4c997fb332d08a451afe85ef6b4bc162cc0952b1d

Contents?: true

Size: 1.61 KB

Versions: 20

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module Ariadne
  module Form
    # :nodoc:
    class BaseComponent < Ariadne::BaseComponent
      include Ariadne::ClassNameHelper
      extend Ariadne::Forms::ActsAsComponent

      def self.inherited(base)
        base_path = Ariadne::Forms::Utils.const_source_location(base.name)

        unless base_path
          warn("Could not identify the template for #{base}")
          return
        end

        dir = File.dirname(base_path)
        base.renders_template(File.join(dir, "#{base.name.demodulize.underscore}.html.erb"), :render_template)
      end

      delegate :required?, :disabled?, :hidden?, to: :@input

      def perform_render(&block)
        return "" unless render?

        @__prf_content_block = block
        compile_and_render_template
      end

      def content
        return @__prf_content if defined?(@__prf_content_evaluated) && @__prf_content_evaluated

        @__prf_content_evaluated = true
        @__prf_content = capture do
          @__prf_content_block.call
        end
      end

      # :nocov:
      def type
        :component
      end
      # :nocov:

      def input?
        false
      end

      def to_component
        self
      end

      def render?
        true
      end

      private

      def compile_and_render_template
        self.class.compile! if self.class.instance_methods(false).exclude?(:render_template)
        render_template
      end

      def content_tag_if(condition, tag, **kwargs, &block)
        if condition
          content_tag(tag, **kwargs, &block)
        else
          capture(&block)
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
ariadne_view_components-0.0.93.2 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.93.1 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.93 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.92 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.91 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.90 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.89.1 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.89 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.88 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.87 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.9 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.8 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.7 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.6 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.5 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.4 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.3 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.2 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86.1 app/components/ariadne/form/base_component.rb
ariadne_view_components-0.0.86 app/components/ariadne/form/base_component.rb