prerender_rails 0.1.7 → 0.1.8
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 +4 -4
- data/lib/prerender_rails.rb +8 -1
- data/prerender_rails.gemspec +1 -1
- data/test/lib/prerender_rails.rb +22 -15
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 480c6d3189a06dc2343b3339fac868bb03ae5d45
|
4
|
+
data.tar.gz: 283c51d78e87ba863f53b2a0be089db9ba0e0f90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b0b9b470a46328f7ab4c7e18c47b34523e4b23a1c76416c1ff2417434d8faaf198d562f8fa7ea40361076a8049a854ab8b48655733b20382edce87112792d58
|
7
|
+
data.tar.gz: d6a0e6b6a9cffbb781106e6182545fe7dfa3298f3a3460c6c6c8e3c37c830f87dfd31313499a182b669291f51700794cde207069571cc513b32975e4092a721b
|
data/lib/prerender_rails.rb
CHANGED
@@ -122,7 +122,14 @@ module Rack
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def build_api_url(env)
|
125
|
-
|
125
|
+
new_env = env
|
126
|
+
if env["CF-VISITOR"]
|
127
|
+
match = /"scheme":"(http|https)"/.match(env['CF-VISITOR'])
|
128
|
+
new_env["HTTPS"] = true and new_env["rack.url_scheme"] = "https" and new_env["SERVER_PORT"] = 443 if (match && match[1] == "https")
|
129
|
+
new_env["HTTPS"] = false and new_env["rack.url_scheme"] = "http" and new_env["SERVER_PORT"] = 80 if (match && match[1] == "http")
|
130
|
+
end
|
131
|
+
|
132
|
+
url = Rack::Request.new(new_env).url
|
126
133
|
prerender_url = get_prerender_service_url()
|
127
134
|
forward_slash = prerender_url[-1, 1] == '/' ? '' : '/'
|
128
135
|
"#{prerender_url}#{forward_slash}#{url}"
|
data/prerender_rails.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "prerender_rails"
|
5
|
-
spec.version = "0.1.
|
5
|
+
spec.version = "0.1.8"
|
6
6
|
spec.authors = ["Todd Hooper"]
|
7
7
|
spec.email = ["todd@collectiveip.com"]
|
8
8
|
spec.description = %q{Rails middleware to prerender your javascript heavy pages on the fly by a phantomjs service}
|
data/test/lib/prerender_rails.rb
CHANGED
@@ -20,7 +20,7 @@ describe Rack::Prerender do
|
|
20
20
|
|
21
21
|
assert_equal response[2].body, ["<html></html>"]
|
22
22
|
assert_equal response[2].status, 301
|
23
|
-
assert_equal
|
23
|
+
assert_equal( { 'location' => 'http://google.com', 'Content-Length' => '13'}, response[2].headers )
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should return a prerendered reponse if user is a bot by checking for _escaped_fragment_" do
|
@@ -28,42 +28,42 @@ describe Rack::Prerender do
|
|
28
28
|
stub_request(:get, @prerender.build_api_url(request)).with(:headers => { 'User-Agent' => user }).to_return(:body => "<html></html>")
|
29
29
|
response = Rack::Prerender.new(@app).call(request)
|
30
30
|
|
31
|
-
assert_equal
|
31
|
+
assert_equal ["<html></html>"], response[2].body
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should continue to app routes if the url is a bad url with _escaped_fragment_" do
|
35
35
|
request = Rack::MockRequest.env_for "/path?query=string?_escaped_fragment_=", "HTTP_USER_AGENT" => user
|
36
36
|
response = Rack::Prerender.new(@app).call(request)
|
37
37
|
|
38
|
-
assert_equal response[2]
|
38
|
+
assert_equal "", response[2]
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should continue to app routes if the request is not a GET" do
|
42
42
|
request = Rack::MockRequest.env_for "/path?_escaped_fragment_=", { "HTTP_USER_AGENT" => user, "REQUEST_METHOD" => "POST" }
|
43
43
|
response = Rack::Prerender.new(@app).call(request)
|
44
44
|
|
45
|
-
assert_equal response[2]
|
45
|
+
assert_equal "", response[2]
|
46
46
|
end
|
47
47
|
|
48
48
|
it "should continue to app routes if user is not a bot by checking agent string" do
|
49
49
|
request = Rack::MockRequest.env_for "/", "HTTP_USER_AGENT" => user
|
50
50
|
response = Rack::Prerender.new(@app).call(request)
|
51
51
|
|
52
|
-
assert_equal response[2]
|
52
|
+
assert_equal "", response[2]
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should continue to app routes if user is a bot, but the bot is requesting a resource file" do
|
56
56
|
request = Rack::MockRequest.env_for "/main.js?anyQueryParam=true", "HTTP_USER_AGENT" => bot
|
57
57
|
response = Rack::Prerender.new(@app).call(request)
|
58
58
|
|
59
|
-
assert_equal response[2]
|
59
|
+
assert_equal "", response[2]
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should continue to app routes if the url is not part of the regex specific whitelist" do
|
63
63
|
request = Rack::MockRequest.env_for "/saved/search/blah", "HTTP_USER_AGENT" => bot
|
64
64
|
response = Rack::Prerender.new(@app, whitelist: ['^/search', '/help']).call(request)
|
65
65
|
|
66
|
-
assert_equal response[2]
|
66
|
+
assert_equal "", response[2]
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should return a prerendered response if the url is part of the regex specific whitelist" do
|
@@ -71,14 +71,14 @@ describe Rack::Prerender do
|
|
71
71
|
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
72
72
|
response = Rack::Prerender.new(@app, whitelist: ['^/search.*page', '/help']).call(request)
|
73
73
|
|
74
|
-
assert_equal
|
74
|
+
assert_equal ["<html></html>"], response[2].body
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should continue to app routes if the url is part of the regex specific blacklist" do
|
78
78
|
request = Rack::MockRequest.env_for "/search/things/123/page", "HTTP_USER_AGENT" => bot
|
79
79
|
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
80
80
|
|
81
|
-
assert_equal response[2]
|
81
|
+
assert_equal "", response[2]
|
82
82
|
end
|
83
83
|
|
84
84
|
it "should return a prerendered response if the url is not part of the regex specific blacklist" do
|
@@ -86,14 +86,14 @@ describe Rack::Prerender do
|
|
86
86
|
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
87
87
|
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
88
88
|
|
89
|
-
assert_equal
|
89
|
+
assert_equal ["<html></html>"], response[2].body
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should continue to app routes if the referer is part of the regex specific blacklist" do
|
93
93
|
request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/search'
|
94
94
|
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
95
95
|
|
96
|
-
assert_equal response[2]
|
96
|
+
assert_equal "", response[2]
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should return a prerendered response if the referer is not part of the regex specific blacklist" do
|
@@ -101,27 +101,34 @@ describe Rack::Prerender do
|
|
101
101
|
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
102
102
|
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
103
103
|
|
104
|
-
assert_equal
|
104
|
+
assert_equal ["<html></html>"], response[2].body
|
105
105
|
end
|
106
106
|
|
107
107
|
describe '#buildApiUrl' do
|
108
108
|
it "should build the correct api url with the default url" do
|
109
109
|
request = Rack::MockRequest.env_for "https://google.com/search?q=javascript"
|
110
110
|
ENV['PRERENDER_SERVICE_URL'] = nil
|
111
|
-
assert_equal
|
111
|
+
assert_equal 'http://prerender.herokuapp.com/https://google.com/search?q=javascript', @prerender.build_api_url(request)
|
112
112
|
end
|
113
113
|
|
114
114
|
it "should build the correct api url with an environment variable url" do
|
115
115
|
ENV['PRERENDER_SERVICE_URL'] = 'http://prerenderurl.com'
|
116
116
|
request = Rack::MockRequest.env_for "https://google.com/search?q=javascript"
|
117
|
-
assert_equal
|
117
|
+
assert_equal 'http://prerenderurl.com/https://google.com/search?q=javascript', @prerender.build_api_url(request)
|
118
118
|
ENV['PRERENDER_SERVICE_URL'] = nil
|
119
119
|
end
|
120
120
|
|
121
121
|
it "should build the correct api url with an initialization variable url" do
|
122
122
|
@prerender = Rack::Prerender.new(@app, prerender_service_url: 'http://prerenderurl.com')
|
123
123
|
request = Rack::MockRequest.env_for "https://google.com/search?q=javascript"
|
124
|
-
assert_equal
|
124
|
+
assert_equal 'http://prerenderurl.com/https://google.com/search?q=javascript', @prerender.build_api_url(request)
|
125
|
+
end
|
126
|
+
|
127
|
+
# Check CF-Visitor header in order to Work behind CloudFlare with Flexible SSL (https://support.cloudflare.com/hc/en-us/articles/200170536)
|
128
|
+
it "should build the correct api url for the Cloudflare Flexible SSL support" do
|
129
|
+
request = Rack::MockRequest.env_for "http://google.com/search?q=javascript", { 'CF-VISITOR' => '"scheme":"https"'}
|
130
|
+
ENV['PRERENDER_SERVICE_URL'] = nil
|
131
|
+
assert_equal 'http://prerender.herokuapp.com/https://google.com/search?q=javascript', @prerender.build_api_url(request)
|
125
132
|
end
|
126
133
|
end
|
127
134
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prerender_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Hooper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|