ensure_subdomain 0.9.9 → 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c706bfd647210b33566e2fbb57308663f51ee4cd
4
+ data.tar.gz: 07180f9ce0482aa1ce23ed97686635d617ad54d6
5
+ SHA512:
6
+ metadata.gz: ce86ba5c71b3c9882a3d2c7a1ab071cd5798abdb3b6d3bfdc7fa19112939b77f13bf0e7c83a81ffe907b99f65a32b78347c07bb7f2c131f6fce2885761745c7e
7
+ data.tar.gz: 788952e1e1bfc52aaaf6318a1c8952fc691594450a83dbcbedbf7270a3bb02c3beb61af7c330b8d7e5954bf3b960b0387d489259d906b0e825937f10e95d0471
@@ -0,0 +1 @@
1
+ ensure_subdomain-*.gem
data/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  an ActionDispatch extension to handle subdomain redirects
4
4
 
5
- #### Warning: There aren't any tests yet, so this is probably not suitable for production. If you'd like to contribute, I wouldn't be opposed.
6
-
7
5
  Let's say you believe that [using the www subdomain is dumb](http://no-www.org).
8
6
  Ensuring your rails app doesn't use this subdomain is pretty easy, but now it's easier.
9
7
 
@@ -40,4 +38,4 @@ Finally, if you've got some other domain, there's a method for that too.
40
38
  ensure_subdomain 'blog'
41
39
  end
42
40
 
43
- GETting http://my-app.dev/ will redirect to http://blog.my-app.dev
41
+ GETting http://my-app.dev/ will redirect to http://blog.my-app.dev
@@ -1,14 +1,16 @@
1
1
  class EnsureSubdomain
2
2
  attr_accessor :subdomain
3
-
3
+
4
4
  def initialize(subdomain)
5
5
  self.subdomain = subdomain.sub(/\.$/, '')
6
6
  end
7
7
 
8
8
  def matches?(request)
9
- request.subdomain.match(self.subdomain).nil?
9
+ # ''.match('www') #=> nil, which is is the opposite of what we want
10
+ (self.subdomain.empty? && request.subdomain.present?) ||
11
+ request.subdomain.match(self.subdomain).nil?
10
12
  end
11
-
13
+
12
14
  def to(params, request)
13
15
  url = request.protocol
14
16
  url << "#{self.subdomain}." if self.subdomain.present?
@@ -23,14 +25,14 @@ module ActionDispatch::Routing::Mapper::HttpHelpers
23
25
  ensure_subdomain ''
24
26
  end
25
27
  alias_method :ensure_non_www, :ensure_no_www
26
-
28
+
27
29
  def ensure_www
28
30
  ensure_subdomain 'www'
29
31
  end
30
32
 
31
33
  def ensure_subdomain(subdomain, options={})
32
34
  redirector = EnsureSubdomain.new( subdomain )
33
- verbs = options[:via] || [:get, :post, :put, :patch, :delete]
35
+ verbs = options[:via] || [:get, :post, :put, :patch, :delete]
34
36
  constraints( redirector ) do
35
37
  match '/*path', to: redirect { |params, request| redirector.to params, request }, via: verbs
36
38
  end
@@ -1,8 +1,8 @@
1
- class EnsureSubdomain
1
+ class EnsureSubdomain
2
2
  module VERSION
3
- MAJOR = 0
4
- MINOR = 9
5
- TINY = 9
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -0,0 +1,84 @@
1
+ require 'minitest/autorun'
2
+ require 'action_dispatch'
3
+ require File.join(File.dirname(__FILE__), '../lib/ensure_subdomain')
4
+ require 'ostruct'
5
+
6
+ class TestEnsureSubdomain < MiniTest::Unit::TestCase
7
+ =begin
8
+ Test that the EnsureSubdomain constraint matching works.
9
+ Involves class initialization, and the matches method
10
+ =end
11
+ def test_empty_subdomain_will_redirect_to_www
12
+ redirector = www_redirector
13
+ assert redirector.matches?(empty_subdomain_request),
14
+ "request with empty subdomain won't redirect with www_redirector"
15
+ end
16
+
17
+ def test_empty_subdomain_will_not_redirect_if_empty
18
+ redirector = empty_redirector
19
+ refute redirector.matches?(empty_subdomain_request),
20
+ "request with empty subdomain will redirect with empty_redirector"
21
+ end
22
+
23
+ def test_www_will_redirect_to_empty
24
+ redirector = empty_redirector
25
+ assert redirector.matches?(subdomain_request),
26
+ "request with www subdomain won't redirect with empty_redirector"
27
+ end
28
+
29
+ def test_www_will_not_redirect_if_www
30
+ redirector = www_redirector
31
+ refute redirector.matches?(subdomain_request),
32
+ "request with www subdomain will redirect with www_redirector"
33
+ end
34
+
35
+ =begin
36
+ Test that the EnsureSubdomain url generator works.
37
+ Involves the to method
38
+ =end
39
+ def test_www_redirector_generates_www_url
40
+ redirector = www_redirector
41
+ assert_equal "http://www.example.com", redirector.to(no_path_params, empty_subdomain_request)
42
+ end
43
+
44
+ def test_empty_redirector_generates_empty_url
45
+ redirector = empty_redirector
46
+ assert_equal "http://example.com", redirector.to(no_path_params, subdomain_request)
47
+ end
48
+
49
+ def test_path_is_included
50
+ redirector = empty_redirector
51
+ assert_equal "http://example.com/user/signup", redirector.to(path_params, empty_subdomain_request)
52
+ end
53
+
54
+ =begin
55
+ Test helpers because I'm too lazy for a separate file
56
+ =end
57
+ def www_redirector
58
+ EnsureSubdomain.new('www')
59
+ end
60
+
61
+ def empty_redirector
62
+ EnsureSubdomain.new('')
63
+ end
64
+
65
+ def empty_subdomain_request
66
+ OpenStruct.new(protocol: 'http://', domain: 'example.com', subdomain: '')
67
+ end
68
+
69
+ def subdomain_request(sub='www')
70
+ base = empty_subdomain_request
71
+ base[:subdomain] = sub
72
+ base
73
+ end
74
+
75
+ def no_path_params
76
+ { _method: :get }
77
+ end
78
+
79
+ def path_params
80
+ base = no_path_params
81
+ base[:path] = 'user/signup'
82
+ base
83
+ end
84
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ensure_subdomain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jacob Evan Shreve
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-10 00:00:00.000000000 Z
11
+ date: 2013-11-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: actionpack
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -35,34 +32,35 @@ executables: []
35
32
  extensions: []
36
33
  extra_rdoc_files: []
37
34
  files:
35
+ - .gitignore
38
36
  - LICENSE
39
37
  - README.md
40
38
  - ensure_subdomain.gemspec
41
39
  - lib/ensure_subdomain.rb
42
40
  - lib/ensure_subdomain/version.rb
41
+ - test/ensure_subdomain_test.rb
43
42
  homepage: https://github.com/shreve/ensure_subdomain
44
43
  licenses:
45
44
  - MIT
45
+ metadata: {}
46
46
  post_install_message:
47
47
  rdoc_options: []
48
48
  require_paths:
49
49
  - lib
50
50
  required_ruby_version: !ruby/object:Gem::Requirement
51
- none: false
52
51
  requirements:
53
- - - ! '>='
52
+ - - '>='
54
53
  - !ruby/object:Gem::Version
55
54
  version: '0'
56
55
  required_rubygems_version: !ruby/object:Gem::Requirement
57
- none: false
58
56
  requirements:
59
- - - ! '>='
57
+ - - '>='
60
58
  - !ruby/object:Gem::Version
61
59
  version: '0'
62
60
  requirements: []
63
61
  rubyforge_project:
64
- rubygems_version: 1.8.23
62
+ rubygems_version: 2.0.3
65
63
  signing_key:
66
- specification_version: 3
64
+ specification_version: 4
67
65
  summary: Ensure requests are going to the right subdomain.
68
66
  test_files: []