rack-www 1.4.0 → 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.
Files changed (3) hide show
  1. data/README.rdoc +6 -0
  2. data/lib/rack/www.rb +34 -10
  3. metadata +36 -53
data/README.rdoc CHANGED
@@ -36,6 +36,12 @@ If you like it's also possible to show a message while redirecting the user:
36
36
 
37
37
  config.middleware.use Rack::WWW, :www => false, :message => "You are being redirected..."
38
38
 
39
+ You can optionally specify predicate to determine if redirect should take place:
40
+
41
+ config.middleware.use Rack::WWW, :predicate => lambda { |env|
42
+ !Rack::Request.new(env).params.has_key? "noredirect"
43
+ }
44
+
39
45
 
40
46
  === Options
41
47
 
data/lib/rack/www.rb CHANGED
@@ -11,24 +11,48 @@ module Rack
11
11
  @redirect = @options[:www] if @options[:www] != nil
12
12
  @message = @options[:message]
13
13
  @subdomain = @options[:subdomain]
14
+ @predicate = @options[:predicate]
14
15
  end
15
16
 
16
17
  def call(env)
17
- if (already_subdomain?(env) && @redirect) || (!already_subdomain?(env) && !@redirect)
18
- @app.call(env)
18
+ if redirect?(env)
19
+ redirect(env)
19
20
  else
20
- url = prepare_url(env)
21
- headers = {"Content-Type" => "text/html", "location" => url}
22
- if @message.respond_to?(:each)
23
- message = @message
24
- else
25
- message = [@message || '']
26
- end
27
- [301, headers, message]
21
+ @app.call(env)
28
22
  end
29
23
  end
30
24
 
31
25
  private
26
+
27
+ def redirect(env)
28
+ url = prepare_url(env)
29
+ headers = {"Content-Type" => "text/html", "location" => url}
30
+
31
+ if @message.respond_to?(:each)
32
+ message = @message
33
+ else
34
+ message = [@message || '']
35
+ end
36
+ [301, headers, message]
37
+ end
38
+
39
+ def redirect?(env)
40
+ predicate?(env) && change_subdomain?(env)
41
+ end
42
+
43
+ def predicate?(env)
44
+ if @predicate
45
+ @predicate.call env
46
+ else
47
+ true
48
+ end
49
+ end
50
+
51
+ def change_subdomain?(env)
52
+ @redirect && !already_subdomain?(env) ||
53
+ !@redirect && already_subdomain?(env)
54
+ end
55
+
32
56
  def already_subdomain?(env)
33
57
  env["HTTP_HOST"].downcase =~ /^(#{@subdomain}.)/
34
58
  end
metadata CHANGED
@@ -1,84 +1,67 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack-www
3
- version: !ruby/object:Gem::Version
4
- hash: 7
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.5.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 4
9
- - 0
10
- version: 1.4.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jhimy Fernandes Villar
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-07-26 00:00:00 -03:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-06-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: rack
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- description: " Rack middleware to force subdomain redirects, e.g: www.\n"
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ! ' Rack middleware to force subdomain redirects, e.g: www.
31
+
32
+ '
36
33
  email: stjhimy@gmail.com
37
34
  executables: []
38
-
39
35
  extensions: []
40
-
41
36
  extra_rdoc_files: []
42
-
43
- files:
37
+ files:
44
38
  - lib/rack-www.rb
45
39
  - lib/rack/www.rb
46
40
  - LICENSE
47
41
  - CHANGELOG.rdoc
48
42
  - README.rdoc
49
- has_rdoc: true
50
43
  homepage: https://github.com/stjhimy/rack-www
51
44
  licenses: []
52
-
53
45
  post_install_message:
54
46
  rdoc_options: []
55
-
56
- require_paths:
47
+ require_paths:
57
48
  - lib
58
- required_ruby_version: !ruby/object:Gem::Requirement
49
+ required_ruby_version: !ruby/object:Gem::Requirement
59
50
  none: false
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- hash: 3
64
- segments:
65
- - 0
66
- version: "0"
67
- required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
56
  none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 3
73
- segments:
74
- - 0
75
- version: "0"
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
76
61
  requirements: []
77
-
78
62
  rubyforge_project:
79
- rubygems_version: 1.6.2
63
+ rubygems_version: 1.8.24
80
64
  signing_key:
81
65
  specification_version: 3
82
- summary: "Force redirects to a any given subdomain, e.g: www."
66
+ summary: ! 'Force redirects to a any given subdomain, e.g: www.'
83
67
  test_files: []
84
-