ace/bin/ace

79 lines
2.0 KiB
Plaintext
Raw Normal View History

2010-10-20 15:42:17 +02:00
#!/usr/bin/env ruby
# encoding: utf-8
if RUBY_VERSION < "1.9.1"
2011-03-14 12:25:31 +01:00
abort "Ace requires Ruby 1.9"
2010-10-20 15:42:17 +02:00
end
base = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
libdir = File.expand_path(File.join(File.dirname(base), "..", "lib"))
# because of system installation, there is bin/../lib, but not bin/../lib/ace
if File.directory?(File.join(libdir, "ace"))
$:.unshift(libdir) unless $:.include?(libdir)
end
require "ace"
require "ace/dsl"
if File.join(Dir.pwd, "boot.rb")
require File.join(Dir.pwd, "boot.rb")
else
abort "No boot.rb!"
end
if File.join(Dir.pwd, "rules.rb")
path = File.join(Dir.pwd, "rules.rb")
code = File.read(path)
rules = Ace::DSL.new
begin
rules.instance_eval(code)
rescue Exception => exception
puts "Error in DSL: #{exception.message}"
puts exception.backtrace
exit 1
end
else
abort "No rules.rb!"
end
rules.rules.each do |klass, files|
2011-03-17 20:02:11 +01:00
# puts "#{klass} #{files.inspect}"
2010-10-20 15:42:17 +02:00
files.each do |file|
2011-03-20 20:48:42 +01:00
if File.binread(file).match(/^-{3,5}\s*$/) # TODO: this should be a filter or lazy-loaded
2011-03-17 20:02:11 +01:00
puts "~ Read #{file} with parse"
2010-10-20 15:42:17 +02:00
raw_item = Ace::RawItem.new(file).tap(&:parse)
2011-08-16 21:17:19 +02:00
item = klass.create(raw_item.metadata, raw_item.content, file)
2010-10-20 15:42:17 +02:00
else
2011-03-17 20:02:11 +01:00
puts "~ Read #{file} without parse"
raw_item = Ace::RawItem.new(file).tap(&:set_timestamps_in_metadata)
item = klass.create(raw_item.metadata, File.read(file), file)
2010-10-20 15:42:17 +02:00
end
end
end
puts
# Generator is anything what provides #generate method.
rules.generators.each do |generator|
puts "~ Running generator #{generator}"
2010-10-20 15:42:17 +02:00
begin
if generator.respond_to?(:generate)
generator.generate
2010-10-20 15:42:17 +02:00
else
abort "Generator #{generator.inspect} doesn't respond to the #generate method!"
2010-10-20 15:42:17 +02:00
end
rescue Exception => exception
puts "Error in generator #{generator.inspect}: #{exception.message}"
puts exception.backtrace
exit 1
end
end
2011-07-10 14:40:59 +02:00
unless ARGV.include?("--no-generate")
puts
Ace::Item.all_instances.uniq.each do |item|
2011-07-10 14:40:59 +02:00
item.save!
end
2010-10-20 15:42:17 +02:00
end