From 32a9b6b8dd330e82636547a7b1737e5508baa3b4 Mon Sep 17 00:00:00 2001 From: "Per Christian B. Viken" Date: Fri, 9 Jan 2009 21:10:52 +0100 Subject: [PATCH] created a converter for textpattern, and a simple usage guide --- README.textile | 13 ++++++++ lib/jekyll/converters/textpattern.rb | 50 ++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 lib/jekyll/converters/textpattern.rb diff --git a/README.textile b/README.textile index 4fa4c406..f6b47a87 100644 --- a/README.textile +++ b/README.textile @@ -409,6 +409,19 @@ This code also has only been tested with Typo version 4+. Previous versions of Typo may not convert correctly. Please check the results and verify the posts before publishing. +h3. TextPattern 4 + +To migrate your TextPattern blog into Jekyll, you'll need read access to the MySQL +database. The lib/jekyll/converters/textpattern.rb module provides a simple convert to create .textile files in a _posts directory based on +the entries contained therein. + + $ ruby -r './lib/jekyll/converters/textpattern' -e 'Jekyll::TextPattern.process( \ + "database_name", "username", "password", "hostname")' + +The hostname defaults to _localhost_, all other variables are needed +You may need to adjust the code used to filter entries. Left alone, +it will attempt to pull all entries that are live or sticky. + h2. License (The MIT License) diff --git a/lib/jekyll/converters/textpattern.rb b/lib/jekyll/converters/textpattern.rb new file mode 100644 index 00000000..98e15fdb --- /dev/null +++ b/lib/jekyll/converters/textpattern.rb @@ -0,0 +1,50 @@ +require 'rubygems' +require 'sequel' +require 'fileutils' + +# NOTE: This converter requires Sequel and the MySQL gems. +# The MySQL gem can be difficult to install on OS X. Once you have MySQL +# installed, running the following commands should work: +# $ sudo gem install sequel +# $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config + +module Jekyll + module TextPattern + # Reads a MySQL database via Sequel and creates a post file for each post. + # The only posts selected are those with a status of 4 or 5, which means "live" + # and "sticky" respectively. + # Other statuses is 1 => draft, 2 => hidden and 3 => pending + QUERY = "select Title, url_title, Posted, Body, Keywords from textpattern where Status = '4' or Status = '5'" + + def self.process(dbname, user, pass, host = 'localhost') + db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host) + + FileUtils.mkdir_p "_posts" + + db[QUERY].each do |post| + # Get required fields and construct Jekyll compatible name + title = post[:Title] + slug = post[:url_title] + date = post[:Posted] + content = post[:Body] + + name = [date.strftime("%Y-%m-%d"), slug].join('-') + ".textile" + + # Get the relevant fields as a hash, delete empty fields and convert + # to YAML for the header + data = { + 'layout' => 'post', + 'title' => title.to_s, + 'tags' => post[:Keywords].split(',') + }.delete_if { |k,v| v.nil? || v == ''}.to_yaml + + # Write out the data and content to file + File.open("_posts/#{name}", "w") do |f| + f.puts data + f.puts "---" + f.puts content + end + end + end + end +end \ No newline at end of file