sinatra-subdomain 0.1.1 → 0.1.2

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.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
data/Gemfile.lock CHANGED
@@ -1,49 +1,53 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-subdomain (0.1.1)
4
+ sinatra-subdomain (0.1.2)
5
5
  sinatra
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- capybara (1.1.1)
11
- mime-types (>= 1.16)
12
- nokogiri (>= 1.3.3)
13
- rack (>= 1.0.0)
14
- rack-test (>= 0.5.4)
15
- selenium-webdriver (~> 2.0)
16
- xpath (~> 0.1.4)
17
- childprocess (0.2.2)
18
- ffi (~> 1.0.6)
19
- ffi (1.0.9)
20
- json_pure (1.5.4)
21
- spruz (~> 0.2.8)
22
- mime-types (1.16)
23
- nokogiri (1.5.0)
24
- rack (1.3.2)
10
+ awesome_print (1.0.2)
11
+ coderay (0.9.8)
12
+ diff-lcs (1.1.3)
13
+ method_source (0.6.7)
14
+ ruby_parser (>= 2.3.1)
15
+ pry (0.9.7.4)
16
+ coderay (~> 0.9.8)
17
+ method_source (~> 0.6.7)
18
+ ruby_parser (>= 2.3.1)
19
+ slop (~> 2.1.0)
20
+ rack (1.4.0)
21
+ rack-protection (1.2.0)
22
+ rack
25
23
  rack-test (0.6.1)
26
24
  rack (>= 1.0)
27
- rake (0.9.2)
28
- rubyzip (0.9.4)
29
- selenium-webdriver (2.5.0)
30
- childprocess (>= 0.2.1)
31
- ffi (>= 1.0.7)
32
- json_pure
33
- rubyzip
34
- sinatra (1.2.6)
35
- rack (~> 1.1)
36
- tilt (>= 1.2.2, < 2.0)
37
- spruz (0.2.13)
25
+ rake (0.9.2.2)
26
+ rspec (2.8.0)
27
+ rspec-core (~> 2.8.0)
28
+ rspec-expectations (~> 2.8.0)
29
+ rspec-mocks (~> 2.8.0)
30
+ rspec-core (2.8.0)
31
+ rspec-expectations (2.8.0)
32
+ diff-lcs (~> 1.1.2)
33
+ rspec-mocks (2.8.0)
34
+ ruby_parser (2.3.1)
35
+ sexp_processor (~> 3.0)
36
+ sexp_processor (3.0.10)
37
+ sinatra (1.3.2)
38
+ rack (~> 1.3, >= 1.3.6)
39
+ rack-protection (~> 1.2)
40
+ tilt (~> 1.3, >= 1.3.3)
41
+ slop (2.1.0)
38
42
  tilt (1.3.3)
39
- xpath (0.1.4)
40
- nokogiri (~> 1.3)
41
43
 
42
44
  PLATFORMS
43
45
  ruby
44
46
 
45
47
  DEPENDENCIES
46
- capybara
48
+ awesome_print
49
+ pry
47
50
  rack-test
48
51
  rake
52
+ rspec
49
53
  sinatra-subdomain!
data/README.rdoc CHANGED
@@ -23,6 +23,14 @@
23
23
  end
24
24
  end
25
25
 
26
+ If you're not building a classic app, make sure to register Sinatra::Subdomain yourself:
27
+
28
+ class Application < Sinatra::Base
29
+ register Sinatra::Subdomain
30
+
31
+ ...
32
+ end
33
+
26
34
  By default, sinatra-subdomain will consider 1 TLD as in <tt>example.com</tt>.
27
35
  You can specify your TLD size for domains like <tt>example.com.br</tt> or <tt>example.co.uk</tt>.
28
36
 
data/Rakefile CHANGED
@@ -1,11 +1,9 @@
1
1
  require "bundler"
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
- desc "Run tests"
5
- task :test do
6
- # Hack needed: some tests failed when using different Rack apps
7
- # with rake/testtask
8
- %w[ subdomain_test.rb multiple_tlds_test.rb ].each do |file|
9
- system "ruby -rubygems -Ilib -Itest test/#{file}"
10
- end
11
- end
4
+ require "rake/testtask"
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test" << "lib"
7
+ t.test_files = FileList["test/*_test.rb"]
8
+ t.verbose = true
9
+ end
@@ -3,6 +3,10 @@ require "uri"
3
3
 
4
4
  module Sinatra
5
5
  module Subdomain
6
+ class << self
7
+ attr_accessor :app, :subdomain
8
+ end
9
+
6
10
  module Helpers
7
11
  def subdomain
8
12
  uri = URI.parse("http://#{request.env["HTTP_HOST"]}")
@@ -12,18 +16,38 @@ module Sinatra
12
16
  end
13
17
  end
14
18
 
15
- def subdomain(expected_subdomain = nil, &block)
16
- condition do
17
- if expected_subdomain
18
- expected_subdomain.to_s == subdomain
19
- elsif subdomain
20
- true
21
- else
22
- false
23
- end
19
+ def subdomain(expected_subdomain = true, &block)
20
+ ::Sinatra::Subdomain.tap do |mod|
21
+ mod.app = self
22
+ mod.subdomain = expected_subdomain
24
23
  end
25
24
 
26
25
  yield
26
+
27
+ ::Sinatra::Subdomain.tap do |mod|
28
+ mod.app = nil
29
+ mod.subdomain = nil
30
+ end
31
+ end
32
+
33
+ def self.route_added(verb, path, block)
34
+ return unless subdomain && app
35
+
36
+ routes = app.instance_variable_get("@routes")
37
+ last_route = routes[verb].last
38
+ expected = subdomain
39
+
40
+ condition = app.instance_eval do
41
+ generate_method :subdomain do
42
+ if expected == true
43
+ subdomain != nil
44
+ else
45
+ subdomain.to_s == expected.to_s
46
+ end
47
+ end
48
+ end
49
+
50
+ last_route[2] << condition
27
51
  end
28
52
 
29
53
  def self.registered(app)
@@ -3,7 +3,7 @@ module Sinatra
3
3
  module Version
4
4
  MAJOR = 0
5
5
  MINOR = 1
6
- PATCH = 1
6
+ PATCH = 2
7
7
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
8
8
  end
9
9
  end
@@ -18,7 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ["lib"]
19
19
 
20
20
  s.add_dependency "sinatra"
21
+ s.add_development_dependency "rspec"
21
22
  s.add_development_dependency "rake"
22
23
  s.add_development_dependency "rack-test"
23
- s.add_development_dependency "capybara"
24
+ s.add_development_dependency "pry"
25
+ s.add_development_dependency "awesome_print"
24
26
  end
@@ -0,0 +1,6 @@
1
+ require "spec_helper"
2
+
3
+ describe "multiple TLDs" do
4
+ let(:tld) { ".com.br" }
5
+ it_behaves_like "subdomain"
6
+ end
@@ -0,0 +1,6 @@
1
+ require "spec_helper"
2
+
3
+ describe "single TLD" do
4
+ let(:tld) { ".org" }
5
+ it_behaves_like "subdomain"
6
+ end
@@ -0,0 +1,9 @@
1
+ require "rack/test"
2
+ require "sinatra/subdomain"
3
+ require "yaml"
4
+
5
+ Dir["spec/support/**/*.rb"].each {|file| require file }
6
+
7
+ RSpec.configure do |config|
8
+ config.include Rack::Test::Methods
9
+ end
@@ -0,0 +1,73 @@
1
+ shared_examples_for "subdomain" do
2
+ def app
3
+ @app ||= begin
4
+ _tld = tld
5
+
6
+ @app = Class.new(Sinatra::Base) do
7
+ register Sinatra::Subdomain
8
+ set :tld_size, _tld.split(".").size - 1
9
+
10
+ subdomain :foo do
11
+ get("/") { "set: #{subdomain}" }
12
+ get("/about") { "set: about #{subdomain}" }
13
+ end
14
+
15
+ subdomain do
16
+ get("/") { "any: #{subdomain}" }
17
+ get("/about") { "any: about #{subdomain}" }
18
+ end
19
+
20
+ get("/") { "root" }
21
+ get("/about") { "about" }
22
+ end
23
+ end
24
+ end
25
+
26
+ context "when specific subdomain is required" do
27
+ it "renders root page" do
28
+ header "HOST", "foo.example#{tld}"
29
+ get "/"
30
+
31
+ last_response.body.should eql("set: foo")
32
+ end
33
+
34
+ it "renders about page" do
35
+ header "HOST", "foo.example#{tld}"
36
+ get "/about"
37
+
38
+ last_response.body.should eql("set: about foo")
39
+ end
40
+ end
41
+
42
+ context "when any subdomain is required" do
43
+ it "renders root page" do
44
+ header "HOST", "mail.example#{tld}"
45
+ get "/"
46
+
47
+ last_response.body.should eql("any: mail")
48
+ end
49
+
50
+ it "renders about page" do
51
+ header "HOST", "mail.example#{tld}"
52
+ get "/about"
53
+
54
+ last_response.body.should eql("any: about mail")
55
+ end
56
+ end
57
+
58
+ context "when no subdomain is required" do
59
+ it "renders root page" do
60
+ header "HOST", "example#{tld}"
61
+ get "/"
62
+
63
+ last_response.body.should eql("root")
64
+ end
65
+
66
+ it "renders about page" do
67
+ header "HOST", "example#{tld}"
68
+ get "/about"
69
+
70
+ last_response.body.should eql("about")
71
+ end
72
+ end
73
+ end
@@ -1,25 +1,46 @@
1
1
  require "test_helper"
2
2
 
3
3
  class MultipleTldsTest < Test::Unit::TestCase
4
- def setup
5
- Capybara.app = MultipleTldsApp
4
+ App = Class.new(Sinatra::Base) do
5
+ register Sinatra::Subdomain
6
+ set :tld_size, 2
7
+
8
+ subdomain :foo do
9
+ get("/") { "set: #{subdomain}" }
10
+ end
11
+
12
+ subdomain do
13
+ get("/") { "any: #{subdomain}" }
14
+ end
15
+
16
+ get("/") { "root" }
17
+ end
18
+
19
+ def app
20
+ App
6
21
  end
7
22
 
8
23
  def test_specified_subdomain
9
- visit "http://foo.smackaho.smackaho.st:9887/"
10
- assert page.has_content? "set: foo"
24
+ header "HOST", "foo.example.com.br"
25
+ get "/"
26
+
27
+ assert_equal "set: foo", last_response.body
11
28
  end
12
29
 
13
30
  def test_any_subdomain
14
- visit "http://status.smackaho.smackaho.st:9887/"
15
- assert page.has_content? "any: status"
31
+ header "HOST", "status.example.com.br"
32
+ get "/"
33
+ assert_equal "any: status", last_response.body
16
34
 
17
- visit "http://mail.smackaho.smackaho.st:9887/"
18
- assert page.has_content? "any: mail"
35
+ header "HOST", "mail.example.com.br"
36
+ get "/"
37
+ assert_equal "any: mail", last_response.body
19
38
  end
20
39
 
21
40
  def test_root
22
- visit "http://smackaho.smackaho.st:9887/"
23
- assert page.has_content? "root"
41
+ header "HOST", "example.com.br"
42
+ get "/"
43
+
44
+ assert_equal "root", last_response.body
24
45
  end
25
46
  end
@@ -1,25 +1,45 @@
1
1
  require "test_helper"
2
2
 
3
3
  class SubdomainTest < Test::Unit::TestCase
4
- def setup
5
- Capybara.app = SampleApp
4
+ App = Class.new(Sinatra::Base) do
5
+ register Sinatra::Subdomain
6
+
7
+ subdomain :foo do
8
+ get("/") { "set: #{subdomain}" }
9
+ end
10
+
11
+ subdomain do
12
+ get("/") { "any: #{subdomain}" }
13
+ end
14
+
15
+ get("/") { "root" }
16
+ end
17
+
18
+ def app
19
+ App
6
20
  end
7
21
 
8
22
  def test_specified_subdomain
9
- visit "http://foo.smackaho.st:9887/"
10
- assert page.has_content? "set: foo"
23
+ header "HOST", "foo.example.org"
24
+ get "/"
25
+
26
+ assert_equal "set: foo", last_response.body
11
27
  end
12
28
 
13
29
  def test_any_subdomain
14
- visit "http://status.smackaho.st:9887/"
15
- assert page.has_content? "any: status"
30
+ header "HOST", "status.example.org"
31
+ get "/"
32
+ assert_equal "any: status", last_response.body
16
33
 
17
- visit "http://mail.smackaho.st:9887/"
18
- assert page.has_content? "any: mail"
34
+ header "HOST", "mail.example.org"
35
+ get "/"
36
+ assert_equal "any: mail", last_response.body
19
37
  end
20
38
 
21
39
  def test_root
22
- visit "http://smackaho.st:9887/"
23
- assert page.has_content? "root"
40
+ header "HOST", "example.org"
41
+ get "/"
42
+
43
+ assert_equal "root", last_response.body
24
44
  end
25
45
  end
data/test/test_helper.rb CHANGED
@@ -1,41 +1,8 @@
1
1
  require "test/unit"
2
2
  require "rack/test"
3
- require "capybara"
4
- require "capybara/dsl"
5
3
 
6
4
  require "sinatra/subdomain"
7
5
 
8
- Capybara.default_driver = :selenium
9
-
10
6
  class Test::Unit::TestCase
11
- include Capybara::DSL
12
- end
13
-
14
- class SampleApp < Sinatra::Base
15
- register Sinatra::Subdomain
16
-
17
- subdomain :foo do
18
- get("/") { "set: #{subdomain}" }
19
- end
20
-
21
- subdomain do
22
- get("/") { "any: #{subdomain}" }
23
- end
24
-
25
- get("/") { "root" }
26
- end
27
-
28
- class MultipleTldsApp < Sinatra::Base
29
- register Sinatra::Subdomain
30
- set :tld_size, 2
31
-
32
- subdomain :foo do
33
- get("/") { "set: #{subdomain}" }
34
- end
35
-
36
- subdomain do
37
- get("/") { "any: #{subdomain}" }
38
- end
39
-
40
- get("/") { "root" }
7
+ include Rack::Test::Methods
41
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-subdomain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-14 00:00:00.000000000 Z
12
+ date: 2012-01-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70271793132080 !ruby/object:Gem::Requirement
16
+ requirement: &70095704587020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70271793132080
24
+ version_requirements: *70095704587020
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70095704586600 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70095704586600
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rake
27
- requirement: &70271793129920 !ruby/object:Gem::Requirement
38
+ requirement: &70095704586180 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,21 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70271793129920
46
+ version_requirements: *70095704586180
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: rack-test
38
- requirement: &70271793128720 !ruby/object:Gem::Requirement
49
+ requirement: &70095704585720 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70095704585720
58
+ - !ruby/object:Gem::Dependency
59
+ name: pry
60
+ requirement: &70095704585240 !ruby/object:Gem::Requirement
39
61
  none: false
40
62
  requirements:
41
63
  - - ! '>='
@@ -43,10 +65,10 @@ dependencies:
43
65
  version: '0'
44
66
  type: :development
45
67
  prerelease: false
46
- version_requirements: *70271793128720
68
+ version_requirements: *70095704585240
47
69
  - !ruby/object:Gem::Dependency
48
- name: capybara
49
- requirement: &70271793143680 !ruby/object:Gem::Requirement
70
+ name: awesome_print
71
+ requirement: &70095704584780 !ruby/object:Gem::Requirement
50
72
  none: false
51
73
  requirements:
52
74
  - - ! '>='
@@ -54,7 +76,7 @@ dependencies:
54
76
  version: '0'
55
77
  type: :development
56
78
  prerelease: false
57
- version_requirements: *70271793143680
79
+ version_requirements: *70095704584780
58
80
  description: Separate routes for subdomains on Sinatra
59
81
  email:
60
82
  - fnando.vieira@gmail.com
@@ -63,6 +85,7 @@ extensions: []
63
85
  extra_rdoc_files: []
64
86
  files:
65
87
  - .gitignore
88
+ - .rspec
66
89
  - Gemfile
67
90
  - Gemfile.lock
68
91
  - README.rdoc
@@ -70,6 +93,10 @@ files:
70
93
  - lib/sinatra/subdomain.rb
71
94
  - lib/sinatra/subdomain/version.rb
72
95
  - sinatra-subdomain.gemspec
96
+ - spec/multiple_tlds_spec.rb
97
+ - spec/single_tld_spec.rb
98
+ - spec/spec_helper.rb
99
+ - spec/support/subdomain_shared.rb
73
100
  - test/multiple_tlds_test.rb
74
101
  - test/subdomain_test.rb
75
102
  - test/test_helper.rb
@@ -87,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
114
  version: '0'
88
115
  segments:
89
116
  - 0
90
- hash: -355263696072099514
117
+ hash: 632946571034999382
91
118
  required_rubygems_version: !ruby/object:Gem::Requirement
92
119
  none: false
93
120
  requirements:
@@ -96,14 +123,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
123
  version: '0'
97
124
  segments:
98
125
  - 0
99
- hash: -355263696072099514
126
+ hash: 632946571034999382
100
127
  requirements: []
101
128
  rubyforge_project:
102
- rubygems_version: 1.8.10
129
+ rubygems_version: 1.8.11
103
130
  signing_key:
104
131
  specification_version: 3
105
132
  summary: Separate routes for subdomains on Sinatra
106
133
  test_files:
134
+ - spec/multiple_tlds_spec.rb
135
+ - spec/single_tld_spec.rb
136
+ - spec/spec_helper.rb
137
+ - spec/support/subdomain_shared.rb
107
138
  - test/multiple_tlds_test.rb
108
139
  - test/subdomain_test.rb
109
140
  - test/test_helper.rb