How to check for reserved subdomains with Merb and Datamapper

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
22 site</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">&quot;</span><span class="k">should not allow use of reserved subdomains</span><span class="dl">&quot;</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
28 site</span>.save <span class="no">29</span> <span class="iv">site.should_not be_valid
30 end
31 end

Picture of Scott Motte

delicious facebook rss twitter

Spitfire Sky | github | archives | resume