proxy_pac_rb 0.6.9 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e91fc474b42767f3467a68ee3d5c5ce8856f06f6
4
- data.tar.gz: 77927902a99dcc26026e0381f2692815690235b6
3
+ metadata.gz: e6882f46bded8f3ff2ad971b2b6eb2c4cfe6458e
4
+ data.tar.gz: 99a114959d3e42f3e242263e6a7627bbc8e0baf9
5
5
  SHA512:
6
- metadata.gz: 267f300d1b5aaa5abfc8c3717c359341f70904266880eed6ff84526f0909a0a70eacb706bdf2c143aa94f926ad7dc9f17cd3a7812f01a590d0f4f405c14811b6
7
- data.tar.gz: 5067d0c9c78254aa7576f8c46e7ea953239ff91d713878de2b45c658a7757fc6bd9b0b10e3b1eb29a8856add226d67461209486c140faf91e8f1cbb4c4cf36f1
6
+ metadata.gz: 70409e443bbbec0e96e33eea57b8d72406314fef6515d8e65f3f87920f64771cca71c3083367ef3c94e1b0674691c2bfe7f7c7f94ce2adf6cdb1f99d6170a6ef
7
+ data.tar.gz: c894044358c10a244165a0d8e5eb3f628758171198669cbbe940a4458278ef2fc16be95b0600f6e5436c19c54b55a3f69b2ccae2e1462671c6c405aea146cd4c
data/README.md CHANGED
@@ -59,6 +59,9 @@ pprb find proxy -c 127.0.0.1 -t "2014-03-09 12:00:00" -p sample.pac -u https://g
59
59
  # Or download via pprb directly and parse pac #2
60
60
  pprb find proxy -c 127.0.0.1 -t "2014-03-09 12:00:00" -p https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac -u https://github.com
61
61
 
62
+ # Or download this example if you are behind a coporate proxy via pprb directly and parse pac #3
63
+ pprb find proxy -c 127.0.0.1 -t "2014-03-09 12:00:00" -p https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac -u https://github.com --use-proxy
64
+
62
65
  # => url: result
63
66
  # => https://github.com: DIRECT
64
67
  ```
@@ -340,6 +343,23 @@ require 'proxy_pac_rb/rspec'
340
343
  "proxy.pac"-files. By default its value is `Dir.getwd` which is set by
341
344
  `rspec`.
342
345
 
346
+ ### Configuration
347
+
348
+ You can either configure `ProxyPacRb` either via a global `ProxyPacRb.configure`-block:
349
+
350
+ ```ruby
351
+ ProxyPacRb.configure do |config|
352
+ config.use_proxy = true
353
+ end
354
+ ```
355
+
356
+ or via `RSpec`-metadata:
357
+
358
+ ```ruby
359
+ RSpec.describe 'proxy.pac', type: :proxy_pac, use_proxy: true do
360
+ end
361
+ ```
362
+
343
363
  ### Examples
344
364
 
345
365
  To make it easier for you to start, you find some examples below.
@@ -1,5 +1,5 @@
1
1
  Given(/^a proxy\.pac named "([^"]*)" does not exist$/) do |name|
2
- FileUtils.rm_rf absolute_path("#{name}.pac")
2
+ FileUtils.rm_rf expand_path("#{name}.pac")
3
3
  end
4
4
 
5
5
  Then(/^the proxy\.pac "([^"]*)" should contain:$/) do |name, string|
data/lib/proxy_pac_rb.rb CHANGED
@@ -2,8 +2,10 @@ require 'active_support/core_ext/object/blank'
2
2
  require 'active_support/core_ext/string/strip'
3
3
  require 'active_support/core_ext/string/filters'
4
4
  require 'active_support/core_ext/hash/deep_merge'
5
+ require 'active_support/core_ext/object/deep_dup'
5
6
  require 'addressable/uri'
6
7
  require 'ipaddr'
8
+ require 'set'
7
9
  require 'thor'
8
10
  require 'uglifier'
9
11
  require 'optparse'
@@ -13,6 +15,7 @@ require 'excon'
13
15
  require 'time'
14
16
  require 'timeout'
15
17
  require 'pathname'
18
+ require 'contracts'
16
19
 
17
20
  require 'proxy_pac_rb/version'
18
21
  require 'proxy_pac_rb/main'
@@ -35,6 +38,9 @@ require 'proxy_pac_rb/proxy_pac_loader'
35
38
  require 'proxy_pac_rb/proxy_pac_linter'
36
39
  require 'proxy_pac_rb/proxy_pac_parser'
37
40
 
41
+ require 'proxy_pac_rb/basic_configuration'
42
+ require 'proxy_pac_rb/code_configuration'
43
+
38
44
  require 'proxy_pac_rb/cli_validator'
39
45
 
40
46
  require 'proxy_pac_rb/cli/shared'
@@ -0,0 +1,85 @@
1
+ module ProxyPacRb
2
+ # Basic configuration for ProxyPacRb
3
+ class BasicConfiguration
4
+ include Contracts
5
+
6
+ # A configuration option
7
+ class Option
8
+ attr_accessor :name, :value
9
+
10
+ def initialize(name:, value:)
11
+ @name = name
12
+ @value = value
13
+ end
14
+ end
15
+
16
+ class << self
17
+ def known_options
18
+ @known_options ||= {}
19
+ end
20
+
21
+ def option_writer(name, contract:, default:)
22
+ add_option(name, default)
23
+
24
+ Contract contract
25
+ define_method("#{name}=") { |v| find_option(name).value = v }
26
+
27
+ self
28
+ end
29
+
30
+ def option_reader(name, value: nil)
31
+ add_option(name, value)
32
+
33
+ define_method(name) { find_option(name).value }
34
+
35
+ self
36
+ end
37
+
38
+ def option(name, contract:, default:)
39
+ option_writer name, contract: contract, default: default
40
+ option_reader name
41
+ end
42
+
43
+ private
44
+
45
+ def add_option(name, value = nil)
46
+ return if known_options.key?(name)
47
+
48
+ known_options[name] = Option.new(name: name, value: value)
49
+
50
+ self
51
+ end
52
+ end
53
+
54
+ attr_reader :local_options
55
+ private :local_options
56
+
57
+ def initialize
58
+ @local_options = self.class.known_options.deep_dup
59
+ end
60
+
61
+ # @yield [Configuration]
62
+ #
63
+ # Yields self
64
+ def configure
65
+ yield self if block_given?
66
+ end
67
+
68
+ def option?(name)
69
+ local_options.any? { |_, v| v.name == name }
70
+ end
71
+
72
+ # Set if name is option
73
+ def set_if_option(name, *args)
74
+ public_send("#{name}=".to_sym, *args) if option? name
75
+ end
76
+
77
+ private
78
+
79
+ def find_option(name)
80
+ fail NotImplementedError, %(Unknown option "#{name}") unless option? name
81
+
82
+ local_options[name]
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,6 @@
1
+ module ProxyPacRb
2
+ # Configure ProxyPacRb
3
+ class CodeConfiguration < BasicConfiguration
4
+ option :use_proxy, contract: { Bool => Bool }, default: false
5
+ end
6
+ end
@@ -8,11 +8,43 @@ ProxyPacRb.require_file_matching_pattern('rspec/shared_contexts/*.rb')
8
8
 
9
9
  # Main Module
10
10
  module ProxyPacRb
11
- # Main Module
12
- module Rspec
11
+ @configuration = CodeConfiguration.new
12
+
13
+ class << self
14
+ def configure(&block)
15
+ @configuration.configure(&block)
16
+
17
+ @configuration
18
+ end
13
19
  end
14
20
  end
15
21
 
22
+ ProxyPacRb.configure do |config|
23
+ config.use_proxy = false
24
+ end
25
+
16
26
  RSpec.configure do |config|
17
27
  config.include ProxyPacRb::Rspec::Helpers, type: :proxy_pac
28
+
29
+ config.before :each do |example|
30
+ next unless self.class.include?(ProxyPacRb::Rspec::Helpers)
31
+
32
+ @proxy_pac_rb_config = ProxyPacRb.configure.dup \
33
+ unless defined?(@proxy_pac_rb_config) && @proxy_pac_rb_config.is_a?(ProxyPacRb::CodeConfiguration)
34
+
35
+ example.metadata.select { |k, _v| k != :proxy_pac_rb_config }.each do |k, v|
36
+ @proxy_pac_rb_config.set_if_option(k, v)
37
+ end
38
+
39
+ if @proxy_pac_rb_config.use_proxy == false
40
+ %w(
41
+ http_proxy
42
+ https_proxy
43
+ HTTP_PROXY
44
+ HTTPS_PROXY
45
+ ).each do |v|
46
+ ENV.delete(v)
47
+ end
48
+ end
49
+ end
18
50
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  # ProxyPacRb
3
3
  module ProxyPacRb
4
- VERSION = '0.6.9'
4
+ VERSION = '0.7.0'
5
5
  end
data/proxy_pac_rb.gemspec CHANGED
@@ -26,6 +26,7 @@ DESC
26
26
  spec.add_runtime_dependency 'activesupport', '~>4.1'
27
27
  spec.add_runtime_dependency 'uglifier', '~> 2.7.1'
28
28
  spec.add_runtime_dependency 'excon', '~> 0.45.3'
29
+ spec.add_runtime_dependency 'contracts', '~> 0.9'
29
30
 
30
31
  spec.required_ruby_version = '~> 2.0'
31
32
  end
@@ -25,7 +25,7 @@ RSpec.describe ProxyPacDumper do
25
25
  end
26
26
 
27
27
  let(:dumper) { ProxyPacDumper.new }
28
- let(:destination) { absolute_path('proxy.pac') }
28
+ let(:destination) { expand_path('proxy.pac') }
29
29
 
30
30
  describe '#dump' do
31
31
  before :each do
@@ -53,7 +53,7 @@ RSpec.describe ProxyPacLoader do
53
53
  context 'when proxy pac is file' do
54
54
  let(:file) { 'proxy.pac' }
55
55
  let(:type) { :file }
56
- let(:source) { absolute_path(file) }
56
+ let(:source) { expand_path(file) }
57
57
 
58
58
  before(:each) { allow(proxy_pac).to receive(:source).and_return(source) }
59
59
 
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ProxyPacRb::BasicConfiguration do
4
+ it_behaves_like 'a basic configuration'
5
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ProxyPacRb::CodeConfiguration do
4
+ it_behaves_like 'a basic configuration'
5
+
6
+ describe '#use_proxy' do
7
+ subject(:config) { described_class.new }
8
+
9
+ context 'when default is used' do
10
+ it { expect(config.use_proxy).to be false }
11
+ end
12
+
13
+ context 'when modified' do
14
+ context 'when valid value' do
15
+ before(:each) { config.use_proxy = true }
16
+ it { expect(config.use_proxy).to be true }
17
+ end
18
+
19
+ context 'when invalid value' do
20
+ it { expect { config.use_proxy = '' }.to raise_error ArgumentError }
21
+ end
22
+ end
23
+ end
24
+ end
data/spec/parser_spec.rb CHANGED
@@ -27,7 +27,7 @@ RSpec.describe ProxyPacRb::Parser do
27
27
  end
28
28
 
29
29
  context 'when path is given' do
30
- let(:source) { absolute_path('proxy.pac') }
30
+ let(:source) { expand_path('proxy.pac') }
31
31
  before(:each) { write_file(source, content) }
32
32
 
33
33
  it { expect(proxy_pac).not_to be_nil }
@@ -1,7 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ProxyPacRb do
4
- it 'has a version number' do
5
- expect(ProxyPacRb::VERSION).not_to be nil
3
+ RSpec.describe ProxyPacRb, type: :proxy_pac do
4
+ context 'when use_proxy is true', use_proxy: true do
5
+ it { expect(@proxy_pac_rb_config.use_proxy).to be true }
6
+ end
7
+
8
+ context 'when use_proxy is false', use_proxy: false do
9
+ it { expect(@proxy_pac_rb_config.use_proxy).to be false }
6
10
  end
7
11
  end
@@ -0,0 +1,2 @@
1
+ require_relative 'spec_helper'
2
+ require 'proxy_pac_rb/rspec'
@@ -0,0 +1,31 @@
1
+ RSpec::Matchers.define :be_valid_option do |_|
2
+ match do |actual|
3
+ subject.option?(actual)
4
+ end
5
+
6
+ failure_message do |actual|
7
+ format("expected that \"%s\" is a valid option", actual)
8
+ end
9
+
10
+ failure_message_when_negated do |actual|
11
+ format("expected that \"%s\" is not a valid option", actual)
12
+ end
13
+ end
14
+
15
+ RSpec::Matchers.define :have_option_value do |expected|
16
+ match do |actual|
17
+ @old_actual = actual
18
+ @actual = subject.public_send(actual.to_sym)
19
+ values_match? expected, @actual
20
+ end
21
+
22
+ diffable
23
+
24
+ failure_message do |_actual|
25
+ format(%(expected that option "%s" has value "%s"), @old_actual, expected)
26
+ end
27
+
28
+ failure_message_when_negated do |_actual|
29
+ format(%(expected that option "%s" does not have value "%s"), @old_actual, expected)
30
+ end
31
+ end
@@ -0,0 +1,38 @@
1
+ RSpec.shared_examples 'a basic configuration' do
2
+ subject(:config) do
3
+ Class.new(described_class) do
4
+ option :use_test, contract: { Contracts::Bool => Contracts::Bool }, default: false
5
+ end.new
6
+ end
7
+
8
+ it { expect(config).not_to be_nil }
9
+
10
+ describe 'option?' do
11
+ let(:name) { :use_test }
12
+
13
+ context 'when valid option' do
14
+ it { expect(name).to be_valid_option }
15
+ end
16
+
17
+ context 'when invalid_option' do
18
+ let(:name) { :blub }
19
+ it { expect(name).not_to be_valid_option }
20
+ end
21
+ end
22
+
23
+ describe 'set_if_option' do
24
+ let(:name) { :use_test }
25
+ let(:value) { true }
26
+
27
+ context 'when valid option' do
28
+ before(:each) { config.set_if_option(name, value) }
29
+ it { expect(name).to have_option_value true }
30
+ end
31
+
32
+ context 'when invalid_option' do
33
+ let(:name) { :blub }
34
+
35
+ it { expect { config.set_if_option(name, value) }.not_to raise_error }
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxy_pac_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Günnewig
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-19 00:00:00.000000000 Z
11
+ date: 2015-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.45.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: contracts
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.9'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.9'
69
83
  description: |
70
84
  "proxy_pac_rb" is a gem to compress, lint and parse proxy auto-config files. It comes with a cli program, some rack middlewares and can be used from within ruby scripts as well. "proxy_pac_rb" uses a JavaScript runtime to evaulate a proxy auto-config file the same way a browser does to determine what proxy (if any at all) should a program use to connect to a server. You must install on of the supported JavaScript runtimes: therubyracer or therubyrhino
71
85
  email:
@@ -104,6 +118,7 @@ files:
104
118
  - files/sample2.pac
105
119
  - files/sample3.pac
106
120
  - lib/proxy_pac_rb.rb
121
+ - lib/proxy_pac_rb/basic_configuration.rb
107
122
  - lib/proxy_pac_rb/cli/compress.rb
108
123
  - lib/proxy_pac_rb/cli/compress_proxy_pac.rb
109
124
  - lib/proxy_pac_rb/cli/find.rb
@@ -116,6 +131,7 @@ files:
116
131
  - lib/proxy_pac_rb/cli/shared.rb
117
132
  - lib/proxy_pac_rb/cli/show.rb
118
133
  - lib/proxy_pac_rb/cli_validator.rb
134
+ - lib/proxy_pac_rb/code_configuration.rb
119
135
  - lib/proxy_pac_rb/encoding.rb
120
136
  - lib/proxy_pac_rb/environment.rb
121
137
  - lib/proxy_pac_rb/errors.rb
@@ -160,6 +176,8 @@ files:
160
176
  - spec/api/proxy_pac_linter_spec.rb
161
177
  - spec/api/proxy_pac_loader_spec.rb
162
178
  - spec/api/proxy_pac_parser_spec.rb
179
+ - spec/basic_configuration_spec.rb
180
+ - spec/code_configuration_spec.rb
163
181
  - spec/environment_spec.rb
164
182
  - spec/parser_spec.rb
165
183
  - spec/rack/proxy_pac_compressor_spec.rb
@@ -169,12 +187,15 @@ files:
169
187
  - spec/rspec/readability_spec.rb
170
188
  - spec/rspec/rspec_spec.rb
171
189
  - spec/rspec/validitiy_spec.rb
190
+ - spec/rspec_integration_spec_helper.rb
172
191
  - spec/spec_helper.rb
173
192
  - spec/support/aruba.rb
174
193
  - spec/support/matchers/file.rb
194
+ - spec/support/matchers/option.rb
175
195
  - spec/support/rack_test.rb
176
196
  - spec/support/reporting.rb
177
197
  - spec/support/rspec.rb
198
+ - spec/support/shared_examples/configuration.rb
178
199
  - spec/support/shared_examples/loader.rb
179
200
  - spec/support/strip.rb
180
201
  - spec/support/webmock.rb
@@ -238,6 +259,8 @@ test_files:
238
259
  - spec/api/proxy_pac_linter_spec.rb
239
260
  - spec/api/proxy_pac_loader_spec.rb
240
261
  - spec/api/proxy_pac_parser_spec.rb
262
+ - spec/basic_configuration_spec.rb
263
+ - spec/code_configuration_spec.rb
241
264
  - spec/environment_spec.rb
242
265
  - spec/parser_spec.rb
243
266
  - spec/rack/proxy_pac_compressor_spec.rb
@@ -247,12 +270,15 @@ test_files:
247
270
  - spec/rspec/readability_spec.rb
248
271
  - spec/rspec/rspec_spec.rb
249
272
  - spec/rspec/validitiy_spec.rb
273
+ - spec/rspec_integration_spec_helper.rb
250
274
  - spec/spec_helper.rb
251
275
  - spec/support/aruba.rb
252
276
  - spec/support/matchers/file.rb
277
+ - spec/support/matchers/option.rb
253
278
  - spec/support/rack_test.rb
254
279
  - spec/support/reporting.rb
255
280
  - spec/support/rspec.rb
281
+ - spec/support/shared_examples/configuration.rb
256
282
  - spec/support/shared_examples/loader.rb
257
283
  - spec/support/strip.rb
258
284
  - spec/support/webmock.rb