diff --git a/HISTORY.md b/HISTORY.md index 162403fc..c6e1398f 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,14 @@ +# 2.2.1 + * June 19, 2019 + +## Added + - #566: IGNORE_EMPTY_TENANTS environment variable to ignore empty tenants + warning. [Pysis868] + +## Fixed + - #586: Ignore `CREATE SCHEMA public` statement in pg dump [artemave] + - #549: Fix Postgres schema creation with dump SQL [ancorcruz] + # 2.2.0 * April 14, 2018 diff --git a/README.md b/README.md index 2315e1e1..dae55c36 100644 --- a/README.md +++ b/README.md @@ -541,6 +541,31 @@ end See [apartment-sidekiq](https://github.com/influitive/apartment-sidekiq) or [apartment-activejob](https://github.com/influitive/apartment-activejob). +## Callbacks + +You can execute callbacks when switching between tenants or creating a new one, Apartment provides the following callbacks: + +- before_create +- after_create +- before_switch +- after_switch + +You can register a callback using [ActiveSupport::Callbacks](https://api.rubyonrails.org/classes/ActiveSupport/Callbacks.html) the following way: + +```ruby +require 'apartment/adapters/abstract_adapter' + +module Apartment + module Adapters + class AbstractAdapter + set_callback :switch, :before do |object| + ... + end + end + end +end +``` + ## Contributing * In both `spec/dummy/config` and `spec/config`, you will see `database.yml.sample` files diff --git a/lib/apartment/adapters/abstract_adapter.rb b/lib/apartment/adapters/abstract_adapter.rb index 00306e39..78b844b9 100644 --- a/lib/apartment/adapters/abstract_adapter.rb +++ b/lib/apartment/adapters/abstract_adapter.rb @@ -120,6 +120,25 @@ def seed_data end alias_method :seed, :seed_data + # Prepend the environment if configured and the environment isn't already there + # + # @param {String} tenant Database name + # @return {String} tenant name with Rails environment *optionally* prepended + # + def environmentify(tenant) + unless tenant.include?(Rails.env) + if Apartment.prepend_environment + "#{Rails.env}_#{tenant}" + elsif Apartment.append_environment + "#{tenant}_#{Rails.env}" + else + tenant + end + else + tenant + end + end + protected def process_excluded_model(excluded_model) @@ -163,25 +182,6 @@ def connect_to_new(tenant) raise_connect_error!(tenant, exception) end - # Prepend the environment if configured and the environment isn't already there - # - # @param {String} tenant Database name - # @return {String} tenant name with Rails environment *optionally* prepended - # - def environmentify(tenant) - unless tenant.include?(Rails.env) - if Apartment.prepend_environment - "#{Rails.env}_#{tenant}" - elsif Apartment.append_environment - "#{tenant}_#{Rails.env}" - else - tenant - end - else - tenant - end - end - # Import the database schema # def import_database_schema diff --git a/lib/apartment/adapters/postgresql_adapter.rb b/lib/apartment/adapters/postgresql_adapter.rb index eb9c66f4..adf9da49 100644 --- a/lib/apartment/adapters/postgresql_adapter.rb +++ b/lib/apartment/adapters/postgresql_adapter.rb @@ -114,6 +114,9 @@ class PostgresqlSchemaFromSqlAdapter < PostgresqlSchemaAdapter /SET lock_timeout/i, # new in postgresql 9.3 /SET row_security/i, # new in postgresql 9.5 /SET idle_in_transaction_session_timeout/i, # new in postgresql 9.6 + /CREATE SCHEMA public/i, + /COMMENT ON SCHEMA public/i, + ] def import_database_schema diff --git a/lib/apartment/tenant.rb b/lib/apartment/tenant.rb index 7a4e33ca..acabad31 100644 --- a/lib/apartment/tenant.rb +++ b/lib/apartment/tenant.rb @@ -8,7 +8,7 @@ module Tenant extend self extend Forwardable - def_delegators :adapter, :create, :drop, :switch, :switch!, :current, :each, :reset, :set_callback, :seed, :current_tenant, :default_tenant + def_delegators :adapter, :create, :drop, :switch, :switch!, :current, :each, :reset, :set_callback, :seed, :current_tenant, :default_tenant, :environmentify attr_writer :config diff --git a/lib/apartment/version.rb b/lib/apartment/version.rb index 0b599e94..40b2f751 100644 --- a/lib/apartment/version.rb +++ b/lib/apartment/version.rb @@ -1,3 +1,3 @@ module Apartment - VERSION = "2.2.0" + VERSION = "2.2.1" end diff --git a/lib/tasks/apartment.rake b/lib/tasks/apartment.rake index 2fd94f37..bccd9dd2 100644 --- a/lib/tasks/apartment.rake +++ b/lib/tasks/apartment.rake @@ -130,7 +130,7 @@ apartment_namespace = namespace :apartment do end def warn_if_tenants_empty - if tenants.empty? + if tenants.empty? && ENV['IGNORE_EMPTY_TENANTS'] != "true" puts <<-WARNING [WARNING] - The list of tenants to migrate appears to be empty. This could mean a few things: