Sha256: 84dd3670404a80ca7e1515388018af481d4d4089e9451153f1ed2965f0a1fbe6

Contents?: true

Size: 1.56 KB

Versions: 5

Compression:

Stored size: 1.56 KB

Contents

#
# The OctopusSchemaTenant class relies upon Octopus [1], it uses the master
# database and simply switches the schema search path to allow for isolated
# data, but low overheads in terms of costs. Note: this means tenants will be
# sharing a single Postgres instance and therefore performance is shared.
#
# [1]: (https://github.com/thiagopradi/octopus)
#

require_relative './schema_tenant'
require 'octopus'

module Penthouse
  module Tenants
    class OctopusSchemaTenant < SchemaTenant

      # ensures we're on the correct Octopus shard, then just updates the schema
      # name with the tenant name
      # @param shard [String, Symbol] The shard to execute within, usually master
      # @param block [Block] The code to execute within the schema
      # @yield [SchemaTenant] The current tenant instance
      # @return [void]
      def call(shard: Octopus.master_shard, &block)
        Octopus.using(shard) do
          super(&block)
        end
      end

      # creates the tenant schema within the master shard
      # @see Penthouse::Tenants::SchemaTenant#create
      # @return [void]
      def create(*)
        call { super }
      end

      # drops the tenant schema within the master shard
      # @see Penthouse::Tenants::SchemaTenant#delete
      # @return [void]
      def delete(*)
        call { super }
      end

      # returns whether or not the schema exists
      # @see Penthouse::Tenants::SchemaTenant#exists?
      # @return [Boolean] whether or not the schema exists in the master shard
      def exists?(*)
        call { super }
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
penthouse-0.11.0 lib/penthouse/tenants/octopus_schema_tenant.rb
penthouse-0.10.1 lib/penthouse/tenants/octopus_schema_tenant.rb
penthouse-0.10.0 lib/penthouse/tenants/octopus_schema_tenant.rb
penthouse-0.9.0 lib/penthouse/tenants/octopus_schema_tenant.rb
penthouse-0.8.0 lib/penthouse/tenants/octopus_schema_tenant.rb