class JekyllImport::Importers::Typo

Constants

SQL

This SQL should work for both MySQL and PostgreSQL.

Public Class Methods

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

  FileUtils.mkdir_p "_posts"
  case server.intern
  when :postgres
    db = Sequel.postgres(dbname, :user => user, :password => pass, :host => host, :encoding => "utf8")
  when :mysql
    db = Sequel.mysql2(dbname, :user => user, :password => pass, :host => host, :encoding => "utf8")
  else
    raise "Unknown database server '#{server}'"
  end
  db[SQL].each do |post|
    next unless %r!published!i.match?(post[:state])

    post[:slug] = "no slug" if post[:slug].nil?

    if post[:extended]
      post[:body] << "\n<!-- more -->\n"
      post[:body] << post[:extended]
    end

    name = [
      format("%.04d", post[:date].year),
      format("%.02d", post[:date].month),
      format("%.02d", post[:date].day),
      post[:slug].strip,
    ].join("-")

    # Can have more than one text filter in this field, but we just want
    # the first one for this.
    name += "." + post[:filter].split(" ")[0]

    File.open("_posts/#{name}", "w") do |f|
      f.puts({ "layout"  => "post",
               "title"   => post[:title]&.to_s&.force_encoding("UTF-8"),
               "tags"    => post[:keywords]&.to_s&.force_encoding("UTF-8"),
               "typo_id" => post[:id], }.delete_if { |_k, v| v.nil? || v == "" }.to_yaml)
      f.puts "---"
      f.puts post[:body].delete("\r")
    end
  end
end
require_deps() click to toggle source
# File lib/jekyll-import/importers/typo.rb, line 22
def self.require_deps
  JekyllImport.require_with_fallback(%w(
    rubygems
    sequel
    mysql2
    pg
    fileutils
    safe_yaml
  ))
end
specify_options(c) click to toggle source
# File lib/jekyll-import/importers/typo.rb, line 33
def self.specify_options(c)
  c.option "server",   "--server TYPE", "Server type ('mysql' or 'postgres')."
  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