prerendercloud 0.1.1 → 0.2.0

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: 98602daa331bbef3797fbdbbd3799aa02377b788
4
- data.tar.gz: 5bbc10e89fe00c5f0126af4dadc2e45c826d298b
3
+ metadata.gz: f83eade04762849473e28d6066c6e143da296e0b
4
+ data.tar.gz: a4abe2d1c5ca27b28bbe8275c3c678d7cae57f1c
5
5
  SHA512:
6
- metadata.gz: 1e200a693d0a2ee900220ebca72c7966ef0ad9f27ac422608beeb6469a136bc09c0d5ec7da6449493fdba07ba1df1640c545a568cc2b4f6c93f0b117fbdd39d6
7
- data.tar.gz: 10aeb898918c7eac2df37181e284bf435ebf9c7a2c645a84fc2099cd6746d9523f2ad338bac8707bdf09c7852926f62878f7b2a99c3e1f82db531ab03c815fe1
6
+ metadata.gz: 3770ad267d006931870230dc2ec647d4941f8c1fa983e24ec8c6777c5f76170396a745fc90a7f2cd86c23eb597ec52f90a0f21a9c0dfc5b41e857873b9deaa53
7
+ data.tar.gz: b28db95acb7e77148964215051e4a9b676e976f7b6075505e9851e830163fa9a646d362f3cb1de4c4f9bf9a375202d490681cb8397e23299c52c6f5907901181
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prerendercloud (0.1.0)
4
+ prerendercloud (0.1.1)
5
5
  activesupport
6
6
  rack
7
7
 
data/README.md CHANGED
@@ -37,3 +37,23 @@ but it's here if you want it:
37
37
  ```ruby
38
38
  config.middleware.use Rack::Prerendercloud, bots_only: true
39
39
  ```
40
+
41
+ ### Blacklist
42
+
43
+ Prevent certain paths from being prerendered (e.g. JSON API endpoints)
44
+
45
+ Pass an array of Regexps or Strings.
46
+
47
+ ```ruby
48
+ config.middleware.use Rack::Prerender, blacklist: [/^\/api/, '/housing_prices.json']
49
+ ```
50
+
51
+ ### Whitelist
52
+
53
+ Only allow certain paths to be prerendered
54
+
55
+ Pass an array of Regexps or Strings.
56
+
57
+ ```ruby
58
+ config.middleware.use Rack::Prerender, whitelist: [/^\/users/, '/ips-v4']
59
+ ```
@@ -125,19 +125,29 @@ module Rack
125
125
  is_requesting_prerendered_page = true if Rack::Utils.parse_query(request.query_string).has_key?('_escaped_fragment_')
126
126
 
127
127
  # if whitelist exists and path is not whitelisted...don't prerender
128
- return false if @options[:whitelist].is_a?(Array) && @options[:whitelist].all? { |whitelisted| !Regexp.new(whitelisted).match(request.fullpath) }
128
+ return false if @options[:whitelist].is_a?(Array) && @options[:whitelist].all? do |whitelisted|
129
+ if whitelisted.is_a?(Regexp)
130
+ !whitelisted.match(request.fullpath)
131
+ else
132
+ whitelisted != request.fullpath;
133
+ end
134
+ end
129
135
 
130
136
  # if blacklist exists and path is blacklisted(url or referer)...don't prerender
131
- if @options[:blacklist].is_a?(Array) && @options[:blacklist].any? { |blacklisted|
137
+ if @options[:blacklist].is_a?(Array) && @options[:blacklist].any? do |blacklisted|
132
138
  blacklistedUrl = false
133
139
  blacklistedReferer = false
134
- regex = Regexp.new(blacklisted)
135
140
 
136
- blacklistedUrl = !!regex.match(request.fullpath)
137
- blacklistedReferer = !!regex.match(request.referer) if request.referer
141
+ if blacklisted.is_a?(Regexp)
142
+ blacklistedUrl = !!blacklisted.match(request.fullpath)
143
+ blacklistedReferer = !!blacklisted.match(request.referer) if request.referer
144
+ else
145
+ blacklistedUrl = blacklisted == request.fullpath
146
+ blacklistedReferer = request.referer && blacklisted == request.referer
147
+ end
138
148
 
139
149
  blacklistedUrl || blacklistedReferer
140
- }
150
+ end
141
151
  return false
142
152
  end
143
153
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "prerendercloud"
5
- spec.version = "0.1.1"
5
+ spec.version = "0.2.0"
6
6
  spec.authors = ["Jonathan Otto"]
7
7
  spec.email = ["support@prerender.cloud"]
8
8
  spec.description = %q{Rack middleware to server-side render your JavaScript apps by prerender.cloud}
@@ -89,14 +89,6 @@ describe Rack::Prerendercloud do
89
89
  end
90
90
 
91
91
 
92
- it "should continue to app routes if the url is not part of the regex specific whitelist" do
93
- request = Rack::MockRequest.env_for "/saved/search/blah?_escaped_fragment_=", "HTTP_USER_AGENT" => bot
94
- response = Rack::Prerendercloud.new(@app, whitelist: ['^/search', '/help']).call(request)
95
-
96
- assert_equal "", response[2]
97
- end
98
-
99
-
100
92
  it "should set use_ssl to true for https prerender_service_url" do
101
93
  @prerender = Rack::Prerendercloud.new(@app, prerender_service_url: 'https://service.prerender.cloud/')
102
94
 
@@ -108,10 +100,18 @@ describe Rack::Prerendercloud do
108
100
  end
109
101
 
110
102
 
103
+ it "should continue to app routes if the url is not part of the regex specific whitelist" do
104
+ request = Rack::MockRequest.env_for "/saved/search/blah?_escaped_fragment_=", "HTTP_USER_AGENT" => bot
105
+ response = Rack::Prerendercloud.new(@app, whitelist: [/^\/search/, '/help']).call(request)
106
+
107
+ assert_equal "", response[2]
108
+ end
109
+
110
+
111
111
  it "should return a prerendered response if the url is part of the regex specific whitelist" do
112
112
  request = Rack::MockRequest.env_for "/search/things/123/page?_escaped_fragment_=", "HTTP_USER_AGENT" => bot
113
113
  stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
114
- response = Rack::Prerendercloud.new(@app, whitelist: ['^/search.*page', '/help']).call(request)
114
+ response = Rack::Prerendercloud.new(@app, whitelist: [/^\/search.*page/, '/help']).call(request)
115
115
 
116
116
  assert_equal ["<html></html>"], response[2].body
117
117
  end
@@ -119,14 +119,14 @@ describe Rack::Prerendercloud do
119
119
 
120
120
  it "should continue to app routes if the url is part of the regex specific blacklist" do
121
121
  request = Rack::MockRequest.env_for "/search/things/123/page", "HTTP_USER_AGENT" => bot
122
- response = Rack::Prerendercloud.new(@app, blacklist: ['^/search', '/help']).call(request)
122
+ response = Rack::Prerendercloud.new(@app, blacklist: [/^\/search/, '/help']).call(request)
123
123
 
124
124
  assert_equal "", response[2]
125
125
  end
126
126
 
127
127
  it "should continue to app routes if the hashbang url is part of the regex specific blacklist" do
128
128
  request = Rack::MockRequest.env_for "?_escaped_fragment_=/search/things/123/page", "HTTP_USER_AGENT" => bot
129
- response = Rack::Prerendercloud.new(@app, blacklist: ['/search', '/help']).call(request)
129
+ response = Rack::Prerendercloud.new(@app, blacklist: [/\/search/, '/help']).call(request)
130
130
 
131
131
  assert_equal "", response[2]
132
132
  end
@@ -134,24 +134,30 @@ describe Rack::Prerendercloud do
134
134
  it "should return a prerendered response if the url is not part of the regex specific blacklist" do
135
135
  request = Rack::MockRequest.env_for "/profile/search/blah", "HTTP_USER_AGENT" => bot
136
136
  stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
137
- response = Rack::Prerendercloud.new(@app, blacklist: ['^/search', '/help']).call(request)
137
+ response = Rack::Prerendercloud.new(@app, blacklist: [/^\/search/, '/help']).call(request)
138
138
 
139
139
  assert_equal ["<html></html>"], response[2].body
140
140
  end
141
141
 
142
142
 
143
- it "should continue to app routes if the referer is part of the regex specific blacklist" do
143
+ it "should continue to app routes if the referer is part of the regex specific blacklist (regex match)" do
144
144
  request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/search'
145
- response = Rack::Prerendercloud.new(@app, blacklist: ['^/search', '/help']).call(request)
145
+ response = Rack::Prerendercloud.new(@app, blacklist: [/^\/search/, '/help']).call(request)
146
146
 
147
147
  assert_equal "", response[2]
148
148
  end
149
149
 
150
+ it "should continue to app routes if the referer is part of the regex specific blacklist (string match)" do
151
+ request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/search'
152
+ response = Rack::Prerendercloud.new(@app, blacklist: ['/search', '/help']).call(request)
153
+
154
+ assert_equal "", response[2]
155
+ end
150
156
 
151
157
  it "should return a prerendered response if the referer is not part of the regex specific blacklist" do
152
158
  request = Rack::MockRequest.env_for "/api/results", "HTTP_USER_AGENT" => bot, "HTTP_REFERER" => '/profile/search'
153
159
  stub_request(:get, @prerender.build_api_url(request)).to_return(:body => "<html></html>")
154
- response = Rack::Prerendercloud.new(@app, blacklist: ['^/search', '/help']).call(request)
160
+ response = Rack::Prerendercloud.new(@app, blacklist: [/^\/search/, '/help']).call(request)
155
161
 
156
162
  assert_equal ["<html></html>"], response[2].body
157
163
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prerendercloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Otto