Sha256: af68aebf1f498876c6d2495e8b2bc250a1669c4c8be606a3351e1246c90ae6be

Contents?: true

Size: 1.43 KB

Versions: 6

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

module Heartml
  module Rails
    class Railtie < ::Rails::Railtie
      module ReloadDocsInDevelopment
        extend ActiveSupport::Concern

        included do
          before_action :reload_docs
        end

        def reload_docs
          Heartml.registered_elements.each { _1.instance_variable_set(:@doc, nil) }
        end
      end

      require "heartml/rails/helpers"
      ActionView::Helpers.include Heartml::Rails::Helpers

      initializer "heartml.monkypatch_view_component" do |_app|
        require "view_component/base"
        require "heartml/rails/view_component_base"
        ViewComponent::Base.class_eval do
          def self.heartml = include Heartml::Rails::ViewComponentBase
        end
      rescue LoadError
        # no ViewComponent to patch
      end

      initializer "heartml.reload_docs_in_development" do |_app|
        unless ::Rails.env.production?
          ActiveSupport.on_load(:action_controller_base) do
            include ReloadDocsInDevelopment
          end
        end
      end

      config.to_prepare do
        next if ::Rails.env.production?

        components_folder = ::Rails.root.join("app", "components")
        unless File.directory?(components_folder)
          ::Rails.logger.error "Heartml: missing `app/components' folder, cannot load elements"
          next
        end

        ::Rails.autoloaders.main.eager_load_dir components_folder
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
heartml-1.0.0.beta18 lib/heartml/rails/railtie.rb
heartml-1.0.0.beta17 lib/heartml/rails/railtie.rb
heartml-1.0.0.beta16 lib/heartml/rails/railtie.rb
heartml-1.0.0.beta15 lib/heartml/rails/railtie.rb
heartml-1.0.0.beta14 lib/heartml/rails/railtie.rb
heartml-1.0.0.beta13 lib/heartml/rails/railtie.rb