class BuntoImport::Importers::Jrnl
Public Class Methods
create_filename(date, slug, extension)
click to toggle source
generate filename
# File lib/bunto-import/importers/jrnl.rb, line 80 def self.create_filename(date, slug, extension) return "#{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/bunto-import/importers/jrnl.rb, line 96 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 return data; end
create_slug(title)
click to toggle source
generate slug
# File lib/bunto-import/importers/jrnl.rb, line 75 def self.create_slug(title) return title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') end
get_date(content, offset)
click to toggle source
strip timestamp from the dateline
# File lib/bunto-import/importers/jrnl.rb, line 65 def self.get_date(content, offset) return content[0, offset] end
get_post_content(content)
click to toggle source
strip body from jrnl entry
# File lib/bunto-import/importers/jrnl.rb, line 60 def self.get_post_content(content) return content[1] end
get_title(content, offset)
click to toggle source
strip title from the dateline
# File lib/bunto-import/importers/jrnl.rb, line 70 def self.get_title(content, offset) return 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/bunto-import/importers/jrnl.rb, line 26 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/bunto-import/importers/jrnl.rb, line 5 def self.require_deps BuntoImport.require_with_fallback(%w[ time rubygems safe_yaml ]) end
specify_options(c)
click to toggle source
# File lib/bunto-import/importers/jrnl.rb, line 13 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/bunto-import/importers/jrnl.rb, line 116 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