puffing-billy 3.0.1 → 3.0.4
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 +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +15 -0
- data/lib/billy/browsers/capybara.rb +16 -1
- data/lib/billy/cache.rb +2 -0
- data/lib/billy/config.rb +3 -1
- data/lib/billy/handlers/proxy_handler.rb +3 -3
- data/lib/billy/version.rb +1 -1
- data/lib/tasks/billy.rake +87 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16bed8180bba7ace31cc3516c9b30bddbce8531cfe5f4a1effd93572219f2952
|
4
|
+
data.tar.gz: d47667758e923263a1e98e2bb60c6ab1bf3962fa38722259addc4e59b4af129e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7a47d5b299bb1b5ba9b6979317e383b498116cabfb6cf8bc924c75b0a2fd97684beafac596ee728b7c393b74f92229090b13fba5a06140846992c7234a50f4f
|
7
|
+
data.tar.gz: b7bb0f1fb51747f935c26fc3c4c455900c5a0971676ce4bba1ee8ddfe87740f7e5771ed529b22735687f15ad423da436dc8f7fd940e7179fb4d62e609641d669
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
v3.0.4, 2022-08-07
|
2
|
+
------------------
|
3
|
+
* Adds a configurable Cuprite driver [#327](https://github.com/oesmith/puffing-billy/pull/327)
|
4
|
+
|
5
|
+
v3.0.3, 2022-05-31
|
6
|
+
-------------------
|
7
|
+
* Only calculate cache scope and key if request is cacheable [#324](https://github.com/oesmith/puffing-billy/pull/324)
|
8
|
+
|
9
|
+
v3.0.2, 2022-02-16
|
10
|
+
-------------------
|
11
|
+
* Add rake tasks inside files DSL in gemspec [#321](https://github.com/oesmith/puffing-billy/pull/321)
|
12
|
+
|
1
13
|
v3.0.1, 2022-02-15
|
2
14
|
-------------------
|
3
15
|
* Adapt to newer versions selenium webdriver [#314](https://github.com/oesmith/puffing-billy/pull/314)
|
data/README.md
CHANGED
@@ -65,6 +65,7 @@ Capybara.javascript_driver = :selenium_billy # Uses Firefox
|
|
65
65
|
# Capybara.javascript_driver = :apparition_billy
|
66
66
|
# Capybara.javascript_driver = :webkit_billy
|
67
67
|
# Capybara.javascript_driver = :poltergeist_billy
|
68
|
+
# Capybara.javascript_driver = :cuprite_billy
|
68
69
|
```
|
69
70
|
|
70
71
|
> __Note__: `:poltergeist_billy` doesn't support proxying any localhosts, so you must use
|
@@ -154,6 +155,20 @@ And /^a stub for google$/ do
|
|
154
155
|
end
|
155
156
|
```
|
156
157
|
|
158
|
+
### Setup remote Chrome
|
159
|
+
|
160
|
+
In the case you are using a Chrome instance, running on another machine, or in
|
161
|
+
another Docker container, you need to :
|
162
|
+
* Fix the Billy proxy host and port
|
163
|
+
* Passes the `--proxy-server=<billy host>:<billy port>`
|
164
|
+
|
165
|
+
#### WebSockets
|
166
|
+
|
167
|
+
Puffing billy doesn't support websockets, so if you are using them,
|
168
|
+
or ActionCable for the Ruby On Rails developers, you can tell Chrome to bypass
|
169
|
+
the proxy for websockets by adding the flag `--proxy-bypass-list=ws://*` to
|
170
|
+
your remote chrome intance or Docker container.
|
171
|
+
|
157
172
|
## Minitest Usage
|
158
173
|
|
159
174
|
Please see [this link](https://gist.github.com/sauy7/1b081266dd453a1b737b) for
|
@@ -8,7 +8,8 @@ module Billy
|
|
8
8
|
poltergeist: 'capybara/poltergeist',
|
9
9
|
webkit: 'capybara/webkit',
|
10
10
|
selenium: 'selenium/webdriver',
|
11
|
-
apparition: 'capybara/apparition'
|
11
|
+
apparition: 'capybara/apparition',
|
12
|
+
cuprite: 'capybara/cuprite'
|
12
13
|
}
|
13
14
|
|
14
15
|
def self.register_drivers
|
@@ -108,6 +109,20 @@ module Billy
|
|
108
109
|
end
|
109
110
|
end
|
110
111
|
|
112
|
+
def self.register_cuprite_driver
|
113
|
+
driver_otions = {
|
114
|
+
browser_options: {
|
115
|
+
'ignore-certificate-errors' => nil
|
116
|
+
}
|
117
|
+
}.deep_merge(Billy.config.cuprite_options)
|
118
|
+
|
119
|
+
::Capybara.register_driver :cuprite_billy do |app|
|
120
|
+
::Capybara::Cuprite::Driver.new(app, **driver_otions).tap do |driver|
|
121
|
+
driver.set_proxy(Billy.proxy.host, Billy.proxy.port)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
111
126
|
def self.build_selenium_options_for_firefox
|
112
127
|
profile = Selenium::WebDriver::Firefox::Profile.new.tap do |prof|
|
113
128
|
prof.proxy = Selenium::WebDriver::Proxy.new(
|
data/lib/billy/cache.rb
CHANGED
data/lib/billy/config.rb
CHANGED
@@ -11,7 +11,8 @@ module Billy
|
|
11
11
|
:non_whitelisted_requests_disabled, :cache_path, :certs_path, :verify_peer, :proxy_host, :proxy_port, :proxied_request_inactivity_timeout,
|
12
12
|
:proxied_request_connect_timeout, :dynamic_jsonp, :dynamic_jsonp_keys, :dynamic_jsonp_callback_name, :merge_cached_responses_whitelist,
|
13
13
|
:strip_query_params, :proxied_request_host, :proxied_request_port, :cache_request_body_methods, :after_cache_handles_request,
|
14
|
-
:cache_simulates_network_delays, :cache_simulates_network_delay_time, :record_requests, :record_stub_requests, :use_ignore_params,
|
14
|
+
:cache_simulates_network_delays, :cache_simulates_network_delay_time, :record_requests, :record_stub_requests, :use_ignore_params,
|
15
|
+
:before_handle_request, :cuprite_options
|
15
16
|
|
16
17
|
def initialize
|
17
18
|
@logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
|
@@ -53,6 +54,7 @@ module Billy
|
|
53
54
|
@record_stub_requests = false
|
54
55
|
@use_ignore_params = true
|
55
56
|
@before_handle_request = nil
|
57
|
+
@cuprite_options = {}
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
@@ -25,9 +25,6 @@ module Billy
|
|
25
25
|
port: Billy.config.proxied_request_port }} )
|
26
26
|
end
|
27
27
|
|
28
|
-
cache_scope = Billy::Cache.instance.scope
|
29
|
-
cache_key = Billy::Cache.instance.key(method.downcase, url, body)
|
30
|
-
|
31
28
|
req = EventMachine::HttpRequest.new(url, opts)
|
32
29
|
req = req.send(method.downcase, build_request_options(url, headers, body))
|
33
30
|
|
@@ -47,6 +44,9 @@ module Billy
|
|
47
44
|
end
|
48
45
|
|
49
46
|
if cacheable?(url, response[:headers], response[:status])
|
47
|
+
cache_scope = Billy::Cache.instance.scope
|
48
|
+
cache_key = Billy::Cache.instance.key(method.downcase, url, body)
|
49
|
+
|
50
50
|
Billy::Cache.instance.store(
|
51
51
|
cache_key,
|
52
52
|
cache_scope,
|
data/lib/billy/version.rb
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'addressable/uri'
|
2
|
+
|
3
|
+
namespace :cache do
|
4
|
+
desc 'Print out all cache file information'
|
5
|
+
task :print_all do
|
6
|
+
cache_array = load_cache
|
7
|
+
|
8
|
+
sort_cache(cache_array).each do |cache|
|
9
|
+
print_cache_details(cache)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Print out specific cache file information'
|
14
|
+
task :print_details, :sha do |_t, args|
|
15
|
+
fail "Missing sha; usage: rake cache:print_details['<sha>']" unless args[:sha]
|
16
|
+
cache_array = load_cache(Billy.config.cache_path, '*' + args[:sha] + '*.yml')
|
17
|
+
|
18
|
+
sort_cache(cache_array).each do |cache|
|
19
|
+
print_cache_details(cache)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'Find specific cache files by URL'
|
24
|
+
task :find_by_url, :api_path do |_t, args|
|
25
|
+
fail "Missing api path; usage: rake cache:find_by_url['<api_path>']" unless args[:api_path]
|
26
|
+
cache_array = load_cache
|
27
|
+
filtered_cache_array = cache_array.select { |f| f[:url_path].include?(args[:api_path]) }
|
28
|
+
|
29
|
+
sort_cache(filtered_cache_array).each do |cache|
|
30
|
+
print_cache_details(cache)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
desc 'Find specific cache files by scope'
|
35
|
+
task :find_by_scope, :scope do |_t, args|
|
36
|
+
fail "Missing scope; usage: rake cache:find_by_scope['<scope>']" unless args[:scope]
|
37
|
+
cache_array = load_cache
|
38
|
+
filtered_cache_array = cache_array.select { |f| f[:scope] && f[:scope].include?(args[:scope]) }
|
39
|
+
|
40
|
+
sort_cache(filtered_cache_array).each do |cache|
|
41
|
+
print_cache_details(cache)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
desc 'Find cache files with non-successful status codes'
|
46
|
+
task :find_non_successful do
|
47
|
+
cache_array = load_cache
|
48
|
+
filtered_cache_array = cache_array.select { |f| !(200..299).include?(f[:status]) }
|
49
|
+
|
50
|
+
sort_cache(filtered_cache_array).each do |cache|
|
51
|
+
print_cache_details(cache)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def load_cache(cache_directory = Billy.config.cache_path, file_pattern = '*.yml')
|
56
|
+
cache_path = Rails.root.join(cache_directory)
|
57
|
+
cache_array = []
|
58
|
+
|
59
|
+
Dir.glob(cache_path + file_pattern) do |filename|
|
60
|
+
data = load_cache_file(filename)
|
61
|
+
url = Addressable::URI.parse(data[:url])
|
62
|
+
data[:url_path] = "#{url.path}#{url.query ? '?' + url.query : ''}#{url.fragment ? '#' + url.fragment : ''}"
|
63
|
+
data[:filename] = filename.gsub(Rails.root.to_s + '/', '')
|
64
|
+
cache_array << data
|
65
|
+
end
|
66
|
+
cache_array
|
67
|
+
end
|
68
|
+
|
69
|
+
def load_cache_file(filename)
|
70
|
+
YAML.load_file(filename)
|
71
|
+
rescue ArgumentError => e
|
72
|
+
puts "Could not parse YAML: #{e.message}"
|
73
|
+
end
|
74
|
+
|
75
|
+
def print_cache_details(cache)
|
76
|
+
puts " Scope: #{cache[:scope]}" if cache[:scope]
|
77
|
+
puts " URL: #{cache[:url]}"
|
78
|
+
puts " Body: #{cache[:body]}" if Billy.config.cache_request_body_methods.include?(cache[:method])
|
79
|
+
puts " Details: Request method '#{cache[:method]}' returned response status code: '#{cache[:status]}'"
|
80
|
+
puts "Filename: #{cache[:filename]}"
|
81
|
+
puts "\n\n"
|
82
|
+
end
|
83
|
+
|
84
|
+
def sort_cache(cache, key = :url_path)
|
85
|
+
cache.sort_by { |hsh| hsh[key] }
|
86
|
+
end
|
87
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puffing-billy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Olly Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -366,6 +366,7 @@ files:
|
|
366
366
|
- lib/billy/watir/rspec.rb
|
367
367
|
- lib/puffing-billy.rb
|
368
368
|
- lib/puffing-billy/rspec.rb
|
369
|
+
- lib/tasks/billy.rake
|
369
370
|
homepage: https://github.com/oesmith/puffing-billy
|
370
371
|
licenses:
|
371
372
|
- MIT
|