lib/view_component_contrib/preview/sidecarable.rb



# frozen_string_literal: true

module ViewComponentContrib
  module Preview
    module Sidecarable
      PREVIEW_GLOB = "**/{preview.rb,*_preview.rb}"

      def self.extended(base)
        base.singleton_class.prepend(ClassMethods)
      end

      module ClassMethods
        def load_previews
          Array(preview_paths).each do |preview_path|
            Dir["#{preview_path}/#{PREVIEW_GLOB}"].sort.each { |file| require_dependency file }
          end
        end

        def preview_name
          name.sub(/(::Preview|Preview)$/, "").underscore
        end
      end
    end
  end
end