class Middleman::SitemapXmlGenerator::Extension

Constants

TEMPLATES_DIR

Public Class Methods

new(app, options_hash={}, &block) click to toggle source
Calls superclass method
# File lib/middleman-sitemap-xml-generator/extension.rb, line 18
def initialize(app, options_hash={}, &block)
  super

  require 'builder'
end

Public Instance Methods

after_configuration() click to toggle source

Hooks

# File lib/middleman-sitemap-xml-generator/extension.rb, line 32
def after_configuration
  register_extension_templates
  prepare_extra_ext_opt
  prepare_discard_ext_opt
  watch_vendor_directory
end
manipulate_resource_list(resources) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 39
def manipulate_resource_list(resources)
  resources << sitemap_resource
end
process_changefreq(path) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 52
def process_changefreq(path)
  default = options.default_changefreq
  options.process_changefreq ? options.process_changefreq.call(path, default) : default
end
process_priority(path) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 57
def process_priority(path)
  default = options.default_priority
  options.process_priority ? options.process_priority.call(path, default) : default
end
process_url(path) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 62
def process_url(path)
  path = process_extension path
  options.process_url ? options.process_url.call(path) : path
end
resource_in_sitemap?(resource) click to toggle source

Helpers

# File lib/middleman-sitemap-xml-generator/extension.rb, line 48
def resource_in_sitemap?(resource)
  is_page?(resource) && not_excluded?(resource)
end
resources_for_sitemap() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 68
def resources_for_sitemap
  sitemap.resources.select do |resource|
    extensions[:sitemap_xml_generator].resource_in_sitemap?(resource)
  end
end

Private Instance Methods

allowed_ext?(resource) click to toggle source

Internals

# File lib/middleman-sitemap-xml-generator/extension.rb, line 82
def allowed_ext?(resource)
  options.extra_ext.include? File.extname(resource.path)
end
filter_valid_extension(value) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 86
def filter_valid_extension(value)
  [value].flatten.select { |ext| ext.match /^\.[^.]+/ }
end
generate_processor(method_name) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 90
def generate_processor(method_name)
  self.class.instance_method(method_name.to_sym).bind(self)
end
is_page?(resource) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 94
def is_page?(resource)
  resource.path.end_with?(page_ext) || allowed_ext?(resource)
end
not_excluded?(resource) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 98
def not_excluded?(resource)
  !resource.ignored? \
    && !resource.data[options.exclude_attr] && !options.exclude_if.call(resource)
end
page_ext() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 103
def page_ext
  File.extname(app.index_file)
end
prepare_discard_ext_opt() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 111
def prepare_discard_ext_opt
  options.discard_ext = filter_valid_extension options.discard_ext
end
prepare_extra_ext_opt() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 107
def prepare_extra_ext_opt
  options.extra_ext = filter_valid_extension options.extra_ext
end
process_extension(path) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 115
def process_extension(path)
  target_ext = File.extname path
  if options.discard_ext.include?(target_ext)
    path = File.join(File.dirname(path), File.basename(path, target_ext))
  end
  path
end
register_extension_templates() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 123
def register_extension_templates
  # We call reload_path to register the templates directory with Middleman.
  # The path given to app.files must be relative to the Middleman site's root.
  templates_dir_relative_from_root = \
    Pathname(TEMPLATES_DIR).relative_path_from(Pathname(app.root))
  app.files.reload_path(templates_dir_relative_from_root)
end
sitemap_locals() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 131
def sitemap_locals
  {
    url_proc: generate_processor(:process_url),
    changefreq_proc: generate_processor(:process_changefreq),
    priority_proc: generate_processor(:process_priority)
  }
end
sitemap_resource() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 139
def sitemap_resource
  source_file = template('sitemap.xml.builder')

  ::Middleman::Sitemap::Resource.new(app.sitemap, sitemap_xml_path, source_file).tap do |res|
    res.add_metadata(options: { layout: false }, locals: sitemap_locals)
  end
end
sitemap_xml_path() click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 147
def sitemap_xml_path
  options.sitemap_xml_path
end
template(path) click to toggle source
# File lib/middleman-sitemap-xml-generator/extension.rb, line 151
def template(path)
  full_path = File.join(TEMPLATES_DIR, path)
  raise "Template #{full_path} not found" if !File.exist?(full_path)
  full_path
end
watch_vendor_directory() click to toggle source

Workaround for the template reference issue. See below:

https://github.com/Aupajo/middleman-search_engine_sitemap/issues/5
https://github.com/Aupajo/middleman-search_engine_sitemap/issues/2#issuecomment-46701165
# File lib/middleman-sitemap-xml-generator/extension.rb, line 160
def watch_vendor_directory
  app.config[:file_watcher_ignore] = (app.config[:file_watcher_ignore].reject do |regexp|
    regexp == /^vendor(\/|$)/
  end)
end