pretty_proxy 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b5625b70ed64d26ac9a32bd89b38e28205625be
4
- data.tar.gz: dc79eac8219b6ef787d25168f4f6e79fc0263ff6
3
+ metadata.gz: 718ffdcdc9a88b9103bfe1aa2e32cc32039a8b20
4
+ data.tar.gz: 4a5614d06ed052826da3f9eaac0e443b2ef82946
5
5
  SHA512:
6
- metadata.gz: 3f24e47757aec9e3433c41568cf92d6855e9bee9886c7a5a382c8f4df5876cd2fe30f9cc399b0e4d831a380bb1ce90e7ce2a78e3a1a50a8619f21da37e59dc2d
7
- data.tar.gz: 0717b822da160d1719051b2fca85d7981926a914acd0dd21e58696fe1dd879324bf470cb53f9c2bd96abf3bdc3b2703a0b07630434b563985ae110f50411bfbd
6
+ metadata.gz: 633d5ca4cb8cd20c745a17eefa402eb9328da09c06b13aeccecdf74dbfd6a16c3511f0e1d3dfae190687787f36508d4e089c69a061a46c69cf3e264c097b12b0
7
+ data.tar.gz: c00c15756541fdd878f1db00728752e48546acdf3107d21d5c0fc11fb3214856acc115788db9bff16d50ce5eaebcda77c90cf774d2eb2cfb5c4bd92062478c55
data/lib/pretty_proxy.rb CHANGED
@@ -11,24 +11,23 @@ require 'rack-proxy'
11
11
  # the hyperlinks point to the proxy version of the page if it exist.
12
12
  #
13
13
  # @example A terrible example
14
- # require 'pretty_proxy'
14
+ # # You can run this example with 'rake heresy_example' in the gem folder
15
+ # # and see the result in localhost:9292/proxy/
16
+ # require 'pretty_proxy'
15
17
  #
16
- # class Heresy < PrettyProxy
17
- # def sugared_rewrite_response(triplet, requested_to_proxy_env, rewritten_env)
18
- # status, headers, page = triplet
19
- # page = page.gsub(/(MTG )?Magic(: The Gathering)?/, 'Yu-Gi-Oh')
20
- # [status, headers, page]
18
+ # class Heresy < PrettyProxy
19
+ # def sugared_rewrite_response(triplet, requested_to_proxy_env, rewritten_env)
20
+ # status, headers, page = triplet
21
+ # page = page.gsub(/(MTG )?Magic(: The Gathering)?/, 'Yu-Gi-Oh')
22
+ # [status, headers, page]
23
+ # end
21
24
  # end
22
- # end
23
25
  #
24
- # run Heresy.new('/proxy/', 'http://magiccards.info', '/')
26
+ # run Heresy.new('/proxy/', 'http://magiccards.info', '/')
25
27
  #
26
- # You can see the result in http://localhost:9292/proxy/ (if you use the
27
- # command 'rake heresy_example' in the gem folder).
28
- #
29
- # @note: If you want to make a Rack app who use the proxy to point to
30
- # another path of the same app you have to use a server in multithread
31
- # mode, otherwise requests to the proxy will end in a deadlock.
28
+ # If you want to make a Rack app who use the proxy to point to
29
+ # another path of the same app you have to use a server in multithread
30
+ # mode, otherwise requests to the proxy will end in a deadlock.
32
31
  # The proxy request the original page but the server don't respond because
33
32
  # is waiting the proxy request to be resolved. The proxy request don't end
34
33
  # because need the original page. A timeout error occur.
@@ -39,21 +38,19 @@ require 'rack-proxy'
39
38
  # support more than deflate and gzip; exception classes with more
40
39
  # than a message;
41
40
  #
42
- # Glossary:
43
- # 'a valid proxy url/path': The path (or the path of the url) start with
44
- # the proxy_path and is followed by a original_path.
45
- # 'in(side)/out(side) the proxy control': The url have (or not) the path
46
- # starting with a original_path and the scheme, port and host are the
47
- # same of the original_domain.
48
- #
49
41
  # The exception classes (except Error) inherit Error, and Error inherit
50
42
  # ArgumentError. They are empty yet, only have a message.
51
43
  #
52
- # @see PrettyProxy::Error
53
- # @see PrettyProxy::ConfigError
54
- # @see PrettyProxy::ProxyError
44
+ # Glossary:
45
+ #
46
+ # 'a valid proxy url/path': The path (or the path of the url) start with
47
+ # the proxy_path and is followed by a original_path.
48
+ #
49
+ # 'in(side)/out(side) the proxy control': The url have (or not) the path
50
+ # starting with a original_path and the scheme, port and host are the
51
+ # same of the original_domain.
55
52
  #
56
- # @author: Henrique Becker
53
+ # @author Henrique Becker
57
54
  class PrettyProxy < Rack::Proxy
58
55
  # The supertype of any exceptions explicitly raised by the methods
59
56
  class Error < ArgumentError; end
@@ -94,15 +91,12 @@ class PrettyProxy < Rack::Proxy
94
91
  end
95
92
  end
96
93
 
97
- # !@attribute proxy_path
98
- # @param a input who will be validated as in the initialize
99
- # @return the clone of the internal value
100
- # !@attribute original_domain
101
- # @param a input who will be validated as in the initialize
102
- # @return the clone of the internal value
103
- # !@attribute original_paths
104
- # @param a input who will be validated as in the initialize
105
- # @return the clone of the internal value
94
+ # @!attribute proxy_path
95
+ # return the clone of the internal value
96
+ # @!attribute original_domain
97
+ # return the clone of the internal value
98
+ # @!attribute original_paths
99
+ # return the clone of the internal value
106
100
  [:proxy_path, :original_domain, :original_paths].each do | reader |
107
101
  define_method(reader) { instance_variable_get("@#{reader.to_s}").clone }
108
102
  end
@@ -123,8 +117,8 @@ class PrettyProxy < Rack::Proxy
123
117
  end
124
118
 
125
119
  # Take a proxy url and return the original URL behind the proxy. Preserve the
126
- # query and fragment, if any. For the rewrite of a request @see rewrite_env.
127
- # @param [String, URI::HTTP, URI::HTTPS] A URL.
120
+ # query and fragment, if any. For the rewrite of a request @see rewrite_env.
121
+ # @param url [String, URI::HTTP, URI::HTTPS] A URL.
128
122
  # @return [URI::HTTP, URI::HTTPS] A URI object.
129
123
  # @raise PrettyProxy::ProxyError
130
124
  def unproxify_url(url)
@@ -151,10 +145,10 @@ class PrettyProxy < Rack::Proxy
151
145
  end
152
146
 
153
147
  # Take a hyperlink and the url of the proxy page (not the original page)
154
- # where it come from and return the rewritten hyperlink. If the page
155
- # pointed vy the hyperlink is in the proxy control the rewritten hyperlink
156
- # gonna point to the proxyfied version, otherwise gonna point to the original
157
- # version.
148
+ # where it come from and return the rewritten hyperlink. If the page
149
+ # pointed vy the hyperlink is in the proxy control the rewritten hyperlink
150
+ # gonna point to the proxyfied version, otherwise gonna point to the original
151
+ # version.
158
152
  # @param hyperlink [String, URI::HTTP, URI::HTTPS] A string with a relative
159
153
  # path or an url (string or URI).
160
154
  # @param proxy_page_url [String, URI::HTTP, URI::HTTPS] The url from the
@@ -196,7 +190,7 @@ class PrettyProxy < Rack::Proxy
196
190
  end
197
191
 
198
192
  # Take a (X)HTML Document and apply proxify_hyperlink to the 'href'
199
- # attribute of each 'a' element.
193
+ # attribute of each 'a' element.
200
194
  # @param html [String] A (X)HTML document.
201
195
  # @param proxy_url [String, URI::HTTP, URI::HTTPS] The url where the
202
196
  # the proxified version of the page will be displayed.
@@ -229,12 +223,12 @@ class PrettyProxy < Rack::Proxy
229
223
  end
230
224
 
231
225
  # Modify a Rack environment hash of a request to the proxy version of
232
- # a page to a request to the original page. As in Rack::proxy is used
233
- # by #call for require the original page before call rewrite_response in
234
- # the response. If you want to use your own rewrite rules maybe is more
235
- # wise to subclass Rack::Proxy instead subclass this class. The purpose
236
- # of this class is mainly implement and enforce these rules for you.
237
- # @param html [Hash{String => String}] A Rack environment hash.
226
+ # a page to a request to the original page. As in Rack::proxy is used
227
+ # by #call for require the original page before call rewrite_response in
228
+ # the response. If you want to use your own rewrite rules maybe is more
229
+ # wise to subclass Rack::Proxy instead subclass this class. The purpose
230
+ # of this class is mainly implement and enforce these rules for you.
231
+ # @param env [Hash{String => String}] A Rack environment hash.
238
232
  # (see: {http://rack.rubyforge.org/doc/SPEC.html})
239
233
  # @return [Hash{String => String}] A unproxified copy of the argument.
240
234
  # @raise PrettyProxy::ProxyError
@@ -269,20 +263,20 @@ class PrettyProxy < Rack::Proxy
269
263
  end
270
264
 
271
265
  # Mainly apply the proxify_html to the body of the response if it is a html.
272
- # Raise an error if the 'content-encoding' is other than deflate, gzip or
273
- # identity. Change the 'content-length' header for the new body bytesize.
274
- # Remove the 'transfer-encoding' if it is chunked, and act as not chunked.
275
- # This method is inherited of Rack::Proxy, but in the original it have only
276
- # the first parameter (the triplet). This version have the request Rack env
277
- # to the proxy and the rewritten Rack env as second and third parameters,
278
- # respectively.
266
+ # Raise an error if the 'content-encoding' is other than deflate, gzip or
267
+ # identity. Change the 'content-length' header for the new body bytesize.
268
+ # Remove the 'transfer-encoding' if it is chunked, and act as not chunked.
269
+ # This method is inherited of Rack::Proxy, but in the original it have only
270
+ # the first parameter (the triplet). This version have the request Rack env
271
+ # to the proxy and the rewritten Rack env as second and third parameters,
272
+ # respectively.
279
273
  # @param triplet [Array<(Integer, Hash{String => String}, #each)>] A Rack
280
274
  # response (see {http://rack.rubyforge.org/doc/SPEC.html}) for the request
281
275
  # to the original site.
282
- # @param [Hash{String => String}] A Rack environment hash. The requested to
283
- # the proxy version.
284
- # @param [Hash{String => String}] A Rack environment hash. The rewritten by
285
- # the proxy to point to the original version.
276
+ # @param requested_to_proxy_env [Hash{String => String}] A Rack environment
277
+ # hash. The requested to the proxy version.
278
+ # @param rewritten_env [Hash{String => String}] A Rack environment hash.
279
+ # The rewritten by the proxy to point to the original version.
286
280
  # @return [Array<(Integer, Hash{String => String}, #each)>] A unproxified
287
281
  # copy of the first argument.
288
282
  # @raise PrettyProxy::ProxyError
@@ -336,27 +330,27 @@ class PrettyProxy < Rack::Proxy
336
330
 
337
331
  # @abstract This method is called only over (X)HTML responses, after they are
338
332
  # decompressed and the hyperlinks proxified, before they are compressed
339
- # again and the new content-length calculated. The body of the triplet is
340
- # a String and not a object who respond to #each, the same has to be true
341
- # in the return. Return a modified clone of the response, don't change
342
- # the argument.
333
+ # again and the new content-length calculated.
334
+ # @note The body of the triplet is a String and not a object who respond to #each,
335
+ # the same has to be true in the return. Return a modified clone of the
336
+ # response, don't change the argument.
343
337
  # @param triplet [Array<(Integer, Hash{String => String}, String)>] Not a
344
338
  # valid Rack response, the third element is a string with the response body.
345
- # @param [Hash{String => String}] A Rack environment hash. The requested to
346
- # the proxy version.
347
- # @param [Hash{String => String}] A Rack environment hash. The rewritten by
348
- # the proxy to point to the original version.
339
+ # @param requested_to_proxy_env [Hash{String => String}] A Rack environment
340
+ # hash. The requested to the proxy version.
341
+ # @param rewritten_env [Hash{String => String}] A Rack environment hash.
342
+ # The rewritten by the proxy to point to the original version.
349
343
  # @return [Array<(Integer, Hash{String => String}, String)>] A unproxified
350
344
  # copy of the first argument.
351
345
  def sugared_rewrite_response(triplet, requested_to_proxy_env, rewritten_env)
352
346
  triplet
353
347
  end
354
348
 
355
- # Make this class a Rack app. Is overriden to repass to the rewrite_response
356
- # the original Rack environment (request to the proxy) and the rewritten env
357
- # (modified to point the original page request).
358
- # If you don't know the parameters and return of this method, please read
359
- # {http://rack.rubyforge.org/doc/SPEC.html}.
349
+ # Make this class a Rack app. It's overriden to repass to the rewrite_response
350
+ # the original Rack environment (request to the proxy) and the rewritten env
351
+ # (modified to point the original page request).
352
+ # If you don't know the parameters and return of this method, please read
353
+ # {http://rack.rubyforge.org/doc/SPEC.html}.
360
354
  def call(env)
361
355
  # in theory we only need to repass the rewritten_env, any original env info
362
356
  # needed can be passed as a environment application variable
@@ -372,7 +366,7 @@ class PrettyProxy < Rack::Proxy
372
366
  Utils.same_domain?(@original_domain, uri)
373
367
  end
374
368
 
375
- # Check if the URI::HTTP(S) is a page who can be accessed through the proxy
369
+ # Check if the URI::HTTP(S) is a page who can be accessed through the proxy.
376
370
  def inside_proxy_control?(uri)
377
371
  same_domain_as_original?(uri) &&
378
372
  valid_path_for_proxy?(@proxy_path + uri.path[1..-1])
@@ -402,7 +396,7 @@ class PrettyProxy < Rack::Proxy
402
396
  end
403
397
 
404
398
  # api private Don't use the methods of this class. They are for internal use only.
405
- class Utils
399
+ module Utils
406
400
  def self.relative_path?(hyperlink)
407
401
  ! hyperlink.scheme
408
402
  end
@@ -414,6 +408,7 @@ class PrettyProxy < Rack::Proxy
414
408
  end
415
409
 
416
410
  def self.validate_proxy_path(proxy_path)
411
+ fail ConfigError, "proxy_path argument don't start with a '/'" unless proxy_path.start_with? '/'
417
412
  fail ConfigError, "proxy_path argument don't end with a '/'" unless proxy_path.end_with? '/'
418
413
  # NOTE: if the user want to proxify 'www.site.net', and not 'www.site.net/'?
419
414
  # Well, majority of the internet answers for this are 'the right way is to use the trailing slash'
@@ -83,6 +83,10 @@ describe PrettyProxy do
83
83
 
84
84
  # TODO: Add specs for '/' in the start of the proxy_path
85
85
  let (:right_args) { correct_new_args_example }
86
+ context "when proxy_path doesn't start with a '/'" do
87
+ it { expect {new.call('proxy/', right_args[1], right_args[2])}.to raise_error(PrettyProxy::ConfigError) }
88
+ end
89
+
86
90
  context "when proxy_path doesn't end with a '/'" do
87
91
  it { expect {new.call('/proxy', right_args[1], right_args[2])}.to raise_error(PrettyProxy::ConfigError) }
88
92
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pretty_proxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrique Becker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-15 00:00:00.000000000 Z
11
+ date: 2013-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -176,4 +176,4 @@ specification_version: 4
176
176
  summary: A Rack::Proxy child pretty url oriented
177
177
  test_files:
178
178
  - spec/pretty_proxy_spec.rb
179
- has_rdoc:
179
+ has_rdoc: true