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