class RuneBlog
VERSION = "0.0.16"
Path = File.expand_path(File.join(File.dirname(__FILE__)))
DefaultData = Path + "/../data"
BlogHeader = File.read(DefaultData + "/blog_header.html") rescue "not found"
BlogTrailer = File.read(DefaultData + "/blog_trailer.html") rescue "not found"
PostHeader = File.read(DefaultData + "/post_header.html") rescue "not found"
PostTrailer = File.read(DefaultData + "/post_trailer.html") rescue "not found"
end
def clear
puts "\e[H\e[2J" # clear screen
end
def red(text)
"\e[31m#{text}\e[0m"
end
def blue(text)
"\e[34m#{text}\e[0m"
end
def bold(str)
"\e[1m#{str}\e[22m"
end
# FIXME lots of structure changes
require 'yaml'
=begin
Post
----
Create a blog post
Process it
Link it
Upload to server
data
views
computing
compiled
custom
deployment
=end
require 'rubygems'
require 'ostruct'
require 'livetext'
### ask
def ask(prompt, meth = :to_s)
print prompt
STDOUT.flush
STDIN.gets.chomp.send(meth)
end
### quit
def quit
puts
exit
end
### version
def version
puts "\n " + RuneBlog::VERSION
end
### new_blog!
def new_blog!
unless File.exist?(".blog")
yn = ask("No .blog found. Create new blog?")
if yn.upcase == "Y"
#-- what if data already exists?
system("cp -r #{RuneBlog::DefaultData} .")
File.open(".blog", "w") {|f| f.puts "data" }
end
end
end
### next_sequence
def next_sequence
@config.sequence += 1
File.open("#{@config.root}/sequence", "w") {|f| f.puts @config.sequence }
@config.sequence
end
### make_slug
def make_slug(title, seq=nil)
num = '%04d' % (seq || next_sequence) # FIXME can do better
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
"#{num}-#{slug}"
end
### read_config
def read_config
@config = OpenStruct.new
# What views are there? Deployment, etc.
# Crude - FIXME later
root = File.readlines(".blog").first.chomp rescue "myblog"
dirs = Dir.entries("#{root}/views/") - %w[. ..]
dirs.reject! {|x| ! File.directory?("#{root}/views/#{x}") }
@config.root = root
@config.views = dirs
@config.sequence = File.read(root + "/sequence").to_i
rescue => err
if root != "myblog"
raise err
end
new_blog!
STDERR.puts "Created. Now run again."
exit
end
### create_empty_post
def create_empty_post
@template = <<-EOS
.mixin liveblog
.liveblog_version
.title #{@title}
.pubdate #{@date}
.categories elixir ruby
.views computing
Teaser goes here.
.readmore
Remainder of post goes here.
EOS
@slug = make_slug(@title)
@fname = @slug + ".lt3"
File.open("#{@config.root}/src/#{@fname}", "w") {|f| f.puts @template }
@fname
end
### edit_post
def edit_post(file)
system("vi #{@config.root}/src/#{file}")
end
### process_post
def process_post(file)
lt ||= Livetext.new
# puts " Processing: #{Dir.pwd}/#{file}"
path = @config.root + "/src/#{file}"
lt.process_file(path)
@meta = lt.main.instance_eval { @meta }
@meta.slug = file.sub(/.lt3$/, "")
@meta
end
### reload_post
def reload_post(file)
@main ||= Livetext.new
@meta = process_post("#{@config.root}/src/#{file}")
@meta.slug = file.sub(/.lt3$/, "")
@meta
end
### posting
def posting(meta)
<<-HTML
#{meta.pubdate}
#{meta.title}
#{meta.teaser}
Read more...