Module: Bridgetown::Site::Extensible

Included in:
Bridgetown::Site
Defined in:
lib/bridgetown-core/concerns/site/extensible.rb

Instance Method Summary collapse

Instance Method Details

#find_converter_instance(klass) ⇒ Converter

Get the implementation for the given Converter class.

Parameters:

  • klass (Class)

    The Class of the Converter to fetch.

Returns:



43
44
45
46
47
48
# File 'lib/bridgetown-core/concerns/site/extensible.rb', line 43

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

#generatevoid

This method returns an undefined value.

Run all Generators.

See Also:



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/bridgetown-core/concerns/site/extensible.rb', line 23

def generate
  generators.each do |generator|
    start = Time.now
    generator.generate(self)

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

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

#instantiate_subclasses(klass) ⇒ Array<Converter, Generator>

Create an array of instances of the subclasses of the class passed in as argument.

Parameters:

  • klass (Class)

    class which is the parent of the subclasses.

Returns:



56
57
58
59
60
# File 'lib/bridgetown-core/concerns/site/extensible.rb', line 56

def instantiate_subclasses(klass)
  klass.descendants.sort.map do |c|
    c.new(config)
  end
end

#on(event, reloadable: false) {|site| ... } ⇒ Object

Shorthand for registering a site hook via Hooks

Parameters:

  • event (Symbol)

    name of the event (:pre_read, :post_render, etc.)

Yields:

  • the block will be called when the event is triggered

Yield Parameters:

  • site

    the site which triggered the event hook



67
68
69
# File 'lib/bridgetown-core/concerns/site/extensible.rb', line 67

def on(event, reloadable: false, &)
  Bridgetown::Hooks.register_one :site, event, reloadable:, &
end

#setupvoid

This method returns an undefined value.

Load necessary libraries, plugins, converters, and generators. This is only ever run once for the lifecycle of the site object.



12
13
14
15
16
17
# File 'lib/bridgetown-core/concerns/site/extensible.rb', line 12

def setup
  plugin_manager.require_plugin_files
  loaders_manager.setup_loaders
  self.converters = instantiate_subclasses(Bridgetown::Converter)
  self.generators = instantiate_subclasses(Bridgetown::Generator)
end