proxy_rb 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +9 -4
- data/Gemfile +2 -2
- data/History.md +17 -0
- data/LICENSE.txt +22 -0
- data/README.md +15 -4
- data/Rakefile +8 -2
- data/exe/proxy_rb +8 -0
- data/fixtures/empty/README.md +18 -0
- data/fixtures/empty/Rakefile +10 -0
- data/lib/proxy_rb/announcer.rb +162 -0
- data/lib/proxy_rb/{rspec/helpers → api}/.keep +0 -0
- data/lib/proxy_rb/api/core.rb +25 -0
- data/lib/proxy_rb/api/http_proxy.rb +94 -0
- data/lib/proxy_rb/api/passwords.rb +26 -0
- data/lib/proxy_rb/api.rb +19 -0
- data/lib/proxy_rb/basic_configuration/{in_config_wrapper.rb → in_configuration_wrapper.rb} +1 -1
- data/lib/proxy_rb/basic_configuration.rb +2 -2
- data/lib/proxy_rb/cli.rb +27 -0
- data/lib/proxy_rb/colorizer.rb +113 -0
- data/lib/proxy_rb/configuration.rb +1 -1
- data/lib/proxy_rb/configuration_wrapper.rb +59 -0
- data/lib/proxy_rb/console/help.rb +29 -0
- data/lib/proxy_rb/console.rb +62 -0
- data/lib/proxy_rb/credentials.rb +11 -0
- data/lib/proxy_rb/drivers/poltergeist_driver.rb +8 -2
- data/lib/proxy_rb/drivers/selenium_driver.rb +7 -1
- data/lib/proxy_rb/drivers/webkit_driver.rb +10 -1
- data/lib/proxy_rb/errors.rb +12 -0
- data/lib/proxy_rb/event_bus/name_resolver.rb +163 -0
- data/lib/proxy_rb/event_bus.rb +60 -0
- data/lib/proxy_rb/events.rb +34 -0
- data/lib/proxy_rb/http_proxy.rb +8 -0
- data/lib/proxy_rb/initializer.rb +132 -0
- data/lib/proxy_rb/{rspec/matchers → matchers}/.keep +0 -0
- data/lib/proxy_rb/matchers/be_forbidden.rb +14 -0
- data/lib/proxy_rb/matchers/be_successful.rb +14 -0
- data/lib/proxy_rb/matchers/have_mime_type.rb +9 -0
- data/lib/proxy_rb/password_fetchers/basic_password_fetcher.rb +25 -0
- data/lib/proxy_rb/password_fetchers/chaining_password_fetcher.rb +54 -0
- data/lib/proxy_rb/password_fetchers/environment_password_fetcher.rb +7 -1
- data/lib/proxy_rb/password_fetchers/vault_password_fetcher.rb +7 -1
- data/lib/proxy_rb/proxy_url.rb +8 -0
- data/lib/proxy_rb/request.rb +5 -21
- data/lib/proxy_rb/resource.rb +11 -7
- data/lib/proxy_rb/response.rb +5 -13
- data/lib/proxy_rb/rspec.rb +32 -13
- data/lib/proxy_rb/runtime.rb +49 -0
- data/lib/proxy_rb/setup.rb +60 -0
- data/lib/proxy_rb/version.rb +1 -1
- data/proxy_rb.gemspec +2 -2
- metadata +38 -29
- data/lib/proxy_rb/rspec/helpers/http_proxy.rb +0 -83
- data/lib/proxy_rb/rspec/helpers/passwords.rb +0 -29
- data/lib/proxy_rb/rspec/shared_contexts/.keep +0 -0
- data/lib/proxy_rb/rspec/shared_examples/.keep +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0902f8cb548f1fa6b4180ed66ebf2dcd26edb71a
|
4
|
+
data.tar.gz: 3e29d77475f07c367318ca19daa7dc5160ba1bb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14b997bcbfbeb3abffda5dc16e0b04b8313431c4f34b896d3b4cd5f54bddec02c1a05f007ba5ec69d9454c52930d3a309c2ae01a8e157bda5004b77f83e7efa1
|
7
|
+
data.tar.gz: 06b90ebb03851f17c42ba372f92bb82c033622b341870338897a8c1c2ce599f40dfee891db95cf473887eb5f3ed96e28ce0ad7c12fd04ae6ea6265535010753f
|
data/.travis.yml
CHANGED
@@ -4,16 +4,21 @@ env:
|
|
4
4
|
language: ruby
|
5
5
|
bundler_args: --without development debug profile
|
6
6
|
rvm:
|
7
|
-
- 2.1.8
|
8
|
-
- 2.2.4
|
9
7
|
- 2.3.0
|
10
8
|
- ruby-head
|
11
9
|
script: bin/test
|
12
10
|
before_install:
|
13
11
|
- curl -o /tmp/vault.zip https://releases.hashicorp.com/vault/0.5.1/vault_0.5.1_linux_amd64.zip
|
14
|
-
- unzip /tmp/vault.zip
|
12
|
+
- unzip /tmp/vault.zip -d /tmp/
|
15
13
|
- install -D -m 0755 /tmp/vault ./bin/vault
|
14
|
+
before_script:
|
15
|
+
- 'export DISPLAY=:99.0'
|
16
|
+
- 'sh -e /etc/init.d/xvfb start'
|
17
|
+
- sleep 3 # give xvfb some time to start
|
16
18
|
addons:
|
17
19
|
apt:
|
18
20
|
packages:
|
19
|
-
-
|
21
|
+
- libqtwebkit-dev
|
22
|
+
matrix:
|
23
|
+
allow_failures:
|
24
|
+
- rvm: ruby-head
|
data/Gemfile
CHANGED
@@ -23,7 +23,7 @@ group :development, :test do
|
|
23
23
|
# Set env during development/test
|
24
24
|
gem 'dotenv'
|
25
25
|
|
26
|
-
gem 'aruba', require: false
|
26
|
+
gem 'aruba', '~> 0.14.1', require: false
|
27
27
|
gem 'awesome_print', require: 'ap'
|
28
28
|
gem 'bundler', '~> 1.3', require: false
|
29
29
|
gem 'command_exec', require: false
|
@@ -38,7 +38,7 @@ group :development, :test do
|
|
38
38
|
gem 'launchy', require: false
|
39
39
|
gem 'license_finder'
|
40
40
|
gem 'rack'
|
41
|
-
gem 'rake', require: false
|
41
|
+
gem 'rake', '~> 10.0', require: false
|
42
42
|
gem 'rubocop', require: false
|
43
43
|
gem 'simplecov', require: false
|
44
44
|
gem 'sinatra', require: 'sinatra/base'
|
data/History.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# UNRELEASED
|
2
|
+
|
3
|
+
## [v0.5.0](https://github.com/cucumber/aruba/compare/v0.4.0...v0.5.0)
|
4
|
+
|
5
|
+
* Added initializer to bootstrap `proxy_prb`
|
6
|
+
* Improved documentation
|
7
|
+
* Improved test suite
|
8
|
+
* Made test suite succeed on travis.org
|
9
|
+
* Added announcer known from `aruba`. Now one output information about
|
10
|
+
configured user, proxy and resource
|
11
|
+
* Addd new matchers to output better error messages
|
12
|
+
|
13
|
+
# RELEASED
|
14
|
+
|
15
|
+
## [v0.4.0](https://github.com/cucumber/aruba/compare/v0.1.0...v0.4.0)
|
16
|
+
|
17
|
+
* Added support for `poltergeist`, `selenium` and `webkit`
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016- Max Meyer
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
9
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
10
|
+
so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.md
CHANGED
@@ -76,6 +76,10 @@ RSpec.describe 'My Proxy' do
|
|
76
76
|
end
|
77
77
|
~~~
|
78
78
|
|
79
|
+
Please have a look at the
|
80
|
+
["features/getting_started"](features/getting_started)-directory for more
|
81
|
+
information about that topic.
|
82
|
+
|
79
83
|
### Getting on with "proxy_rb"
|
80
84
|
|
81
85
|
Please have a look at our "feature"-files found [here](features/).
|
@@ -85,14 +89,14 @@ Please have a look at our "feature"-files found [here](features/).
|
|
85
89
|
Maybe your proxy servers require authentication and you would like to test this
|
86
90
|
as well. You've got several possibilies to use proxy passwords with `proxy_rb`.
|
87
91
|
Please have a look at
|
88
|
-
["features/authentication
|
89
|
-
detailed information.
|
92
|
+
["features/proxy/authentication"](features/proxy/authentication) and
|
93
|
+
["features/api/password"](features/api/password) for detailed information.
|
90
94
|
|
91
95
|
### Driver
|
92
96
|
|
93
|
-
You can choose between
|
97
|
+
You can choose between three drivers to sent your requests: "Selenium", "Poltergeist" and
|
94
98
|
"Webkit". Please have a look at
|
95
|
-
["features/drivers
|
99
|
+
["features/drivers"](features/drivers) for detailed
|
96
100
|
information.
|
97
101
|
|
98
102
|
## Development
|
@@ -128,3 +132,10 @@ release a new version, update the version number in `version.rb`, and then run
|
|
128
132
|
`bundle exec rake gem:release` to create a git tag for the version, push git
|
129
133
|
commits and tags, and push the `.gem` file to
|
130
134
|
[rubygems.org](https://rubygems.org).
|
135
|
+
|
136
|
+
## Caveats
|
137
|
+
|
138
|
+
* Authentication against a proxy using BASIC-scheme works fine for `Poltergeist` and `Webkit`-drivers. It fails for `Selenium` as you cannot pass username and password to the browser
|
139
|
+
* Authentication agains a proxy using NEGOTIATE (Kerberos) and NTLM-scheme fails for `Poltergeist` and `Webkit`-drivers due to problems with Qt which is used by both projects
|
140
|
+
|
141
|
+
|
data/Rakefile
CHANGED
@@ -20,8 +20,9 @@ desc 'Test with coveralls'
|
|
20
20
|
task coveralls: %w(test coveralls:push)
|
21
21
|
|
22
22
|
namespace :test do
|
23
|
-
|
24
|
-
|
23
|
+
task :rubocop do
|
24
|
+
sh 'rubocop'
|
25
|
+
end
|
25
26
|
|
26
27
|
desc 'Run rspec'
|
27
28
|
task :rspec do
|
@@ -33,3 +34,8 @@ namespace :test do
|
|
33
34
|
sh 'bundle exec cucumber -p all'
|
34
35
|
end
|
35
36
|
end
|
37
|
+
|
38
|
+
desc 'Remove files in tmp'
|
39
|
+
task :clobber do
|
40
|
+
rm_rf Dir.glob(File.expand_path('../tmp/*', __FILE__))
|
41
|
+
end
|
data/exe/proxy_rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Simple proxy configuration project
|
2
|
+
|
3
|
+
This is a simple proxy configuration project
|
4
|
+
|
5
|
+
## Boostrap
|
6
|
+
|
7
|
+
Execute:
|
8
|
+
|
9
|
+
$ bundle
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Place files in `spec/` and run `rspec`.
|
14
|
+
|
15
|
+
### Fixture
|
16
|
+
|
17
|
+
This fixture includes files for `rspec`-integration.
|
18
|
+
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'shellwords'
|
3
|
+
require 'proxy_rb/colorizer'
|
4
|
+
|
5
|
+
ProxyRb::AnsiColor.coloring = false if !STDOUT.tty? && !ENV.key?('AUTOTEST')
|
6
|
+
|
7
|
+
# ProxyRb
|
8
|
+
module ProxyRb
|
9
|
+
# Announcer
|
10
|
+
#
|
11
|
+
# @private
|
12
|
+
#
|
13
|
+
# @example Activate your you own channel in cucumber
|
14
|
+
#
|
15
|
+
# Before('@announce-my-channel') do
|
16
|
+
# aruba.announcer.activate :my_channel
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# @example Activate your you own channel in rspec > 3
|
20
|
+
#
|
21
|
+
# before do
|
22
|
+
# current_example = context.example
|
23
|
+
# aruba.announcer.activate :my_channel if current_example.metadata[:announce_my_channel]
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# ProxyRb.announcer.announce(:my_channel, 'my message')
|
27
|
+
#
|
28
|
+
class Announcer
|
29
|
+
# Announcer using Kernel.puts
|
30
|
+
class KernelPutsAnnouncer
|
31
|
+
def announce(message)
|
32
|
+
Kernel.puts message
|
33
|
+
end
|
34
|
+
|
35
|
+
def mode?(m)
|
36
|
+
:kernel_puts == m
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Announcer using Main#puts
|
41
|
+
class PutsAnnouncer
|
42
|
+
def announce(message)
|
43
|
+
puts message
|
44
|
+
end
|
45
|
+
|
46
|
+
def mode?(m)
|
47
|
+
:puts == m
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
attr_reader :announcers, :announcer, :channels, :output_formats, :colorizer
|
54
|
+
|
55
|
+
public
|
56
|
+
|
57
|
+
def initialize(*args)
|
58
|
+
@announcers = []
|
59
|
+
@announcers << PutsAnnouncer.new
|
60
|
+
@announcers << KernelPutsAnnouncer.new
|
61
|
+
|
62
|
+
@colorizer = ProxyRb::Colorizer.new
|
63
|
+
|
64
|
+
@announcer = @announcers.first
|
65
|
+
@channels = {}
|
66
|
+
@output_formats = {}
|
67
|
+
|
68
|
+
@options = args[1] || {}
|
69
|
+
|
70
|
+
after_init
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def after_init
|
76
|
+
output_format :proxy, proc { |v| format('Proxy: %s', v) }
|
77
|
+
output_format :proxy_user, proc { |v| format('Proxy User: %s', v) }
|
78
|
+
output_format :resource_user, proc { |v| format('Resource User: %s', v) }
|
79
|
+
output_format :resource, proc { |v| format('Resource: %s', v) }
|
80
|
+
end
|
81
|
+
|
82
|
+
def output_format(channel, string = '%s', &block)
|
83
|
+
output_formats[channel.to_sym] = if block_given?
|
84
|
+
block
|
85
|
+
elsif string.is_a?(Proc)
|
86
|
+
string
|
87
|
+
else
|
88
|
+
proc { |*args| format(string, *args) }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
public
|
93
|
+
|
94
|
+
# Reset announcer
|
95
|
+
def reset
|
96
|
+
@announcer = @announcers.first
|
97
|
+
end
|
98
|
+
|
99
|
+
# Change mode of announcer
|
100
|
+
#
|
101
|
+
# @param [Symbol] m
|
102
|
+
# The mode to set
|
103
|
+
def mode=(m)
|
104
|
+
@announcer = @announcers.find { |_a| f.mode? m.to_sym }
|
105
|
+
|
106
|
+
self
|
107
|
+
end
|
108
|
+
|
109
|
+
# Check if channel is activated
|
110
|
+
#
|
111
|
+
# @param [Symbol] channel
|
112
|
+
# The name of the channel to check
|
113
|
+
def activated?(channel)
|
114
|
+
channels[channel.to_sym] == true
|
115
|
+
end
|
116
|
+
|
117
|
+
# Activate a channel
|
118
|
+
#
|
119
|
+
# @param [Symbol] channel
|
120
|
+
# The name of the channel to activate
|
121
|
+
def activate(*chns)
|
122
|
+
chns.flatten.each { |c| channels[c.to_sym] = true }
|
123
|
+
|
124
|
+
self
|
125
|
+
end
|
126
|
+
|
127
|
+
# Announce information to channel
|
128
|
+
#
|
129
|
+
# @param [Symbol] channel
|
130
|
+
# The name of the channel to check
|
131
|
+
#
|
132
|
+
# @param [Array] args
|
133
|
+
# Arguments
|
134
|
+
#
|
135
|
+
# @yield
|
136
|
+
# If block is given, that one is called and the return value is used as
|
137
|
+
# message to be announced.
|
138
|
+
def announce(channel, *args, &_block)
|
139
|
+
channel = channel.to_sym
|
140
|
+
|
141
|
+
the_output_format = if output_formats.key? channel
|
142
|
+
output_formats[channel]
|
143
|
+
else
|
144
|
+
proc { |v| format('%s', v) }
|
145
|
+
end
|
146
|
+
|
147
|
+
return unless activated?(channel)
|
148
|
+
|
149
|
+
message = if block_given?
|
150
|
+
the_output_format.call(yield)
|
151
|
+
else
|
152
|
+
the_output_format.call(*args)
|
153
|
+
end
|
154
|
+
message += "\n"
|
155
|
+
message = colorizer.cyan(message)
|
156
|
+
|
157
|
+
announcer.announce(message)
|
158
|
+
|
159
|
+
nil
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'proxy_rb/runtime'
|
3
|
+
require 'proxy_rb/setup'
|
4
|
+
|
5
|
+
# Main Module
|
6
|
+
module ProxyRb
|
7
|
+
# Api
|
8
|
+
module Api
|
9
|
+
# Core Module
|
10
|
+
module Core
|
11
|
+
# Aruba Runtime
|
12
|
+
def proxy_rb
|
13
|
+
@_proxy_rb_runtime ||= Runtime.new
|
14
|
+
end
|
15
|
+
|
16
|
+
# Setup everything to make proxy_rb work
|
17
|
+
#
|
18
|
+
def setup_proxy_rb
|
19
|
+
ProxyRb::Setup.new(proxy_rb).call
|
20
|
+
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'proxy_rb'
|
4
|
+
require 'proxy_rb/resource'
|
5
|
+
require 'proxy_rb/http_downloader'
|
6
|
+
require 'proxy_rb/http_proxy'
|
7
|
+
require 'proxy_rb/request'
|
8
|
+
require 'proxy_rb/response'
|
9
|
+
require 'proxy_rb/errors'
|
10
|
+
|
11
|
+
# Main Module
|
12
|
+
module ProxyRb
|
13
|
+
# Api
|
14
|
+
module Api
|
15
|
+
# Non includable internal helper methods
|
16
|
+
#
|
17
|
+
# Not for use by normal users
|
18
|
+
module NonIncludes
|
19
|
+
class << self
|
20
|
+
def clear_environment
|
21
|
+
%w(
|
22
|
+
http_proxy
|
23
|
+
https_proxy
|
24
|
+
HTTP_PROXY
|
25
|
+
HTTPS_PROXY
|
26
|
+
).each { |v| ENV.delete v }
|
27
|
+
end
|
28
|
+
|
29
|
+
def configure_driver
|
30
|
+
ProxyRb.config.driver.configure_driver
|
31
|
+
end
|
32
|
+
|
33
|
+
def register_capybara_driver_for_proxy(proxy)
|
34
|
+
ProxyRb.config.driver.register proxy
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# For http proxy
|
40
|
+
module HttpProxy
|
41
|
+
include ::Capybara::DSL
|
42
|
+
|
43
|
+
# The proxy based on subject
|
44
|
+
def proxy
|
45
|
+
ProxyRb::HttpProxy.new(ProxyUrlParser.new(subject))
|
46
|
+
end
|
47
|
+
|
48
|
+
# Visit an URL
|
49
|
+
#
|
50
|
+
# @param [String] url
|
51
|
+
# rubocop:disable Metrics/AbcSize
|
52
|
+
def visit(url)
|
53
|
+
resource = Resource.new(url)
|
54
|
+
|
55
|
+
proxy_rb.event_bus.notify Events::ResourceSet.new(resource.url.to_s)
|
56
|
+
proxy_rb.event_bus.notify Events::ResourceUserSet.new(resource.credentials.to_s) unless resource.credentials.empty?
|
57
|
+
|
58
|
+
NonIncludes.clear_environment
|
59
|
+
NonIncludes.configure_driver
|
60
|
+
|
61
|
+
proxy_rb.event_bus.notify Events::ProxySet.new(proxy.url.to_s)
|
62
|
+
proxy_rb.event_bus.notify Events::ProxyUserSet.new(proxy.credentials.to_s) unless proxy.credentials.empty?
|
63
|
+
|
64
|
+
NonIncludes.register_capybara_driver_for_proxy(proxy)
|
65
|
+
|
66
|
+
begin
|
67
|
+
super(resource.to_s)
|
68
|
+
rescue *ProxyRb.config.driver.timeout_errors
|
69
|
+
raise ProxyRb::UrlTimeoutError, "Failed to fetch #{resource}: Timeout occured."
|
70
|
+
rescue *ProxyRb.config.driver.failure_errors => e
|
71
|
+
raise ProxyRb::ResourceNotDownloadableError, "Failed to fetch #{resource}: #{e.message}."
|
72
|
+
rescue => e
|
73
|
+
raise ProxyRb::ResourceNotDownloadableError, "An unexpected error occured while fetching #{resource}: #{e.message}."
|
74
|
+
end
|
75
|
+
end
|
76
|
+
# rubocop:enable Metrics/AbcSize
|
77
|
+
|
78
|
+
# !@method download
|
79
|
+
#
|
80
|
+
# @see #visit
|
81
|
+
alias download visit
|
82
|
+
|
83
|
+
# Get access to the request made
|
84
|
+
def request
|
85
|
+
Request.new(page)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Get access to the response get
|
89
|
+
def response
|
90
|
+
Response.new(page)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'contracts'
|
3
|
+
|
4
|
+
# ProxyRb
|
5
|
+
module ProxyRb
|
6
|
+
# Api
|
7
|
+
module Api
|
8
|
+
# Helpers to access passwords
|
9
|
+
module Passwords
|
10
|
+
include Contracts::Core
|
11
|
+
include Contracts::Builtin
|
12
|
+
|
13
|
+
Contract Or[String, Symbol] => Maybe[String]
|
14
|
+
# Get password for user
|
15
|
+
#
|
16
|
+
# @param [String] user_name
|
17
|
+
# The user name
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
# The password
|
21
|
+
def password(user_name)
|
22
|
+
ProxyRb.config.password_fetcher.call(user_name.to_s)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/proxy_rb/api.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rspec/matchers'
|
3
|
+
require 'capybara/rspec'
|
4
|
+
|
5
|
+
require 'proxy_rb/no_proxy'
|
6
|
+
require 'proxy_rb/main'
|
7
|
+
ProxyRb.require_files_matching_pattern('api/*.rb')
|
8
|
+
ProxyRb.require_files_matching_pattern('matchers/*.rb')
|
9
|
+
|
10
|
+
# ProxyRb
|
11
|
+
module ProxyRb
|
12
|
+
# Api
|
13
|
+
module Api
|
14
|
+
include ProxyRb::Api::Core
|
15
|
+
include ProxyRb::Api::HttpProxy
|
16
|
+
include ProxyRb::Api::Passwords
|
17
|
+
include Capybara::RSpecMatchers
|
18
|
+
end
|
19
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'contracts'
|
3
3
|
require 'proxy_rb/basic_configuration/option'
|
4
|
-
require 'proxy_rb/basic_configuration/
|
4
|
+
require 'proxy_rb/basic_configuration/in_configuration_wrapper'
|
5
5
|
|
6
6
|
# ProxyRb
|
7
7
|
module ProxyRb
|
@@ -35,7 +35,7 @@ module ProxyRb
|
|
35
35
|
raise ArgumentError, 'contract-options is required' if contract.nil?
|
36
36
|
|
37
37
|
Contract contract
|
38
|
-
add_option(name, block_given? ? yield(
|
38
|
+
add_option(name, block_given? ? yield(InConfigurationWrapper.new(known_options)) : default)
|
39
39
|
|
40
40
|
define_method(name) { find_option(name).value }
|
41
41
|
|
data/lib/proxy_rb/cli.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'thor'
|
3
|
+
require 'proxy_rb/console'
|
4
|
+
require 'proxy_rb/initializer'
|
5
|
+
|
6
|
+
# ProxyRb
|
7
|
+
module ProxyRb
|
8
|
+
# Command line Interface
|
9
|
+
#
|
10
|
+
# @private
|
11
|
+
class Cli < Thor
|
12
|
+
def self.exit_on_failure?
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'console', "Start proxy_rb's console"
|
17
|
+
def console
|
18
|
+
ProxyRb::Console.new.start
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'init', 'Initialize proxy_rb'
|
22
|
+
option :test_framework, default: 'rspec', enum: %w(rspec), desc: 'Choose which test framework to use'
|
23
|
+
def init
|
24
|
+
ProxyRb::Initializer.new.call(options[:test_framework])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|