class JekyllImport::Importers::Jrnl

Public Class Methods

create_filename(date, slug, extension) click to toggle source

generate filename

# File lib/jekyll-import/importers/jrnl.rb, line 81
def self.create_filename(date, slug, extension)
  "#{Time.parse(date).strftime("%Y-%m-%d")}-#{slug}.#{extension}"
end
create_meta(layout, title, date) click to toggle source

Prepare YAML meta data

layout - name of the layout title - title of the entry date - date of entry creation

Examples

create_meta("post", "Entry 1", "2013-01-01 13:00")
# => "---\nlayout: post\ntitle: Entry 1\ndate: 2013-01-01 13:00\n"

Returns array converted to YAML

# File lib/jekyll-import/importers/jrnl.rb, line 97
def self.create_meta(layout, title, date)
  data = {
    "layout" => layout,
    "title"  => title,
    "date"   => Time.parse(date).strftime("%Y-%m-%d %H:%M %z"),
  }.to_yaml
  data
end
create_slug(title) click to toggle source

generate slug

# File lib/jekyll-import/importers/jrnl.rb, line 76
def self.create_slug(title)
  title.downcase.strip.tr(" ", "-").gsub(%r![^\w-]!, "")
end
get_date(content, offset) click to toggle source

strip timestamp from the dateline

# File lib/jekyll-import/importers/jrnl.rb, line 66
def self.get_date(content, offset)
  content[0, offset]
end
get_post_content(content) click to toggle source

strip body from jrnl entry

# File lib/jekyll-import/importers/jrnl.rb, line 61
def self.get_post_content(content)
  content[1]
end
get_title(content, offset) click to toggle source

strip title from the dateline

# File lib/jekyll-import/importers/jrnl.rb, line 71
def self.get_title(content, offset)
  content[offset + 1, content.length]
end
process(options) click to toggle source

Reads a jrnl file and creates a new post for each entry The following overrides are available: :file path to input file :time_format the format used by the jrnl configuration :extension the extension format of the output files :layout explicitly set the layout of the output

# File lib/jekyll-import/importers/jrnl.rb, line 27
def self.process(options)
  file        = options.fetch("file", "~/journal.txt")
  time_format = options.fetch("time_format", "%Y-%m-%d %H:%M")
  extension   = options.fetch("extension", "md")
  layout      = options.fetch("layout", "post")

  date_length = Time.now.strftime(time_format).length

  # convert relative to absolute if needed
  file = File.expand_path(file)

  abort "The jrnl file was not found. Please make sure '#{file}' exists. You can specify a different file using the --file switch." unless File.file?(file)

  input = File.read(file)
  entries = input.split("\n\n")

  entries.each do |entry|
    # split dateline and body
    # content[0] has the date and title
    # content[1] has the post body
    content = entry.split("\n")

    body = get_post_content(content)
    date = get_date(content[0], date_length)
    title = get_title(content[0], date_length)
    slug = create_slug(title)
    filename = create_filename(date, slug, extension)
    meta = create_meta(layout, title, date) # prepare YAML meta data

    write_file(filename, meta, body) # write to file
  end
end
require_deps() click to toggle source
# File lib/jekyll-import/importers/jrnl.rb, line 6
def self.require_deps
  JekyllImport.require_with_fallback(%w(
    time
    rubygems
    safe_yaml
  ))
end
specify_options(c) click to toggle source
# File lib/jekyll-import/importers/jrnl.rb, line 14
def self.specify_options(c)
  c.option "file",        "--file FILENAME",      "Journal file. (default: '~/journal.txt')"
  c.option "time_format", "--time_format FORMAT", "Time format of your journal. (default: '%Y-%m-%d %H:%M')"
  c.option "extension",   "--extension EXT",      "Output extension. (default: 'md')"
  c.option "layout",      "--layout NAME",        "Output post layout. (default: 'post')"
end
write_file(filename, meta, body) click to toggle source

Writes given data to file

filename - name of the output file meta - YAML header data body - jrnl entry content

Examples

write_file("2013-01-01-entry-1.md", "---\nlayout: post\ntitle: Entry 1\ndate: 2013-01-01 13:00\n", "This is the first entry for my new journal")

Writes file to _posts/filename

# File lib/jekyll-import/importers/jrnl.rb, line 117
def self.write_file(filename, meta, body)
  File.open("_posts/#{filename}", "w") do |f|
    f.puts meta
    f.puts "---\n\n"
    f.puts body
  end
end