ssl_routes 0.0.9 → 0.1.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.
@@ -38,7 +38,6 @@ module SslRoutes::Controller
38
38
  private
39
39
 
40
40
  def ensure_protocol
41
- # ActionController::Routing::Routes.send :remove_recognize_optimized!
42
41
  options = ActionController::Routing::Routes.recognize_path(
43
42
  request.path,
44
43
  ActionController::Routing::Routes.extract_request_environment(request)
@@ -0,0 +1,84 @@
1
+ module SslRoutes
2
+
3
+ module ActionController
4
+
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ base.send :include, InstanceMethods
8
+ end
9
+
10
+ module ClassMethods
11
+
12
+ def enforce_protocols(&block)
13
+ cattr_accessor :parameter, :secure_session, :enable_ssl
14
+ self.parameter = :protocol
15
+ self.secure_session = false
16
+ self.enable_ssl = false
17
+ yield self if block_given?
18
+ before_filter :ensure_protocol if self.enable_ssl
19
+ end
20
+
21
+ end
22
+
23
+ module InstanceMethods
24
+
25
+ def determine_protocols(options)
26
+ current = self.request.ssl? ? 'https' : 'http'
27
+ target = case options[self.parameter]
28
+ when String then options[self.parameter]
29
+ when TrueClass then 'https'
30
+ else 'http'
31
+ end
32
+ target = current if [:all, :both].include? options[self.parameter]
33
+ target = 'https' if self.secure_session && current_user
34
+ target = options[:protocol] if options[:protocol]
35
+ [ current, target.split(':').first ]
36
+ end
37
+
38
+ private
39
+
40
+ def ensure_protocol
41
+ routes = Rails.application.routes
42
+ options = routes.recognize_path request.path, request.env
43
+ current, target = determine_protocols(options)
44
+ if current != target && !request.xhr? && request.get?
45
+ flash.keep
46
+ redirect_to "#{target}://#{request.host_with_port + request.fullpath}"
47
+ return false
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ module ActionDispatch
56
+
57
+ def self.included(base)
58
+ base.send :include, InstanceMethods
59
+ base.send :alias_method_chain, :url_for, :ssl_support
60
+ end
61
+
62
+ module InstanceMethods
63
+
64
+ def url_for_with_ssl_support(options)
65
+ if self.controller.enable_ssl
66
+ case options
67
+ when Hash
68
+ current, target = self.controller.determine_protocols(options)
69
+ if current != target
70
+ options.merge!({ :protocol => target, :only_path => false })
71
+ end
72
+ end
73
+ end
74
+ url_for_without_ssl_support(options)
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+ ActionController::Base.send :include, SslRoutes::ActionController
84
+ ActionDispatch::Routing::UrlFor.send :include, SslRoutes::ActionDispatch
@@ -1,5 +1,5 @@
1
1
  module SslRoutes
2
2
 
3
- VERSION = '0.0.9'
3
+ VERSION = '0.1.0'
4
4
 
5
5
  end
data/lib/ssl_routes.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module SslRoutes
2
2
 
3
- require 'ssl_routes/controller'
4
- require 'ssl_routes/paperclip' if defined?( Paperclip )
3
+ require 'ssl_routes/rails3' if ::Rails::VERSION::MAJOR == 3
4
+ require 'ssl_routes/rails2' if ::Rails::VERSION::MAJOR == 2
5
+ require 'ssl_routes/paperclip' if defined?( ::Paperclip )
5
6
 
6
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ssl_routes
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 9
10
- version: 0.0.9
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Cedric Howe
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-01 00:00:00 -04:00
19
- default_executable:
18
+ date: 2011-08-24 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: rails
@@ -24,7 +23,7 @@ dependencies:
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
27
- - - ~>
26
+ - - ">"
28
27
  - !ruby/object:Gem::Version
29
28
  hash: 5
30
29
  segments:
@@ -42,12 +41,12 @@ extensions: []
42
41
  extra_rdoc_files: []
43
42
 
44
43
  files:
45
- - lib/ssl_routes/controller.rb
46
44
  - lib/ssl_routes/paperclip.rb
45
+ - lib/ssl_routes/rails2.rb
46
+ - lib/ssl_routes/rails3.rb
47
47
  - lib/ssl_routes/version.rb
48
48
  - lib/ssl_routes.rb
49
49
  - test/test_helper.rb
50
- has_rdoc: true
51
50
  homepage: http://github.com/cedric/ssl_routes/
52
51
  licenses: []
53
52
 
@@ -79,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
78
  requirements: []
80
79
 
81
80
  rubyforge_project: ssl_routes
82
- rubygems_version: 1.4.1
81
+ rubygems_version: 1.7.2
83
82
  signing_key:
84
83
  specification_version: 3
85
84
  summary: Enforce SSL based on your Rails routes.