lib/hyde/cli.rb in hydeweb-0.1.6 vs lib/hyde/cli.rb in hydeweb-0.1.7

- old
+ new

@@ -45,23 +45,20 @@ task.category = :create task(:build) do pre = project.config.output_path - begin - project.build { |page| - handler = '' - handler = "(#{page.tilt_engine_name})" if page.tilt? - puts ("\033[0;33m*\033[0;32m #{pre}\033[0;m%-50s%s" % [ page.path, handler ]).strip - } - rescue NoGemError => e - err "Error: #{e.message}" - rescue Error => e - err "Error: #{e.message}" - ensure - project.send :build_cleanup - end + project.build { |page| + c, handler = if page.tilt? + [ 33, "#{page.tilt_engine_name.downcase}" ] + else + [ 30, '*' ] + end + + puts ("\033[0;#{c}m%10s\033[0;32m #{pre}\033[0;m%s" % [ handler, page.path ]).strip + } + project.send :build_cleanup end task.description = "Builds the current project" task.category = :project @@ -149,16 +146,53 @@ err "Invalid command: #{command}" err "Type `#{executable} help` for more info." end end - def self.run!(options={}) - @hydefile = options[:file] - return invoke(:version) if ARGV == ['-v'] - return invoke(:version) if ARGV == ['--version'] + def self.run(*argv) + return invoke(:version) if argv == ['-v'] || argv == ['--version'] + trace = (!!argv.delete('--trace')) + begin - super *[] + super *argv + + rescue SyntaxError => e + raise e if trace + err + say_error e.message.split("\n").last + err + say_error "You have a syntax error." + say_info "Use --trace for more info." + + # Convert 'can't load redcloth' to a friendly 'please gem install RedCloth' + rescue LoadError => e + raise e if trace + show_needed_gem gem_name(e) + + # Print generic errors as something friendlier + rescue => e + raise e if trace + + # Can't assume that HAML is always available. + if Object.const_defined?(:Haml) && e.is_a?(Haml::Error) + # Convert HAML's "Can't run XX filter; required 'yy'" messages + # to something friendlier + needed = %w(rdiscount stringio sass/plugin redcloth) + needed.detect { |what| show_needed_gem(what) && true if e.message.include?(what) } + else + err + say_error "#{e.class}: #{e.message}" + say_info "#{e.backtrace.first}" + err + say_error "Oops! An error occured." + say_info "Use --trace for more info." + end end + end + + def self.run!(options={}) + @hydefile = options[:file] + super *[] end end end