lib/guard/jasmine.rb in guard-jasmine-0.9.8 vs lib/guard/jasmine.rb in guard-jasmine-0.9.9

- old
+ new

@@ -1,22 +1,25 @@ +require 'net/http' + require 'guard' require 'guard/guard' require 'guard/watcher' -require 'net/http' module Guard # The Jasmine guard that gets notifications about the following # Guard events: `start`, `stop`, `reload`, `run_all` and `run_on_change`. # class Jasmine < Guard - autoload :Formatter, 'guard/jasmine/formatter' autoload :Inspector, 'guard/jasmine/inspector' autoload :Runner, 'guard/jasmine/runner' autoload :Server, 'guard/jasmine/server' + autoload :Util, 'guard/jasmine/util' + extend Util + attr_accessor :last_run_failed, :last_failed_paths DEFAULT_OPTIONS = { :server => :auto, :server_env => 'development', @@ -70,15 +73,15 @@ # Gets called once when Guard starts. # # @raise [:task_has_failed] when run_on_change has failed # def start - if phantomjs_bin_valid?(options[:phantomjs_bin]) + if Jasmine.phantomjs_bin_valid?(options[:phantomjs_bin]) Server.start(options[:server], options[:port], options[:server_env]) unless options[:server] == :none - if jasmine_runner_available?(options[:jasmine_url]) + if Jasmine.runner_available?(options[:jasmine_url]) run_all if options[:all_on_start] end else throw :task_has_failed end @@ -133,102 +136,9 @@ end self.last_run_failed = !passed throw :task_has_failed unless passed - end - - private - - # Verifies if the Jasmine test runner is available. - # - # @param [String] url the location of the test runner - # @return [Boolean] when the runner is available - # - def jasmine_runner_available?(url) - url = URI.parse(url) - - begin - Net::HTTP.start(url.host, url.port) do |http| - response = http.request(Net::HTTP::Head.new(url.path)) - - if response.code.to_i == 200 - Formatter.info("Jasmine test runner is available at #{ url }") - else - notify_failure("Jasmine test runner isn't available", "Jasmine test runner isn't available at #{ url }") - end - - response.code.to_i == 200 - end - - rescue - notify_failure("Jasmine test runner isn't available", "Jasmine test runner isn't available at #{ url }") - - false - end - end - - # Verifies that the phantomjs bin is available and the - # right version is installed. - # - # @param [String] bin the location of the phantomjs bin - # @return [Boolean] when the runner is available - # - def phantomjs_bin_valid?(bin) - if bin && !bin.empty? - version = `#{ bin } --version` - - if version - # Remove all but version, e.g. from '1.5 (development)' - version = version.match(/(\d\.)*(\d)/)[0] - - if Gem::Version.new(version) < Gem::Version.new('1.3.0') - notify_failure('Wrong PhantomJS version', "PhantomJS executable at #{ bin } must be at least version 1.3.0") - else - true - end - else - notify_failure('PhantomJS executable missing', "PhantomJS executable doesn't exist at #{ bin }") - end - else - notify_failure('PhantomJS executable missing', "PhantomJS executable couldn't be auto detected.") - end - end - - # Notify a failure. - # - # @param title [String] the failure title - # @param message [String] the failure message - # - def notify_failure(title, message) - Formatter.error(message) - Formatter.notify(message, - :title => title, - :image => :failed, - :priority => 2) if options[:notification] - false - end - - # Cross-platform way of finding an executable in the $PATH. - # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby - # - # @example - # which('ruby') #=> /usr/bin/ruby - # - # @param cmd [String] the executable to find - # @return [String, nil] the path to the executable - # - def self.which(cmd) - exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] - - ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| - exts.each do |ext| - exe = "#{ path }/#{ cmd }#{ ext }" - return exe if File.executable?(exe) - end - end - - nil end end end