Permalink
Browse files

Added AccountLocation for helping with HowToUseSubdomainsAsAccountKey…

…s [DHH]
  • Loading branch information...
dhh committed Oct 29, 2005
0 parents commit a03839f0eaa050e94a0e3e436941de95f10f8d9a
Showing with 95 additions and 0 deletions.
  1. +42 −0 README
  2. +46 −0 lib/account_location.rb
  3. +7 −0 test/account_location_test.rb
42 README
@@ -0,0 +1,42 @@
+Account Location
+================
+
+Account location is a set of protected methods that supports the account-key-as-subdomain
+way of identifying the current scope. These methods allow you to easily produce URLs that
+match this style and to get the current account key from the subdomain.
+
+The methods are: account_url, account_host, and account_domain.
+
+Example:
+
+ class ApplicationController < ActiveRecord::Base
+ include AccountLocation
+ end
+
+ class AccountController < ApplicationController
+ def new
+ @new_account = Account.create(params[:new_account])
+ redirect_to :host => account_host(@new_account.username), :controller => "weblog"
+ end
+
+ def authenticate
+ session[account_domain] = :authenticated
+ redirect_to :controller => "weblog"
+ end
+
+ protected
+ def authenticated?
+ session[account_domain] == :authenticated
+ end
+ end
+
+ # The view:
+
+ Your domain: <%= account_url %>
+
+By default, all the methods will query for @account.username as the account key, but you can
+specialize that by overwriting default_account_subdomain. You can of course also pass it in
+as the first argument to all the methods.
+
+
+Copyright (c) 2005 David Heinemeier Hansson, released under the MIT license
@@ -0,0 +1,46 @@
+# Copyright (c) 2005 David Heinemeier Hansson
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+module AccountLocation
+ def self.included(controller)
+ controller.helper_method(:account_domain, :account_host, :account_url)
+ end
+
+ protected
+ def default_account_subdomain
+ @account.username if @account && @account.respond_to?(:username)
+ end
+
+ def account_url(account_subdomain = default_account_subdomain, use_ssl = request.ssl?)
+ (use_ssl ? "https://" : "http://") + account_host(account_subdomain)
+ end
+
+ def account_host(account_subdomain = default_account_subdomain)
+ account_host = ""
+ account_host << account_subdomain + "."
+ account_host << account_domain
+ end
+
+ def account_domain
+ account_domain = ""
+ account_domain << request.subdomains[1..-1].join(".") + "." if request.subdomains.size > 1
+ account_domain << request.domain + request.port_string
+ end
+end
@@ -0,0 +1,7 @@
+require 'test/unit'
+
+class AccountLocationTest < Test::Unit::TestCase
+ def test_truth
+ assert true
+ end
+end

0 comments on commit a03839f

Please sign in to comment.