From 36b1f8f9b1b51cb46c6823d7eba32f3f6e0aa335 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Tue, 14 Dec 2010 15:12:12 -0800 Subject: [PATCH] Add Marley migrator. Closes #28. --- History.txt | 1 + lib/jekyll/migrators/marley.rb | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 lib/jekyll/migrators/marley.rb diff --git a/History.txt b/History.txt index 0c7d66f0..bc8d1363 100644 --- a/History.txt +++ b/History.txt @@ -4,6 +4,7 @@ * Add Drupal migrator (#245) * Complain about YAML and Liquid errors (#249) * Remove orphaned files during regeneration (#247) + * Add Marley migrator (#28) == 0.8.0 / 2010-11-22 * Minor Enhancements diff --git a/lib/jekyll/migrators/marley.rb b/lib/jekyll/migrators/marley.rb new file mode 100644 index 00000000..390a5a28 --- /dev/null +++ b/lib/jekyll/migrators/marley.rb @@ -0,0 +1,53 @@ +require 'yaml' +require 'fileutils' + +module Jekyll + module Marley + + def self.regexp + { :id => /^\d{0,4}-{0,1}(.*)$/, + :title => /^#\s*(.*)\s+$/, + :title_with_date => /^#\s*(.*)\s+\(([0-9\/]+)\)$/, + :published_on => /.*\s+\(([0-9\/]+)\)$/, + :perex => /^([^\#\n]+\n)$/, + :meta => /^\{\{\n(.*)\}\}\n$/mi # Multiline Regexp + } + end + + def self.process(marley_data_dir) + raise ArgumentError, "marley dir #{marley_data_dir} not found" unless File.directory?(marley_data_dir) + + FileUtils.mkdir_p "_posts" + + posts = 0 + Dir["#{marley_data_dir}/**/*.txt"].each do |f| + next unless File.exists?(f) + + #copied over from marley's app/lib/post.rb + file_content = File.read(f) + meta_content = file_content.slice!( self.regexp[:meta] ) + body = file_content.sub( self.regexp[:title], '').sub( self.regexp[:perex], '').strip + + title = file_content.scan( self.regexp[:title] ).first.to_s.strip + prerex = file_content.scan( self.regexp[:perex] ).first.to_s.strip + published_on = DateTime.parse( post[:published_on] ) rescue File.mtime( File.dirname(f) ) + meta = ( meta_content ) ? YAML::load( meta_content.scan( self.regexp[:meta]).to_s ) : {} + meta['title'] = title + meta['layout'] = 'post' + + formatted_date = published_on.strftime('%Y-%m-%d') + post_name = File.dirname(f).split(%r{/}).last.gsub(/\A\d+-/, '') + + name = "#{formatted_date}-#{post_name}" + File.open("_posts/#{name}.markdown", "w") do |f| + f.puts meta.to_yaml + f.puts "---\n" + f.puts "\n#{prerex}\n\n" if prerex + f.puts body + end + posts += 1 + end + "Created #{posts} posts!" + end + end +end