module Cell::Context::ClassMethods
Public Class Methods
extended(cls)
click to toggle source
# File lib/cell/context.rb, line 9 def self.extended(cls) cls.include ::ActiveSupport::Callbacks cls.define_callbacks :set_tenant, :use_tenant end
Public Instance Methods
after_set(*args, &block)
click to toggle source
# File lib/cell/context.rb, line 14 def after_set(*args, &block) set_callback(:set_tenant, :after, *args, &block) end
around_use(*args, &block)
click to toggle source
# File lib/cell/context.rb, line 18 def around_use(*args, &block) set_callback(:use_tenant, :around, *args, &block) end
current()
click to toggle source
# File lib/cell/context.rb, line 22 def current Thread.current[THREAD_KEY] end
set!(tenant, exclusive: false)
click to toggle source
# File lib/cell/context.rb, line 26 def set!(tenant, exclusive: false) Meta.with_schema(tenant.schema_name, exclusive: exclusive) set_current(tenant) tenant.run_callbacks :set_tenant tenant end
use(tenant, exclusive: false) { |current| ... }
click to toggle source
# File lib/cell/context.rb, line 33 def use(tenant, exclusive: false) fail ArgumentError, "block required" unless block_given? saved_tenant = current if tenant Meta.with_schema(tenant.schema_name, exclusive: exclusive) do set_current(tenant) tenant.run_callbacks :use_tenant do yield Model.current end end else Meta.with_global_schema do set_current(nil) yield nil end end tenant ensure set_current(saved_tenant) end
Private Instance Methods
set_current(tenant)
click to toggle source
# File lib/cell/context.rb, line 57 def set_current(tenant) unless tenant.nil? || tenant.is_a?(Model) fail ArgumentError, "Invalid tenant: #{tenant.inspect}" end Thread.current[THREAD_KEY] = tenant end