Sha256: dda642b16fbf7de9880880d8bfc2a46db4ef364bb22fcf0982f4bc52df98c086

Contents?: true

Size: 1.99 KB

Versions: 5

Compression:

Stored size: 1.99 KB

Contents

# frozen_string_literal: true

module Bridgetown
  module Site::Extensible
    # Load necessary libraries, plugins, converters, and generators.
    # @see Bridgetown::Converter
    # @see Bridgetown::Generator
    # @see PluginManager
    # @return [void]
    def setup
      plugin_manager.require_plugin_files
      self.converters = instantiate_subclasses(Bridgetown::Converter)
      self.generators = instantiate_subclasses(Bridgetown::Generator)
    end

    # Run all Generators.
    # @see Bridgetown::Generator
    # @return [void]
    def generate
      generators.each do |generator|
        start = Time.now
        generator.generate(self)

        next unless ENV["BRIDGETOWN_LOG_LEVEL"] == "debug"

        generator_name = if generator.class.respond_to?(:custom_name)
                           generator.class.custom_name
                         else
                           generator.class.name
                         end
        Bridgetown.logger.debug "Generating:",
                                "#{generator_name} finished in #{Time.now - start} seconds."
      end
    end

    # Get the implementation class for the given Converter.
    # @param klass [Object] The Class of the Converter to fetch.
    # @return [Bridgetown::Converter] Returns the {Bridgetown::Converter}
    #   instance implementing the given +Converter+.
    def find_converter_instance(klass)
      @find_converter_instance ||= {}
      @find_converter_instance[klass] ||= begin
        converters.find { |converter| converter.instance_of?(klass) } || \
          raise("No Converters found for #{klass}")
      end
    end

    # Create an array of instances of the subclasses of the class or module
    #   passed in as argument.
    # @param klass [Class, Module] - class or module containing the subclasses.
    # @return [Array<Object>] Returns an array of instances of subclasses of
    #   +klass+.
    def instantiate_subclasses(klass)
      klass.descendants.sort.map do |c|
        c.new(config)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
bridgetown-core-0.17.1 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-0.17.0 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-0.16.0 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-0.16.0.beta2 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-0.16.0.beta1 lib/bridgetown-core/concerns/site/extensible.rb