puffing-billy 3.0.0 → 3.0.1
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 +4 -0
- data/lib/billy/browsers/capybara.rb +13 -9
- data/lib/billy/version.rb +1 -1
- metadata +9 -73
- data/.github/workflows/ci.yml +0 -27
- data/.gitignore +0 -6
- data/.rspec +0 -2
- data/Dockerfile +0 -14
- data/Gemfile +0 -4
- data/Guardfile +0 -23
- data/Rakefile +0 -11
- data/bin/proxy.rb +0 -3
- data/examples/README.md +0 -1
- data/examples/facebook_api.html +0 -59
- data/examples/intercept_request.html +0 -10
- data/examples/post_api.html +0 -16
- data/examples/preflight_request.html +0 -22
- data/examples/tumblr_api.html +0 -22
- data/examples/tumblr_api_https.html +0 -22
- data/lib/tasks/billy.rake +0 -87
- data/log/.gitkeep +0 -0
- data/puffing-billy.gemspec +0 -41
- data/spec/features/examples/facebook_api_spec.rb +0 -23
- data/spec/features/examples/intercept_request_spec.rb +0 -31
- data/spec/features/examples/post_api_spec.rb +0 -15
- data/spec/features/examples/preflight_request_spec.rb +0 -29
- data/spec/features/examples/tumblr_api_spec.rb +0 -59
- data/spec/lib/billy/browsers/capybara_spec.rb +0 -28
- data/spec/lib/billy/cache_spec.rb +0 -158
- data/spec/lib/billy/handlers/cache_handler_spec.rb +0 -191
- data/spec/lib/billy/handlers/handler_spec.rb +0 -16
- data/spec/lib/billy/handlers/proxy_handler_spec.rb +0 -258
- data/spec/lib/billy/handlers/request_handler_spec.rb +0 -200
- data/spec/lib/billy/handlers/request_log_spec.rb +0 -74
- data/spec/lib/billy/handlers/stub_handler_spec.rb +0 -117
- data/spec/lib/billy/proxy_connection_spec.rb +0 -20
- data/spec/lib/billy/proxy_request_stub_spec.rb +0 -252
- data/spec/lib/billy/resource_utils_spec.rb +0 -55
- data/spec/lib/billy/ssl/authority_spec.rb +0 -84
- data/spec/lib/billy/ssl/certificate_chain_spec.rb +0 -39
- data/spec/lib/billy/ssl/certificate_spec.rb +0 -89
- data/spec/lib/billy/watir/watir_spec.rb +0 -18
- data/spec/lib/proxy_spec.rb +0 -431
- data/spec/spec_helper.rb +0 -52
- data/spec/support/test_server.rb +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec02ea3b7f01e33d68df684db911886bacb0b9c92f1fbe3d9931df42218dd78f
|
4
|
+
data.tar.gz: 9ea280821375f4ba83429c33aa2d17035a3269e580fbb52c6a26e5db968eed25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b1680023f9b58ee65995bc91471d11f4d1a9fd96dbee00a9635edb23775bbe2824b3234414c5d87aa33709a10b8c71729079bb0bd885db7023958aa4da77859
|
7
|
+
data.tar.gz: f42c4227325d9dcab48a50eed2f5470db36c90e5fc8aff2618cfd37531fe15e23345b7bff92080053a130b0e9755a8f43c46cdf958d45ece795e8cd4ac7e7c51
|
data/CHANGELOG.md
CHANGED
@@ -47,19 +47,24 @@ module Billy
|
|
47
47
|
|
48
48
|
def self.register_selenium_driver
|
49
49
|
::Capybara.register_driver :selenium_billy do |app|
|
50
|
-
|
51
|
-
|
50
|
+
capabilities = [
|
51
|
+
build_selenium_options_for_firefox,
|
52
|
+
Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true)
|
53
|
+
]
|
52
54
|
|
53
|
-
::Capybara::Selenium::Driver.new(app,
|
55
|
+
::Capybara::Selenium::Driver.new(app, capabilities: capabilities)
|
54
56
|
end
|
55
57
|
|
56
58
|
::Capybara.register_driver :selenium_headless_billy do |app|
|
57
59
|
options = build_selenium_options_for_firefox.tap do |opts|
|
58
60
|
opts.add_argument '-headless'
|
59
61
|
end
|
60
|
-
capabilities =
|
61
|
-
|
62
|
-
|
62
|
+
capabilities = [
|
63
|
+
options,
|
64
|
+
Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true)
|
65
|
+
]
|
66
|
+
|
67
|
+
::Capybara::Selenium::Driver.new(app, capabilities: capabilities)
|
63
68
|
end
|
64
69
|
|
65
70
|
::Capybara.register_driver :selenium_chrome_billy do |app|
|
@@ -70,7 +75,7 @@ module Billy
|
|
70
75
|
::Capybara::Selenium::Driver.new(
|
71
76
|
app,
|
72
77
|
browser: :chrome,
|
73
|
-
|
78
|
+
capabilities: options,
|
74
79
|
clear_local_storage: true,
|
75
80
|
clear_session_storage: true
|
76
81
|
)
|
@@ -88,7 +93,7 @@ module Billy
|
|
88
93
|
::Capybara::Selenium::Driver.new(
|
89
94
|
app,
|
90
95
|
browser: :chrome,
|
91
|
-
|
96
|
+
capabilities: options,
|
92
97
|
clear_local_storage: true,
|
93
98
|
clear_session_storage: true
|
94
99
|
)
|
@@ -105,7 +110,6 @@ module Billy
|
|
105
110
|
|
106
111
|
def self.build_selenium_options_for_firefox
|
107
112
|
profile = Selenium::WebDriver::Firefox::Profile.new.tap do |prof|
|
108
|
-
prof.assume_untrusted_certificate_issuer = false
|
109
113
|
prof.proxy = Selenium::WebDriver::Proxy.new(
|
110
114
|
http: "#{Billy.proxy.host}:#{Billy.proxy.port}",
|
111
115
|
ssl: "#{Billy.proxy.host}:#{Billy.proxy.port}")
|
data/lib/billy/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Olly Smith
|
@@ -182,16 +182,16 @@ dependencies:
|
|
182
182
|
name: watir
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- - "
|
185
|
+
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: 7.
|
187
|
+
version: 7.1.0
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- - "
|
192
|
+
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: 7.
|
194
|
+
version: 7.1.0
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: webdrivers
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -328,29 +328,13 @@ description: A stubbing proxy server for ruby. Connect it to your browser in int
|
|
328
328
|
tests to fake interactions with remote HTTP(S) servers.
|
329
329
|
email:
|
330
330
|
- olly.smith@gmail.com
|
331
|
-
executables:
|
332
|
-
- proxy.rb
|
331
|
+
executables: []
|
333
332
|
extensions: []
|
334
333
|
extra_rdoc_files: []
|
335
334
|
files:
|
336
|
-
- ".github/workflows/ci.yml"
|
337
|
-
- ".gitignore"
|
338
|
-
- ".rspec"
|
339
335
|
- CHANGELOG.md
|
340
|
-
- Dockerfile
|
341
|
-
- Gemfile
|
342
|
-
- Guardfile
|
343
336
|
- LICENSE
|
344
337
|
- README.md
|
345
|
-
- Rakefile
|
346
|
-
- bin/proxy.rb
|
347
|
-
- examples/README.md
|
348
|
-
- examples/facebook_api.html
|
349
|
-
- examples/intercept_request.html
|
350
|
-
- examples/post_api.html
|
351
|
-
- examples/preflight_request.html
|
352
|
-
- examples/tumblr_api.html
|
353
|
-
- examples/tumblr_api_https.html
|
354
338
|
- lib/billy.rb
|
355
339
|
- lib/billy/browsers/capybara.rb
|
356
340
|
- lib/billy/browsers/watir.rb
|
@@ -382,34 +366,9 @@ files:
|
|
382
366
|
- lib/billy/watir/rspec.rb
|
383
367
|
- lib/puffing-billy.rb
|
384
368
|
- lib/puffing-billy/rspec.rb
|
385
|
-
- lib/tasks/billy.rake
|
386
|
-
- log/.gitkeep
|
387
|
-
- puffing-billy.gemspec
|
388
|
-
- spec/features/examples/facebook_api_spec.rb
|
389
|
-
- spec/features/examples/intercept_request_spec.rb
|
390
|
-
- spec/features/examples/post_api_spec.rb
|
391
|
-
- spec/features/examples/preflight_request_spec.rb
|
392
|
-
- spec/features/examples/tumblr_api_spec.rb
|
393
|
-
- spec/lib/billy/browsers/capybara_spec.rb
|
394
|
-
- spec/lib/billy/cache_spec.rb
|
395
|
-
- spec/lib/billy/handlers/cache_handler_spec.rb
|
396
|
-
- spec/lib/billy/handlers/handler_spec.rb
|
397
|
-
- spec/lib/billy/handlers/proxy_handler_spec.rb
|
398
|
-
- spec/lib/billy/handlers/request_handler_spec.rb
|
399
|
-
- spec/lib/billy/handlers/request_log_spec.rb
|
400
|
-
- spec/lib/billy/handlers/stub_handler_spec.rb
|
401
|
-
- spec/lib/billy/proxy_connection_spec.rb
|
402
|
-
- spec/lib/billy/proxy_request_stub_spec.rb
|
403
|
-
- spec/lib/billy/resource_utils_spec.rb
|
404
|
-
- spec/lib/billy/ssl/authority_spec.rb
|
405
|
-
- spec/lib/billy/ssl/certificate_chain_spec.rb
|
406
|
-
- spec/lib/billy/ssl/certificate_spec.rb
|
407
|
-
- spec/lib/billy/watir/watir_spec.rb
|
408
|
-
- spec/lib/proxy_spec.rb
|
409
|
-
- spec/spec_helper.rb
|
410
|
-
- spec/support/test_server.rb
|
411
369
|
homepage: https://github.com/oesmith/puffing-billy
|
412
|
-
licenses:
|
370
|
+
licenses:
|
371
|
+
- MIT
|
413
372
|
metadata: {}
|
414
373
|
post_install_message:
|
415
374
|
rdoc_options: []
|
@@ -430,27 +389,4 @@ rubygems_version: 3.2.22
|
|
430
389
|
signing_key:
|
431
390
|
specification_version: 4
|
432
391
|
summary: Easy request stubs for browser tests.
|
433
|
-
test_files:
|
434
|
-
- spec/features/examples/facebook_api_spec.rb
|
435
|
-
- spec/features/examples/intercept_request_spec.rb
|
436
|
-
- spec/features/examples/post_api_spec.rb
|
437
|
-
- spec/features/examples/preflight_request_spec.rb
|
438
|
-
- spec/features/examples/tumblr_api_spec.rb
|
439
|
-
- spec/lib/billy/browsers/capybara_spec.rb
|
440
|
-
- spec/lib/billy/cache_spec.rb
|
441
|
-
- spec/lib/billy/handlers/cache_handler_spec.rb
|
442
|
-
- spec/lib/billy/handlers/handler_spec.rb
|
443
|
-
- spec/lib/billy/handlers/proxy_handler_spec.rb
|
444
|
-
- spec/lib/billy/handlers/request_handler_spec.rb
|
445
|
-
- spec/lib/billy/handlers/request_log_spec.rb
|
446
|
-
- spec/lib/billy/handlers/stub_handler_spec.rb
|
447
|
-
- spec/lib/billy/proxy_connection_spec.rb
|
448
|
-
- spec/lib/billy/proxy_request_stub_spec.rb
|
449
|
-
- spec/lib/billy/resource_utils_spec.rb
|
450
|
-
- spec/lib/billy/ssl/authority_spec.rb
|
451
|
-
- spec/lib/billy/ssl/certificate_chain_spec.rb
|
452
|
-
- spec/lib/billy/ssl/certificate_spec.rb
|
453
|
-
- spec/lib/billy/watir/watir_spec.rb
|
454
|
-
- spec/lib/proxy_spec.rb
|
455
|
-
- spec/spec_helper.rb
|
456
|
-
- spec/support/test_server.rb
|
392
|
+
test_files: []
|
data/.github/workflows/ci.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
2
|
-
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
3
|
-
|
4
|
-
name: CI
|
5
|
-
on:
|
6
|
-
push:
|
7
|
-
branches: [ master ]
|
8
|
-
pull_request:
|
9
|
-
branches: [ master ]
|
10
|
-
jobs:
|
11
|
-
test:
|
12
|
-
runs-on: ubuntu-latest
|
13
|
-
strategy:
|
14
|
-
fail-fast: false
|
15
|
-
matrix:
|
16
|
-
ruby-version: ['2.6', '2.7', '3.0', '3.1']
|
17
|
-
|
18
|
-
steps:
|
19
|
-
- uses: actions/checkout@v2
|
20
|
-
- name: Set up Ruby
|
21
|
-
uses: ruby/setup-ruby@v1
|
22
|
-
with:
|
23
|
-
ruby-version: ${{ matrix.ruby-version }}
|
24
|
-
bundler-cache: true
|
25
|
-
rubygems: latest
|
26
|
-
- name: Run tests
|
27
|
-
run: bundle exec rake
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/Dockerfile
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
FROM ruby:1.9.3
|
2
|
-
|
3
|
-
RUN apt-get update -y
|
4
|
-
RUN apt-get install -y qt5-default libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools gstreamer1.0-x
|
5
|
-
RUN gem install bundler
|
6
|
-
RUN \
|
7
|
-
export PHANTOMJS_VERSION='2.1.1' && \
|
8
|
-
export PHANTOMJS_URL='https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2' && \
|
9
|
-
wget -q ${PHANTOMJS_URL} && \
|
10
|
-
tar xfv phantomjs-${PHANTOMJS_VERSION}-linux-x86_64.tar.bz2 \
|
11
|
-
-C /usr/bin --wildcards */bin/phantomjs --strip-components=2
|
12
|
-
RUN mkdir -p /app
|
13
|
-
COPY . /app
|
14
|
-
RUN cd /app && bundle install
|
data/Gemfile
DELETED
data/Guardfile
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# A sample Guardfile
|
2
|
-
# More info at https://github.com/guard/guard#readme
|
3
|
-
|
4
|
-
guard 'rspec', version: 2 do
|
5
|
-
watch(%r{^spec/.+_spec\.rb$})
|
6
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
-
watch('spec/spec_helper.rb') { 'spec' }
|
8
|
-
|
9
|
-
# Rails example
|
10
|
-
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
-
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
-
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
-
watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
|
14
|
-
watch('config/routes.rb') { 'spec/routing' }
|
15
|
-
watch('app/controllers/application_controller.rb') { 'spec/controllers' }
|
16
|
-
|
17
|
-
# Capybara request specs
|
18
|
-
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
19
|
-
|
20
|
-
# Turnip features and steps
|
21
|
-
watch(%r{^spec/acceptance/(.+)\.feature$})
|
22
|
-
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
23
|
-
end
|
data/Rakefile
DELETED
data/bin/proxy.rb
DELETED
data/examples/README.md
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
See example specs in `spec/requests/examples`.
|
data/examples/facebook_api.html
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
<div id="fb-root"></div>
|
2
|
-
<script>
|
3
|
-
// Load the SDK Asynchronously
|
4
|
-
(function(d){
|
5
|
-
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
|
6
|
-
if (d.getElementById(id)) {return;}
|
7
|
-
js = d.createElement('script'); js.id = id; js.async = true;
|
8
|
-
js.src = "//connect.facebook.net/en_US/all.js";
|
9
|
-
ref.parentNode.insertBefore(js, ref);
|
10
|
-
}(document));
|
11
|
-
|
12
|
-
// Init the SDK upon load
|
13
|
-
window.fbAsyncInit = function() {
|
14
|
-
FB.init({
|
15
|
-
appId : '408416075843608', // App ID
|
16
|
-
//channelUrl : '//'+window.location.hostname+'/channel', // Path to your Channel File
|
17
|
-
status : true, // check login status
|
18
|
-
cookie : true, // enable cookies to allow the server to access the session
|
19
|
-
xfbml : true // parse XFBML
|
20
|
-
});
|
21
|
-
|
22
|
-
// listen for and handle auth.statusChange events
|
23
|
-
FB.Event.subscribe('auth.statusChange', function(response) {
|
24
|
-
if (response.authResponse) {
|
25
|
-
// user has auth'd your app and is logged into Facebook
|
26
|
-
FB.api('/me', function(me){
|
27
|
-
if (me.name) {
|
28
|
-
document.getElementById('auth-displayname').innerHTML = me.name;
|
29
|
-
}
|
30
|
-
})
|
31
|
-
document.getElementById('auth-loggedout').style.display = 'none';
|
32
|
-
document.getElementById('auth-loggedin').style.display = 'block';
|
33
|
-
} else {
|
34
|
-
// user has not auth'd your app, or is not logged into Facebook
|
35
|
-
document.getElementById('auth-loggedout').style.display = 'block';
|
36
|
-
document.getElementById('auth-loggedin').style.display = 'none';
|
37
|
-
}
|
38
|
-
});
|
39
|
-
|
40
|
-
// respond to clicks on the login and logout links
|
41
|
-
document.getElementById('auth-loginlink').addEventListener('click', function(){
|
42
|
-
FB.login();
|
43
|
-
});
|
44
|
-
document.getElementById('auth-logoutlink').addEventListener('click', function(){
|
45
|
-
FB.logout();
|
46
|
-
});
|
47
|
-
}
|
48
|
-
</script>
|
49
|
-
|
50
|
-
<h1>Facebook Client-side Authentication Example</h1>
|
51
|
-
<div id="auth-status">
|
52
|
-
<div id="auth-loggedout">
|
53
|
-
<a href="#" id="auth-loginlink">Login</a>
|
54
|
-
</div>
|
55
|
-
<div id="auth-loggedin" style="display:none">
|
56
|
-
Hi, <span id="auth-displayname"></span>
|
57
|
-
(<a href="#" id="auth-logoutlink">logout</a>)
|
58
|
-
</div>
|
59
|
-
</div>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<body>
|
3
|
-
<h1>Intercept request example</h1>
|
4
|
-
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.min.js'></script>
|
5
|
-
<script type='text/javascript'>
|
6
|
-
$(function () {
|
7
|
-
$.post('http://example.com/', { foo: 'bar' });
|
8
|
-
})
|
9
|
-
</script>
|
10
|
-
</body>
|
data/examples/post_api.html
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
<!doctype html>
|
2
|
-
<body>
|
3
|
-
<h1>POST to API</h1>
|
4
|
-
<div id="result"></div>
|
5
|
-
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.min.js'></script>
|
6
|
-
<script type='text/javascript'>
|
7
|
-
$(function () {
|
8
|
-
$.post('http://example.com/api', { foo: 'bar' }).done(function(data) {
|
9
|
-
$('#result').append('Success!');
|
10
|
-
})
|
11
|
-
.fail(function(data) {
|
12
|
-
$('#result').append('Fail!');
|
13
|
-
});
|
14
|
-
})
|
15
|
-
</script>
|
16
|
-
</body>
|
@@ -1,22 +0,0 @@
|
|
1
|
-
<!doctype html>
|
2
|
-
<body>
|
3
|
-
<h1>Cross Domain Request</h1>
|
4
|
-
<div id="result"></div>
|
5
|
-
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.min.js'></script>
|
6
|
-
<script type='text/javascript'>
|
7
|
-
$(function () {
|
8
|
-
$.ajax(
|
9
|
-
{
|
10
|
-
url: 'http://example.com/api',
|
11
|
-
method: 'GET',
|
12
|
-
contentType: 'json' // setting this forces an OPTIONS request
|
13
|
-
}
|
14
|
-
).done(function(data) {
|
15
|
-
$('#result').append('Success!');
|
16
|
-
})
|
17
|
-
.fail(function(data) {
|
18
|
-
$('#result').append('Fail!');
|
19
|
-
});
|
20
|
-
})
|
21
|
-
</script>
|
22
|
-
</body>
|
data/examples/tumblr_api.html
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
<!doctype html>
|
2
|
-
<body>
|
3
|
-
<h1>Latest news</h1>
|
4
|
-
<div id="news"></div>
|
5
|
-
|
6
|
-
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.min.js'></script>
|
7
|
-
<script type='text/javascript'>
|
8
|
-
$(function () {
|
9
|
-
var url = 'http://blog.howmanyleft.co.uk/api/read/json?callback=?&type=text&num=3&filter=text';
|
10
|
-
$.getJSON(url, function (data) {
|
11
|
-
$.each(data.posts, function (idx, post) {
|
12
|
-
var title = post['regular-title'];
|
13
|
-
var href = post['url-with-slug'];
|
14
|
-
var body = post['regular-body'];
|
15
|
-
$('#news').append(
|
16
|
-
'<h3><a href="' + href + '">' + title + '</a></h3>' +
|
17
|
-
'<p>' + body + '</p>');
|
18
|
-
});
|
19
|
-
});
|
20
|
-
})
|
21
|
-
</script>
|
22
|
-
</body>
|
@@ -1,22 +0,0 @@
|
|
1
|
-
<!doctype html>
|
2
|
-
<body>
|
3
|
-
<h1>Latest news</h1>
|
4
|
-
<div id="news"></div>
|
5
|
-
|
6
|
-
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.min.js'></script>
|
7
|
-
<script type='text/javascript'>
|
8
|
-
$(function () {
|
9
|
-
var url = 'https://blog.howmanyleft.co.uk/api/read/json?callback=?&type=text&num=3&filter=text';
|
10
|
-
$.getJSON(url, function (data) {
|
11
|
-
$.each(data.posts, function (idx, post) {
|
12
|
-
var title = post['regular-title'];
|
13
|
-
var href = post['url-with-slug'];
|
14
|
-
var body = post['regular-body'];
|
15
|
-
$('#news').append(
|
16
|
-
'<h3><a href="' + href + '">' + title + '</a></h3>' +
|
17
|
-
'<p>' + body + '</p>');
|
18
|
-
});
|
19
|
-
});
|
20
|
-
})
|
21
|
-
</script>
|
22
|
-
</body>
|
data/lib/tasks/billy.rake
DELETED
@@ -1,87 +0,0 @@
|
|
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
|
data/log/.gitkeep
DELETED
File without changes
|
data/puffing-billy.gemspec
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
require File.expand_path('../lib/billy/version', __FILE__)
|
3
|
-
|
4
|
-
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ['Olly Smith']
|
6
|
-
gem.email = ['olly.smith@gmail.com']
|
7
|
-
gem.description = 'A stubbing proxy server for ruby. Connect it to your browser in integration tests to fake interactions with remote HTTP(S) servers.'
|
8
|
-
gem.summary = 'Easy request stubs for browser tests.'
|
9
|
-
gem.homepage = 'https://github.com/oesmith/puffing-billy'
|
10
|
-
|
11
|
-
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
12
|
-
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
13
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
-
gem.name = 'puffing-billy'
|
15
|
-
gem.require_paths = ['lib']
|
16
|
-
gem.version = Billy::VERSION
|
17
|
-
gem.required_ruby_version = '>= 2.6.0'
|
18
|
-
|
19
|
-
gem.add_development_dependency 'rspec'
|
20
|
-
gem.add_development_dependency 'thin'
|
21
|
-
gem.add_development_dependency 'faraday', '>= 0.9.0'
|
22
|
-
gem.add_development_dependency 'apparition'
|
23
|
-
gem.add_development_dependency 'capybara'
|
24
|
-
gem.add_development_dependency 'selenium-webdriver', '>= 4.0.0'
|
25
|
-
gem.add_development_dependency 'rack'
|
26
|
-
gem.add_development_dependency 'rake'
|
27
|
-
gem.add_development_dependency 'guard'
|
28
|
-
gem.add_development_dependency 'rb-inotify'
|
29
|
-
gem.add_development_dependency 'pry'
|
30
|
-
gem.add_development_dependency 'cucumber'
|
31
|
-
gem.add_development_dependency 'watir', '>= 7.0.0'
|
32
|
-
gem.add_development_dependency 'webdrivers', '>= 5.0.0'
|
33
|
-
gem.add_development_dependency 'webrick'
|
34
|
-
gem.add_runtime_dependency 'addressable', '~> 2.5'
|
35
|
-
gem.add_runtime_dependency 'eventmachine', '~> 1.2'
|
36
|
-
gem.add_runtime_dependency 'em-synchrony'
|
37
|
-
gem.add_runtime_dependency 'em-http-request', '~> 1.1', '>= 1.1.0'
|
38
|
-
gem.add_runtime_dependency 'eventmachine_httpserver'
|
39
|
-
gem.add_runtime_dependency 'http_parser.rb', '~> 0.6.0'
|
40
|
-
gem.add_runtime_dependency 'multi_json'
|
41
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'base64'
|
3
|
-
|
4
|
-
# FIXME: Looks like Facebook API changed recently and this test fails consistently now -RS 2018-03-05
|
5
|
-
xdescribe 'Facebook API example', type: :feature, js: true do
|
6
|
-
before do
|
7
|
-
proxy.stub('https://www.facebook.com:443/dialog/oauth').and_return(proc do |params, _, _|
|
8
|
-
# mock a signed request from facebook. the JS api never verifies the
|
9
|
-
# signature, so all it needs is the base64-encoded payload
|
10
|
-
signed_request = "xxxxxxxxxx.#{Base64.encode64('{"user_id":"1234567"}')}"
|
11
|
-
# redirect to the 'redirect_uri', with some extra crap in the query string
|
12
|
-
{ redirect_to: "#{params['redirect_uri'][0]}&access_token=foobar&expires_in=600&base_domain=localhost&https=1&signed_request=#{signed_request}" }
|
13
|
-
end)
|
14
|
-
|
15
|
-
proxy.stub('https://graph.facebook.com:443/me').and_return(jsonp: { name: 'Tester 1' })
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'should show me as logged-in' do
|
19
|
-
visit '/facebook_api.html'
|
20
|
-
click_on 'Login'
|
21
|
-
expect(page).to have_content 'Hi, Tester 1'
|
22
|
-
end
|
23
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'timeout'
|
3
|
-
|
4
|
-
describe 'intercept request example', type: :feature, js: true do
|
5
|
-
before do
|
6
|
-
Billy.config.record_stub_requests = true
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'should intercept a GET request directly' do
|
10
|
-
stub = proxy.stub('http://example.com/').and_return(
|
11
|
-
headers: { 'Access-Control-Allow-Origin' => '*' },
|
12
|
-
code: 200
|
13
|
-
)
|
14
|
-
visit 'http://example.com/'
|
15
|
-
expect(stub.has_requests?).to be true
|
16
|
-
expect(stub.requests).not_to be_empty
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should intercept a POST request through an intermediary page' do
|
20
|
-
stub = proxy.stub('http://example.com/', method: 'post').and_return(
|
21
|
-
headers: { 'Access-Control-Allow-Origin' => '*' },
|
22
|
-
code: 200
|
23
|
-
)
|
24
|
-
visit '/intercept_request.html'
|
25
|
-
Timeout::timeout(5) do
|
26
|
-
sleep(0.1) until stub.has_requests?
|
27
|
-
end
|
28
|
-
request = stub.requests.shift
|
29
|
-
expect(request[:body]).to eql 'foo=bar'
|
30
|
-
end
|
31
|
-
end
|