Sha256: 13a21c049bf346205f35fde8aaa8e7ac29c82e2de06cb3f16394a1e6a15fc825

Contents?: true

Size: 1.58 KB

Versions: 12

Compression:

Stored size: 1.58 KB

Contents

module JekyllImport
  module Importers
    class CSV < Importer
      def self.require_deps
        JekyllImport.require_with_fallback(%w[
          csv
          fileutils
        ])
      end

      def self.specify_options(c)
        c.option 'file', '--file NAME', 'The CSV file to import (default: "posts.csv")'
        c.option 'no-front-matter', '--no-front-matter', 'Do not add the default front matter to the post body'
      end

      # Reads a csv with title, permalink, body, published_at, and filter.
      # It creates a post file for each row in the csv
      def self.process(options)
        file = options.fetch('file', "posts.csv")

        FileUtils.mkdir_p "_posts"
        posts = 0
        abort "Cannot find the file '#{file}'. Aborting." unless File.file?(file)

        ::CSV.foreach(file) do |row|
          next if row[0] == "title"
          posts += 1
          name = build_name(row)
          write_post(name, row[0], row[2], options)
        end
        "Created #{posts} posts!"
      end

      def self.write_post(name, title, content, options)
        File.open("_posts/#{name}", "w") do |f|
          write_frontmatter(f, title, options)
          f.puts content
        end
      end

      def self.build_name(row)
        row[3].split(" ")[0]+"-"+row[1]+(row[4] =~ /markdown/ ? ".markdown" : ".textile")
      end

      def self.write_frontmatter(f, title, options)
        no_frontmatter = options.fetch('no-front-matter', false)
        unless no_frontmatter
          f.puts <<-HEADER
---
layout: post
title: #{title}
---
HEADER
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
jekyll-import-0.9.0 lib/jekyll-import/importers/csv.rb
jekyll-import-0.8.0 lib/jekyll-import/importers/csv.rb
jekyll-import-0.7.1 lib/jekyll-import/importers/csv.rb
jekyll-import-0.7.0 lib/jekyll-import/importers/csv.rb
jekyll-import-0.6.0 lib/jekyll-import/importers/csv.rb
jekyll-import-0.5.3 lib/jekyll-import/importers/csv.rb
jekyll-import-0.5.2 lib/jekyll-import/importers/csv.rb
jekyll-import-0.5.1 lib/jekyll-import/importers/csv.rb
jekyll-import-0.5.0 lib/jekyll-import/importers/csv.rb
jekyll-import-0.4.1 lib/jekyll-import/importers/csv.rb
jekyll-import-0.4.0 lib/jekyll-import/importers/csv.rb
jekyll-import-0.3.0 lib/jekyll-import/importers/csv.rb