lib/resme/cli/command_semantics.rb in resme-0.2.0 vs lib/resme/cli/command_semantics.rb in resme-0.3.0
- old
+ new
@@ -2,10 +2,12 @@
require 'readline'
require 'fileutils'
require 'date'
require 'yaml'
require 'erb'
+require 'json'
+require 'kwalify'
module Resme
module CommandSemantics
APPNAME = 'resme'
VERSION = Resme::VERSION
@@ -88,10 +90,36 @@
end
#
# APP SPECIFIC COMMANDS
#
+ def self.check opts, argv
+ schema = Kwalify::Yaml.load_file(File.join(File.dirname(__FILE__), "/../templates/schema.yml"))
+ ## or
+ # schema = YAML.load_file('schema.yaml')
+
+ ## create validator
+ validator = Kwalify::Validator.new(schema)
+
+ ## load document
+ document = Kwalify::Yaml.load_file(argv[0])
+ ## or
+ #document = YAML.load_file('document.yaml')
+
+ ## validate
+ errors = validator.validate(document)
+
+ ## show errors
+ if errors && !errors.empty?
+ for e in errors
+ puts "[#{e.path}] #{e.message}"
+ end
+ else
+ puts "The file #{argv[0]} validates."
+ end
+ end
+
def self.init opts, argv
output = opts[:output] || "resume.yml"
force = opts[:force]
template = File.join(File.dirname(__FILE__), "/../templates/resume.yml")
@@ -111,10 +139,18 @@
render argv, template, output
puts "Resume generated in #{output}"
end
+ def self.org opts, argv
+ output = opts[:output] || "resume-#{Date.today}.org"
+ template = File.join(File.dirname(__FILE__), "/../templates/resume.org.erb")
+
+ render argv, template, output
+ puts "Resume generated in #{output}"
+ end
+
def self.json opts, argv
output = opts[:output] || "resume-#{Date.today}.json"
template = File.join(File.dirname(__FILE__), "/../templates/resume.json.erb")
render argv, template, output
@@ -136,10 +172,13 @@
data = Hash.new
yml_files.each do |file|
data = data.merge(YAML.load_file(file))
end
template = File.read(template_filename)
- output = ERB.new(template).result(binding)
+ output = ERB.new(template, nil, '-').result(binding)
+ # it is difficult to write readable ERBs with no empty lines...
+ # we use gsub to replace multiple empty lines with \n\n in the final output
+ output.gsub!(/([\t ]*\n){3,}/, "\n\n")
backup_and_write output_filename, output
end
def self.backup filename
FileUtils::cp filename, filename + "~"