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:



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

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:



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

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

#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:



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

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



64
65
66
# File 'lib/bridgetown-core/concerns/site/extensible.rb', line 64

def on(event, reloadable: false, &block)
  Bridgetown::Hooks.register_one :site, event, reloadable: reloadable, &block
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.



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

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