rack-rewrite 1.4.01 → 1.5.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: ed55c2a3e47528ab894d96863ec12c7de6120ac1
4
- data.tar.gz: 4cab5d9ce803a7ecf29a946cc7ed84938f865571
3
+ metadata.gz: 9b433927615a0c3d699ee348e2442d5e2d3f3bed
4
+ data.tar.gz: 8b8f88d6bd02f4149e37a7d3956045fa795a467f
5
5
  SHA512:
6
- metadata.gz: 9f00621feb515eb4fcf4c99b9e0d7451c1027f55b288cd7c379adc3f86ac1b0ecfc85d62f386a7dfbca679c615da468363894b79cfa945105d264fc64cb63b02
7
- data.tar.gz: ab5b10d820d422f5fae80616a94746c9587049f5a89bce9b5e715995e0343a98c356089806d0227c83a3530e5eebe0661bc62ebf6a2f8bbd70aed4b405986d03
6
+ metadata.gz: cfd596b1093d843050fe96bf3d6737c821d20a10d3371b17dc23a70c28e78cb55ddbeebe059f8842ad976170426c8cba5da8e215e21cd175165c7794c1dedd23
7
+ data.tar.gz: 45b9edc5712be185b07cbcbc81dceab6e0053370510c2c381f3ba95f10b72e0aaed2708cfb2cf4cbfe0d4ce6ac4734bd8741f2fd2f1cc1baa8bb53e414a52192
@@ -1,3 +1,7 @@
1
+ == 1.4.1 / 2013-11-07
2
+ * API
3
+ * Add support for external loaders (#50)
4
+
1
5
  === 1.4.01 / 2013-09-13
2
6
  * API
3
7
  * Add support for lambda matchers
@@ -14,6 +14,7 @@ can get away with rack-rewrite instead of writing Apache mod_rewrite rules.
14
14
  ### Sample rackup file
15
15
 
16
16
  ```ruby
17
+ # config.ru
17
18
  gem 'rack-rewrite', '~> 1.2.1'
18
19
  require 'rack/rewrite'
19
20
  use Rack::Rewrite do
@@ -27,6 +28,7 @@ end
27
28
  ### Sample usage in a rails app
28
29
 
29
30
  ```ruby
31
+ # config/application.rb
30
32
  config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
31
33
  rewrite '/wiki/John_Trupiano', '/john'
32
34
  r301 '/wiki/Yair_Flicker', '/yair'
@@ -35,8 +37,23 @@ config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
35
37
  end
36
38
  ```
37
39
 
38
- Note: when using `config.threadsafe!` (default in Rails 4), you'll need to use `Rack::Runtime` instead of `Rack::Lock`.
40
+ If you use `config.threadsafe`, you'll need to `insert_before(Rack::Runtime, Rack::Rewrite)` as `Rack::Lock` does
41
+ not exist when `config.allow_concurrency == true`:
39
42
 
43
+ ```ruby
44
+ config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
45
+ rewrite '/wiki/John_Trupiano', '/john'
46
+ r301 '/wiki/Yair_Flicker', '/yair'
47
+ r302 '/wiki/Greg_Jastrab', '/greg'
48
+ r301 %r{/wiki/(\w+)_\w+}, '/$1'
49
+ end
50
+ ```
51
+
52
+ Or insert Rack::Rewrite to the top of the stack:
53
+
54
+ ``` ruby
55
+ config.middleware.insert 0, 'Rack::Rewrite' {}
56
+ ```
40
57
 
41
58
  ## Redirection codes
42
59
 
@@ -200,9 +217,9 @@ Recall that rules are interpreted from top to bottom. So you can install
200
217
  "default" rewrite rules if you like. [2] is a sample default rule that
201
218
  will redirect all other requests to the wiki to a google search.
202
219
 
203
- ### :send_file, :x_send_file
220
+ ### :send_file, :x_send_file, :send_data
204
221
 
205
- Calls to #send_file and #x_send_file also have the same signature as #rewrite.
222
+ Calls to #send_file and #x_send_file and #send_data also have the same signature as #rewrite.
206
223
  If the rule matches, the 'to' parameter is interpreted as a path to a file
207
224
  to be rendered instead of passing the application call up the rack stack.
208
225
 
@@ -213,6 +230,9 @@ send_file /*/, 'public/spammers.htm', :if => Proc.new { |rack_env|
213
230
  x_send_file /^blog\/.*/, 'public/blog_offline.htm', :if => Proc.new { |rack_env|
214
231
  File.exists?('public/blog_offline.htm')
215
232
  }
233
+ send_data /^blog\/.*/, 'public/blog_offline.png', :if => Proc.new { |rack_env|
234
+ File.exists?('public/blog_offline.htm')
235
+ }
216
236
  ```
217
237
 
218
238
  ## Options Parameter
@@ -308,7 +328,7 @@ This will not match the relative URL /features but would match /features.xml.
308
328
 
309
329
  ### Keeping your querystring
310
330
 
311
- When rewriting a URL, you may want to keep your querystring in tact (for
331
+ When rewriting a URL, you may want to keep your querystring intact (for
312
332
  example if you're tracking traffic sources). You will need to include a
313
333
  capture group and substitution pattern in your rewrite rule to achieve this.
314
334
 
@@ -338,6 +358,33 @@ string to /today.html
338
358
  r301 lambda { "/#{Time.current.strftime(%m%d%Y)}.html" }, '/today.html'
339
359
  ```
340
360
 
361
+
362
+ ##Alternative loaders
363
+
364
+ rack-rewrite can also be driven by external loaders. Bundled with this library is a loader for YAML files.
365
+
366
+ ```
367
+ config.middleware.insert_before(Rack::Lock, Rack::Rewrite,
368
+ :klass => Rack::Rewrite::YamlRuleSet,
369
+ :options => {:file_name => @file_name})
370
+ ```
371
+
372
+ Using syntax like
373
+
374
+ ```
375
+ -
376
+ method: r301
377
+ from: !ruby/regexp '/(.*)/print'
378
+ to : '$1/printer_friendly'
379
+ options :
380
+ host : 'example.com'
381
+ ```
382
+
383
+ Any class can be used here as long as:
384
+
385
+ - the class take an options hash
386
+ - `#rules` returns an array of `Rack::Rewrite::Rule` instances
387
+
341
388
  ## Contribute
342
389
 
343
390
  rack-rewrite is maintained by [@travisjeffery](http://github.com/travisjeffery).
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.01
1
+ 1.5.0
@@ -5,9 +5,13 @@ module Rack
5
5
  # A rack middleware for defining and applying rewrite rules. In many cases you
6
6
  # can get away with rack-rewrite instead of writing Apache mod_rewrite rules.
7
7
  class Rewrite
8
- def initialize(app, &rule_block)
8
+ def initialize(app, given_options = {}, &rule_block)
9
+ options = {
10
+ :klass => RuleSet,
11
+ :options => {}
12
+ }.merge(given_options)
9
13
  @app = app
10
- @rule_set = RuleSet.new
14
+ @rule_set = options[:klass].new(options[:options])
11
15
  @rule_set.instance_eval(&rule_block) if block_given?
12
16
  end
13
17
 
@@ -4,7 +4,7 @@ module Rack
4
4
  class Rewrite
5
5
  class RuleSet
6
6
  attr_reader :rules
7
- def initialize #:nodoc:
7
+ def initialize(options = {})#:nodoc:
8
8
  @rules = []
9
9
  end
10
10
 
@@ -90,6 +90,13 @@ module Rack
90
90
  add_rule :x_send_file, *args
91
91
  end
92
92
 
93
+ # Creates a rule taht will render the raw data if matched
94
+ # send_data /*/, 'public/system/maintenance.html',
95
+ # :if => Proc.new { File.exists?('public/system/maintenance.html') }
96
+ def send_data(*args)
97
+ add_rule :send_data, *args
98
+ end
99
+
93
100
  private
94
101
  def add_rule(method, from, to, options = {}) #:nodoc:
95
102
  @rules << Rule.new(method.to_sym, from, to, options)
@@ -160,6 +167,11 @@ module Rack
160
167
  'Content-Length' => ::File.size(interpreted_to).to_s,
161
168
  'Content-Type' => Rack::Mime.mime_type(::File.extname(interpreted_to))
162
169
  }.merge!(additional_headers), []]
170
+ when :send_data
171
+ [status, {
172
+ 'Content-Type' => interpreted_to.bytesize,
173
+ 'Content-Type' => 'text/html',
174
+ }.merge!(additional_headers), [interpreted_to]]
163
175
  else
164
176
  raise Exception.new("Unsupported rule: #{self.rule_type}")
165
177
  end
@@ -8,6 +8,11 @@ require 'test/unit'
8
8
  class Test::Unit::TestCase
9
9
  end
10
10
 
11
+ def rack_env_for(url, options = {})
12
+ components = url.split('?')
13
+ {'PATH_INFO' => components[0], 'QUERY_STRING' => components[1] || ''}.merge(options)
14
+ end
15
+
11
16
  def supported_status_codes
12
17
  [:r301, :r302, :r303, :r307]
13
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-rewrite
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.01
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Jeffery
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-13 00:00:00.000000000 Z
12
+ date: 2014-01-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler