module Middleman::Sitemap::Extensions::Traversal

Public Instance Methods

children() click to toggle source

This resource’s child resources @return [Array<Middleman::Sitemap::Resource>]

# File lib/middleman-core/sitemap/extensions/traversal.rb, line 45
def children
  return [] unless directory_index?

  base_path = if eponymous_directory?
    eponymous_directory_path
  else
    path.sub(@app.config[:index_file].to_s, '')
  end

  prefix = %r{^#{base_path.sub("/", "\\/")}}

  @store.resources.select do |sub_resource|
    if sub_resource.path == path || sub_resource.path !~ prefix
      false
    else
      inner_path = sub_resource.path.sub(prefix, '')
      parts = inner_path.split('/')
      if parts.length == 1
        true
      elsif parts.length == 2
        parts.last == @app.config[:index_file]
      else
        false
      end
    end
  end
end
directory_index?() click to toggle source

Whether this resource is either a directory index, or has the same name as an existing directory in the source @return [Boolean]

# File lib/middleman-core/sitemap/extensions/traversal.rb, line 82
def directory_index?
  path.include?(@app.config[:index_file]) || path =~ /\/$/ || eponymous_directory?
end
eponymous_directory?() click to toggle source

Whether the resource has the same name as a directory in the source (e.g., if the resource is named ‘gallery.html’ and a path exists named ‘gallery/’, this would return true) @return [Boolean]

# File lib/middleman-core/sitemap/extensions/traversal.rb, line 89
def eponymous_directory?
  if !path.end_with?("/#{@app.config[:index_file]}") && destination_path.end_with?("/#{@app.config[:index_file]}")
    return true
  end

  @app.files.by_type(:source).watchers.any? do |source|
    (source.directory + Pathname(eponymous_directory_path)).directory?
  end
end
eponymous_directory_path() click to toggle source

The path for this resource if it were a directory, and not a file (e.g., for ‘gallery.html’ this would return ‘gallery/’) @return [String]

# File lib/middleman-core/sitemap/extensions/traversal.rb, line 102
def eponymous_directory_path
  path.sub(ext, '/').sub(/\/$/, '') + '/'
end
parent() click to toggle source

This resource’s parent resource @return [Middleman::Sitemap::Resource, nil]

# File lib/middleman-core/sitemap/extensions/traversal.rb, line 17
def parent
  root = path.sub(/^#{::Regexp.escape(traversal_root)}/, '')
  parts = root.split('/')

  tail = parts.pop
  is_index = (tail == @app.config[:index_file])

  if parts.empty?
    return is_index ? nil : @store.find_resource_by_path(@app.config[:index_file])
  end

  test_expr = parts.join('\\/')
  test_expr = %r{^#{test_expr}(?:\.[a-zA-Z0-9]+|\/)$}
  # eponymous reverse-lookup
  found = @store.resources.find do |candidate|
    candidate.path =~ test_expr
  end

  if found
    found
  else
    parts.pop if is_index
    @store.find_resource_by_destination_path("#{parts.join('/')}/#{@app.config[:index_file]}")
  end
end
siblings() click to toggle source

This resource’s sibling resources @return [Array<Middleman::Sitemap::Resource>]

# File lib/middleman-core/sitemap/extensions/traversal.rb, line 75
def siblings
  return [] unless parent
  parent.children.reject { |p| p == self }
end
traversal_root() click to toggle source
# File lib/middleman-core/sitemap/extensions/traversal.rb, line 5
def traversal_root
  root = if !@app.extensions[:i18n]
    '/'
  else
    @app.extensions[:i18n].path_root(::I18n.locale)
  end

  root.sub(/^\//, '')
end