pretty_proxy 1.0.0 → 1.0.2

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: 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