Class: PgRls::Tenant::Searchable

Inherits:
Object
  • Object
show all
Defined in:
app/models/pg_rls/tenant/searchable.rb

Overview

Searchable Class

Constant Summary collapse

SEARCH_METHOD_BY_COLUMN_TYPE =
PgRls::Tenant.columns.each_with_object({}) do |column, hash|
  type = column..type
  hash[type] ||= []
  hash[type] << column.name
end

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(search_input) ⇒ Searchable

Returns a new instance of Searchable.



31
32
33
# File 'app/models/pg_rls/tenant/searchable.rb', line 31

def initialize(search_input)
  @search_input = search_input
end

Class Method Details

.by_rls_methods(search_input) ⇒ Object



22
23
24
25
26
27
28
29
# File 'app/models/pg_rls/tenant/searchable.rb', line 22

def self.by_rls_methods(search_input)
  new(search_input).search_methods.each do |search_method|
    tenant = PgRls::Tenant.find_by(search_method => search_input)
    return tenant if tenant.present?
  end

  raise PgRls::Error::TenantNotFound, "No tenant found for #{search_input}"
end

.by_rls_object(tenant) ⇒ Object



13
14
15
16
17
18
19
20
# File 'app/models/pg_rls/tenant/searchable.rb', line 13

def self.by_rls_object(tenant)
  case tenant
  when Tenant then tenant
  when String, Symbol, Integer then Searchable.by_rls_methods(tenant)
  when PgRls.main_model then tenant.becomes(Tenant)
  else raise PgRls::Error::InvalidSearchInput, "Invalid search input: #{tenant}"
  end
end

Instance Method Details

#search_methodsObject



35
36
37
# File 'app/models/pg_rls/tenant/searchable.rb', line 35

def search_methods
  SEARCH_METHOD_BY_COLUMN_TYPE[target_type] || []
end