class JekyllImport::Importers::Joomla
Public Class Methods
process(options)
click to toggle source
# File lib/jekyll-import/importers/joomla.rb, line 32 def self.process(options) dbname = options.fetch("dbname") user = options.fetch("user") pass = options.fetch("password", "") host = options.fetch("host", "127.0.0.1") port = options.fetch("port", 3306).to_i section = options.fetch("section", "1") table_prefix = options.fetch("prefix", "jos_") db = Sequel.mysql2(dbname, :user => user, :password => pass, :host => host, :port => port, :encoding => "utf8") FileUtils.mkdir_p("_posts") # Reads a MySQL database via Sequel and creates a post file for each # post in wp_posts that has post_status = 'publish'. This restriction is # made because 'draft' posts are not guaranteed to have valid dates. query = "SELECT `title`, `alias`, CONCAT(`introtext`,`fulltext`) as content, `created`, `id` FROM #{table_prefix}content WHERE (state = '0' OR state = '1') AND sectionid = '#{section}'" db[query].each do |post| # Get required fields and construct Jekyll compatible name. title = post[:title] date = post[:created] content = post[:content] id = post[:id] # Construct a slug from the title if alias field empty. # Remove illegal filename characters. slug = if !post[:alias] || post[:alias].empty? sluggify(post[:title]) else sluggify(post[:alias]) end name = format("%02d-%02d-%02d-%03d-%s.markdown", date.year, date.month, date.day, id, slug) # Get the relevant fields as a hash, delete empty fields and convert # to YAML for the header. data = { "layout" => "post", "title" => title.to_s, "joomla_id" => post[:id], "joomla_url" => post[:alias], "date" => date, }.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/joomla.rb, line 22 def self.require_deps JekyllImport.require_with_fallback(%w( rubygems sequel mysql2 fileutils safe_yaml )) end
sluggify(title)
click to toggle source
Borrowed from the Wordpress importer
# File lib/jekyll-import/importers/joomla.rb, line 87 def self.sluggify(title) title.downcase.gsub(%r![^0-9A-Za-z]+!, " ").strip.tr(" ", "-") end
specify_options(c)
click to toggle source
# File lib/jekyll-import/importers/joomla.rb, line 12 def self.specify_options(c) c.option "dbname", "--dbname", "Database name." c.option "user", "--user", "Database user name." c.option "password", "--password", "Database user's password. (default: '')" c.option "host", "--host", "Database host name. (default: 'localhost')" c.option "port", "--port", "Database port. (default: '3306')" c.option "section", "--section", "Section ID. (default: '1')" c.option "prefix", "--prefix", "Table prefix name. (default: 'jos_')" end
validate(options)
click to toggle source
# File lib/jekyll-import/importers/joomla.rb, line 6 def self.validate(options) %w(dbname user).each do |option| abort "Missing mandatory option --#{option}." if options[option].nil? end end