proxy_pac_rb 0.3.8 → 0.4.0

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