rack-www 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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
-