diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb index 891610fa..db471c32 100644 --- a/lib/jekyll/document.rb +++ b/lib/jekyll/document.rb @@ -45,6 +45,15 @@ module Jekyll File.basename(path, suffix) end + # The sluggified base filename of the document. + # + # Returns the base filename of the document in lowercase, with every + # sequence of spaces and non-alphanumeric characters replaced with a + # hyphen. + def slug + File.basename(path, ".*").downcase.gsub(/[\W\s]+/, '-') + end + # The extension name of the document. # # Returns the extension name of the document. @@ -128,7 +137,8 @@ module Jekyll { collection: collection.label, path: cleaned_relative_path, - output_ext: Jekyll::Renderer.new(site, self).output_ext + output_ext: Jekyll::Renderer.new(site, self).output_ext, + name: slug } end diff --git a/test/test_document.rb b/test/test_document.rb index b352a050..68ca8d92 100644 --- a/test/test_document.rb +++ b/test/test_document.rb @@ -186,6 +186,26 @@ class TestDocument < Test::Unit::TestCase end end + context "a document in a collection with custom permalinks" do + setup do + @site = Site.new(Jekyll.configuration({ + "collections" => { + "slides" => { + "output" => true, + "permalink" => "/slides/test/:name" + } + }, + "source" => source_dir, + "destination" => dest_dir + })) + @site.process + @document = @site.collections["slides"].docs[0] + end + + should "produce the right URL" do + assert_equal "/slides/test/example-slide-1", @document.url + end + end context "a static file in a collection" do setup do