class JekyllImport::Importers::TextPattern

Constants

QUERY

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 are 1 => draft, 2 => hidden and 3 => pending.

Public Class Methods

process(options) click to toggle source
# File lib/jekyll-import/importers/textpattern.rb, line 36
def self.process(options)
  dbname = options.fetch("dbname")
  user   = options.fetch("user")
  pass   = options.fetch("password", "")
  host   = options.fetch("host", "127.0.0.1")

  db = Sequel.mysql2(dbname, :user => user, :password => pass, :host => host, :encoding => "utf8")

  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
require_deps() click to toggle source
# File lib/jekyll-import/importers/textpattern.rb, line 19
def self.require_deps
  JekyllImport.require_with_fallback(%w(
    rubygems
    sequel
    mysql2
    fileutils
    safe_yaml
  ))
end
specify_options(c) click to toggle source
# File lib/jekyll-import/importers/textpattern.rb, line 29
def self.specify_options(c)
  c.option "dbname",   "--dbname DB",   "Database name."
  c.option "user",     "--user USER",   "Database user name."
  c.option "password", "--password PW", "Database user's password. (default: '')"
  c.option "host",     "--host HOST",   "Database host name. (default: 'localhost')"
end