handles_custom_domains helps acting on incoming requests. If you need to use a different data set selected based on the server name in the request, than you might find this gem useful.
It provides:
-
a simple way for defining an active model as a storage for domain names
-
binding to the custom domains add-on managed by heroku,
-
creations of data sets for existing applications
THIS PROJECT IS IN A VERY EMBRIOTIC STATE YET! UNLESS YOU MUST, DON’T USE IT!
It is very simple to tell an ActiveRecord to store data about domains.
class CustomDomain << ActiveRecord::Base handles_custom_domains :app => 'exampleapp', :credentials => {:user => 'username@somewhere.com', :key => '123456'} end
After that the domain_name field of the active record will hold a domain names for the exampleapp on Heroku. The field name domain_name is the default value, however, if you wish to change it, you can do so:
class CustomDomain << ActiveRecord::Base handles_custom_domains :app => 'exampleapp', :credentials => {:user => 'username@somewhere.com', :key => '123456'}, :with_field => 'server_name' end
After calling the method every time when a record is being saved, the change of the field holding the domain name is checked. If its value changed than the change is also reflected on Heroku (the old domain name is removed the new is added).
The gem provides selection of datasets based on the addressed server name. The table set is distinguished by table name prefix.
class CustomDomain << ActiveRecord::Base selects_dataset :by => :table_name_prefix end
At the moment table name prefix based selection is the only way how dataset can be selected. By default the table_prefix used is stored in the field name_prefix. This default can be changed by adding the with_field attribute to the select_dataset method call.
This method call results in handling the incoming requests. It finds the domain name based on the server name in the request. The table name prefix is selected based on the domain name. After that tables except of the one handling the domain names are prefixed by this prefix.
There are few instance methods are added after calling the selects_dataset method:
-
select_dataset forces to use the dataset defined by the record - it can be useful when there is no request (console, rake task).
The value of name_prefix can not be changed after the creation of the record. If it changes, the record is invalid.
New dataset might be necassary to create, when a new table name prefix is defined.
class CustomDomain << ActiveRecord::Base after_insert :find_or_create_dataset private def find_or_create_dataset <<create a new dataset with the new table name prefix, if the dataset is not already existing>> end end
-
Fork the project.
-
Make your feature addition or bug fix.
-
Add tests for it. This is important so I don’t break it in a future version unintentionally.
-
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
-
Send me a pull request. Bonus points for topic branches.
Copyright © 2011 Gyorgy Frivolt. See LICENSE for details.