class JekyllImport::Importers::Pluxml
Public Class Methods
process(options)
click to toggle source
# File lib/jekyll-import/importers/pluxml.rb, line 28 def self.process(options) source = options.fetch("source") layout = options.fetch("layout") avoid_liquid = options.fetch("avoid_liquid") FileUtils.mkdir_p("_posts") FileUtils.mkdir_p("_drafts") # for each XML file in source location Dir.glob("*.xml", :base => source).each do |df| df = File.join(source, df) filename = File.basename(df, ".*") # prepare post file name in Jekyll format a_filename = filename.split(".") post_name = a_filename.pop file_date = a_filename.pop post_date = file_date[0..3] + "-" + file_date[4..5] + "-" + file_date[6..7] # if draft, only take post name if filename.split(".")[1].split(",")[0] == "draft" directory = "_drafts" name = post_name.to_s # if post, post date precede post name else directory = "_posts" name = "#{post_date}-#{post_name}" end xml = File.open(df) { |f| Nokogiri::XML(f) } raise "There doesn't appear to be any XML items at the source (#{df}) provided." unless xml doc = xml.xpath("document") header = { "layout" => layout, "title" => doc.xpath("title").text, "tags" => doc.xpath("tags").text.split(", "), } header["render_with_liquid"] = false if avoid_liquid path = File.join(directory, "#{name}.html") File.open(path, "w") do |f| f.puts header.to_yaml f.puts "---\n\n" f.puts doc.xpath("chapo").text f.puts doc.xpath("content").text end Jekyll.logger.info "Wrote file #{path} successfully!" end nil end
require_deps()
click to toggle source
# File lib/jekyll-import/importers/pluxml.rb, line 6 def self.require_deps JekyllImport.require_with_fallback(%w( nokogiri fileutils safe_yaml )) end
specify_options(c)
click to toggle source
# File lib/jekyll-import/importers/pluxml.rb, line 14 def self.specify_options(c) c.option "source", "--source NAME", "The PluXml data directory to import." c.option "layout", "--layout NAME", "The layout to apply. (default: 'post')" c.option "avoid_liquid", "--avoid_liquid", "Will add `render_with_liquid: false` in front matter. (default: false)" end
validate(options)
click to toggle source
# File lib/jekyll-import/importers/pluxml.rb, line 20 def self.validate(options) abort "Missing mandatory option --source." if options["source"].nil? # no layout option, layout by default is post options["layout"] = "post" if options["layout"].nil? # no avoid_liquid option, avoid_liquid by default is false options["avoid_liquid"] = false if options["avoid_liquid"].nil? end