Class: Jekyll::Plugins::PaginateV3::Templates::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-paginate-v3/templates/builder/core.rb,
lib/jekyll-paginate-v3/templates/builder/index_entries.rb,
lib/jekyll-paginate-v3/templates/builder/token_metadata.rb,
lib/jekyll-paginate-v3/templates/builder/definition_normalisation.rb

Overview

Generated-template definition normalisation helpers for Builder. Structure: each generate definition is reduced to:

  • pagination config copied onto the generated template
  • generate-only controls for template object creation (frontmatter and content).

Constant Summary collapse

SPECIAL_KEYS =
%w[frontmatter content].freeze

Instance Method Summary collapse

Constructor Details

#initialize(site:, site_config:, add_item_lambda:, resolve_items_lambda:, log_lambda:) ⇒ Builder

Returns a new instance of Builder.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/jekyll-paginate-v3/templates/builder/core.rb', line 17

def initialize(site:, site_config:, add_item_lambda:, resolve_items_lambda:, log_lambda:)
	@site = site
	@site_config = site_config
	@add_item_lambda = add_item_lambda
	@resolve_items_lambda = resolve_items_lambda
	@log_lambda = log_lambda
	@nested_separator = site_config.dig('syntax', 'separator')
	@split_delimiter = site_config.dig('syntax', 'split')
	@equivalents = site_config['equivalents']
	@frontmatter_path = Jekyll::Plugins::PaginateV3::Support::FrontmatterPath.new(
		separator: @nested_separator,
		arrays: :expand,
		equivalents: @equivalents
	)
	@string_array = Jekyll::Plugins::PaginateV3::Support::StringArray.new(delimiter: @split_delimiter)
	@compatibility_mode = site_config['compatibility']
end

Instance Method Details

#buildObject

Builds all configured generated pagination templates.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/jekyll-paginate-v3/templates/builder/core.rb', line 36

def build
	generate_definitions = @site_config.dig('templates', 'generate')
	return empty_build_report unless generate_definitions.is_a?(Array)

	@log_lambda.call("Generating templates from #{generate_definitions.length} definition(s).", 'debug')
	default_collection = default_generation_collection
	@log_lambda.call("Default generated template collection target resolved to '#{default_collection.join(',')}'.", 'debug')
	build_report = {
		'total' => 0,
		'entries' => []
	}

	generate_definitions.each_with_index do |raw_definition, definition_index|
		entry_number = definition_index + 1
		default_entry_collection = normalise_collection(Utils.safe_hash(raw_definition)['collection'], default_collection)
		definition = normalise_definition(raw_definition, default_collection)
		if definition.nil?
			build_report['entries'] << {
				'number' => entry_number,
				'collection' => default_entry_collection,
				'created' => 0,
				'valid' => false
			}
			next
		end

		@log_lambda.call("Processing generate definition #{entry_number}: collection=#{definition['template_collection'].join(',')} pagination_keys=#{definition['pagination'].keys.sort.join(',')}", 'debug')
		created_template = build_template(definition)
		created = 0
		unless created_template.nil?
			@add_item_lambda.call(created_template)
			created = 1
		end
		build_report['entries'] << {
			'number' => entry_number,
			'collection' => definition['template_collection'],
			'created' => created,
			'valid' => true
		}
		build_report['total'] += created
	end

	@log_lambda.call("Generated #{build_report['total']} template object(s) in total.", 'debug')
	build_report
end