Module: Guard::Jasmine::Util

Included in:
Guard::Jasmine, CLI, Runner, JasmineCoverage
Defined in:
lib/guard/jasmine/util.rb

Overview

Provider of some shared utility methods.

Instance Method Summary collapse

Instance Method Details

#find_free_server_portInteger

Finds a free server port to use



86
87
88
# File 'lib/guard/jasmine/util.rb', line 86

def find_free_server_port
  ::Jasmine.find_unused_port
end

#phantomjs_bin_valid?(bin) ⇒ Boolean

Verifies that the phantomjs bin is available and the right version is installed.



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/guard/jasmine/util.rb', line 57

def phantomjs_bin_valid?(bin)
  if bin && !bin.empty?
    version = `#{ bin } --version`

    if version
      # Remove all but version, e.g. from '1.5 (development)'
      cleaned_version = version.match(/(\d\.)*(\d)/)

      if cleaned_version
        if Gem::Version.new(cleaned_version[0]) < Gem::Version.new('1.3.0')
          ::Guard::Jasmine::Formatter.error "PhantomJS executable at #{ bin } must be at least version 1.3.0"
        else
          true
        end
      else
        ::Guard::Jasmine::Formatter.error "PhantomJS reports unknown version format: #{ version }"
      end
    else
      ::Guard::Jasmine::Formatter.error "PhantomJS executable doesn't exist at #{ bin }"
    end
  else
    ::Guard::Jasmine::Formatter.error 'PhantomJS executable couldn\'t be auto detected.'
  end
end

#runner_available?(options) ⇒ Boolean

Verifies if the Jasmine test runner is available. If the runner is not available within 15 seconds, then the availability check will cancel.

Options Hash (options):

  • :server_timeout (Integer)

    the number of seconds to wait for the Jasmine spec server

  • :jasmine_url (String)

    the url of the Jasmine test runner



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/guard/jasmine/util.rb', line 19

def runner_available?(options)
  url = URI.parse(options[:jasmine_url])

  begin
    ::Guard::Jasmine::Formatter.info "Waiting for Jasmine test runner at #{ url }"

    http = Net::HTTP.new(url.host, url.port)
    http.read_timeout = options[:server_timeout]
    http.start do
      response  = http.request(Net::HTTP::Get.new(url.path))
      available = response.code.to_i == 200

      unless available
        ::Guard::Jasmine::Formatter.error "Jasmine test runner failed with status #{ response.code }"
        if response.body
          ::Guard::Jasmine::Formatter.error 'Please open the Jasmine runner in your browser for more information.'
        end
      end

      available
    end

  rescue Timeout::Error
    ::Guard::Jasmine::Formatter.error 'Timeout waiting for the Jasmine test runner.'
    false

  rescue => e
    ::Guard::Jasmine::Formatter.error "Jasmine test runner isn't available: #{ e.message }"
    false
  end
end

#which(cmd) ⇒ String?

Examples:

which('ruby') #=> /usr/bin/ruby


99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/guard/jasmine/util.rb', line 99

def 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.file?(exe) && File.executable?(exe)
    end
  end

  nil
end