Merge pull request #3490 from willnorris/ext
always include file extension on destination files
This commit is contained in:
		
						commit
						5d1a24e291
					
				|  | @ -83,13 +83,3 @@ Feature: Fancy permalinks | |||
|     Then the _site directory should exist | ||||
|     And the _site/custom/posts directory should exist | ||||
|     And I should see "bla bla" in "_site/custom/posts/some.html" | ||||
| 
 | ||||
|   Scenario: Use per-post ending in .htm | ||||
|     Given I have a _posts directory | ||||
|     And I have the following post: | ||||
|       | title     | date       | permalink               | content | | ||||
|       | Some post | 2013-04-14 | /custom/posts/some.htm  | bla bla | | ||||
|     When I run jekyll build | ||||
|     Then the _site directory should exist | ||||
|     And the _site/custom/posts directory should exist | ||||
|     And I should see "bla bla" in "_site/custom/posts/some.htm" | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ module Jekyll | |||
|   class Document | ||||
|     include Comparable | ||||
| 
 | ||||
|     attr_reader   :path, :site, :extname | ||||
|     attr_reader   :path, :site, :extname, :output_ext | ||||
|     attr_accessor :content, :collection, :output | ||||
| 
 | ||||
|     YAML_FRONT_MATTER_REGEXP = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m | ||||
|  | @ -19,6 +19,7 @@ module Jekyll | |||
|       @site = relations[:site] | ||||
|       @path = path | ||||
|       @extname = File.extname(path) | ||||
|       @output_ext = Jekyll::Renderer.new(site, self).output_ext | ||||
|       @collection = relations[:collection] | ||||
|       @has_yaml_header = nil | ||||
|     end | ||||
|  | @ -130,7 +131,7 @@ module Jekyll | |||
|       { | ||||
|         collection: collection.label, | ||||
|         path:       cleaned_relative_path, | ||||
|         output_ext: Jekyll::Renderer.new(site, self).output_ext, | ||||
|         output_ext: output_ext, | ||||
|         name:       Utils.slugify(basename_without_ext), | ||||
|         title:      Utils.slugify(data['slug']) || Utils.slugify(basename_without_ext) | ||||
|       } | ||||
|  | @ -164,6 +165,7 @@ module Jekyll | |||
|       dest = site.in_dest_dir(base_directory) | ||||
|       path = site.in_dest_dir(dest, URL.unescape_path(url)) | ||||
|       path = File.join(path, "index.html") if url.end_with?("/") | ||||
|       path << output_ext unless path.end_with?(output_ext) | ||||
|       path | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
|  | @ -142,6 +142,7 @@ module Jekyll | |||
|     def destination(dest) | ||||
|       path = site.in_dest_dir(dest, URL.unescape_path(url)) | ||||
|       path = File.join(path, "index.html") if url.end_with?("/") | ||||
|       path << output_ext unless path.end_with?(output_ext) | ||||
|       path | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
|  | @ -280,6 +280,7 @@ module Jekyll | |||
|       # The url needs to be unescaped in order to preserve the correct filename | ||||
|       path = site.in_dest_dir(dest, URL.unescape_path(url)) | ||||
|       path = File.join(path, "index.html") if self.url.end_with?("/") | ||||
|       path << output_ext unless path.end_with?(output_ext) | ||||
|       path | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| --- | ||||
| layout: ~ | ||||
| title:  Extensionless Permalink | ||||
| permalink: /:title | ||||
| --- | ||||
| 
 | ||||
| {{ page.url }} | ||||
|  | @ -1,6 +1,6 @@ | |||
| --- | ||||
| title: Deal with dots | ||||
| permalink: /deal.with.dots/ | ||||
| permalink: /deal.with.dots | ||||
| --- | ||||
| 
 | ||||
| Let's test if jekyll deals properly with dots. | ||||
|  |  | |||
|  | @ -212,11 +212,16 @@ class TestDocument < JekyllUnitTest | |||
|       }) | ||||
|       @site.process | ||||
|       @document = @site.collections["slides"].docs[0] | ||||
|       @dest_file = dest_dir("slides/test/example-slide-1.html") | ||||
|     end | ||||
| 
 | ||||
|     should "produce the right URL" do | ||||
|       assert_equal "/slides/test/example-slide-1", @document.url | ||||
|     end | ||||
| 
 | ||||
|     should "produce the right destination" do | ||||
|       assert_equal @dest_file, @document.destination(dest_dir) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   context "documents in a collection with custom title permalinks" do | ||||
|  | @ -238,14 +243,26 @@ class TestDocument < JekyllUnitTest | |||
|     should "produce the right URL if they have a slug" do | ||||
|       assert_equal "/slides/so-what-is-jekyll-exactly", @document.url | ||||
|     end | ||||
|     should "produce the right destination file if they have a slug" do | ||||
|       dest_file = dest_dir("slides/so-what-is-jekyll-exactly.html") | ||||
|       assert_equal dest_file, @document.destination(dest_dir) | ||||
|     end | ||||
| 
 | ||||
|     should "produce the right URL if they don't have a slug" do | ||||
|       assert_equal "/slides/example-slide-5", @document_without_slug.url | ||||
|     end | ||||
|     should "produce the right destination file if they don't have a slug" do | ||||
|       dest_file = dest_dir("slides/example-slide-5.html") | ||||
|       assert_equal dest_file, @document_without_slug.destination(dest_dir) | ||||
|     end | ||||
| 
 | ||||
|     should "produce the right URL if they have a wild slug" do | ||||
|       assert_equal "/slides/well-so-what-is-jekyll-then", @document_with_strange_slug.url | ||||
|     end | ||||
|     should "produce the right destination file if they have a wild slug" do | ||||
|       dest_file = dest_dir("/slides/well-so-what-is-jekyll-then.html") | ||||
|       assert_equal dest_file, @document_with_strange_slug.destination(dest_dir) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   context "documents in a collection" do | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ class TestGeneratedSite < JekyllUnitTest | |||
|     end | ||||
| 
 | ||||
|     should "ensure post count is as expected" do | ||||
|       assert_equal 47, @site.posts.size | ||||
|       assert_equal 48, @site.posts.size | ||||
|     end | ||||
| 
 | ||||
|     should "insert site.posts into the index" do | ||||
|  |  | |||
|  | @ -57,7 +57,11 @@ class TestPage < JekyllUnitTest | |||
| 
 | ||||
|       should "deal properly with dots" do | ||||
|         @page = setup_page('deal.with.dots.html') | ||||
|         @dest_file = dest_dir("deal.with.dots.html") | ||||
| 
 | ||||
|         assert_equal "deal.with.dots", @page.basename | ||||
|         assert_equal "/deal.with.dots", @page.url | ||||
|         assert_equal @dest_file, @page.destination(dest_dir) | ||||
|       end | ||||
| 
 | ||||
|       should "make properties accessible through #[]" do | ||||
|  | @ -83,14 +87,18 @@ class TestPage < JekyllUnitTest | |||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context "with pretty url style" do | ||||
|       context "with pretty permalink style" do | ||||
|         setup do | ||||
|           @site.permalink_style = :pretty | ||||
|         end | ||||
| 
 | ||||
|         should "return dir correctly" do | ||||
|         should "return dir, url, and destination correctly" do | ||||
|           @page = setup_page('contacts.html') | ||||
|           @dest_file = dest_dir("contacts/index.html") | ||||
| 
 | ||||
|           assert_equal '/contacts/', @page.dir | ||||
|           assert_equal '/contacts/', @page.url | ||||
|           assert_equal @dest_file, @page.destination(dest_dir) | ||||
|         end | ||||
| 
 | ||||
|         should "return dir correctly for index page" do | ||||
|  | @ -121,7 +129,7 @@ class TestPage < JekyllUnitTest | |||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context "with any other url style" do | ||||
|       context "with any other permalink style" do | ||||
|         should "return dir correctly" do | ||||
|           @site.permalink_style = nil | ||||
|           @page = setup_page('contacts.html') | ||||
|  | @ -179,7 +187,7 @@ class TestPage < JekyllUnitTest | |||
|         page.write(dest_dir) | ||||
| 
 | ||||
|         assert File.directory?(dest_dir) | ||||
|         assert File.exist?(File.join(dest_dir, '+', 'plus+in+url')) | ||||
|         assert File.exist?(File.join(dest_dir, '+', 'plus+in+url.html')) | ||||
|       end | ||||
| 
 | ||||
|       should "write even when permalink has '%# +'" do | ||||
|  |  | |||
|  | @ -659,6 +659,26 @@ class TestPost < JekyllUnitTest | |||
|           assert File.exist?(File.join(dest_dir, 'foo-bar', 'index.html')) | ||||
|         end | ||||
| 
 | ||||
|         should "write properly with extensionless site permalink" do | ||||
|           post = setup_post("2008-10-18-foo-bar.markdown") | ||||
|           post.site.permalink_style = ":title" | ||||
|           do_render(post) | ||||
|           post.write(dest_dir) | ||||
| 
 | ||||
|           assert File.directory?(dest_dir) | ||||
|           assert File.exist?(File.join(dest_dir, 'foo-bar.html')) | ||||
|         end | ||||
| 
 | ||||
|         should "write properly with extensionless post permalink" do | ||||
|           post = setup_post("2015-02-20-extensionless-permalink.markdown") | ||||
|           do_render(post) | ||||
|           post.write(dest_dir) | ||||
| 
 | ||||
|           assert File.directory?(dest_dir) | ||||
|           assert File.exist?(File.join(dest_dir, 'extensionless-permalink.html')) | ||||
|           assert_equal "<p>/extensionless-permalink</p>\n", post.content | ||||
|         end | ||||
| 
 | ||||
|         should "insert data" do | ||||
|           post = setup_post("2008-11-21-complex.markdown") | ||||
|           do_render(post) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue