From 6936bbded8171d0a42be875e61ed40bfd080e297 Mon Sep 17 00:00:00 2001 From: John Piasetzki Date: Sat, 18 May 2013 00:24:14 -0400 Subject: [PATCH 1/3] Changed the jekyll steps to write only the date and time for tests. This avoids timezone issues. --- features/step_definitions/jekyll_steps.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/step_definitions/jekyll_steps.rb b/features/step_definitions/jekyll_steps.rb index 75330738..b818d2a1 100644 --- a/features/step_definitions/jekyll_steps.rb +++ b/features/step_definitions/jekyll_steps.rb @@ -68,7 +68,7 @@ Given /^I have the following (draft|post)s?(?: (.*) "(.*)")?:$/ do |status, dire '%m/%d/%Y' # why even end parsed_date = DateTime.strptime(post['date'], format) - post['date'] = parsed_date.to_s + post['date'] = parsed_date.strftime('%Y-%m-%d %H:%M') date = parsed_date.strftime('%Y-%m-%d') path = File.join(before || '.', '_posts', after || '.', "#{date}-#{title}.#{ext}") end From c4750cf48f7e3dda95958234903cf9cec55b2180 Mon Sep 17 00:00:00 2001 From: John Piasetzki Date: Sat, 18 May 2013 10:14:00 -0400 Subject: [PATCH 2/3] Fixes so that the timezone gets written when it explicit is specificied in a test --- features/step_definitions/jekyll_steps.rb | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/features/step_definitions/jekyll_steps.rb b/features/step_definitions/jekyll_steps.rb index b818d2a1..0ee76ea2 100644 --- a/features/step_definitions/jekyll_steps.rb +++ b/features/step_definitions/jekyll_steps.rb @@ -62,14 +62,17 @@ Given /^I have the following (draft|post)s?(?: (.*) "(.*)")?:$/ do |status, dire if "draft" == status path = File.join(before || '.', '_drafts', after || '.', "#{title}.#{ext}") else - format = if has_time_component?(post['date']) - '%Y-%m-%d %H:%M %z' + if has_time_component?(post['date']) + format = '%Y-%m-%d %H:%M %z' + parsed_date = DateTime.strptime(post['date'], format) + post['date'] = parsed_date.to_s + date = parsed_date.strftime('%Y-%m-%d') else - '%m/%d/%Y' # why even + format = '%m/%d/%Y' # why even + parsed_date = DateTime.strptime(post['date'], format) + post['date'] = parsed_date.strftime('%Y-%m-%d %H:%M') + date = parsed_date.strftime('%Y-%m-%d') end - parsed_date = DateTime.strptime(post['date'], format) - post['date'] = parsed_date.strftime('%Y-%m-%d %H:%M') - date = parsed_date.strftime('%Y-%m-%d') path = File.join(before || '.', '_posts', after || '.', "#{date}-#{title}.#{ext}") end From e043c419f5f2e0690e280428743e82f55ed5f08a Mon Sep 17 00:00:00 2001 From: John Piasetzki Date: Thu, 23 May 2013 16:49:43 -0400 Subject: [PATCH 3/3] Trying to edit my history to remove the mistakes --- features/step_definitions/jekyll_steps.rb | 51 ++++++++++------------- features/support/env.rb | 20 +++++++++ 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/features/step_definitions/jekyll_steps.rb b/features/step_definitions/jekyll_steps.rb index 0ee76ea2..696ddcb8 100644 --- a/features/step_definitions/jekyll_steps.rb +++ b/features/step_definitions/jekyll_steps.rb @@ -47,47 +47,38 @@ Given /^I have an? (.*) directory$/ do |dir| FileUtils.mkdir_p(dir) end -Given /^I have the following (draft|post)s?(?: (.*) "(.*)")?:$/ do |status, direction, folder, table| +Given /^I have the following (draft|post)s?(?: (in|under) "([^"]+)")?:$/ do |status, direction, folder, table| table.hashes.each do |post| - title = post['title'].downcase.gsub(/[^\w]/, " ").strip.gsub(/\s+/, '-') - - if direction && direction == "in" - before = folder || '.' - elsif direction && direction == "under" - after = folder || '.' - end - + title = slug(post['title']) ext = post['type'] || 'textile' + before, after = location(folder, direction) + + if post['date'] + in_format, out_format = time_format(post['date']) + parsed_date = DateTime.strptime(post['date'], in_format) + post['date'] = parsed_date.strftime(out_format) + end if "draft" == status - path = File.join(before || '.', '_drafts', after || '.', "#{title}.#{ext}") - else - if has_time_component?(post['date']) - format = '%Y-%m-%d %H:%M %z' - parsed_date = DateTime.strptime(post['date'], format) - post['date'] = parsed_date.to_s - date = parsed_date.strftime('%Y-%m-%d') - else - format = '%m/%d/%Y' # why even - parsed_date = DateTime.strptime(post['date'], format) - post['date'] = parsed_date.strftime('%Y-%m-%d %H:%M') - date = parsed_date.strftime('%Y-%m-%d') - end - path = File.join(before || '.', '_posts', after || '.', "#{date}-#{title}.#{ext}") + folder_post = '_drafts' + filename = "#{title}.#{ext}" + elsif "post" == status + folder_post = '_posts' + filename = "#{parsed_date.strftime('%Y-%m-%d')}-#{title}.#{ext}" end + path = File.join(before, folder_post, after, filename) + matter_hash = {} - %w(title layout tag tags category categories published author path).each do |key| + %w(title layout tag tags category categories published author path date).each do |key| matter_hash[key] = post[key] if post[key] end - if "post" == status - matter_hash["date"] = post["date"] if post["date"] - end matter = matter_hash.map { |k, v| "#{k}: #{v}\n" }.join.chomp - content = post['content'] - if post['input'] && post['filter'] - content = "{{ #{post['input']} | #{post['filter']} }}" + content = if post['input'] && post['filter'] + "{{ #{post['input']} | #{post['filter']} }}" + else + post['content'] end File.open(path, 'w') do |f| diff --git a/features/support/env.rb b/features/support/env.rb index 38bab950..26e03d71 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -17,9 +17,29 @@ def run_jekyll(opts = {}) system command end +def time_format(date) + if has_time_component?(date) + ['%Y-%m-%d %H:%M %z'] * 2 + else + ['%m/%d/%Y', '%Y-%m-%d %H:%M'] + end +end + def has_time_component?(date_string) date_string.split(" ").size > 1 end +def slug(title) + title.downcase.gsub(/[^\w]/, " ").strip.gsub(/\s+/, '-') +end + +def location(folder, direction) + if folder + before = folder if direction == "in" + after = folder if direction == "under" + end + [before || '.', after || '.'] +end + # work around "invalid option: --format" cucumber bug (see #296) Test::Unit.run = true if RUBY_VERSION < '1.9'