jekyll-import 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jekyll-import.rb +10 -8
- data/lib/jekyll-import/importer.rb +1 -1
- data/lib/jekyll-import/importers.rb +1 -1
- data/lib/jekyll-import/importers/behance.rb +20 -20
- data/lib/jekyll-import/importers/blogger.rb +108 -118
- data/lib/jekyll-import/importers/csv.rb +7 -7
- data/lib/jekyll-import/importers/drupal6.rb +5 -6
- data/lib/jekyll-import/importers/drupal7.rb +7 -13
- data/lib/jekyll-import/importers/drupal_common.rb +57 -59
- data/lib/jekyll-import/importers/easyblog.rb +30 -30
- data/lib/jekyll-import/importers/enki.rb +28 -29
- data/lib/jekyll-import/importers/ghost.rb +46 -33
- data/lib/jekyll-import/importers/google_reader.rb +9 -9
- data/lib/jekyll-import/importers/joomla.rb +32 -32
- data/lib/jekyll-import/importers/joomla3.rb +41 -39
- data/lib/jekyll-import/importers/jrnl.rb +16 -17
- data/lib/jekyll-import/importers/marley.rb +25 -26
- data/lib/jekyll-import/importers/mephisto.rb +26 -26
- data/lib/jekyll-import/importers/mt.rb +76 -75
- data/lib/jekyll-import/importers/posterous.rb +30 -29
- data/lib/jekyll-import/importers/rss.rb +13 -10
- data/lib/jekyll-import/importers/s9y.rb +16 -17
- data/lib/jekyll-import/importers/s9y_database.rb +98 -89
- data/lib/jekyll-import/importers/textpattern.rb +18 -17
- data/lib/jekyll-import/importers/tmp.rb +0 -0
- data/lib/jekyll-import/importers/tumblr.rb +146 -143
- data/lib/jekyll-import/importers/typo.rb +31 -31
- data/lib/jekyll-import/importers/wordpress.rb +100 -100
- data/lib/jekyll-import/importers/wordpressdotcom.rb +70 -60
- data/lib/jekyll-import/util.rb +24 -24
- data/lib/jekyll-import/version.rb +1 -1
- data/lib/jekyll/commands/import.rb +32 -35
- metadata +14 -13
| @@ -4,22 +4,22 @@ module JekyllImport | |
| 4 4 | 
             
              module Importers
         | 
| 5 5 | 
             
                class CSV < Importer
         | 
| 6 6 | 
             
                  def self.require_deps
         | 
| 7 | 
            -
                    JekyllImport.require_with_fallback(%w | 
| 7 | 
            +
                    JekyllImport.require_with_fallback(%w(
         | 
| 8 8 | 
             
                      csv
         | 
| 9 9 | 
             
                      fileutils
         | 
| 10 10 | 
             
                      yaml
         | 
| 11 | 
            -
                     | 
| 11 | 
            +
                    ))
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 14 | 
             
                  def self.specify_options(c)
         | 
| 15 | 
            -
                    c.option  | 
| 16 | 
            -
                    c.option  | 
| 15 | 
            +
                    c.option "file", "--file NAME", 'The CSV file to import (default: "posts.csv")'
         | 
| 16 | 
            +
                    c.option "no-front-matter", "--no-front-matter", "Do not add the default front matter to the post body"
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| 19 19 | 
             
                  # Reads a csv with title, permalink, body, published_at, and filter.
         | 
| 20 20 | 
             
                  # It creates a post file for each row in the csv
         | 
| 21 21 | 
             
                  def self.process(options)
         | 
| 22 | 
            -
                    file = options.fetch( | 
| 22 | 
            +
                    file = options.fetch("file", "posts.csv")
         | 
| 23 23 |  | 
| 24 24 | 
             
                    FileUtils.mkdir_p "_posts"
         | 
| 25 25 | 
             
                    posts = 0
         | 
| @@ -80,13 +80,13 @@ module JekyllImport | |
| 80 80 | 
             
                  end
         | 
| 81 81 |  | 
| 82 82 | 
             
                  def self.write_frontmatter(f, post, options)
         | 
| 83 | 
            -
                    no_frontmatter = options.fetch( | 
| 83 | 
            +
                    no_frontmatter = options.fetch("no-front-matter", false)
         | 
| 84 84 | 
             
                    unless no_frontmatter
         | 
| 85 85 | 
             
                      f.puts YAML.dump({
         | 
| 86 86 | 
             
                        "layout"    => "post",
         | 
| 87 87 | 
             
                        "title"     => post.title,
         | 
| 88 88 | 
             
                        "date"      => post.published_at.to_s,
         | 
| 89 | 
            -
                        "permalink" => post.permalink
         | 
| 89 | 
            +
                        "permalink" => post.permalink,
         | 
| 90 90 | 
             
                      })
         | 
| 91 91 | 
             
                      f.puts "---"
         | 
| 92 92 | 
             
                    end
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "jekyll-import/importers/drupal_common"
         | 
| 2 2 |  | 
| 3 3 | 
             
            module JekyllImport
         | 
| 4 4 | 
             
              module Importers
         | 
| @@ -38,16 +38,15 @@ EOS | |
| 38 38 | 
             
                  def self.post_data(sql_post_data)
         | 
| 39 39 | 
             
                    content = sql_post_data[:body].to_s
         | 
| 40 40 | 
             
                    summary = sql_post_data[:teaser].to_s
         | 
| 41 | 
            -
                    tags = (sql_post_data[:tags] ||  | 
| 41 | 
            +
                    tags = (sql_post_data[:tags] || "").downcase.strip
         | 
| 42 42 |  | 
| 43 43 | 
             
                    data = {
         | 
| 44 | 
            -
                       | 
| 45 | 
            -
                       | 
| 44 | 
            +
                      "excerpt"    => summary,
         | 
| 45 | 
            +
                      "categories" => tags.split("|"),
         | 
| 46 46 | 
             
                    }
         | 
| 47 47 |  | 
| 48 | 
            -
             | 
| 48 | 
            +
                    return data, content
         | 
| 49 49 | 
             
                  end
         | 
| 50 | 
            -
             | 
| 51 50 | 
             
                end
         | 
| 52 51 | 
             
              end
         | 
| 53 52 | 
             
            end
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "jekyll-import/importers/drupal_common"
         | 
| 2 2 |  | 
| 3 3 | 
             
            module JekyllImport
         | 
| 4 4 | 
             
              module Importers
         | 
| @@ -18,15 +18,10 @@ module JekyllImport | |
| 18 18 | 
             
                                   n.created,
         | 
| 19 19 | 
             
                                   n.status,
         | 
| 20 20 | 
             
                                   n.type,
         | 
| 21 | 
            -
                                   GROUP_CONCAT( | 
| 22 | 
            -
                            FROM #{prefix} | 
| 23 | 
            -
             | 
| 24 | 
            -
                                 LEFT OUTER JOIN #{prefix}taxonomy_index AS ti ON ti.nid = n.nid
         | 
| 25 | 
            -
                                 LEFT OUTER JOIN #{prefix}taxonomy_term_data AS td ON ti.tid = td.tid
         | 
| 21 | 
            +
                                   (SELECT GROUP_CONCAT(td.name SEPARATOR '|') FROM taxonomy_term_data td, taxonomy_index ti WHERE ti.tid = td.tid AND ti.nid = n.nid) AS 'tags'
         | 
| 22 | 
            +
                            FROM #{prefix}node AS n
         | 
| 23 | 
            +
                            LEFT JOIN #{prefix}field_data_body AS fdb ON fdb.entity_id = n.nid AND fdb.entity_type = 'node'
         | 
| 26 24 | 
             
                            WHERE (#{types})
         | 
| 27 | 
            -
                              AND n.nid = fdb.entity_id
         | 
| 28 | 
            -
                              AND n.vid = fdb.revision_id
         | 
| 29 | 
            -
                            GROUP BY n.nid"
         | 
| 30 25 | 
             
            EOS
         | 
| 31 26 |  | 
| 32 27 | 
             
                    return query
         | 
| @@ -39,16 +34,15 @@ EOS | |
| 39 34 | 
             
                  def self.post_data(sql_post_data)
         | 
| 40 35 | 
             
                    content = sql_post_data[:body_value].to_s
         | 
| 41 36 | 
             
                    summary = sql_post_data[:body_summary].to_s
         | 
| 42 | 
            -
                    tags = (sql_post_data[:tags] ||  | 
| 37 | 
            +
                    tags = (sql_post_data[:tags] || "").downcase.strip
         | 
| 43 38 |  | 
| 44 39 | 
             
                    data = {
         | 
| 45 | 
            -
                       | 
| 46 | 
            -
                       | 
| 40 | 
            +
                      "excerpt"    => summary,
         | 
| 41 | 
            +
                      "categories" => tags.split("|"),
         | 
| 47 42 | 
             
                    }
         | 
| 48 43 |  | 
| 49 44 | 
             
                    return data, content
         | 
| 50 45 | 
             
                  end
         | 
| 51 | 
            -
             | 
| 52 46 | 
             
                end
         | 
| 53 47 | 
             
              end
         | 
| 54 48 | 
             
            end
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "date"
         | 
| 2 2 |  | 
| 3 3 | 
             
            module JekyllImport
         | 
| 4 4 | 
             
              module Importers
         | 
| @@ -15,56 +15,57 @@ module JekyllImport | |
| 15 15 | 
             
                      "password" => "",
         | 
| 16 16 | 
             
                      "host"     => "localhost",
         | 
| 17 17 | 
             
                      "prefix"   => "",
         | 
| 18 | 
            -
                      "types"    => %w(blog story article)
         | 
| 19 | 
            -
                    }
         | 
| 18 | 
            +
                      "types"    => %w(blog story article),
         | 
| 19 | 
            +
                    }.freeze
         | 
| 20 20 |  | 
| 21 21 | 
             
                    def specify_options(c)
         | 
| 22 | 
            -
                      c.option  | 
| 23 | 
            -
                      c.option  | 
| 24 | 
            -
                      c.option  | 
| 25 | 
            -
                      c.option  | 
| 26 | 
            -
                      c.option  | 
| 27 | 
            -
                      c.option  | 
| 22 | 
            +
                      c.option "dbname", "--dbname DB", "Database name"
         | 
| 23 | 
            +
                      c.option "user", "--user USER", "Database user name"
         | 
| 24 | 
            +
                      c.option "password", "--password PW", "Database user's password (default: #{DEFAULTS["password"].inspect})"
         | 
| 25 | 
            +
                      c.option "host", "--host HOST", "Database host name (default: #{DEFAULTS["host"].inspect})"
         | 
| 26 | 
            +
                      c.option "prefix", "--prefix PREFIX", "Table prefix name (default: #{DEFAULTS["prefix"].inspect})"
         | 
| 27 | 
            +
                      c.option "types", "--types TYPE1[,TYPE2[,TYPE3...]]", Array,
         | 
| 28 28 | 
             
                        "The Drupal content types to be imported  (default: #{DEFAULTS["types"].join(",")})"
         | 
| 29 29 | 
             
                    end
         | 
| 30 30 |  | 
| 31 31 | 
             
                    def require_deps
         | 
| 32 | 
            -
                      JekyllImport.require_with_fallback(%w | 
| 32 | 
            +
                      JekyllImport.require_with_fallback(%w(
         | 
| 33 33 | 
             
                        rubygems
         | 
| 34 34 | 
             
                        sequel
         | 
| 35 | 
            +
                        mysql2
         | 
| 35 36 | 
             
                        fileutils
         | 
| 36 37 | 
             
                        safe_yaml
         | 
| 37 | 
            -
                       | 
| 38 | 
            +
                      ))
         | 
| 38 39 | 
             
                    end
         | 
| 39 40 |  | 
| 40 41 | 
             
                    def process(options)
         | 
| 41 | 
            -
                      dbname = options.fetch( | 
| 42 | 
            -
                      user   = options.fetch( | 
| 43 | 
            -
                      pass   = options.fetch( | 
| 44 | 
            -
                      host   = options.fetch( | 
| 45 | 
            -
                      prefix = options.fetch( | 
| 46 | 
            -
                      types  = options.fetch( | 
| 42 | 
            +
                      dbname = options.fetch("dbname")
         | 
| 43 | 
            +
                      user   = options.fetch("user")
         | 
| 44 | 
            +
                      pass   = options.fetch("password", DEFAULTS["password"])
         | 
| 45 | 
            +
                      host   = options.fetch("host",     DEFAULTS["host"])
         | 
| 46 | 
            +
                      prefix = options.fetch("prefix",   DEFAULTS["prefix"])
         | 
| 47 | 
            +
                      types  = options.fetch("types",    DEFAULTS["types"])
         | 
| 47 48 |  | 
| 48 | 
            -
                      db = Sequel. | 
| 49 | 
            +
                      db = Sequel.mysql2(dbname, :user => user, :password => pass, :host => host, :encoding => "utf8")
         | 
| 49 50 |  | 
| 50 51 | 
             
                      query = self.build_query(prefix, types)
         | 
| 51 52 |  | 
| 52 53 | 
             
                      conf = Jekyll.configuration({})
         | 
| 53 | 
            -
                      src_dir = conf[ | 
| 54 | 
            +
                      src_dir = conf["source"]
         | 
| 54 55 |  | 
| 55 56 | 
             
                      dirs = {
         | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 57 | 
            +
                        :_posts   => File.join(src_dir, "_posts").to_s,
         | 
| 58 | 
            +
                        :_drafts  => File.join(src_dir, "_drafts").to_s,
         | 
| 59 | 
            +
                        :_layouts => Jekyll.sanitized_path(src_dir, conf["layouts_dir"].to_s),
         | 
| 59 60 | 
             
                      }
         | 
| 60 61 |  | 
| 61 | 
            -
                      dirs.each do | | 
| 62 | 
            +
                      dirs.each do |_key, dir|
         | 
| 62 63 | 
             
                        FileUtils.mkdir_p dir
         | 
| 63 64 | 
             
                      end
         | 
| 64 65 |  | 
| 65 66 | 
             
                      # Create the refresh layout
         | 
| 66 67 | 
             
                      # Change the refresh url if you customized your permalink config
         | 
| 67 | 
            -
                      File.open(File.join(dirs[:_layouts],  | 
| 68 | 
            +
                      File.open(File.join(dirs[:_layouts], "refresh.html"), "w") do |f|
         | 
| 68 69 | 
             
                        f.puts <<-HTML
         | 
| 69 70 | 
             
            <!DOCTYPE html>
         | 
| 70 71 | 
             
            <html>
         | 
| @@ -80,78 +81,75 @@ HTML | |
| 80 81 | 
             
                        # Get required fields
         | 
| 81 82 | 
             
                        data, content = self.post_data(post)
         | 
| 82 83 |  | 
| 83 | 
            -
                        data[ | 
| 84 | 
            -
                        title = data[ | 
| 85 | 
            -
                        time = data[ | 
| 84 | 
            +
                        data["layout"] = post[:type]
         | 
| 85 | 
            +
                        title = data["title"] = post[:title].strip.force_encoding("UTF-8")
         | 
| 86 | 
            +
                        time = data["created"] = post[:created]
         | 
| 86 87 |  | 
| 87 88 | 
             
                        # Get the relevant fields as a hash and delete empty fields
         | 
| 88 | 
            -
                        data = data.delete_if { | | 
| 89 | 
            -
             | 
| 90 | 
            -
                         | 
| 89 | 
            +
                        data = data.delete_if { |_k, v| v.nil? || v == "" }.each_pair do |_k, v|
         | 
| 90 | 
            +
                          (v.is_a? String ? v.force_encoding("UTF-8") : v)
         | 
| 91 | 
            +
                        end
         | 
| 91 92 |  | 
| 92 93 | 
             
                        # Construct a Jekyll compatible file name
         | 
| 93 94 | 
             
                        is_published = post[:status] == 1
         | 
| 94 95 | 
             
                        node_id = post[:nid]
         | 
| 95 96 | 
             
                        dir = is_published ? dirs[:_posts] : dirs[:_drafts]
         | 
| 96 | 
            -
                        slug = title.strip.downcase.gsub( | 
| 97 | 
            -
                        filename = Time.at(time).to_datetime.strftime( | 
| 97 | 
            +
                        slug = title.strip.downcase.gsub(%r!(&|&)!, " and ").gsub(%r![\s\.\/\\]!, "-").gsub(%r![^\w-]!, "").gsub(%r![-_]{2,}!, "-").gsub(%r!^[-_]!, "").gsub(%r![-_]$!, "")
         | 
| 98 | 
            +
                        filename = Time.at(time).to_datetime.strftime("%Y-%m-%d-") + slug + ".md"
         | 
| 98 99 |  | 
| 99 100 | 
             
                        # Write out the data and content to file
         | 
| 100 | 
            -
                        File.open("#{dir}/#{filename}",  | 
| 101 | 
            +
                        File.open("#{dir}/#{filename}", "w") do |f|
         | 
| 101 102 | 
             
                          f.puts data.to_yaml
         | 
| 102 | 
            -
                          f.puts  | 
| 103 | 
            +
                          f.puts "---"
         | 
| 103 104 | 
             
                          f.puts content
         | 
| 104 105 | 
             
                        end
         | 
| 105 106 |  | 
| 106 | 
            -
             | 
| 107 107 | 
             
                        # Make a file to redirect from the old Drupal URL
         | 
| 108 | 
            -
                         | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
                            end
         | 
| 108 | 
            +
                        next unless is_published
         | 
| 109 | 
            +
                        alias_query = self.aliases_query(prefix)
         | 
| 110 | 
            +
                        type = post[:type]
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                        aliases = db[alias_query, "#{type}/#{node_id}"].all
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                        aliases.push(:alias => "#{type}/#{node_id}")
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                        aliases.each do |url_alias|
         | 
| 117 | 
            +
                          FileUtils.mkdir_p url_alias[:alias]
         | 
| 118 | 
            +
                          File.open("#{url_alias[:alias]}/index.md", "w") do |f|
         | 
| 119 | 
            +
                            f.puts "---"
         | 
| 120 | 
            +
                            f.puts "layout: refresh"
         | 
| 121 | 
            +
                            f.puts "refresh_to_post_id: /#{Time.at(time).to_datetime.strftime("%Y/%m/%d/") + slug}"
         | 
| 122 | 
            +
                            f.puts "---"
         | 
| 124 123 | 
             
                          end
         | 
| 125 124 | 
             
                        end
         | 
| 126 125 | 
             
                      end
         | 
| 127 126 | 
             
                    end
         | 
| 128 127 | 
             
                  end
         | 
| 129 128 |  | 
| 130 | 
            -
                  def build_query( | 
| 131 | 
            -
                    raise  | 
| 129 | 
            +
                  def build_query(_prefix, _types)
         | 
| 130 | 
            +
                    raise "The importer you are trying to use does not implement the get_query() method."
         | 
| 132 131 | 
             
                  end
         | 
| 133 132 |  | 
| 134 | 
            -
                  def aliases_query( | 
| 133 | 
            +
                  def aliases_query(_prefix)
         | 
| 135 134 | 
             
                    # Make sure you implement the query returning "alias" as the column name
         | 
| 136 135 | 
             
                    # for the URL aliases. See the Drupal 6 importer for an example. The
         | 
| 137 136 | 
             
                    # alias field is called 'dst' but we alias it to 'alias', to follow
         | 
| 138 137 | 
             
                    # Drupal 7's column names.
         | 
| 139 | 
            -
                    raise  | 
| 138 | 
            +
                    raise "The importer you are trying to use does not implement the get_aliases_query() method."
         | 
| 140 139 | 
             
                  end
         | 
| 141 140 |  | 
| 142 | 
            -
                  def post_data( | 
| 143 | 
            -
                    raise  | 
| 141 | 
            +
                  def post_data(_sql_post_data)
         | 
| 142 | 
            +
                    raise "The importer you are trying to use does not implement the get_query() method."
         | 
| 144 143 | 
             
                  end
         | 
| 145 144 |  | 
| 146 145 | 
             
                  def validate(options)
         | 
| 147 | 
            -
                    %w | 
| 146 | 
            +
                    %w(dbname user).each do |option|
         | 
| 148 147 | 
             
                      if options[option].nil?
         | 
| 149 148 | 
             
                        abort "Missing mandatory option --#{option}."
         | 
| 150 149 | 
             
                      end
         | 
| 151 150 | 
             
                    end
         | 
| 152 151 | 
             
                  end
         | 
| 153 152 |  | 
| 154 | 
            -
             | 
| 155 153 | 
             
                end
         | 
| 156 154 | 
             
              end
         | 
| 157 155 | 
             
            end
         | 
| @@ -2,7 +2,7 @@ module JekyllImport | |
| 2 2 | 
             
              module Importers
         | 
| 3 3 | 
             
                class Easyblog < Importer
         | 
| 4 4 | 
             
                  def self.validate(options)
         | 
| 5 | 
            -
                    %w | 
| 5 | 
            +
                    %w(dbname user).each do |option|
         | 
| 6 6 | 
             
                      if options[option].nil?
         | 
| 7 7 | 
             
                        abort "Missing mandatory option --#{option}."
         | 
| 8 8 | 
             
                      end
         | 
| @@ -10,32 +10,33 @@ module JekyllImport | |
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
| 12 12 | 
             
                  def self.specify_options(c)
         | 
| 13 | 
            -
                    c.option  | 
| 14 | 
            -
                    c.option  | 
| 15 | 
            -
                    c.option  | 
| 16 | 
            -
                    c.option  | 
| 17 | 
            -
                    c.option  | 
| 18 | 
            -
                    c.option  | 
| 13 | 
            +
                    c.option "dbname", "--dbname", "Database name"
         | 
| 14 | 
            +
                    c.option "user", "--user", "Database user name"
         | 
| 15 | 
            +
                    c.option "password", "--password", "Database user's password (default: '')"
         | 
| 16 | 
            +
                    c.option "host", "--host", "Database host name"
         | 
| 17 | 
            +
                    c.option "section", "--section", "Table prefix name"
         | 
| 18 | 
            +
                    c.option "prefix", "--prefix", "Table prefix name"
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 21 | 
             
                  def self.require_deps
         | 
| 22 | 
            -
                    JekyllImport.require_with_fallback(%w | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 22 | 
            +
                    JekyllImport.require_with_fallback(%w(
         | 
| 23 | 
            +
                      rubygems
         | 
| 24 | 
            +
                      sequel
         | 
| 25 | 
            +
                      mysql2
         | 
| 26 | 
            +
                      fileutils
         | 
| 27 | 
            +
                      safe_yaml
         | 
| 28 | 
            +
                    ))
         | 
| 28 29 | 
             
                  end
         | 
| 29 30 |  | 
| 30 31 | 
             
                  def self.process(options)
         | 
| 31 | 
            -
                    dbname  = options.fetch( | 
| 32 | 
            -
                    user    = options.fetch( | 
| 33 | 
            -
                    pass    = options.fetch( | 
| 34 | 
            -
                    host    = options.fetch( | 
| 35 | 
            -
                    section = options.fetch( | 
| 36 | 
            -
                    table_prefix = options.fetch( | 
| 32 | 
            +
                    dbname  = options.fetch("dbname")
         | 
| 33 | 
            +
                    user    = options.fetch("user")
         | 
| 34 | 
            +
                    pass    = options.fetch("password", "")
         | 
| 35 | 
            +
                    host    = options.fetch("host", "localhost")
         | 
| 36 | 
            +
                    section = options.fetch("section", "1")
         | 
| 37 | 
            +
                    table_prefix = options.fetch("prefix", "jos_")
         | 
| 37 38 |  | 
| 38 | 
            -
                    db = Sequel. | 
| 39 | 
            +
                    db = Sequel.mysql2(dbname, :user => user, :password => pass, :host => host, :encoding => "utf8")
         | 
| 39 40 |  | 
| 40 41 | 
             
                    FileUtils.mkdir_p("_posts")
         | 
| 41 42 |  | 
| @@ -68,20 +69,19 @@ module JekyllImport | |
| 68 69 | 
             
                      content = post[:content]
         | 
| 69 70 | 
             
                      category = post[:category]
         | 
| 70 71 | 
             
                      tags = post[:tags]
         | 
| 71 | 
            -
                      name = "%02d-%02d-%02d-%s.markdown"  | 
| 72 | 
            -
                                                             slug]
         | 
| 72 | 
            +
                      name = format("%02d-%02d-%02d-%s.markdown", date.year, date.month, date.day, slug)
         | 
| 73 73 |  | 
| 74 74 | 
             
                      # Get the relevant fields as a hash, delete empty fields and convert
         | 
| 75 75 | 
             
                      # to YAML for the header.
         | 
| 76 76 | 
             
                      data = {
         | 
| 77 | 
            -
                         | 
| 78 | 
            -
                         | 
| 79 | 
            -
                         | 
| 80 | 
            -
                         | 
| 81 | 
            -
                         | 
| 82 | 
            -
                         | 
| 83 | 
            -
                         | 
| 84 | 
            -
                      }.delete_if { | | 
| 77 | 
            +
                        "layout"     => "post",
         | 
| 78 | 
            +
                        "title"      => title.to_s,
         | 
| 79 | 
            +
                        "joomla_id"  => post[:id],
         | 
| 80 | 
            +
                        "joomla_url" => post[:alias],
         | 
| 81 | 
            +
                        "category"   => post[:category],
         | 
| 82 | 
            +
                        "tags"       => post[:tags],
         | 
| 83 | 
            +
                        "date"       => date,
         | 
| 84 | 
            +
                      }.delete_if { |_k, v| v.nil? || v == "" }.to_yaml
         | 
| 85 85 |  | 
| 86 86 | 
             
                      # Write out the data and content to file
         | 
| 87 87 | 
             
                      File.open("_posts/#{name}", "w") do |f|
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            module JekyllImport
         | 
| 2 | 
            -
             | 
| 2 | 
            +
              module Importers
         | 
| 3 3 | 
             
                class Enki < Importer
         | 
| 4 | 
            -
                  SQL = <<-EOS
         | 
| 4 | 
            +
                  SQL = <<-EOS.freeze
         | 
| 5 5 | 
             
                    SELECT p.id,
         | 
| 6 6 | 
             
                           p.title,
         | 
| 7 7 | 
             
                           p.slug,
         | 
| @@ -12,7 +12,7 @@ module JekyllImport | |
| 12 12 | 
             
            EOS
         | 
| 13 13 |  | 
| 14 14 | 
             
                  def self.validate(options)
         | 
| 15 | 
            -
                    %w | 
| 15 | 
            +
                    %w(dbname user).each do |option|
         | 
| 16 16 | 
             
                      if options[option].nil?
         | 
| 17 17 | 
             
                        abort "Missing mandatory option --#{option}."
         | 
| 18 18 | 
             
                      end
         | 
| @@ -20,51 +20,50 @@ EOS | |
| 20 20 | 
             
                  end
         | 
| 21 21 |  | 
| 22 22 | 
             
                  def self.specify_options(c)
         | 
| 23 | 
            -
                    c.option  | 
| 24 | 
            -
                    c.option  | 
| 25 | 
            -
                    c.option  | 
| 26 | 
            -
                    c.option  | 
| 23 | 
            +
                    c.option "dbname", "--dbname", "Database name"
         | 
| 24 | 
            +
                    c.option "user", "--user", "Database name"
         | 
| 25 | 
            +
                    c.option "password", "--password", 'Database name (default: "")'
         | 
| 26 | 
            +
                    c.option "host", "--host", "Database name"
         | 
| 27 27 | 
             
                  end
         | 
| 28 28 |  | 
| 29 29 | 
             
                  def self.require_deps
         | 
| 30 | 
            -
                    JekyllImport.require_with_fallback(%w | 
| 30 | 
            +
                    JekyllImport.require_with_fallback(%w(
         | 
| 31 31 | 
             
                      rubygems
         | 
| 32 32 | 
             
                      sequel
         | 
| 33 33 | 
             
                      fileutils
         | 
| 34 34 | 
             
                      pg
         | 
| 35 35 | 
             
                      yaml
         | 
| 36 | 
            -
                     | 
| 36 | 
            +
                    ))
         | 
| 37 37 | 
             
                  end
         | 
| 38 38 |  | 
| 39 39 | 
             
                  # Just working with postgres, but can be easily adapted
         | 
| 40 40 | 
             
                  # to work with both mysql and postgres.
         | 
| 41 41 | 
             
                  def self.process(options)
         | 
| 42 | 
            -
                    dbname = options.fetch( | 
| 43 | 
            -
                    user   = options.fetch( | 
| 44 | 
            -
                    pass   = options.fetch( | 
| 45 | 
            -
                    host   = options.fetch( | 
| 42 | 
            +
                    dbname = options.fetch("dbname")
         | 
| 43 | 
            +
                    user   = options.fetch("user")
         | 
| 44 | 
            +
                    pass   = options.fetch("password", "")
         | 
| 45 | 
            +
                    host   = options.fetch("host", "localhost")
         | 
| 46 46 |  | 
| 47 | 
            -
                    FileUtils.mkdir_p( | 
| 47 | 
            +
                    FileUtils.mkdir_p("_posts")
         | 
| 48 48 | 
             
                    db = Sequel.postgres(:database => dbname,
         | 
| 49 | 
            -
                                         :user | 
| 49 | 
            +
                                         :user     => user,
         | 
| 50 50 | 
             
                                         :password => pass,
         | 
| 51 | 
            -
                                         :host | 
| 52 | 
            -
                                         :encoding =>  | 
| 51 | 
            +
                                         :host     => host,
         | 
| 52 | 
            +
                                         :encoding => "utf8")
         | 
| 53 53 |  | 
| 54 54 | 
             
                    db[SQL].each do |post|
         | 
| 55 | 
            -
                      name = [  | 
| 56 | 
            -
                                | 
| 57 | 
            -
                                | 
| 58 | 
            -
                               post[:slug].strip ].join( | 
| 59 | 
            -
                      name +=  | 
| 55 | 
            +
                      name = [ format("%.04d", post[:date].year),
         | 
| 56 | 
            +
                               format("%.02d", post[:date].month),
         | 
| 57 | 
            +
                               format("%.02d", post[:date].day),
         | 
| 58 | 
            +
                               post[:slug].strip, ].join("-")
         | 
| 59 | 
            +
                      name += ".textile"
         | 
| 60 60 |  | 
| 61 | 
            -
                      File.open("_posts/#{name}",  | 
| 62 | 
            -
                        f.puts({  | 
| 63 | 
            -
                                  | 
| 64 | 
            -
                                  | 
| 65 | 
            -
                                  | 
| 66 | 
            -
             | 
| 67 | 
            -
                        f.puts '---'
         | 
| 61 | 
            +
                      File.open("_posts/#{name}", "w") do |f|
         | 
| 62 | 
            +
                        f.puts({ "layout"     => "post",
         | 
| 63 | 
            +
                                 "title"      => post[:title].to_s,
         | 
| 64 | 
            +
                                 "enki_id"    => post[:id],
         | 
| 65 | 
            +
                                 "categories" => post[:tags], }.delete_if { |_k, v| v.nil? || v == "" }.to_yaml)
         | 
| 66 | 
            +
                        f.puts "---"
         | 
| 68 67 | 
             
                        f.puts post[:body].delete("\r")
         | 
| 69 68 | 
             
                      end
         | 
| 70 69 | 
             
                    end
         |