puffing-billy 3.0.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|