0.0
No commit activity in last 3 years
No release in over 3 years
Easy MultiClient Support for Rails.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies
 Project Readme

MultiClient¶ ↑

Features¶ ↑

* Blocks calls to unscoped (unless whitelisted)
* Gives you a copy of tenant specific classes with the Unscoped suffix, for unscoped access (Post => PostUnscoped).

Installation¶ ↑

Add it to your gemfile:

# Gemfile
gem 'multi_client'

Run the installer:

> rails generate multi_client:install

Add migrations and migrate

> rake multi_client:install:migrations && rake db:migrate

How do I scope routing to clients?¶ ↑

# config/routes.rb
constraints MultiClient::Subdomain do
  resources :posts
end

=> acme.example.com/posts

How do I scope routing to non-clients?¶ ↑

# config/routes.rb
constraints MultiClient::NoSubdomain do
  resources :posts
end

=> www.example.com/posts

How do I set the current client?¶ ↑

# console
MultiClient::Client.set_current_by_identifier '100'

How do I unset the current client?¶ ↑

# console
MultiClient::Client.unset_current

How do I execute something in the scope of a Tenant?¶ ↑

# console
Tenant.with_tenant(Tenant.find(1)) do
  # This call will be scoped to tenant_id = 1
  Post.all
end

How do I setup my application so that a client is looked up automatically?¶ ↑

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  include MultiClient::ControllerWithClient
  helper_method :current_client
end

Gotchas¶ ↑

include MultiClient::ModelWithClient::ActiveSupport::Concern after calls to any class methods.¶ ↑

If you get errors like Paperclip complaining for missing validators or missing association, please make sure to include MultiClient::ModelWithClient::ActiveSupport::Concern after calls to any class methods

Wrong:

class Picture
  # PictureUnscoped won't pickup the validation
  include MultiClient::ModelWithClient

  validates_attachment :image, presence: true,
                              content_type: { content_type: /image\/(jpeg|png)/ }
end

Correct:

class Picture
  validates_attachment :image, presence: true,
                              content_type: { content_type: /image\/(jpeg|png)/ }

  # Including the module after the class_method call.
  include MultiClient::ModelWithClient
end

Paperclip does not find assets when using the :class interpolation¶ ↑

When you save an asset with paperclip and use the unscoped version of a model (i.e. PostUnscoped). The file path will include the class name with the “_unscoped ”suffix.

Trying to access this attachment with the regular, scoped version of the model fails, becuase the file path does not the “_unscoped” part.

Solution: This gem adds an interpolation called :class_without_unscoped. Use this interpolation in your url and path paperclip options instead of the origional :class_name.

License¶ ↑

This project rocks and uses MIT-LICENSE.