capybara-webmock 0.5.1 → 0.6.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 +5 -5
- data/.github/workflows/run-tests.yml +25 -0
- data/README.md +10 -1
- data/capybara-webmock.gemspec +3 -1
- data/lib/capybara/webmock.rb +20 -6
- data/lib/capybara/webmock/config.ru +1 -1
- data/lib/capybara/webmock/proxied_request.rb +5 -11
- data/lib/capybara/webmock/proxy.rb +6 -2
- data/lib/capybara/webmock/version.rb +1 -1
- metadata +37 -10
- data/.circleci/config.yml +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 28f4ebed6063f94e18d058d63223bd1c9fd437241e622cee85f38597122aca2b
|
4
|
+
data.tar.gz: debbbb2e0c9d47f31930781dc38e19b0dbd4bea58424b3325a25dd8d119c3e48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f2a033ab751fd97ff1b8798ab87264625191a361619f6b70d9ef6e7323dd739cc0ca95401de958d821cd1511b7aa996060d7713ad7e7eb0f01d60b6e25f4dbb
|
7
|
+
data.tar.gz: f6e373337fee16aef5c716c9648103651905ca1e3996e67051f183b8f1c686de903be936b8dc5f627490ff935162bbd7efac0601b7df156ad1de4c01acc2d2e3
|
@@ -0,0 +1,25 @@
|
|
1
|
+
name: Run tests
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
strategy:
|
8
|
+
fail-fast: false
|
9
|
+
matrix:
|
10
|
+
os: [ubuntu-latest, macos-latest]
|
11
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
12
|
+
ruby: [2.5, 2.6, 2.7, '3.0', head]
|
13
|
+
runs-on: ${{ matrix.os }}
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
- uses: nanasess/setup-chromedriver@master
|
17
|
+
- uses: ruby/setup-ruby@v1
|
18
|
+
with:
|
19
|
+
ruby-version: ${{ matrix.ruby }}
|
20
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
21
|
+
- run: |
|
22
|
+
export DISPLAY=":99"
|
23
|
+
chromedriver --url-base=/wd/hub &
|
24
|
+
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
|
25
|
+
bundle exec rake
|
data/README.md
CHANGED
@@ -81,6 +81,8 @@ or:
|
|
81
81
|
```ruby
|
82
82
|
# Use Chrome Driver
|
83
83
|
Capybara.javascript_driver = :capybara_webmock_chrome
|
84
|
+
# or Chrome Driver in headless mode
|
85
|
+
Capybara.javascript_driver = :capybara_webmock_chrome_headless
|
84
86
|
```
|
85
87
|
|
86
88
|
```ruby
|
@@ -88,7 +90,7 @@ Capybara.javascript_driver = :capybara_webmock_chrome
|
|
88
90
|
Capybara.javascript_driver = :capybara_webmock_poltergeist
|
89
91
|
```
|
90
92
|
|
91
|
-
*NOTE: These are just
|
93
|
+
*NOTE: These are just some default driver wrappers this gem provides. If you are
|
92
94
|
already using a custom driver profile you can still use `capybara-webmock`, you
|
93
95
|
just need to configure proxy settings to `127.0.0.1:9292`*
|
94
96
|
|
@@ -108,6 +110,13 @@ it 'makes a request to /somewhere when the user visits the page' do
|
|
108
110
|
end
|
109
111
|
```
|
110
112
|
|
113
|
+
You can provide extra hosts to be permitted past the proxy, but should be used carefully.
|
114
|
+
This setting does not remove the default localhosts, but adds to them.
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
Capybara::Webmock.allowed_hosts = ["example.com", "sub.example.com"]
|
118
|
+
```
|
119
|
+
|
111
120
|
### Development
|
112
121
|
|
113
122
|
After pulling down the repo, install dependencies:
|
data/capybara-webmock.gemspec
CHANGED
@@ -26,8 +26,10 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency "rack", ">= 1.4"
|
27
27
|
spec.add_dependency "rack-proxy", ">= 0.6.0"
|
28
28
|
spec.add_dependency "selenium-webdriver", "~> 3.0"
|
29
|
+
spec.add_dependency "rexml", ">= 3.2"
|
30
|
+
spec.add_dependency "webrick", ">= 1.7"
|
29
31
|
|
30
|
-
spec.add_development_dependency "bundler", "
|
32
|
+
spec.add_development_dependency "bundler", ">= 1.13"
|
31
33
|
spec.add_development_dependency "pry", "~> 0.10.4"
|
32
34
|
spec.add_development_dependency "rake", "~> 10.0"
|
33
35
|
spec.add_development_dependency "rspec", "~> 3.0"
|
data/lib/capybara/webmock.rb
CHANGED
@@ -9,15 +9,21 @@ require 'capybara/webmock/proxied_request'
|
|
9
9
|
|
10
10
|
module Capybara
|
11
11
|
module Webmock
|
12
|
+
SEPARATOR = "|"
|
13
|
+
|
12
14
|
class << self
|
13
|
-
attr_accessor :port_number, :pid_file, :kill_timeout, :start_timeout
|
15
|
+
attr_accessor :port_number, :pid_file, :kill_timeout, :start_timeout, :allowed_hosts
|
14
16
|
|
15
17
|
def start
|
16
18
|
if @pid.nil?
|
17
19
|
kill_old_process
|
18
20
|
gem_path = File.dirname(__FILE__)
|
19
21
|
proxy_file = File.join(gem_path, 'webmock', 'config.ru')
|
20
|
-
|
22
|
+
env_config = {
|
23
|
+
"CAPYBARA_WEBMOCK_PROXY_PORT_NUMBER" => port_number.to_s,
|
24
|
+
"CAPYBARA_WEBMOCK_ADDED_HOSTS" => allowed_hosts.to_a.join(SEPARATOR)
|
25
|
+
}
|
26
|
+
stdin, stdout, wait_thr = Open3.popen2e(env_config, "rackup", proxy_file)
|
21
27
|
stdin.close
|
22
28
|
@stdout = stdout
|
23
29
|
@pid = wait_thr[:pid]
|
@@ -68,7 +74,13 @@ module Capybara
|
|
68
74
|
end
|
69
75
|
|
70
76
|
def chrome_options
|
71
|
-
|
77
|
+
::Selenium::WebDriver::Chrome::Options.new.tap do |options|
|
78
|
+
options.add_argument "--proxy-server=127.0.0.1:#{port_number}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def chrome_headless_options
|
83
|
+
chrome_options.tap { |options| options.headless! }
|
72
84
|
end
|
73
85
|
|
74
86
|
def phantomjs_options
|
@@ -162,9 +174,11 @@ Capybara.register_driver :capybara_webmock do |app|
|
|
162
174
|
end
|
163
175
|
|
164
176
|
Capybara.register_driver :capybara_webmock_chrome do |app|
|
165
|
-
Capybara::Selenium::Driver.new(app, browser: :chrome,
|
166
|
-
|
167
|
-
|
177
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, options: Capybara::Webmock.chrome_options)
|
178
|
+
end
|
179
|
+
|
180
|
+
Capybara.register_driver :capybara_webmock_chrome_headless do |app|
|
181
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, options: Capybara::Webmock.chrome_headless_options)
|
168
182
|
end
|
169
183
|
|
170
184
|
Capybara.register_driver :capybara_webmock_poltergeist do |app|
|
@@ -2,4 +2,4 @@ require 'rack'
|
|
2
2
|
require 'capybara/webmock/proxy'
|
3
3
|
|
4
4
|
app = Capybara::Webmock::Proxy.new(Process.pid)
|
5
|
-
Rack::Handler::WEBrick.run(app, Port: ENV.fetch('
|
5
|
+
Rack::Handler::WEBrick.run(app, Port: ENV.fetch('CAPYBARA_WEBMOCK_PROXY_PORT_NUMBER', 9292))
|
@@ -1,25 +1,19 @@
|
|
1
|
+
require 'forwardable'
|
1
2
|
require 'uri'
|
2
3
|
|
3
4
|
module Capybara
|
4
5
|
module Webmock
|
5
6
|
class ProxiedRequest
|
7
|
+
extend Forwardable
|
8
|
+
|
6
9
|
attr_reader :referrer, :uri
|
7
10
|
|
11
|
+
def_delegators :uri, :fragment, :host, :hostname, :password, :path, :port, :query, :scheme, :user, :userinfo
|
12
|
+
|
8
13
|
def initialize(raw_referrer, raw_uri)
|
9
14
|
@referrer = raw_referrer == "-" ? nil : URI.parse(raw_referrer)
|
10
15
|
@uri = URI.parse(raw_uri)
|
11
16
|
end
|
12
|
-
|
13
|
-
def fragment; @uri.fragment; end
|
14
|
-
def host; @uri.host; end
|
15
|
-
def hostname; @uri.hostname; end
|
16
|
-
def password; @uri.password; end
|
17
|
-
def path; @uri.path; end
|
18
|
-
def port; @uri.port; end
|
19
|
-
def query; @uri.query; end
|
20
|
-
def scheme; @uri.scheme; end
|
21
|
-
def user; @uri.user; end
|
22
|
-
def userinfo; @uri.userinfo; end
|
23
17
|
end
|
24
18
|
end
|
25
19
|
end
|
@@ -2,7 +2,7 @@ require 'rack/proxy'
|
|
2
2
|
require 'capybara/webmock'
|
3
3
|
|
4
4
|
class Capybara::Webmock::Proxy < Rack::Proxy
|
5
|
-
|
5
|
+
DEFAULT_ALLOWED_HOSTS = ['127.0.0.1', 'localhost', /(.*\.|\A)lvh.me/]
|
6
6
|
|
7
7
|
def call(env)
|
8
8
|
@streaming = true
|
@@ -27,8 +27,12 @@ class Capybara::Webmock::Proxy < Rack::Proxy
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
+
def allowed_hosts
|
31
|
+
DEFAULT_ALLOWED_HOSTS + ENV.fetch('CAPYBARA_WEBMOCK_ADDED_HOSTS', "").split(Capybara::Webmock::SEPARATOR)
|
32
|
+
end
|
33
|
+
|
30
34
|
def allowed_host?(host)
|
31
|
-
|
35
|
+
allowed_hosts.any? do |allowed_host|
|
32
36
|
case allowed_host
|
33
37
|
when Regexp
|
34
38
|
allowed_host =~ host
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-webmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Worth
|
8
8
|
- Dillon Hafer
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-05-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -73,18 +73,46 @@ dependencies:
|
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '3.0'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: rexml
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.2'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.2'
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: webrick
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.7'
|
97
|
+
type: :runtime
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.7'
|
76
104
|
- !ruby/object:Gem::Dependency
|
77
105
|
name: bundler
|
78
106
|
requirement: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- - "
|
108
|
+
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '1.13'
|
83
111
|
type: :development
|
84
112
|
prerelease: false
|
85
113
|
version_requirements: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
|
-
- - "
|
115
|
+
- - ">="
|
88
116
|
- !ruby/object:Gem::Version
|
89
117
|
version: '1.13'
|
90
118
|
- !ruby/object:Gem::Dependency
|
@@ -178,7 +206,7 @@ executables: []
|
|
178
206
|
extensions: []
|
179
207
|
extra_rdoc_files: []
|
180
208
|
files:
|
181
|
-
- ".
|
209
|
+
- ".github/workflows/run-tests.yml"
|
182
210
|
- ".gitignore"
|
183
211
|
- ".rspec"
|
184
212
|
- CODE_OF_CONDUCT.md
|
@@ -198,7 +226,7 @@ homepage: https://github.com/hashrocket/capybara-webmock
|
|
198
226
|
licenses:
|
199
227
|
- MIT
|
200
228
|
metadata: {}
|
201
|
-
post_install_message:
|
229
|
+
post_install_message:
|
202
230
|
rdoc_options: []
|
203
231
|
require_paths:
|
204
232
|
- lib
|
@@ -213,9 +241,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
241
|
- !ruby/object:Gem::Version
|
214
242
|
version: '0'
|
215
243
|
requirements: []
|
216
|
-
|
217
|
-
|
218
|
-
signing_key:
|
244
|
+
rubygems_version: 3.2.3
|
245
|
+
signing_key:
|
219
246
|
specification_version: 4
|
220
247
|
summary: Mock external requests
|
221
248
|
test_files: []
|