Sha256: 26852d8f215c9f9e9e301681e1aa660a083b6ec822b87fbda452e466c55eb9f0

Contents?: true

Size: 1.44 KB

Versions: 3

Compression:

Stored size: 1.44 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 master Octopus shard, just updates the schema name
      # with the tenant name
      # @param block [Block] The code to execute within the schema
      # @yield [SchemaTenant] The current tenant instance
      # @return [void]
      def call(&block)
        Octopus.using(:master) do
          super
        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

3 entries across 3 versions & 1 rubygems

Version Path
penthouse-0.4.2 lib/penthouse/tenants/octopus_schema_tenant.rb
penthouse-0.4.1 lib/penthouse/tenants/octopus_schema_tenant.rb
penthouse-0.4.0 lib/penthouse/tenants/octopus_schema_tenant.rb