Skip to content

Instantly share code, notes, and snippets.

@evantravers
Created April 8, 2020 17:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evantravers/d051eba6516c02e312c687fa112a98f8 to your computer and use it in GitHub Desktop.
Save evantravers/d051eba6516c02e312c687fa112a98f8 to your computer and use it in GitHub Desktop.
require 'date'
SRC = "./"
DST = "./migrated"
ORGTAG = /:([a-zA-Z\-_]+)/
def render(data)
%{id: #{data[:id]}
tags: #{data[:tags]}
date: #{data[:date]}
#{data[:body]}}
end
def id(datetime)
datetime.strftime("%Y%m%d%H%M%S")
end
def clean_body(string)
string
.gsub(/^## +\d\d\d\d-\d\d-\d\d\n\n/, "")
.gsub(/^## \d\d-\d\d-\d\d\d\d\n\n/, "")
end
def clean_title(string)
string
.downcase
.gsub(/[^a-zA-Z\-]/, "-")
.gsub(/-{2,}/, '-')
end
Dir.foreach(SRC) do |filename|
unless ["bible-study.md"].include?(filename)
if filename.match?(/.*\.(?:md|txt)/)
data = Hash.new
content = File.read(filename)
# EXTRACT date from filename and put in metadata
datestring =
filename
.scan(/(\d+)/)
.flatten
.map{ |n| n.to_i }
# handle backwards filenames
if datestring.empty?
date = File.birthtime(filename)
else
if datestring[0] < 100
datestring = [datestring[2], datestring[0], datestring[1]]
end
date = DateTime.new(*datestring)
end
# ADD id to metadata based on date
data[:id] = id(date)
data[:date] = date.strftime("%a, %e %b %Y %T")
# EXTRACT tags from /:\w+:/ format and transform to hashtags
tags =
content
.scan(ORGTAG)
.flatten
.map{ |t| '#' + t.gsub(":", "").gsub('-', '_').downcase }
.uniq
content.gsub!(ORGTAG, '\1')
# ADD tag for #journal
tags.push('#journal')
tags.push('#devotional')
data[:tags] = tags.join(', ')
# DETERMINE from first four words
if filename.gsub(/\.(?:txt|md)/, '').scan(/[a-zA-Z]+/).empty?
title = content.split(' ').filter{|w| w.match(/[a-zA-Z]/)}.take(4).join(' ')
else
title = filename.gsub(/\.(?:txt|md)/, '')
end
data[:title] = title
data[:body] = clean_body(content)
# WRITE filename with new filename to a new folder
filename = "#{data[:id]}-#{clean_title(title)}.md"
puts filename
puts render(data)
puts "\n\n --- \n\n"
IO.write(DST + '/' + filename, render(data))
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment