Skip to content

Commit

Permalink
Fix timezone incosistencies between different ruby version (#6697)
Browse files Browse the repository at this point in the history
Merge pull request 6697
  • Loading branch information
Crunch09 authored and jekyllbot committed Jan 25, 2018
1 parent c9d2da8 commit cf5c689
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 6 deletions.
10 changes: 5 additions & 5 deletions features/permalinks.feature
Expand Up @@ -71,14 +71,14 @@ Feature: Fancy permalinks
And I should see "Totally custom." in "_site/03-27-2009/custom-permalink-schema.html"

Scenario: Use custom permalink schema with date and time
Given I have a _posts directory
Given I have a configuration file with:
| key | value |
| permalink | "/:year:month:day:hour:minute:second.html" |
| timezone | UTC |
And I have a _posts directory
And I have the following post:
| title | category | date | content |
| Custom Permalink Schema | stuff | 2009-03-27 22:31:07 | Totally custom. |
And I have a configuration file with:
| key | value |
| permalink | "/:year:month:day:hour:minute:second.html" |
| timezone | UTC |
When I run jekyll build
Then I should get a zero exit status
And the _site directory should exist
Expand Down
4 changes: 4 additions & 0 deletions features/step_definitions.rb
Expand Up @@ -4,6 +4,7 @@
FileUtils.rm_rf(Paths.test_dir) if Paths.test_dir.exist?
FileUtils.mkdir_p(Paths.test_dir) unless Paths.test_dir.directory?
Dir.chdir(Paths.test_dir)
@timezone_before_scenario = ENV["TZ"]
end

#
Expand All @@ -13,6 +14,7 @@
Paths.output_file.delete if Paths.output_file.exist?
Paths.status_file.delete if Paths.status_file.exist?
Dir.chdir(Paths.test_dir.parent)
ENV["TZ"] = @timezone_before_scenario
end

#
Expand Down Expand Up @@ -85,6 +87,7 @@

if status == "post"
parsed_date = Time.xmlschema(input_hash["date"]) rescue Time.parse(input_hash["date"])
input_hash["date"] = parsed_date
filename = "#{parsed_date.strftime("%Y-%m-%d")}-#{title}.#{ext}"
end

Expand Down Expand Up @@ -116,6 +119,7 @@
{}
end
config[key] = YAML.load(value)
Jekyll.set_timezone(value) if key == "timezone"
File.write("_config.yml", YAML.dump(config))
end

Expand Down
2 changes: 1 addition & 1 deletion lib/jekyll/document.rb
Expand Up @@ -426,7 +426,7 @@ def merge_categories!(other)

private
def merge_date!(source)
if data.key?("date") && !data["date"].is_a?(Time)
if data.key?("date")
data["date"] = Utils.parse_date(
data["date"].to_s,
"Document '#{relative_path}' does not have a valid date in the #{source}."
Expand Down
4 changes: 4 additions & 0 deletions test/source/_dates/date_without_time.md
@@ -0,0 +1,4 @@
---
date: 2015-10-01
---
Here is the content.
4 changes: 4 additions & 0 deletions test/source/_dates/time_with_timezone.md
@@ -0,0 +1,4 @@
---
date: 2015-10-01 01:00:00 +0800
---
Here is the content.
4 changes: 4 additions & 0 deletions test/source/_dates/time_without_timezone.md
@@ -0,0 +1,4 @@
---
date: 2015-10-01 01:00:00
---
Here is the content.
43 changes: 43 additions & 0 deletions test/test_document.rb
Expand Up @@ -16,6 +16,19 @@ def setup_encoded_document(filename)
}).tap(&:read)
end

def setup_document_with_dates(filename)
site = fixture_site("collections" => ["dates"])
site.process
docs = nil
with_env("TZ", "UTC") do
docs = Document.new(site.in_source_dir(File.join("_dates", filename)), {
:site => site,
:collection => site.collections["dates"],
}).tap(&:read)
end
docs
end

context "a document in a collection" do
setup do
@site = fixture_site({
Expand Down Expand Up @@ -558,4 +571,34 @@ def setup_encoded_document(filename)
Jekyll::Renderer.new(@document.site, @document).render_document
end
end

context "a document with a date with timezone" do
setup do
@document = setup_document_with_dates "time_with_timezone.md"
end

should "have the expected date" do
assert_equal "2015/09/30", @document.data["date"].strftime("%Y/%m/%d")
end
end

context "a document with a date with time but without timezone" do
setup do
@document = setup_document_with_dates "time_without_timezone.md"
end

should "have the expected date" do
assert_equal "2015/10/01", @document.data["date"].strftime("%Y/%m/%d")
end
end

context "a document with a date without time" do
setup do
@document = setup_document_with_dates "date_without_time.md"
end

should "have the expected date" do
assert_equal "2015/10/01", @document.data["date"].strftime("%Y/%m/%d")
end
end
end

0 comments on commit cf5c689

Please sign in to comment.