RailsTips reminded us to not forget to reserve subdomains for ourselves in Rails apps. Here’s how to do it in a multiple domain merb app.
1 # model 2 3 ReservedSubdomains = %w[backstage admin blog dev ftp mail pop pop3 imap smtp stage stats status www] 4 5 validates_with_method :check_subdomain 6 def check_subdomain 7 if ReservedSubdomains.include?(self.subdomain) 8 [false, "Subdomain '#{self.subdomain}' is not allowed."] 9 else 10 true 11 end 12 end
And here’s my site_spec.rb
1 2 # SiteSpecHelper 3 module SiteSpecHelper 4 def valid_site_attributes(options = {}) 5 { 6 :domain => 'http://www.firstmemorial.com', 7 :folder => 'firstmemorialcom', 8 :subdomain => 'firstmemorial' 9 }.merge(options) 10 end 11 12 def destroy_all_sites 13 Site.all.destroy! 14 end 15 16 end 17 18 include SiteSpecHelper 19 20 before(:each) do 21 destroy_all_sites 22 @site = Site.new(valid_site_attributes) 23 end 24 .. 25 it "should not allow use of reserved subdomains" do 26 Site::ReservedSubdomains.each do |reserved| 27 @site.subdomain = reserved 28 @site.save 29 @site.should_not be_valid 30 end 31 end
1
2 # SiteSpecHelper
3 module SiteSpecHelper
4 def valid_site_attributes(options = {})
5 {
6 :domain => ‘http://www.firstmemorial.com’,
7 :folder => ‘firstmemorialcom’,
8 :subdomain => ‘firstmemorial’
9 }.merge(options)
10 end
11
12 def destroy_all_sites
13 Site.all.destroy!
14 end
15
16 end
17
18 include SiteSpecHelper
19
20 before(:each) do
21 destroy_all_sites
22site</span> = <span class="co">Site</span>.new(valid_site_attributes) <span class="no">23</span> <span class="r">end</span> <span class="no">24</span> .. <span class="no">25</span> it <span class="s"><span class="dl">"</span><span class="k">should not allow use of reserved subdomains</span><span class="dl">"</span></span> <span class="r">do</span> <span class="no">26</span> <span class="co">Site</span>::<span class="co">ReservedSubdomains</span>.each <span class="r">do</span> |reserved| <span class="no">27</span> <span class="iv">site.subdomain = reserved
28site</span>.save <span class="no">29</span> <span class="iv">site.should_not be_valid
30 end
31 end
![]()
Spitfire Sky | github | archives | resume