prerender_rails 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -6
- data/lib/prerender_rails.rb +4 -3
- data/prerender_rails.gemspec +1 -1
- data/test/lib/prerender_rails.rb +45 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5013e7eaea9bbf3be69499894144a70bf904911
|
4
|
+
data.tar.gz: a25e41c1f16f935222447687ff1e85f49e357f34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e4005a4509b94bda2ec6783f7b0a2ba5bc6c3203257cb5cb57cbda056c5c52a92f6e0758fcc252eb8fbf0fab5016a2725d0aa29bccafd2518f4ded7954a72bd
|
7
|
+
data.tar.gz: 85ce4274d97f7148160fdba543e7c8c3784d47e48f7c2183d9d040e4b08593158802d8d6c2d5fd2b31b64b1773bf5a41b04c4842d44761e70459c4ed5c04bd5c
|
data/README.md
CHANGED
@@ -28,22 +28,22 @@ And in `config/environment/production.rb`, add this line:
|
|
28
28
|
|
29
29
|
### Whitelist
|
30
30
|
|
31
|
-
Whitelist a single url path or multiple url paths. If a whitelist is supplied, only url's containing a whitelist path will be prerendered.
|
31
|
+
Whitelist a single url path or multiple url paths. Compares using regex, so be specific when possible. If a whitelist is supplied, only url's containing a whitelist path will be prerendered.
|
32
32
|
```ruby
|
33
|
-
config.middleware.use Rack::Prerender, whitelist: '
|
33
|
+
config.middleware.use Rack::Prerender, whitelist: '^/search'
|
34
34
|
```
|
35
35
|
```ruby
|
36
|
-
config.middleware.use Rack::Prerender, whitelist: ['/search', '/profile']
|
36
|
+
config.middleware.use Rack::Prerender, whitelist: ['/search', '/users/.*/profile']
|
37
37
|
```
|
38
38
|
|
39
39
|
### Blacklist
|
40
40
|
|
41
|
-
Blacklist a single url path or multiple url paths. If a blacklist is supplied, all url's will be prerendered except ones containing a blacklist path.
|
41
|
+
Blacklist a single url path or multiple url paths. Compares using regex, so be specific when possible. If a blacklist is supplied, all url's will be prerendered except ones containing a blacklist path.
|
42
42
|
```ruby
|
43
|
-
config.middleware.use Rack::Prerender, blacklist: '
|
43
|
+
config.middleware.use Rack::Prerender, blacklist: '^/search'
|
44
44
|
```
|
45
45
|
```ruby
|
46
|
-
config.middleware.use Rack::Prerender, blacklist: ['/search', '/profile']
|
46
|
+
config.middleware.use Rack::Prerender, blacklist: ['/search', '/users/.*/profile']
|
47
47
|
```
|
48
48
|
|
49
49
|
### Using your own prerender service
|
data/lib/prerender_rails.rb
CHANGED
@@ -55,15 +55,16 @@ module Rack
|
|
55
55
|
return false if @extensions_to_ignore.any? { |extension| request.path.include? extension }
|
56
56
|
|
57
57
|
#if it is a bot and not requesting a resource and is not whitelisted...dont prerender
|
58
|
-
return false if @options[:whitelist].is_a?(Array) && @options[:whitelist].all? { |whitelisted|
|
58
|
+
return false if @options[:whitelist].is_a?(Array) && @options[:whitelist].all? { |whitelisted| !!Regexp.new(whitelisted).match(request.path) }
|
59
59
|
|
60
60
|
#if it is a bot and not requesting a resource and is not blacklisted(url or referer)...dont prerender
|
61
61
|
if @options[:blacklist].is_a?(Array) && @options[:blacklist].any? { |blacklisted|
|
62
62
|
blacklistedUrl = false
|
63
63
|
blacklistedReferer = false
|
64
|
+
regex = Regexp.new(blacklisted)
|
64
65
|
|
65
|
-
blacklistedUrl = request.path
|
66
|
-
blacklistedReferer = request.referer
|
66
|
+
blacklistedUrl = !!regex.match(request.path)
|
67
|
+
blacklistedReferer = !!regex.match(request.referer) if request.referer
|
67
68
|
|
68
69
|
blacklistedUrl || blacklistedReferer
|
69
70
|
}
|
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.0.
|
5
|
+
spec.version = "0.0.4"
|
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
@@ -42,6 +42,13 @@ describe Rack::Prerender do
|
|
42
42
|
assert_equal response[2], ""
|
43
43
|
end
|
44
44
|
|
45
|
+
it "should continue to app routes if the url is not part of the regex specific whitelist" do
|
46
|
+
request = Rack::MockRequest.env_for "/saved/search/blah", "HTTP_USER_AGENT" => bot
|
47
|
+
response = Rack::Prerender.new(@app, whitelist: ['/search', '/help']).call(request)
|
48
|
+
|
49
|
+
assert_equal response[2], ""
|
50
|
+
end
|
51
|
+
|
45
52
|
it "should return a prerendered response if the url is part of the whitelist" do
|
46
53
|
request = Rack::MockRequest.env_for "/search/things?query=blah", "HTTP_USER_AGENT" => bot
|
47
54
|
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
@@ -50,6 +57,14 @@ describe Rack::Prerender do
|
|
50
57
|
assert_equal response[2].body, ["<html></html>"]
|
51
58
|
end
|
52
59
|
|
60
|
+
it "should return a prerendered response if the url is part of the regex specific whitelist" do
|
61
|
+
request = Rack::MockRequest.env_for "/search/things?query=blah", "HTTP_USER_AGENT" => bot
|
62
|
+
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
63
|
+
response = Rack::Prerender.new(@app, whitelist: ['^/search.*query', '/help']).call(request)
|
64
|
+
|
65
|
+
assert_equal response[2].body, ["<html></html>"]
|
66
|
+
end
|
67
|
+
|
53
68
|
it "should continue to app routes if the url is part of the blacklist" do
|
54
69
|
request = Rack::MockRequest.env_for "/search/things?query=blah", "HTTP_USER_AGENT" => bot
|
55
70
|
response = Rack::Prerender.new(@app, blacklist: ['/search', '/help']).call(request)
|
@@ -57,6 +72,13 @@ describe Rack::Prerender do
|
|
57
72
|
assert_equal response[2], ""
|
58
73
|
end
|
59
74
|
|
75
|
+
it "should continue to app routes if the url is part of the regex specific blacklist" do
|
76
|
+
request = Rack::MockRequest.env_for "/search/things?query=blah", "HTTP_USER_AGENT" => bot
|
77
|
+
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
78
|
+
|
79
|
+
assert_equal response[2], ""
|
80
|
+
end
|
81
|
+
|
60
82
|
it "should return a prerendered response if the url is not part of the blacklist" do
|
61
83
|
request = Rack::MockRequest.env_for "/profile/blah", "HTTP_USER_AGENT" => bot
|
62
84
|
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
@@ -65,6 +87,14 @@ describe Rack::Prerender do
|
|
65
87
|
assert_equal response[2].body, ["<html></html>"]
|
66
88
|
end
|
67
89
|
|
90
|
+
it "should return a prerendered response if the url is not part of the regex specific blacklist" do
|
91
|
+
request = Rack::MockRequest.env_for "/profile/search/blah", "HTTP_USER_AGENT" => bot
|
92
|
+
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
93
|
+
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
94
|
+
|
95
|
+
assert_equal response[2].body, ["<html></html>"]
|
96
|
+
end
|
97
|
+
|
68
98
|
it "should continue to app routes if the referer is part of the blacklist" do
|
69
99
|
request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/search'
|
70
100
|
response = Rack::Prerender.new(@app, blacklist: ['/search', '/help']).call(request)
|
@@ -72,6 +102,13 @@ describe Rack::Prerender do
|
|
72
102
|
assert_equal response[2], ""
|
73
103
|
end
|
74
104
|
|
105
|
+
it "should continue to app routes if the referer is part of the regex specific blacklist" do
|
106
|
+
request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/search'
|
107
|
+
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
108
|
+
|
109
|
+
assert_equal response[2], ""
|
110
|
+
end
|
111
|
+
|
75
112
|
it "should return a prerendered response if the referer is not part of the blacklist" do
|
76
113
|
request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/search'
|
77
114
|
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
@@ -79,6 +116,14 @@ describe Rack::Prerender do
|
|
79
116
|
|
80
117
|
assert_equal response[2].body, ["<html></html>"]
|
81
118
|
end
|
119
|
+
|
120
|
+
it "should return a prerendered response if the referer is not part of the regex specific blacklist" do
|
121
|
+
request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/profile/search'
|
122
|
+
stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
|
123
|
+
response = Rack::Prerender.new(@app, blacklist: ['^/search', '/help']).call(request)
|
124
|
+
|
125
|
+
assert_equal response[2].body, ["<html></html>"]
|
126
|
+
end
|
82
127
|
|
83
128
|
describe '#buildApiUrl' do
|
84
129
|
it "should build the correct api url with the default url" do
|