rack-rewrite 1.4.01 → 1.5.0

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