guard-jasmine 0.9.8 → 0.9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -403,12 +403,19 @@ With the given `guard-jasmine` script you're able to configure [Travis CI](http:
403
403
  Simply use the `script` setting in your `.travis.yml`:
404
404
 
405
405
  ```yaml
406
+ before_script:
407
+ - "export DISPLAY=:99.0"
408
+ - "sh -e /etc/init.d/xvfb start"
406
409
  script: 'bundle exec guard-jasmine'
407
410
  ```
408
411
 
409
412
  You can also run your Guard::Jasmine specs after your specs that are ran with `rake` by using `after_script`:
410
413
 
411
414
  ```yaml
415
+ before_script:
416
+ - "export DISPLAY=:99.0"
417
+ - "sh -e /etc/init.d/xvfb start"
418
+ script: 'rake spec'
412
419
  after_script: 'bundle exec guard-jasmine'
413
420
  ```
414
421
 
@@ -1,7 +1,8 @@
1
+ require 'net/http'
2
+
1
3
  require 'guard'
2
4
  require 'guard/guard'
3
5
  require 'guard/watcher'
4
- require 'net/http'
5
6
 
6
7
  module Guard
7
8
 
@@ -10,10 +11,12 @@ module Guard
10
11
  #
11
12
  class Jasmine < Guard
12
13
 
13
- autoload :Formatter, 'guard/jasmine/formatter'
14
14
  autoload :Inspector, 'guard/jasmine/inspector'
15
15
  autoload :Runner, 'guard/jasmine/runner'
16
16
  autoload :Server, 'guard/jasmine/server'
17
+ autoload :Util, 'guard/jasmine/util'
18
+
19
+ extend Util
17
20
 
18
21
  attr_accessor :last_run_failed, :last_failed_paths
19
22
 
@@ -72,11 +75,11 @@ module Guard
72
75
  # @raise [:task_has_failed] when run_on_change has failed
73
76
  #
74
77
  def start
75
- if phantomjs_bin_valid?(options[:phantomjs_bin])
78
+ if Jasmine.phantomjs_bin_valid?(options[:phantomjs_bin])
76
79
 
77
80
  Server.start(options[:server], options[:port], options[:server_env]) unless options[:server] == :none
78
81
 
79
- if jasmine_runner_available?(options[:jasmine_url])
82
+ if Jasmine.runner_available?(options[:jasmine_url])
80
83
  run_all if options[:all_on_start]
81
84
  end
82
85
  else
@@ -137,98 +140,5 @@ module Guard
137
140
  throw :task_has_failed unless passed
138
141
  end
139
142
 
140
- private
141
-
142
- # Verifies if the Jasmine test runner is available.
143
- #
144
- # @param [String] url the location of the test runner
145
- # @return [Boolean] when the runner is available
146
- #
147
- def jasmine_runner_available?(url)
148
- url = URI.parse(url)
149
-
150
- begin
151
- Net::HTTP.start(url.host, url.port) do |http|
152
- response = http.request(Net::HTTP::Head.new(url.path))
153
-
154
- if response.code.to_i == 200
155
- Formatter.info("Jasmine test runner is available at #{ url }")
156
- else
157
- notify_failure("Jasmine test runner isn't available", "Jasmine test runner isn't available at #{ url }")
158
- end
159
-
160
- response.code.to_i == 200
161
- end
162
-
163
- rescue
164
- notify_failure("Jasmine test runner isn't available", "Jasmine test runner isn't available at #{ url }")
165
-
166
- false
167
- end
168
- end
169
-
170
- # Verifies that the phantomjs bin is available and the
171
- # right version is installed.
172
- #
173
- # @param [String] bin the location of the phantomjs bin
174
- # @return [Boolean] when the runner is available
175
- #
176
- def phantomjs_bin_valid?(bin)
177
- if bin && !bin.empty?
178
- version = `#{ bin } --version`
179
-
180
- if version
181
- # Remove all but version, e.g. from '1.5 (development)'
182
- version = version.match(/(\d\.)*(\d)/)[0]
183
-
184
- if Gem::Version.new(version) < Gem::Version.new('1.3.0')
185
- notify_failure('Wrong PhantomJS version', "PhantomJS executable at #{ bin } must be at least version 1.3.0")
186
- else
187
- true
188
- end
189
- else
190
- notify_failure('PhantomJS executable missing', "PhantomJS executable doesn't exist at #{ bin }")
191
- end
192
- else
193
- notify_failure('PhantomJS executable missing', "PhantomJS executable couldn't be auto detected.")
194
- end
195
- end
196
-
197
- # Notify a failure.
198
- #
199
- # @param title [String] the failure title
200
- # @param message [String] the failure message
201
- #
202
- def notify_failure(title, message)
203
- Formatter.error(message)
204
- Formatter.notify(message,
205
- :title => title,
206
- :image => :failed,
207
- :priority => 2) if options[:notification]
208
- false
209
- end
210
-
211
- # Cross-platform way of finding an executable in the $PATH.
212
- # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
213
- #
214
- # @example
215
- # which('ruby') #=> /usr/bin/ruby
216
- #
217
- # @param cmd [String] the executable to find
218
- # @return [String, nil] the path to the executable
219
- #
220
- def self.which(cmd)
221
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
222
-
223
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
224
- exts.each do |ext|
225
- exe = "#{ path }/#{ cmd }#{ ext }"
226
- return exe if File.executable?(exe)
227
- end
228
- end
229
-
230
- nil
231
- end
232
-
233
143
  end
234
144
  end
@@ -4,6 +4,7 @@ require 'guard/jasmine/version'
4
4
  require 'guard/jasmine/runner'
5
5
  require 'guard/jasmine/formatter'
6
6
  require 'guard/jasmine/server'
7
+ require 'guard/jasmine/util'
7
8
 
8
9
  module Guard
9
10
  class Jasmine
@@ -15,6 +16,7 @@ module Guard
15
16
  # This outputs the specdoc and disables any notifications.
16
17
  #
17
18
  class CLI < Thor
19
+ extend Util
18
20
 
19
21
  default_task :spec
20
22
 
@@ -41,7 +43,6 @@ module Guard
41
43
  method_option :bin,
42
44
  :type => :string,
43
45
  :aliases => '-b',
44
- :default => '/usr/local/bin/phantomjs',
45
46
  :desc => 'The location of the PhantomJS binary'
46
47
 
47
48
  method_option :timeout,
@@ -72,7 +73,7 @@ module Guard
72
73
 
73
74
  runner = {}
74
75
  runner[:jasmine_url] = options.url
75
- runner[:phantomjs_bin] = options.bin
76
+ runner[:phantomjs_bin] = options.bin || CLI.which('phantomjs')
76
77
  runner[:timeout] = options.timeout
77
78
  runner[:port] = options.port
78
79
  runner[:server_env] = options.server_env
@@ -84,13 +85,21 @@ module Guard
84
85
  runner[:max_error_notify] = 0
85
86
  runner[:specdoc] = :always
86
87
 
87
- ::Guard::Jasmine::Server.start(runner[:server], runner[:port], runner[:server_env]) unless runner[:server] == :none
88
- result = ::Guard::Jasmine::Runner.run(paths, runner)
88
+ if CLI.phantomjs_bin_valid?(runner[:phantomjs_bin])
89
+ ::Guard::Jasmine::Server.start(runner[:server], runner[:port], runner[:server_env]) unless runner[:server] == :none
89
90
 
90
- ::Guard::Jasmine::Server.stop
91
+ if CLI.runner_available?(runner[:jasmine_url])
92
+ result = ::Guard::Jasmine::Runner.run(paths, runner)
93
+ ::Guard::Jasmine::Server.stop
91
94
 
92
- exit_code = result.first ? 0 : 1
93
- Process.exit exit_code
95
+ Process.exit result.first ? 0 : 1
96
+ else
97
+ Process.exit 2
98
+ end
99
+
100
+ else
101
+ Process.exit 2
102
+ end
94
103
 
95
104
  rescue Exception => e
96
105
  raise e if e.is_a?(SystemExit)
@@ -113,6 +113,7 @@ page.onInitialized = ->
113
113
  suites: []
114
114
  }
115
115
 
116
+ specCount: 0
116
117
  currentSpecs: []
117
118
  nestedSuiteResults: {}
118
119
 
@@ -140,6 +141,7 @@ page.onInitialized = ->
140
141
  messages.push result.message for result in spec.results().getItems()
141
142
  specResult['messages'] = messages if messages.length isnt 0
142
143
 
144
+ @specCount += 1
143
145
  @currentSpecs.push specResult
144
146
 
145
147
  # Report results from a suite.
@@ -180,7 +182,7 @@ page.onInitialized = ->
180
182
  @runnerResult['passed'] = runner.results().failedCount is 0
181
183
 
182
184
  @runnerResult['stats'] = {
183
- specs: runner.results().totalCount
185
+ specs: @specCount
184
186
  failures: runner.results().failedCount
185
187
  time: runtime
186
188
  }
@@ -0,0 +1,90 @@
1
+ require 'guard/jasmine/formatter'
2
+
3
+ module Guard
4
+ class Jasmine
5
+
6
+ # Provider of some shared utility methods.
7
+ #
8
+ module Util
9
+
10
+ # Verifies if the Jasmine test runner is available.
11
+ #
12
+ # @param [String] url the location of the test runner
13
+ # @return [Boolean] when the runner is available
14
+ #
15
+ def runner_available?(url)
16
+ url = URI.parse(url)
17
+
18
+ begin
19
+ Net::HTTP.start(url.host, url.port) do |http|
20
+ response = http.request(Net::HTTP::Head.new(url.path))
21
+
22
+ if response.code.to_i == 200
23
+ ::Guard::Jasmine::Formatter.info "Jasmine test runner is available at #{ url }"
24
+ else
25
+ ::Guard::Jasmine::Formatter.error "Jasmine test runner isn't available at #{ url }"
26
+ end
27
+
28
+ response.code.to_i == 200
29
+ end
30
+
31
+ rescue
32
+ ::Guard::Jasmine::Formatter.error "Jasmine test runner isn't available at #{ url }"
33
+
34
+ false
35
+ end
36
+ end
37
+
38
+ # Verifies that the phantomjs bin is available and the
39
+ # right version is installed.
40
+ #
41
+ # @param [String] bin the location of the phantomjs bin
42
+ # @return [Boolean] when the runner is available
43
+ #
44
+ def phantomjs_bin_valid?(bin)
45
+ if bin && !bin.empty?
46
+ version = `#{ bin } --version`
47
+
48
+ if version
49
+ # Remove all but version, e.g. from '1.5 (development)'
50
+ version = version.match(/(\d\.)*(\d)/)[0]
51
+
52
+ if Gem::Version.new(version) < Gem::Version.new('1.3.0')
53
+ ::Guard::Jasmine::Formatter.error "PhantomJS executable at #{ bin } must be at least version 1.3.0"
54
+ else
55
+ true
56
+ end
57
+ else
58
+ ::Guard::Jasmine::Formatter.error "PhantomJS executable doesn't exist at #{ bin }"
59
+ end
60
+ else
61
+ ::Guard::Jasmine::Formatter.error "PhantomJS executable couldn't be auto detected."
62
+ end
63
+ end
64
+
65
+ # Cross-platform way of finding an executable in the $PATH.
66
+ # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
67
+ #
68
+ # @example
69
+ # which('ruby') #=> /usr/bin/ruby
70
+ #
71
+ # @param cmd [String] the executable to find
72
+ # @return [String, nil] the path to the executable
73
+ #
74
+ def which(cmd)
75
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
76
+
77
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
78
+ exts.each do |ext|
79
+ exe = "#{ path }/#{ cmd }#{ ext }"
80
+ return exe if File.executable?(exe)
81
+ end
82
+ end
83
+
84
+ nil
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+ end
@@ -1,6 +1,6 @@
1
1
  module Guard
2
2
  module JasmineVersion
3
3
  # Guard::Jasmine version that is used for the Gem specification
4
- VERSION = '0.9.8'
4
+ VERSION = '0.9.9'
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-jasmine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.8
4
+ version: 0.9.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-02 00:00:00.000000000 Z
12
+ date: 2012-02-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guard
16
- requirement: &70172271369340 !ruby/object:Gem::Requirement
16
+ requirement: &70095772257560 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.8.3
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70172271369340
24
+ version_requirements: *70095772257560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &70172271368940 !ruby/object:Gem::Requirement
27
+ requirement: &70095772257160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70172271368940
35
+ version_requirements: *70095772257160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: childprocess
38
- requirement: &70172271364640 !ruby/object:Gem::Requirement
38
+ requirement: &70095772256500 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70172271364640
46
+ version_requirements: *70095772256500
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: thor
49
- requirement: &70172271364160 !ruby/object:Gem::Requirement
49
+ requirement: &70095772255840 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70172271364160
57
+ version_requirements: *70095772255840
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70172271363600 !ruby/object:Gem::Requirement
60
+ requirement: &70095772255220 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70172271363600
68
+ version_requirements: *70095772255220
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-rspec
71
- requirement: &70172271362980 !ruby/object:Gem::Requirement
71
+ requirement: &70095772254600 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70172271362980
79
+ version_requirements: *70095772254600
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70172271362320 !ruby/object:Gem::Requirement
82
+ requirement: &70095772254000 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70172271362320
90
+ version_requirements: *70095772254000
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: yard
93
- requirement: &70172271361880 !ruby/object:Gem::Requirement
93
+ requirement: &70095772253460 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70172271361880
101
+ version_requirements: *70095772253460
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: redcarpet
104
- requirement: &70172271361460 !ruby/object:Gem::Requirement
104
+ requirement: &70095772253040 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70172271361460
112
+ version_requirements: *70095772253040
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: pry
115
- requirement: &70172271361000 !ruby/object:Gem::Requirement
115
+ requirement: &70095772252620 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70172271361000
123
+ version_requirements: *70095772252620
124
124
  description: Guard::Jasmine automatically tests your Jasmine specs on PhantomJS
125
125
  email:
126
126
  - michi@netzpiraten.ch
@@ -145,6 +145,7 @@ files:
145
145
  - lib/guard/jasmine/server.rbc
146
146
  - lib/guard/jasmine/task.rb
147
147
  - lib/guard/jasmine/templates/Guardfile
148
+ - lib/guard/jasmine/util.rb
148
149
  - lib/guard/jasmine/version.rb
149
150
  - lib/guard/jasmine/version.rbc
150
151
  - lib/guard/jasmine.rb