Merge pull request #957 from mojombo/timezonify
Set Timezone in _config.yml
This commit is contained in:
		
						commit
						afa3ef90b9
					
				| 
						 | 
					@ -116,6 +116,46 @@ Feature: Site configuration
 | 
				
			||||||
    And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
 | 
					    And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
 | 
				
			||||||
    And I should see "Post Layout: <p>content for entry2.</p>" in "_site/2020/01/31/entry2.html"
 | 
					    And I should see "Post Layout: <p>content for entry2.</p>" in "_site/2020/01/31/entry2.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Scenario: Generate proper dates with explicitly set timezone (same as posts' time)
 | 
				
			||||||
 | 
					      Given I have a _layouts directory
 | 
				
			||||||
 | 
					      And I have a page layout that contains "Page Layout: {{ site.posts.size }}"
 | 
				
			||||||
 | 
					      And I have a post layout that contains "Post Layout: {{ content }} built at {{ page.date | date_to_xmlschema }}"
 | 
				
			||||||
 | 
					      And I have an "index.html" page with layout "page" that contains "site index page"
 | 
				
			||||||
 | 
					      And I have a configuration file with:
 | 
				
			||||||
 | 
					        | key         | value            |
 | 
				
			||||||
 | 
					        | timezone    | America/New_York |
 | 
				
			||||||
 | 
					      And I have a _posts directory
 | 
				
			||||||
 | 
					      And I have the following posts:
 | 
				
			||||||
 | 
					        | title     | date                   | layout  | content             |
 | 
				
			||||||
 | 
					        | entry1    | 2013-04-09 23:22 -0400 | post    | content for entry1. |
 | 
				
			||||||
 | 
					        | entry2    | 2013-04-10 03:14 -0400 | post    | content for entry2. |
 | 
				
			||||||
 | 
					      When I run jekyll
 | 
				
			||||||
 | 
					      Then the _site directory should exist
 | 
				
			||||||
 | 
					      And I should see "Page Layout: 2" in "_site/index.html"
 | 
				
			||||||
 | 
					      And I should see "Post Layout: <p>content for entry1.</p> built at 2013-04-09T23:22:00-04:00" in "_site/2013/04/09/entry1.html"
 | 
				
			||||||
 | 
					      And I should see "Post Layout: <p>content for entry2.</p> built at 2013-04-10T03:14:00-04:00" in "_site/2013/04/10/entry2.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Scenario: Generate proper dates with explicitly set timezone (different than posts' time)
 | 
				
			||||||
 | 
					      Given I have a _layouts directory
 | 
				
			||||||
 | 
					      And I have a page layout that contains "Page Layout: {{ site.posts.size }}"
 | 
				
			||||||
 | 
					      And I have a post layout that contains "Post Layout: {{ content }} built at {{ page.date | date_to_xmlschema }}"
 | 
				
			||||||
 | 
					      And I have an "index.html" page with layout "page" that contains "site index page"
 | 
				
			||||||
 | 
					      And I have a configuration file with:
 | 
				
			||||||
 | 
					        | key         | value               |
 | 
				
			||||||
 | 
					        | timezone    | Australia/Melbourne |
 | 
				
			||||||
 | 
					      And I have a _posts directory
 | 
				
			||||||
 | 
					      And I have the following posts:
 | 
				
			||||||
 | 
					        | title     | date                   | layout  | content             |
 | 
				
			||||||
 | 
					        | entry1    | 2013-04-09 23:22 -0400 | post    | content for entry1. |
 | 
				
			||||||
 | 
					        | entry2    | 2013-04-10 03:14 -0400 | post    | content for entry2. |
 | 
				
			||||||
 | 
					      When I run jekyll
 | 
				
			||||||
 | 
					      Then the _site directory should exist
 | 
				
			||||||
 | 
					      And I should see "Page Layout: 2" in "_site/index.html"
 | 
				
			||||||
 | 
					      And the "_site/2013/04/10/entry1.html" file should exist
 | 
				
			||||||
 | 
					      And the "_site/2013/04/10/entry2.html" file should exist
 | 
				
			||||||
 | 
					      And I should see escaped "Post Layout: <p>content for entry1.</p> built at 2013-04-10T13:22:00+10:00" in "_site/2013/04/10/entry1.html"
 | 
				
			||||||
 | 
					      And I should see escaped "Post Layout: <p>content for entry2.</p> built at 2013-04-10T17:14:00+10:00" in "_site/2013/04/10/entry2.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Scenario: Limit the number of posts generated by most recent date
 | 
					  Scenario: Limit the number of posts generated by most recent date
 | 
				
			||||||
    Given I have a _posts directory
 | 
					    Given I have a _posts directory
 | 
				
			||||||
    And I have a configuration file with:
 | 
					    And I have a configuration file with:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
Before do
 | 
					Before do
 | 
				
			||||||
 | 
					  FileUtils.rm_rf(TEST_DIR)
 | 
				
			||||||
  FileUtils.mkdir(TEST_DIR)
 | 
					  FileUtils.mkdir(TEST_DIR)
 | 
				
			||||||
  Dir.chdir(TEST_DIR)
 | 
					  Dir.chdir(TEST_DIR)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -61,7 +62,14 @@ Given /^I have the following (draft|post)s?(?: (.*) "(.*)")?:$/ do |status, dire
 | 
				
			||||||
    if "draft" == status
 | 
					    if "draft" == status
 | 
				
			||||||
      path = File.join(before || '.', '_drafts', after || '.', "#{title}.#{ext}")
 | 
					      path = File.join(before || '.', '_drafts', after || '.', "#{title}.#{ext}")
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      date = Date.strptime(post['date'], '%m/%d/%Y').strftime('%Y-%m-%d')
 | 
					      format = if has_time_component?(post['date'])
 | 
				
			||||||
 | 
					        '%Y-%m-%d %H:%M %z'
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        '%m/%d/%Y' # why even
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      parsed_date = DateTime.strptime(post['date'], format)
 | 
				
			||||||
 | 
					      post['date'] = parsed_date.to_s
 | 
				
			||||||
 | 
					      date = parsed_date.strftime('%Y-%m-%d')
 | 
				
			||||||
      path = File.join(before || '.', '_posts', after || '.', "#{date}-#{title}.#{ext}")
 | 
					      path = File.join(before || '.', '_posts', after || '.', "#{date}-#{title}.#{ext}")
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,6 +77,9 @@ Given /^I have the following (draft|post)s?(?: (.*) "(.*)")?:$/ do |status, dire
 | 
				
			||||||
    %w(title layout tag tags category categories published author path).each do |key|
 | 
					    %w(title layout tag tags category categories published author path).each do |key|
 | 
				
			||||||
      matter_hash[key] = post[key] if post[key]
 | 
					      matter_hash[key] = post[key] if post[key]
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    if "post" == status
 | 
				
			||||||
 | 
					      matter_hash["date"] = post["date"] if post["date"]
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
    matter = matter_hash.map { |k, v| "#{k}: #{v}\n" }.join.chomp
 | 
					    matter = matter_hash.map { |k, v| "#{k}: #{v}\n" }.join.chomp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    content = post['content']
 | 
					    content = post['content']
 | 
				
			||||||
| 
						 | 
					@ -134,7 +145,11 @@ Then /^the (.*) directory should exist$/ do |dir|
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Then /^I should see "(.*)" in "(.*)"$/ do |text, file|
 | 
					Then /^I should see "(.*)" in "(.*)"$/ do |text, file|
 | 
				
			||||||
  assert_match Regexp.new(text), File.open(file).readlines.join
 | 
					  assert Regexp.new(text).match(File.open(file).readlines.join)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then /^I should see escaped "(.*)" in "(.*)"$/ do |text, file|
 | 
				
			||||||
 | 
					  assert Regexp.new(Regexp.escape(text)).match(File.open(file).readlines.join)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Then /^the "(.*)" file should exist$/ do |file|
 | 
					Then /^the "(.*)" file should exist$/ do |file|
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ World do
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_DIR    = File.join('/', 'tmp', 'jekyll')
 | 
					TEST_DIR    = File.join('/', 'tmp', 'jekyll')
 | 
				
			||||||
JEKYLL_PATH = File.join(ENV['PWD'], 'bin', 'jekyll')
 | 
					JEKYLL_PATH = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'jekyll')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def run_jekyll(opts = {})
 | 
					def run_jekyll(opts = {})
 | 
				
			||||||
  command = JEKYLL_PATH.clone
 | 
					  command = JEKYLL_PATH.clone
 | 
				
			||||||
| 
						 | 
					@ -17,5 +17,9 @@ def run_jekyll(opts = {})
 | 
				
			||||||
  system command
 | 
					  system command
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def has_time_component?(date_string)
 | 
				
			||||||
 | 
					  date_string.split(" ").size > 1
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# work around "invalid option: --format" cucumber bug (see #296)
 | 
					# work around "invalid option: --format" cucumber bug (see #296)
 | 
				
			||||||
Test::Unit.run = true if RUBY_VERSION < '1.9'
 | 
					Test::Unit.run = true if RUBY_VERSION < '1.9'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,6 +73,18 @@ module Jekyll
 | 
				
			||||||
    config = config.read_config_files(config.config_files(override))
 | 
					    config = config.read_config_files(config.config_files(override))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Merge DEFAULTS < _config.yml < override
 | 
					    # Merge DEFAULTS < _config.yml < override
 | 
				
			||||||
    config.deep_merge(override).stringify_keys
 | 
					    config = config.deep_merge(override).stringify_keys
 | 
				
			||||||
 | 
					    set_timezone(config['timezone']) if config['timezone']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    config
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Static: Set the TZ environment variable to use the timezone specified
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # timezone - the IANA Time Zone
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # Returns nothing
 | 
				
			||||||
 | 
					  def self.set_timezone(timezone)
 | 
				
			||||||
 | 
					    ENV['TZ'] = timezone
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,8 @@ module Jekyll
 | 
				
			||||||
      'layouts'       => '_layouts',
 | 
					      'layouts'       => '_layouts',
 | 
				
			||||||
      'keep_files'    => ['.git','.svn'],
 | 
					      'keep_files'    => ['.git','.svn'],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      'timezone'      => nil,           # use the local timezone
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      'safe'          => false,
 | 
					      'safe'          => false,
 | 
				
			||||||
      'show_drafts'   => nil,
 | 
					      'show_drafts'   => nil,
 | 
				
			||||||
      'limit_posts'   => nil,
 | 
					      'limit_posts'   => nil,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,6 +81,22 @@ class="flag">flags</code> (specified on the command-line) that control them.
 | 
				
			||||||
        <p><code class="option">include: [DIR, FILE, ...]</code></p>
 | 
					        <p><code class="option">include: [DIR, FILE, ...]</code></p>
 | 
				
			||||||
      </td>
 | 
					      </td>
 | 
				
			||||||
    </tr>
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <tr class='setting'>
 | 
				
			||||||
 | 
					      <td>
 | 
				
			||||||
 | 
					        <p class='name'><strong>Time Zone</strong></p>
 | 
				
			||||||
 | 
					        <p class="description">
 | 
				
			||||||
 | 
					            Set the time zone for site generation. This sets the <code>TZ</code>
 | 
				
			||||||
 | 
					            environment variable, which Ruby uses to handle time and date
 | 
				
			||||||
 | 
					            creation and manipulation. Any entry from the
 | 
				
			||||||
 | 
					            <a href="http://en.wikipedia.org/wiki/Tz_database">IANA Time Zone
 | 
				
			||||||
 | 
					            Database</a> is valid, e.g. <code>America/New_York</code>. The default
 | 
				
			||||||
 | 
					            is the local time zone, as set by your operating system.
 | 
				
			||||||
 | 
					        </p>
 | 
				
			||||||
 | 
					      </td>
 | 
				
			||||||
 | 
					      <td class='align-center'>
 | 
				
			||||||
 | 
					        <p><code class="option">timezone: TIMEZONE</code></p>
 | 
				
			||||||
 | 
					      </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
  </tbody>
 | 
					  </tbody>
 | 
				
			||||||
</table>
 | 
					</table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue