Sha256: 17277a0c5a1da13bccd12d527791733c6ca9a96964b835e433bba5fe47688421

Contents?: true

Size: 1.96 KB

Versions: 5

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

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

    # Run all Generators.
    # @see 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 for the given Converter class.
    # @param klass [Class] The Class of the Converter to fetch.
    # @return [Converter] Returns the {Converter}
    #   instance implementing the given `Converter` class.
    def find_converter_instance(klass)
      @find_converter_instance ||= {}
      @find_converter_instance[klass] ||= converters.find do |converter|
        converter.instance_of?(klass)
      end || raise("No Converters found for #{klass}")
    end

    # Create an array of instances of the subclasses of the class
    #   passed in as argument.
    # @param klass [Class] - class which is the parent of the subclasses.
    # @return [Array<Converter, Generator>] 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-1.0.0.alpha6 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-1.0.0.alpha5 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-1.0.0.alpha4 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-1.0.0.alpha3 lib/bridgetown-core/concerns/site/extensible.rb
bridgetown-core-1.0.0.alpha2 lib/bridgetown-core/concerns/site/extensible.rb