middleman/middleman-core/lib/middleman-core/sitemap/extensions/import.rb

64 lines
2.0 KiB
Ruby

require 'set'
require 'middleman-core/contracts'
module Middleman
module Sitemap
module Extensions
class Import < ConfigExtension
self.resource_list_manipulator_priority = 1
# Expose methods
expose_to_config :import_file, :import_path
ImportFileDescriptor = Struct.new(:from, :to) do
def execute_descriptor(app, resources)
resources + [
::Middleman::Sitemap::Resource.new(app.sitemap, to, from)
]
end
end
ImportPathDescriptor = Struct.new(:from, :renameProc) do
def execute_descriptor(app, resources)
resources + ::Middleman::Util.glob_directory(File.join(from, '**/*'))
.reject { |path| File.directory?(path) }
.map do |path|
target_path = Pathname(path).relative_path_from(Pathname(from).parent).to_s
::Middleman::Sitemap::Resource.new(
app.sitemap,
renameProc.call(target_path, path),
path
)
end
end
end
# Import an external file into `source`
# @param [String] from The original path.
# @param [String] to The new path.
# @return [void]
Contract String, String => ImportFileDescriptor
def import_file(from, to)
ImportFileDescriptor.new(
File.expand_path(from, @app.root),
::Middleman::Util.normalize_path(to)
)
end
# Import an external glob into `source`
# @param [String] from The original path.
# @param [Proc] block Renaming method
# @return [void]
Contract String, Maybe[Proc] => ImportPathDescriptor
def import_path(from, &block)
ImportPathDescriptor.new(
from,
block_given? ? block : proc { |path| path }
)
end
end
end
end
end