watir-rails 2.1.0 → 2.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe6ed7ba7dacef41325223e9976762b5127a0c7a
4
- data.tar.gz: 39d4cc9bcf2e081eb2e0c9d782131a527bed6196
3
+ metadata.gz: 9a45f26d9da43e400198f49fc425cbe39a382631
4
+ data.tar.gz: ac2b52867c14b010cbebc456db6b2e4ccea2dd18
5
5
  SHA512:
6
- metadata.gz: e2767595de51478f889becb4be7f395f2333fe2020c3edfc25e3e5058e6c47cf365a55defdf210b0983ef445f6417b6b27a00895f4f1f644e1395698db0cede8
7
- data.tar.gz: eb1c37f5b2b112b807e6f45c89f1cd01087a4c1c6f5b1bc7daaf1ea9a4c1ad2f15c9096e630b3a6543633db839771b020babcfe9e05301666c477ff4eb04751b
6
+ metadata.gz: e5a99d40534ecb7e91f12c90f6c310253c3bd79c0955178c9ac67650e063fb84dc1b54d7418fa4c76b989dd3943c346d22966b74db7c0a6839f8c43ec09ab243
7
+ data.tar.gz: b05f51b501f5c6ed21efc0cebd5b3e74dd3c3bcea3de129bbec5175d625397f7d8b85e21970ce25e1616da69b2a8d6f90b319ad1efb5d92d51e207e586afe327
@@ -1,8 +1,6 @@
1
1
  rvm:
2
- - 2.6.2
3
- - 2.5.5
4
- - 2.4.5
5
- - ruby-head
2
+ - 2.6.3
3
+ - ruby-head
6
4
  gemfile:
7
5
  - gemfiles/Gemfile.rails-2.x
8
6
  - gemfiles/Gemfile.rails-3.x
data/CHANGES.md CHANGED
@@ -1,41 +1,46 @@
1
- ### 2.1.0 - 2019/03/19
2
-
3
- * Add support for specifying Rails test-server port. PR #22 by Bartek Wilczek.
4
-
5
- ### 2.0.0 - 2016/09/24
6
-
7
- * Add support for Watir 6.0.
8
-
9
- ### 1.2.1 - 2016/06/15
10
-
11
- * Fix Browser#add_checker deprecation warning. PR #18 by Christophe Bliard.
12
-
13
- ### 1.2.0 - 2016/01/16
14
-
15
- * Add support for running Rails on Puma server. PR #15 by Andrey Koleshko.
16
-
17
- ### 1.1.0 - 2015/07/22
18
-
19
- * Remove strict `mime-types` dependency. See #13
20
-
21
- ### 1.0.4 - 2015/02/28
22
-
23
- * Allow to set Watir::Rails.ignore_exceptions to false. PR #8 by Andrey Koleshko.
24
-
25
- ### 1.0.3 - 2013/11/02
26
-
27
- * Make watir-rails working with Rails 2.3.x too.
28
-
29
- ### 1.0.2 - 2013/11/02
30
-
31
- * Make sure that newest Rails is going to be installed on an empty system.
32
-
33
- ### 1.0.1 - 2013/11/01
34
-
35
- * Add license to gemspec.
36
-
37
- ### 1.0.0 - 2013/10/05
38
-
39
- * Add watir as a dependency to make it possible to use with watir-classic too.
40
- * Add specs to keep the quality high.
41
- * Documentation fixes.
1
+ ### 2.2.0 - 2019
2
+
3
+ * Add support for specifying custom server for test Rails instance. PR #23 by Alex Rodionov.
4
+ * Add support for cleaning up when test Rails server instance has served all requests. PR #23 by Alex Rodionov.
5
+
6
+ ### 2.1.0 - 2019/03/19
7
+
8
+ * Add support for specifying Rails test-server port. PR #22 by Bartek Wilczek.
9
+
10
+ ### 2.0.0 - 2016/09/24
11
+
12
+ * Add support for Watir 6.0.
13
+
14
+ ### 1.2.1 - 2016/06/15
15
+
16
+ * Fix Browser#add_checker deprecation warning. PR #18 by Christophe Bliard.
17
+
18
+ ### 1.2.0 - 2016/01/16
19
+
20
+ * Add support for running Rails on Puma server. PR #15 by Andrey Koleshko.
21
+
22
+ ### 1.1.0 - 2015/07/22
23
+
24
+ * Remove strict `mime-types` dependency. See #13
25
+
26
+ ### 1.0.4 - 2015/02/28
27
+
28
+ * Allow to set Watir::Rails.ignore_exceptions to false. PR #8 by Andrey Koleshko.
29
+
30
+ ### 1.0.3 - 2013/11/02
31
+
32
+ * Make watir-rails working with Rails 2.3.x too.
33
+
34
+ ### 1.0.2 - 2013/11/02
35
+
36
+ * Make sure that newest Rails is going to be installed on an empty system.
37
+
38
+ ### 1.0.1 - 2013/11/01
39
+
40
+ * Add license to gemspec.
41
+
42
+ ### 1.0.0 - 2013/10/05
43
+
44
+ * Add watir as a dependency to make it possible to use with watir-classic too.
45
+ * Add specs to keep the quality high.
46
+ * Documentation fixes.
@@ -18,7 +18,7 @@ module Watir
18
18
  class << self
19
19
  private :new
20
20
  attr_reader :port, :middleware
21
- attr_writer :ignore_exceptions
21
+ attr_writer :ignore_exceptions, :server
22
22
 
23
23
  # Start the Rails server for tests.
24
24
  # Will be called automatically by {Watir::Browser#initialize}.
@@ -30,7 +30,7 @@ module Watir
30
30
  @port = port || find_available_port
31
31
 
32
32
  @server_thread = Thread.new do
33
- run_default_server @middleware, @port
33
+ server.call @middleware, @port
34
34
  end
35
35
 
36
36
  Timeout.timeout(boot_timeout) { @server_thread.join(0.1) until running? }
@@ -67,6 +67,13 @@ module Watir
67
67
  @middleware.error
68
68
  end
69
69
 
70
+ # Returns true if there are pending requests to server.
71
+ #
72
+ # @return [Boolean]
73
+ def pending_requests?
74
+ @middleware.pending_requests?
75
+ end
76
+
70
77
  # Set error rescued by the middleware.
71
78
  #
72
79
  # @param value
@@ -139,22 +146,24 @@ module Watir
139
146
  server.close if server
140
147
  end
141
148
 
142
- def run_default_server(app, port)
143
- begin
144
- require 'rack/handler/thin'
145
- Thin::Logging.silent = true
146
- return Rack::Handler::Thin.run(app, :Port => port)
147
- rescue LoadError
148
- end
149
+ def server
150
+ @server ||= lambda do |app, port|
151
+ begin
152
+ require 'rack/handler/thin'
153
+ Thin::Logging.silent = true
154
+ return Rack::Handler::Thin.run(app, :Port => port)
155
+ rescue LoadError
156
+ end
149
157
 
150
- begin
151
- require 'rack/handler/puma'
152
- return Rack::Handler::Puma.run(app, :Port => port, :Silent => true)
153
- rescue LoadError
154
- end
158
+ begin
159
+ require 'rack/handler/puma'
160
+ return Rack::Handler::Puma.run(app, :Port => port, :Silent => true)
161
+ rescue LoadError
162
+ end
155
163
 
156
- require 'rack/handler/webrick'
157
- Rack::Handler::WEBrick.run(app, :Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0))
164
+ require 'rack/handler/webrick'
165
+ Rack::Handler::WEBrick.run(app, :Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0))
166
+ end
158
167
  end
159
168
 
160
169
  def legacy_rails?
@@ -1,26 +1,50 @@
1
- module Watir
2
- class Rails
3
- # @private
4
- class Middleware
5
- attr_accessor :error
6
-
7
- def initialize(app)
8
- @app = app
9
- end
10
-
11
- def call(env)
12
- if env["PATH_INFO"] == "/__identify__"
13
- [200, {}, [@app.object_id.to_s]]
14
- else
15
- begin
16
- @app.call(env)
17
- rescue => e
18
- @error = e
19
- raise e
20
- end
21
- end
22
- end
23
- end
24
-
25
- end
26
- end
1
+ module Watir
2
+ class Rails
3
+ # @private
4
+ class Middleware
5
+ class PendingRequestsCounter
6
+ attr_reader :value
7
+
8
+ def initialize
9
+ @value = 0
10
+ @mutex = Mutex.new
11
+ end
12
+
13
+ def increment
14
+ @mutex.synchronize { @value += 1 }
15
+ end
16
+
17
+ def decrement
18
+ @mutex.synchronize { @value -= 1 }
19
+ end
20
+ end
21
+
22
+ attr_accessor :error
23
+
24
+ def initialize(app)
25
+ @app = app
26
+ @counter = PendingRequestsCounter.new
27
+ end
28
+
29
+ def pending_requests?
30
+ @counter.value > 0
31
+ end
32
+
33
+ def call(env)
34
+ if env["PATH_INFO"] == "/__identify__"
35
+ [200, {}, [@app.object_id.to_s]]
36
+ else
37
+ @counter.increment
38
+ begin
39
+ @app.call(env)
40
+ rescue => e
41
+ @error = e
42
+ raise e
43
+ ensure
44
+ @counter.decrement
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,5 +1,5 @@
1
- module Watir
2
- class Rails
3
- VERSION = "2.1.0"
4
- end
5
- end
1
+ module Watir
2
+ class Rails
3
+ VERSION = "2.2.0"
4
+ end
5
+ end
@@ -9,9 +9,11 @@ describe Watir::Rails do
9
9
 
10
10
  context ".boot" do
11
11
  it "starts the server unless already running" do
12
+ server = ->(app, port) {}
12
13
  allow(described_class).to receive_messages(app: double("app"), find_available_port: 42)
13
14
  expect(described_class).to receive(:running?).twice.and_return(false, true)
14
- expect(described_class).to receive(:run_default_server).once
15
+ expect(described_class).to receive(:server).and_return(server)
16
+ expect(server).to receive(:call).once
15
17
 
16
18
  described_class.boot
17
19
  wait_until_server_started
@@ -20,16 +22,18 @@ describe Watir::Rails do
20
22
  it "does nothing if server is already running" do
21
23
  allow(described_class).to receive_messages(app: double("app"), find_available_port: 42)
22
24
  expect(described_class).to receive(:running?).once.and_return(true)
23
- expect(described_class).not_to receive(:run_default_server)
25
+ expect(described_class).not_to receive(:server)
24
26
 
25
27
  described_class.boot
26
28
  end
27
29
 
28
30
  it "raises an error if Rails won't boot with timeout" do
31
+ server = ->(app, port) {}
29
32
  allow(described_class).to receive_messages(app: double("app"),
30
33
  find_available_port: 42, boot_timeout: 0.01)
31
34
  expect(described_class).to receive(:running?).at_least(:twice).and_return(false)
32
- expect(described_class).to receive(:run_default_server)
35
+ expect(described_class).to receive(:server).and_return(server)
36
+ expect(server).to receive(:call)
33
37
 
34
38
  expect {
35
39
  described_class.boot
@@ -41,6 +45,19 @@ describe Watir::Rails do
41
45
  end
42
46
  end
43
47
 
48
+ context ".server" do
49
+ it "allows to customize server" do
50
+ allow(described_class).to receive_messages(app: double("app"), find_available_port: 42)
51
+ allow(described_class).to receive(:running?).twice.and_return(false, true)
52
+
53
+ server = ->(app, port) {}
54
+ described_class.server = server
55
+ expect(server).to receive(:call)
56
+
57
+ described_class.boot
58
+ end
59
+ end
60
+
44
61
  context ".host" do
45
62
  it "@host if specified" do
46
63
  described_class.host = "my_host"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watir-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarmo Pertman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-19 00:00:00.000000000 Z
11
+ date: 2019-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack