Module: SolidusActsAsTenant::TenantAware
- Defined in:
- lib/solidus_acts_as_tenant/tenant_aware.rb
Overview
TenantAware automatically adds multi-tenant support to models by adding tenant scoping and updating uniqueness validations to be tenant-aware.
Class Method Summary collapse
- .remove_existing_validation(base, attribute) ⇒ Object
- .setup_tenant_aware_models ⇒ Object
- .update_uniqueness_validation(base, attribute) ⇒ Object
Class Method Details
.remove_existing_validation(base, attribute) ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/solidus_acts_as_tenant/tenant_aware.rb', line 40 def remove_existing_validation(base, attribute) base._validators[attribute].reject! { _1.kind == :uniqueness } base._validate_callbacks.each do |callback| next unless callback.filter.try(:attributes)&.include?(attribute) && callback.filter.kind == :uniqueness callback.filter.attributes.delete(attribute) end end |
.setup_tenant_aware_models ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/solidus_acts_as_tenant/tenant_aware.rb', line 8 def setup_tenant_aware_models tenant_aware_models = SolidusActsAsTenant.config.tenant_aware_models || [] tenant_aware_models.each do |klass, validator_attributes| Module.new do @validator_attributes = validator_attributes define_singleton_method(:prepended) do |base| = ::SolidusActsAsTenant.config.acts_as_tenant_args base.acts_as_tenant(*[0..-2], **.last) @validator_attributes&.each do |attribute| TenantAware.update_uniqueness_validation(base, attribute) end end klass.constantize.prepend(self) end end end |
.update_uniqueness_validation(base, attribute) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/solidus_acts_as_tenant/tenant_aware.rb', line 28 def update_uniqueness_validation(base, attribute) attribute = attribute.to_sym validator = base._validators[attribute].find { _1.kind == :uniqueness } raise "No uniqueness validator found for #{attribute} on #{base}" unless validator = validator..dup [:scope] = Array([:scope]).push(::SolidusActsAsTenant.config.tenant_column_name) remove_existing_validation(base, attribute) base.validates_uniqueness_of attribute, ** end |