class CMD::New

Public Class Methods

new() click to toggle source
# File lib/zarchitect/cmd_new.rb, line 5
def initialize
  Zarchitect.sconf.each { |s| Zarchitect.add_section(s) }
  @section = Zarchitect.section(GPI::CLU.parameters[0])
  if @section.nil?
    GPI.print "Error: Section with key #{GPI::CLU.parameters[0]} does " +
      "not exist."
    GPI.quit
  end
  if GPI::CLU.parameters.size > 2
    @category = nil
    @category = @section.find_category(GPI::CLU.parameters[1])
    if @category.nil?
      GPI.print "Error: category with key #{GPI::CLU.parameters[1]} " +
        "not found in #{@section}."
      GPI.quit
    end
    @title = GPI::CLU.parameters[2]
    @dir = File.join(@section.key, @category.key)
  else
    @title = GPI::CLU.parameters[1]
    @dir = File.join(@section.key)
  end
end

Public Instance Methods

run() click to toggle source
# File lib/zarchitect/cmd_new.rb, line 29
def run
  @id = get_id
  # write file
  a = ZERB.new(File.join(Util.path_to_data, "post.md.erb"))
  data = Hash.new
  data["title"] = @title
  data["date"] = Time.now
  data["author"] = Zarchitect.conf.admin
  data["id"] = @id
  data["category"] = @category
  a.handle_data(data)
  a.prepare
  a.render
  str = a.output
  @dest = File.join(@dir, "#{@id}-#{@title}.md")
  GPI.print "Writing #{@dest}"
  if File.exist?(@dest)
    GPI.print "Error: File at #{@dest} already exists!"
    GPI.quit
  end
  File.open(@dest, "w") { |f| f.write(str) }
  GPI.print "Wrote #{@dest}"
end

Private Instance Methods

get_id() click to toggle source
# File lib/zarchitect/cmd_new.rb, line 55
def get_id
  t = Time.now.to_i
  id = t.to_s(16).downcase

  idlist = Array.new
  Zarchitect.sections.each do |s|
    s.all_posts.each do |p|
      idlist.push p.conf.id if p.conf.has_option?("id")
    end
  end

  i = 1
  while idlist.include?(id) do
    id = (t+i).to_s(16).upcase
    i += 1
  end
  id
end