lib/scide.rb in scide-0.0.5 vs lib/scide.rb in scide-0.0.6

- old
+ new

@@ -1,26 +1,74 @@ require 'paint' require 'upoj-rb' +# Generator of GNU Screen configuration files. module Scide + + # Current version. VERSION = File.open(File.join(File.dirname(__FILE__), '..', 'VERSION'), 'r').read + + # Exit status codes. + # + # ==== Codes + # * <tt>unexpected</tt> - 1. + # * <tt>invalid_argument</tt> - 2. + # * <tt>not_initialized</tt> - 3. + # * <tt>screen_not_found</tt> - 4. + # * <tt>config_not_found</tt> - 10. + # * <tt>config_not_readable</tt> - 11. + # * <tt>malformed_config</tt> - 12. + # * <tt>invalid_config</tt> - 13. + # * <tt>unknown_project</tt> - 14. EXIT = { :unexpected => 1, :invalid_argument => 2, :not_initialized => 3, :screen_not_found => 4, - :config_not_found => 13, - :config_not_readable => 14, - :malformed_config => 15, - :invalid_config => 16, - :unknown_project => 17 + :config_not_found => 10, + :config_not_readable => 11, + :malformed_config => 12, + :invalid_config => 13, + :unknown_project => 14 } + # Prints a message on <tt>stderr</tt> and exits. + # If #condition is a key from #EXIT, the corresponding value + # will be used as the exit code. Otherwise, scide exits with + # status 1. def self.fail condition, msg - puts - warn Paint[msg, :yellow] - puts - EXIT.key?(condition) ? exit(EXIT[condition]) : exit(1) + if @@exit_on_fail + puts + warn Paint[msg, :yellow] + puts + EXIT.key?(condition) ? exit(EXIT[condition]) : exit(1) + else + raise Scide::Error.new condition, msg + end end + + # By default, scide is meant to be used as a standalone script + # and exits if an error occurs. If <tt>exit_on_fail</tt> is + # false, a Scide::Error will be raised instead. Scide can then + # be used by another script. + def self.exit_on_fail= exit_on_fail + @@exit_on_fail = exit_on_fail + end + + # Scide error. Can be raised if #exit_on_fail is set to false. + class Error < StandardError + attr_reader :condition + + # Returns a new error. + def initialize condition, msg + super msg + @condition = condition + end + end + + private + + @@exit_on_fail = true end +# load scide components %w( command config global opts overmind project screen window ).each{ |dep| require File.join(File.dirname(__FILE__), 'scide', dep) }