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