Module: Bridgetown::Site::Renderable
- Included in:
- Bridgetown::Site
- Defined in:
- bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb
Instance Method Summary collapse
-
#build_locale_index ⇒ void
Builds a lookup index grouping resources by their locale-independent identity (collection + slug + localeless path).
-
#execute_inline_ruby_for_layouts! ⇒ void
Executes procs in Ruby frontmatter.
-
#matched_converters_for_convertible(convertible) ⇒ Object
rubocop:todo Metrics.
-
#render ⇒ void
Render all pages & documents so they’re ready to be written out to disk.
-
#render_resources ⇒ void
Renders all resources.
-
#render_with_locale(item) { ... } ⇒ void
Renders a content item while ensuring site locale is set if the data is available.
-
#validated_layouts_for(convertible, layout_name) ⇒ Array<Bridgetown::Layout>
-
#warn_on_missing_layout(convertible, layout, layout_name) ⇒ Object
Instance Method Details
#build_locale_index ⇒ void
This method returns an undefined value.
Builds a lookup index grouping resources by their locale-independent identity
(collection + slug + localeless path). This turns all_locales from an O(n)
linear scan into an O(1) hash lookup per resource, which is critical for sites
with many localized pages.
107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 107 def build_locale_index groups = Hash.new { |h, k| h[k] = [] } collections.each_value.flat_map(&:resources).concat(generated_pages).each do |item| key = item.locale_index_key groups[key] << item if key end locale_order = config.available_locales tmp_cache[:locale_index] = groups.transform_values do |items| Bridgetown::Localizable.sort_by_locale(items, locale_order).freeze end.freeze end |
#execute_inline_ruby_for_layouts! ⇒ void
This method returns an undefined value.
Executes procs in Ruby frontmatter
23 24 25 26 27 28 29 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 23 def execute_inline_ruby_for_layouts! return unless config.should_execute_inline_ruby? layouts.each_value do |layout| Bridgetown::Utils::RubyExec.search_data_for_ruby_code(layout) end end |
#matched_converters_for_convertible(convertible) ⇒ Object
rubocop:todo Metrics
31 32 33 34 35 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 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 31 def matched_converters_for_convertible(convertible) # rubocop:todo Metrics @layout_converters ||= {} if convertible.is_a?(Bridgetown::Layout) && @layout_converters[convertible] return @layout_converters[convertible] end if convertible.is_a?(Bridgetown::GeneratedPage) && convertible.original_resource convertible = convertible.original_resource end directly_matched_template_engine = nil matches = converters.map do |converter| result = [ converter, converter.matches(convertible.extname, convertible), converter.determine_template_engine(convertible), ] directly_matched_template_engine = converter if result[1] && converter.class.template_engine result end matches = matches.filter_map do |result| converter, ext_matched, engine_matched = result next nil if !ext_matched && !engine_matched next nil if !ext_matched && engine_matched && directly_matched_template_engine && converter != directly_matched_template_engine if !convertible.data["template_engine"] && engine_matched convertible.data["template_engine"] = converter.class.template_engine end converter end @layout_converters[convertible] = matches if convertible.is_a?(Bridgetown::Layout) matches end |
#render ⇒ void
This method returns an undefined value.
Render all pages & documents so they’re ready to be written out to disk.
10 11 12 13 14 15 16 17 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 10 def render Bridgetown::Hooks.trigger :site, :pre_render, self build_locale_index execute_inline_ruby_for_layouts! render_resources generated_pages.each(&:transform!) Bridgetown::Hooks.trigger :site, :post_render, self end |
#render_resources ⇒ void
This method returns an undefined value.
Renders all resources
124 125 126 127 128 129 130 131 132 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 124 def render_resources collections.each_value do |collection| collection.resources.each do |resource| render_with_locale(resource) do resource.transform! end end end end |
#render_with_locale(item) { ... } ⇒ void
This method returns an undefined value.
Renders a content item while ensuring site locale is set if the data is available.
139 140 141 142 143 144 145 146 147 148 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 139 def render_with_locale(item) if item.data["locale"] previous_locale = locale self.locale = item.data["locale"] yield self.locale = previous_locale else yield end end |
#validated_layouts_for(convertible, layout_name) ⇒ Array<Bridgetown::Layout>
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 76 def validated_layouts_for(convertible, layout_name) layout = layouts[layout_name] warn_on_missing_layout convertible, layout, layout_name layout_list = Set.new([layout]) while layout layout_name = layout.data.layout layout = layouts[layout_name] warn_on_missing_layout convertible, layout, layout_name layout_list << layout end layout_list.to_a.compact end |
#warn_on_missing_layout(convertible, layout, layout_name) ⇒ Object
92 93 94 95 96 97 98 99 |
# File 'bridgetown-core/lib/bridgetown-core/concerns/site/renderable.rb', line 92 def warn_on_missing_layout(convertible, layout, layout_name) return unless layout.nil? && layout_name Bridgetown.logger.warn( "Build Warning:", "Layout '#{layout_name}' requested via #{convertible.relative_path} does not exist." ) end |