Permalink
Browse files

Add Marley migrator. Closes #28.

  • Loading branch information...
1 parent c1ed790 commit 36b1f8f9b1b51cb46c6823d7eba32f3f6e0aa335 @mojombo mojombo committed Dec 14, 2010
Showing with 54 additions and 0 deletions.
  1. +1 −0 History.txt
  2. +53 −0 lib/jekyll/migrators/marley.rb
View
1 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
View
53 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

0 comments on commit 36b1f8f

Please sign in to comment.