proxy_pac_rb 0.3.8 → 0.4.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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.travis.yml +2 -1
  4. data/Gemfile +13 -13
  5. data/Gemfile.lock +84 -58
  6. data/README.md +40 -13
  7. data/features/check_proxy_pac.feature +31 -0
  8. data/features/compress_proxy_pac.feature +3 -16
  9. data/features/resolve_proxy.feature +1 -1
  10. data/lib/proxy_pac_rb/cli/compress_proxy_pac.rb +25 -11
  11. data/lib/proxy_pac_rb/cli/find_proxy.rb +13 -8
  12. data/lib/proxy_pac_rb/cli/lint.rb +11 -0
  13. data/lib/proxy_pac_rb/cli/lint_proxy_pac.rb +37 -0
  14. data/lib/proxy_pac_rb/cli/runner.rb +5 -0
  15. data/lib/proxy_pac_rb/cli/shared.rb +4 -0
  16. data/lib/proxy_pac_rb/cli_validator.rb +14 -0
  17. data/lib/proxy_pac_rb/errors.rb +19 -0
  18. data/lib/proxy_pac_rb/javascript.rb +19 -0
  19. data/lib/proxy_pac_rb/main.rb +22 -0
  20. data/lib/proxy_pac_rb/parser.rb +32 -21
  21. data/lib/proxy_pac_rb/proxy_pac.rb +10 -20
  22. data/lib/proxy_pac_rb/proxy_pac_compressor.rb +9 -0
  23. data/lib/proxy_pac_rb/proxy_pac_dumper.rb +65 -0
  24. data/lib/proxy_pac_rb/proxy_pac_file.rb +20 -3
  25. data/lib/proxy_pac_rb/proxy_pac_linter.rb +82 -0
  26. data/lib/proxy_pac_rb/proxy_pac_loader.rb +98 -0
  27. data/lib/proxy_pac_rb/proxy_pac_parser.rb +41 -0
  28. data/lib/proxy_pac_rb/rack/proxy_pac_compressor.rb +68 -0
  29. data/lib/proxy_pac_rb/rack/proxy_pac_linter.rb +66 -0
  30. data/lib/proxy_pac_rb/runtimes/rubyracer.rb +2 -2
  31. data/lib/proxy_pac_rb/runtimes/rubyrhino.rb +2 -2
  32. data/lib/proxy_pac_rb/runtimes.rb +3 -3
  33. data/lib/proxy_pac_rb/version.rb +1 -1
  34. data/lib/proxy_pac_rb.rb +10 -3
  35. data/proxy_pac_rb.gemspec +2 -0
  36. data/spec/api_spec.rb +207 -0
  37. data/spec/parser_spec.rb +66 -53
  38. data/spec/rack/proxy_pac_compressor_spec.rb +59 -0
  39. data/spec/rack/proxy_pac_linter_spec.rb +65 -0
  40. data/spec/spec_helper.rb +1 -0
  41. data/spec/support/matchers/file.rb +23 -0
  42. data/spec/support/rack_test.rb +1 -0
  43. data/spec/support/rspec.rb +3 -1
  44. data/spec/support/webmock.rb +1 -0
  45. metadata +30 -12
  46. data/features/support/fixtures.rb +0 -15
  47. data/lib/proxy_pac_rb/cli.rb +0 -75
  48. data/lib/proxy_pac_rb/file.rb +0 -21
  49. data/lib/proxy_pac_rb/javascript_compressor.rb +0 -9
  50. data/lib/proxy_pac_rb/proxy_pac_template +0 -39
  51. data/spec/file_spec.rb +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: efd9b6fd882a6c5379f89440de846f8d2157b213
4
- data.tar.gz: faf194c1acb441cb35400eef6cd36f0ade71d0af
3
+ metadata.gz: d05d71f53826be61244e2e77515be5da29fe969c
4
+ data.tar.gz: 53df642fa1b82e2a39555c1f64c88eeb190e29e7
5
5
  SHA512:
6
- metadata.gz: f0ff2369595c54f086fd50c399a2faeb58baa75c7b39f56cf88816650ea3733c2ee926150ceac474c1b8b904e4ba7f6300b942a285ec296330de27ee6a86cbef
7
- data.tar.gz: 323e7489bdbbbd47f2385c062fec39d49156366b5e35e7483183938be4bdd4a18b6584819556275af7c298eb7dbdbe1d9a1ce60b3ee49193339235ceeffef605
6
+ metadata.gz: ade07d2859ebeb2fa132c91a7151853e2c1d378536cb3343e8c16d81e84e474c31d89210cbefa4fff2a41993ebc9f36e45a2af3fdcc00caeea74ef74d81ca98b
7
+ data.tar.gz: 9e2368de26bb4e74125025bde77e5d3e8396a7b4aa3f8827a2ad1a29dc5f4c3d6fe48ca9666a65753f75eb3a36050d63610dd6d93cc92a9777865b649d808fc7
data/.rubocop.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  AllCops:
2
2
  Exclude:
3
3
  - 'tmp/**/*'
4
+ DisplayCopNames: true
4
5
 
5
6
  Metrics/AbcSize:
6
7
  Max: 38
data/.travis.yml CHANGED
@@ -1,7 +1,8 @@
1
1
  env:
2
2
  - CI=1
3
3
  language: ruby
4
- bundler_args: --without development
4
+ bundler_args: --without development debug profile
5
5
  rvm:
6
6
  - 2.1.5
7
+ - 2.2.1
7
8
  script: script/ci
data/Gemfile CHANGED
@@ -3,20 +3,18 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in local_pac.gemspec
4
4
  gemspec
5
5
 
6
- group :development, :test do
7
- if !ENV.key?('CI') && !ENV.key?('TRAVIS')
8
- gem 'pry'
9
- gem 'pry-doc', require: false
6
+ group :debug do
7
+ gem 'pry'
8
+ gem 'byebug'
10
9
 
11
- if RUBY_VERSION > '2.0.0'
12
- gem 'byebug'
13
- gem 'pry-byebug', require: false
14
- else
15
- gem 'debugger'
16
- gem 'pry-debugger'
17
- end
18
- end
10
+ gem 'pry-doc', require: false
11
+ gem 'pry-stack_explorer', require: false
12
+ gem 'pry-exception_explorer', require: false
13
+ gem 'pry-rescue', require: false
14
+ gem 'pry-byebug', require: false
15
+ end
19
16
 
17
+ group :development, :test do
20
18
  gem 'activesupport', '~> 4.0.0', require: false
21
19
  gem 'aruba', require: false
22
20
  gem 'awesome_print', require: 'ap'
@@ -36,7 +34,6 @@ group :development, :test do
36
34
  gem 'rack'
37
35
  gem 'rake', require: false
38
36
  gem 'redcarpet', require: false
39
- gem 'rspec', require: false
40
37
  gem 'rubocop', require: false
41
38
  gem 'simplecov', require: false
42
39
  gem 'sinatra', require: 'sinatra/base'
@@ -44,6 +41,9 @@ group :development, :test do
44
41
  gem 'travis-lint', require: false
45
42
  gem 'versionomy', require: false
46
43
  gem 'yard', require: false
44
+ gem 'rspec', require: false
45
+ gem 'webmock', require: false
46
+ gem 'rack-test', require: false
47
47
  end
48
48
 
49
49
  group :profile do
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- proxy_pac_rb (0.3.7)
4
+ proxy_pac_rb (0.3.8)
5
5
  activesupport
6
6
  addressable
7
7
  uglifier
@@ -15,7 +15,7 @@ GEM
15
15
  multi_json (~> 1.3)
16
16
  thread_safe (~> 0.1)
17
17
  tzinfo (~> 0.3.37)
18
- addressable (2.3.6)
18
+ addressable (2.3.8)
19
19
  aruba (0.6.2)
20
20
  childprocess (>= 0.3.6)
21
21
  cucumber (>= 1.1.1)
@@ -24,12 +24,12 @@ GEM
24
24
  astrolabe (1.3.0)
25
25
  parser (>= 2.2.0.pre.3, < 3.0)
26
26
  awesome_print (1.6.1)
27
+ binding_of_caller (0.7.2)
28
+ debug_inspector (>= 0.0.1)
27
29
  blockenspiel (0.4.5)
28
30
  builder (3.2.2)
29
- byebug (3.5.1)
30
- columnize (~> 0.8)
31
- debugger-linecache (~> 1.2)
32
- slop (~> 3.6)
31
+ byebug (4.0.4)
32
+ columnize (= 0.9.0)
33
33
  childprocess (0.5.5)
34
34
  ffi (~> 1.0, >= 1.0.11)
35
35
  coderay (1.1.0)
@@ -38,39 +38,45 @@ GEM
38
38
  activesupport
39
39
  smart_colored
40
40
  xml-simple
41
- coveralls (0.7.8)
41
+ coveralls (0.7.12)
42
42
  multi_json (~> 1.10)
43
- rest-client (~> 1.7)
43
+ rest-client (>= 1.6.8, < 2)
44
44
  simplecov (~> 0.9.1)
45
45
  term-ansicolor (~> 1.3)
46
46
  thor (~> 0.19.1)
47
- cucumber (1.3.18)
47
+ crack (0.4.2)
48
+ safe_yaml (~> 1.0.0)
49
+ cucumber (2.0.0)
48
50
  builder (>= 2.1.2)
51
+ cucumber-core (~> 1.1.3)
49
52
  diff-lcs (>= 1.1.3)
50
53
  gherkin (~> 2.12)
51
54
  multi_json (>= 1.7.5, < 2.0)
52
- multi_test (>= 0.1.1)
53
- debugger-linecache (1.2.0)
55
+ multi_test (>= 0.1.2)
56
+ cucumber-core (1.1.3)
57
+ gherkin (~> 2.12.0)
58
+ debug_inspector (0.0.2)
54
59
  diff-lcs (1.2.5)
55
60
  docile (1.1.5)
56
- dotenv (1.0.2)
61
+ domain_name (0.5.23)
62
+ unf (>= 0.0.5, < 1.0.0)
57
63
  erubis (2.7.0)
58
- execjs (2.2.2)
64
+ execjs (2.4.0)
59
65
  fedux_org-stdlib (0.7.33)
60
66
  activesupport
61
- ffi (1.9.6)
67
+ ffi (1.9.8)
62
68
  filegen (0.4.3)
63
69
  activesupport
64
- foreman (0.77.0)
65
- dotenv (~> 1.0.2)
70
+ foreman (0.78.0)
66
71
  thor (~> 0.19.1)
67
72
  fuubar (2.0.0)
68
73
  rspec (~> 3.0)
69
74
  ruby-progressbar (~> 1.4)
70
75
  gherkin (2.12.2)
71
76
  multi_json (~> 1.3)
72
- github-markup (1.3.1)
73
- posix-spawn (~> 0.3.8)
77
+ github-markup (1.3.3)
78
+ http-cookie (1.0.2)
79
+ domain_name (~> 0.5)
74
80
  httparty (0.13.3)
75
81
  json (~> 1.8)
76
82
  multi_xml (>= 0.5.2)
@@ -80,82 +86,91 @@ GEM
80
86
  sparkr (>= 0.2.0)
81
87
  term-ansicolor
82
88
  yard (~> 0.8.7.5)
89
+ interception (0.5)
83
90
  json (1.8.2)
84
91
  launchy (2.4.3)
85
92
  addressable (~> 2.3)
86
93
  libv8 (3.16.14.7)
87
- license_finder (1.2)
94
+ license_finder (2.0.3)
88
95
  bundler
89
96
  httparty
90
- sequel
91
- sqlite3
92
97
  thor
93
98
  xml-simple
94
99
  method_source (0.8.2)
95
100
  mime-types (2.4.3)
96
101
  minitest (4.7.5)
97
- multi_json (1.10.1)
98
- multi_test (0.1.1)
102
+ multi_json (1.11.0)
103
+ multi_test (0.1.2)
99
104
  multi_xml (0.5.5)
100
- netrc (0.10.2)
101
- parser (2.2.0.2)
105
+ netrc (0.10.3)
106
+ parser (2.2.0.3)
102
107
  ast (>= 1.1, < 3.0)
103
- posix-spawn (0.3.9)
104
- powerpack (0.0.9)
108
+ powerpack (0.1.0)
105
109
  pry (0.10.1)
106
110
  coderay (~> 1.1.0)
107
111
  method_source (~> 0.8.1)
108
112
  slop (~> 3.4)
109
- pry-byebug (3.0.0)
110
- byebug (~> 3.4)
113
+ pry-byebug (3.1.0)
114
+ byebug (~> 4.0)
111
115
  pry (~> 0.10)
112
116
  pry-doc (0.6.0)
113
117
  pry (~> 0.9)
114
118
  yard (~> 0.8)
119
+ pry-exception_explorer (0.2.3)
120
+ pry-stack_explorer (>= 0.4.6)
121
+ pry-rescue (1.4.1)
122
+ interception (>= 0.5)
123
+ pry
124
+ pry-stack_explorer (0.4.9.2)
125
+ binding_of_caller (>= 0.7)
126
+ pry (>= 0.9.11)
115
127
  rack (1.6.0)
116
128
  rack-protection (1.5.3)
117
129
  rack
130
+ rack-test (0.6.3)
131
+ rack (>= 1.0)
118
132
  rainbow (2.0.0)
119
133
  rake (10.4.2)
120
134
  redcarpet (3.2.2)
121
135
  ref (1.0.5)
122
- rest-client (1.7.2)
136
+ rest-client (1.8.0)
137
+ http-cookie (>= 1.0.2, < 2.0)
123
138
  mime-types (>= 1.16, < 3.0)
124
139
  netrc (~> 0.7)
125
- rspec (3.1.0)
126
- rspec-core (~> 3.1.0)
127
- rspec-expectations (~> 3.1.0)
128
- rspec-mocks (~> 3.1.0)
129
- rspec-core (3.1.7)
130
- rspec-support (~> 3.1.0)
131
- rspec-expectations (3.1.2)
140
+ rspec (3.2.0)
141
+ rspec-core (~> 3.2.0)
142
+ rspec-expectations (~> 3.2.0)
143
+ rspec-mocks (~> 3.2.0)
144
+ rspec-core (3.2.2)
145
+ rspec-support (~> 3.2.0)
146
+ rspec-expectations (3.2.0)
147
+ diff-lcs (>= 1.2.0, < 2.0)
148
+ rspec-support (~> 3.2.0)
149
+ rspec-mocks (3.2.1)
132
150
  diff-lcs (>= 1.2.0, < 2.0)
133
- rspec-support (~> 3.1.0)
134
- rspec-mocks (3.1.3)
135
- rspec-support (~> 3.1.0)
136
- rspec-support (3.1.2)
137
- rubocop (0.28.0)
151
+ rspec-support (~> 3.2.0)
152
+ rspec-support (3.2.2)
153
+ rubocop (0.29.1)
138
154
  astrolabe (~> 1.3)
139
- parser (>= 2.2.0.pre.7, < 3.0)
140
- powerpack (~> 0.0.6)
155
+ parser (>= 2.2.0.1, < 3.0)
156
+ powerpack (~> 0.1)
141
157
  rainbow (>= 1.99.1, < 3.0)
142
158
  ruby-progressbar (~> 1.4)
143
- ruby-prof (0.15.3)
144
- ruby-progressbar (1.7.1)
145
- sequel (4.19.0)
146
- simplecov (0.9.1)
159
+ ruby-prof (0.15.6)
160
+ ruby-progressbar (1.7.5)
161
+ safe_yaml (1.0.4)
162
+ simplecov (0.9.2)
147
163
  docile (~> 1.1.0)
148
164
  multi_json (~> 1.0)
149
- simplecov-html (~> 0.8.0)
150
- simplecov-html (0.8.0)
151
- sinatra (1.4.5)
165
+ simplecov-html (~> 0.9.0)
166
+ simplecov-html (0.9.0)
167
+ sinatra (1.4.6)
152
168
  rack (~> 1.4)
153
169
  rack-protection (~> 1.4)
154
- tilt (~> 1.3, >= 1.3.4)
170
+ tilt (>= 1.3, < 3)
155
171
  slop (3.6.0)
156
172
  smart_colored (1.1.1)
157
173
  sparkr (0.4.1)
158
- sqlite3 (1.3.10)
159
174
  term-ansicolor (1.3.0)
160
175
  tins (~> 1.0)
161
176
  therubyracer (0.12.1)
@@ -165,20 +180,26 @@ GEM
165
180
  therubyrhino_jar (>= 1.7.3)
166
181
  therubyrhino_jar (1.7.4)
167
182
  thor (0.19.1)
168
- thread_safe (0.3.4)
169
- tilt (1.4.1)
170
- tins (1.3.3)
183
+ thread_safe (0.3.5)
184
+ tilt (2.0.1)
185
+ tins (1.3.5)
171
186
  tmrb (1.2.7)
172
187
  thor
173
188
  travis-lint (2.0.0)
174
189
  json
175
190
  tzinfo (0.3.43)
176
- uglifier (2.7.0)
191
+ uglifier (2.7.1)
177
192
  execjs (>= 0.3.0)
178
193
  json (>= 1.8.0)
194
+ unf (0.1.4)
195
+ unf_ext
196
+ unf_ext (0.0.6)
179
197
  versionomy (0.4.4)
180
198
  blockenspiel (>= 0.4.5)
181
- xml-simple (1.1.4)
199
+ webmock (1.20.4)
200
+ addressable (>= 2.3.6)
201
+ crack (>= 0.3.2)
202
+ xml-simple (1.1.5)
182
203
  yard (0.8.7.6)
183
204
 
184
205
  PLATFORMS
@@ -206,7 +227,11 @@ DEPENDENCIES
206
227
  pry
207
228
  pry-byebug
208
229
  pry-doc
230
+ pry-exception_explorer
231
+ pry-rescue
232
+ pry-stack_explorer
209
233
  rack
234
+ rack-test
210
235
  rake
211
236
  redcarpet
212
237
  rspec
@@ -219,4 +244,5 @@ DEPENDENCIES
219
244
  tmrb
220
245
  travis-lint
221
246
  versionomy
247
+ webmock
222
248
  yard
data/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # Proxy Pac Rb
2
2
 
3
- [![Build Status](https://travis-ci.org/dg-ratiodata/proxy_pac_rb.png?branch=master)](https://travis-ci.org/dg-ratiodata/proxy_pac_rb)
4
- [![Code Climate](https://codeclimate.com/github/dg-ratiodata/proxy_pac_rb.png)](https://codeclimate.com/github/dg-ratiodata/proxy_pac_rb)
5
- [![Coverage Status](https://coveralls.io/repos/dg-ratiodata/proxy_pac_rb/badge.png?branch=master)](https://coveralls.io/r/dg-ratiodata/proxy_pac_rb?branch=master)
3
+ [![Build Status](https://travis-ci.org/fedux-org/proxy_pac_rb.png?branch=master)](https://travis-ci.org/fedux-org/proxy_pac_rb)
4
+ [![Code Climate](https://codeclimate.com/github/fedux-org/proxy_pac_rb.png)](https://codeclimate.com/github/fedux-org/proxy_pac_rb)
5
+ [![Coverage Status](https://coveralls.io/repos/fedux-org/proxy_pac_rb/badge.png?branch=master)](https://coveralls.io/r/fedux-org/proxy_pac_rb?branch=master)
6
6
  [![Gem Version](https://badge.fury.io/rb/proxy_pac_rb.png)](http://badge.fury.io/rb/proxy_pac_rb)
7
+ [![Downloads](http://img.shields.io/gem/dt/proxy_pac_rb.svg?style=flat)](http://rubygems.org/gems/proxy_pac_rb)
8
+
7
9
 
8
10
  `proxy_pac_rb` is a gem to parse [proxy auto-config](http://en.wikipedia.org/wiki/Proxy_auto-config) files.
9
11
  `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
@@ -52,9 +54,9 @@ After installing the `proxy_pac_rb` gem you must install a JavaScript runtime. C
52
54
 
53
55
  *Use*
54
56
 
55
- ```
57
+ ```bash
56
58
  # Download pac
57
- curl -L -o sample.pac https://github.com/dg-vrnetze/proxy_pac_rb/raw/master/files/sample.pac
59
+ curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
58
60
 
59
61
  # Parse pac
60
62
  pprb find proxy -c 127.0.0.1 -t "2014-03-09 12:00:00" -p sample.pac -u https://github.com
@@ -70,13 +72,38 @@ transferred to download the proxy.pac.
70
72
 
71
73
  ```
72
74
  # Download pac
73
- curl -L -o sample.pac https://github.com/dg-vrnetze/proxy_pac_rb/raw/master/files/sample.pac
75
+ curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
74
76
 
75
- # Parse pac
77
+ # Compress pac
76
78
  pprb compress proxy_pac -p sample.pac
79
+ ```
77
80
 
78
- # => url: result
79
- # => https://github.com: DIRECT
81
+ #### Lint proxy.pac-file
82
+
83
+ You can lint a proxy.pac with `pprb` to check a proxy.pac before deploying it.
84
+
85
+ ```
86
+ # Download pac
87
+ curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
88
+
89
+ # Lint pac
90
+ pprb lint proxy_pac -p sample.pac
91
+ ```
92
+
93
+ ### Rack-based servers
94
+
95
+ *Compressor Middleware*
96
+
97
+ ```ruby
98
+ require 'proxy_pac_rb/rack/proxy_pac_compressor'
99
+ use ProxyPacRb::Rack::ProxyPacCompressor
100
+ ```
101
+
102
+ *Linter Middleware*
103
+
104
+ ```ruby
105
+ require 'proxy_pac_rb/rack/proxy_pac_linter'
106
+ use ProxyPacRb::Rack::ProxyPacLinter
80
107
  ```
81
108
 
82
109
  ### Ruby
@@ -86,14 +113,14 @@ pprb compress proxy_pac -p sample.pac
86
113
  ```ruby
87
114
  require 'proxy_pac_rb'
88
115
 
89
- file = ProxyPacRb::Parser.new.load('https://github.com/dg-vrnetze/proxy_pac_rb/raw/master/files/sample.pac')
116
+ file = ProxyPacRb::Parser.new.load('https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac')
90
117
  file.find('https://github.com') # => "DIRECT"
91
118
  ```
92
119
 
93
120
  *Load from filesystem*
94
121
 
95
122
  ```bash
96
- curl -L -o sample.pac https://github.com/dg-vrnetze/proxy_pac_rb/raw/master/files/sample.pac
123
+ curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
97
124
  ```
98
125
 
99
126
  ```ruby
@@ -123,11 +150,11 @@ file.find('http://localhost') # => "DIRECT"
123
150
  require 'proxy_pac_rb'
124
151
 
125
152
  environment = ProxyPacRb::Environment.new(client_ip: '127.0.0.1')
126
- file = ProxyPacRb::Parser.new(environment).load('https://github.com/dg-vrnetze/proxy_pac_rb/raw/master/files/sample2.pac')
153
+ file = ProxyPacRb::Parser.new(environment).load('https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample2.pac')
127
154
  file.find('https://github.com') # => "PROXY localhost:8080"
128
155
 
129
156
  environment = ProxyPacRb::Environment.new(client_ip: '127.0.0.2')
130
- file = ProxyPacRb::Parser.new(environment).load('https://github.com/dg-vrnetze/proxy_pac_rb/raw/master/files/sample2.pac')
157
+ file = ProxyPacRb::Parser.new(environment).load('https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample2.pac')
131
158
  file.find('https://github.com') # => "DIRECT"
132
159
  ```
133
160
 
@@ -0,0 +1,31 @@
1
+ Feature: Lint proxy pac
2
+
3
+ As a proxy administrator
4
+ I want to compress a proxy pac
5
+ In order to save some bandwidth
6
+
7
+ Scenario: Valid proxy.pac
8
+ Given a file named "proxy.pac" with:
9
+ """
10
+ function FindProxyForURL(url, host) {
11
+ return 'PROXY localhost:3128';
12
+ }
13
+ """
14
+ When I successfully run `pprb lint pac_file -p proxy.pac`
15
+ Then the output should contain:
16
+ """
17
+ proxy.pac "proxy.pac" is of type file and is valid
18
+ """
19
+
20
+ Scenario: Invalid proxy.pac
21
+ Given a file named "proxy.pac" with:
22
+ """
23
+ function FindProxyForURL(url, host) {
24
+ return $"§$ 'PROXY localhost:3128';
25
+ }
26
+ """
27
+ When I run `pprb lint pac_file -p proxy.pac`
28
+ Then the output should contain:
29
+ """
30
+ proxy.pac "proxy.pac" is of type file and is invalid
31
+ """
@@ -11,7 +11,7 @@ Feature: Compress proxy pac
11
11
  return 'PROXY localhost:3128';
12
12
  }
13
13
  """
14
- When I successfully run `pprb compress pac_file -p proxy.pac`
14
+ When I successfully run `pprb compress pac_file -p proxy.pac.in`
15
15
  Then the file "proxy.pac" should contain:
16
16
  """
17
17
  function FindProxyForURL(){return"PROXY localhost:3128"}
@@ -30,19 +30,6 @@ Feature: Compress proxy pac
30
30
  function FindProxyForURL(){return"PROXY localhost:3128"}
31
31
  """
32
32
 
33
- Scenario: Use proxy.pac.in as filename
34
- Given a file named "proxy.pac.in" with:
35
- """
36
- function FindProxyForURL(url, host) {
37
- return 'PROXY localhost:3128';
38
- }
39
- """
40
- When I successfully run `pprb compress pac_file -p proxy.pac.in`
41
- Then the file "proxy.pac" should contain:
42
- """
43
- function FindProxyForURL(){return"PROXY localhost:3128"}
44
- """
45
-
46
33
  Scenario: Checks for valid proxy pac
47
34
  Given a file named "proxy.pac.in" with:
48
35
  """
@@ -54,7 +41,7 @@ Feature: Compress proxy pac
54
41
  When I run `pprb compress pac_file -p proxy.pac.in`
55
42
  Then the output should contain:
56
43
  """
57
- Proxy.pac-file "proxy.pac.in" is invalid. I ignore that file
44
+ Unexpected string
58
45
  """
59
46
 
60
47
  Scenario: Use multiple proxy.pac.in
@@ -76,7 +63,7 @@ Feature: Compress proxy pac
76
63
  return 'PROXY localhost:3128';
77
64
  }
78
65
  """
79
- When I successfully run `pprb compress pac_file -p proxy1.pac proxy2.pac proxy3.pac`
66
+ When I successfully run `pprb compress pac_file -p proxy1.pac.in proxy2.pac.in proxy3.pac`
80
67
  Then the file "proxy1.pac" should contain:
81
68
  """
82
69
  function FindProxyForURL(){return"PROXY localhost:3128"}
@@ -58,7 +58,7 @@ Feature: Resolve proxy
58
58
  When I run `pprb find proxy -p proxy.pac -u www.example.org`
59
59
  Then the output should contain:
60
60
  """
61
- No such file or directory
61
+ You need to provide a path to an existing proxy pac file. The file "proxy.pac" does not exist.
62
62
  """
63
63
 
64
64
  Scenario: Missing url
@@ -1,32 +1,46 @@
1
1
  # encoding: utf-8
2
2
  module ProxyPacRb
3
3
  module Cli
4
- # Find proxy for url
4
+ # Compress proxy pac
5
5
  class CompressProxyPac < Thor::Group
6
6
  include Shared
7
7
 
8
8
  class_option :proxy_pac, type: :array, desc: 'Proxy.pac-file(s)', aliases: '-p', required: true
9
9
 
10
+ def pre_init
11
+ enable_debug_mode
12
+ end
13
+
10
14
  def set_variables
11
- @proxy_pacs = options[:proxy_pac].map { |p| ProxyPacTemplate.new(p) }
12
- @compressor = JavascriptCompressor.new
15
+ @proxy_pacs = options[:proxy_pac].map { |p| ProxyPacFile.new source: p }
16
+ @compressor = ProxyPacCompressor.new
17
+ @dumper = ProxyPacDumper.new
18
+ @loader = ProxyPacLoader.new
19
+ @linter = ProxyPacLinter.new
20
+ end
21
+
22
+ def load_files
23
+ @proxy_pacs.each { |p| @loader.load(p) }
13
24
  end
14
25
 
15
26
  def test_proxy_pac
16
- @proxy_pacs.each do |p|
17
- begin
18
- file = ProxyPacRb::Parser.new.source(p.raw_content)
19
- file.find('http://example.org')
20
- rescue V8::Error => e
21
- $stderr.puts "Proxy.pac-file \"#{p.input_path}\" is invalid. I ignore that file: #{e.message}"
27
+ @proxy_pacs.keep_if do |p|
28
+ @linter.lint(p)
29
+
30
+ if p.valid?
31
+ true
32
+ else
33
+ $stderr.puts %(proxy.pac "#{p.source}" is of type #{p.type} and is invalid. I'm going to ignore that file.)
34
+
35
+ false
22
36
  end
23
37
  end
24
38
  end
25
39
 
26
40
  def compress_proxy_pac
27
41
  @proxy_pacs.each do |p|
28
- p.compress_me(@compressor)
29
- p.write
42
+ @compressor.compress(p)
43
+ @dumper.dump(p, type: :template)
30
44
  end
31
45
  end
32
46
  end
@@ -10,22 +10,27 @@ module ProxyPacRb
10
10
  class_option :proxy_pac, desc: 'Proxy.pac-file', aliases: '-p', required: true
11
11
  class_option :urls, type: :array, desc: 'URLs to check against proxy pac', aliases: '-u', required: true
12
12
 
13
+ def pre_init
14
+ enable_debug_mode
15
+ end
16
+
13
17
  def find_proxy
14
18
  CliValidator.new(options).validate
15
19
 
16
- client_ip = IPAddr.new(options[:client_ip])
17
- time = Time.parse(options[:time])
18
- proxy_pac = ProxyPacFile.new(options[:proxy_pac])
19
- urls = options[:urls]
20
+ environment = ProxyPacRb::Environment.new(
21
+ client_ip: IPAddr.new(options[:client_ip]),
22
+ time: Time.parse(options[:time])
23
+ )
24
+
25
+ file = ProxyPacRb::Parser.new(environment: environment).parse(options[:proxy_pac])
20
26
 
21
- environment = ProxyPacRb::Environment.new(client_ip: client_ip, time: time)
22
- file = ProxyPacRb::Parser.new(environment).source(proxy_pac.content)
27
+ return if file.blank?
23
28
 
24
29
  $stderr.printf("%30s: %-s\n", 'url', 'result')
25
- urls.each do |u|
30
+ options[:urls].each do |u|
26
31
  begin
27
32
  $stderr.printf("%30s: %-s\n", u, file.find(u))
28
- rescue Exceptions::UrlInvalid
33
+ rescue UrlInvalidError
29
34
  $stderr.puts "You provide an invalid url \"#{u}\". Please use a correct one."
30
35
  end
31
36
  end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ module ProxyPacRb
3
+ module Cli
4
+ # Lint things
5
+ class Lint < Thor
6
+ register(LintProxyPac, 'proxy_pac', 'proxy_pac', 'Lint proxy pac')
7
+
8
+ default_command :proxy_pac
9
+ end
10
+ end
11
+ end