Sha256: f0e45dbc831fc5ceec81176ac098ec2bfa28e28acd67e47afc8a8a9c8d999356

Contents?: true

Size: 1.08 KB

Versions: 5

Compression:

Stored size: 1.08 KB

Contents

require 'rack/request'
require 'apartment/database'

module Apartment
  module Elevators
    #   Provides a rack based tenant switching solution based on request
    #
    class Generic

      def initialize(app, processor = nil)
        @app = app
        @processor = processor || parse_method
      end

      def call(env)
        request = Rack::Request.new(env)

        database = @processor.call(request)

        Apartment::Database.switch database if database

        @app.call(env)
      end

      def parse_database_name(request)
        deprecation_warning
        parse_tenant_name(request)
      end

      def parse_tenant_name(request)
        raise "Override"
      end

      def parse_method
        if self.class.instance_methods(false).include? :parse_database_name
          deprecation_warning
          method(:parse_database_name)
        else
          method(:parse_tenant_name)
        end
      end

      def deprecation_warning
        warn "[DEPRECATED::Apartment] Use #parse_tenant_name instead of #parse_database_name -> #{self.class.name}"
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
apartment-0.24.3 lib/apartment/elevators/generic.rb
apartment-0.24.2 lib/apartment/elevators/generic.rb
apartment-0.24.1 lib/apartment/elevators/generic.rb
apartment-0.24.0 lib/apartment/elevators/generic.rb
apartment-0.23.2 lib/apartment/elevators/generic.rb