Module: Bridgetown::Builders::DSL::Generators

Included in:
PluginBuilder
Defined in:
bridgetown-builder/lib/bridgetown-builder/dsl/generators.rb

Instance Method Summary collapse

Instance Method Details

#generator(method_name = nil, &block) ⇒ Object

Set up a new generator based on the block or method provided which will run alongside other generators during the build process

Parameters:

  • method_name (Symbol) (defaults to: nil)

    use a Builder method rather than a block to run



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'bridgetown-builder/lib/bridgetown-builder/dsl/generators.rb', line 11

def generator(method_name = nil, &block)
  block = method(method_name) if method_name.is_a?(Symbol)
  local_name = name # pull the name method into a local variable
  builder_priority = self.class.instance_variable_get(:@priority)

  anon_generator = Class.new(Bridgetown::Generator) do
    define_method(:_builder_block) { block }
    define_singleton_method(:custom_name) { local_name }

    attr_reader :site

    priority builder_priority || :low

    def inspect
      "#<#{self.class.custom_name} (Generator)>"
    end

    def generate(_site)
      _builder_block.call
    end
  end

  site.generators << anon_generator.new(site.config)
  site.generators.sort!

  functions << { name:, generator: anon_generator }
end