Module: PgRls
- Extended by:
- Forwardable
- Defined in:
- lib/pg_rls.rb,
lib/pg_rls/tenant.rb,
lib/pg_rls/railtie.rb,
lib/pg_rls/version.rb,
lib/generators/pg_rls.rb,
lib/pg_rls/middleware.rb,
lib/pg_rls/solo/tenant.rb,
lib/pg_rls/multi_tenancy.rb,
lib/generators/pg_rls/base.rb,
lib/pg_rls/database/prepared.rb,
lib/pg_rls/schema/statements.rb,
lib/pg_rls/secure_connection.rb,
lib/pg_rls/middleware/sidekiq.rb,
lib/pg_rls/schema/up_statements.rb,
lib/pg_rls/schema/down_statements.rb,
lib/pg_rls/schema/solo/statements.rb,
lib/pg_rls/errors/tenant_not_found.rb,
lib/pg_rls/middleware/sidekiq/client.rb,
lib/pg_rls/middleware/sidekiq/server.rb,
lib/pg_rls/schema/solo/up_statements.rb,
lib/generators/pg_rls/pg_rls_generator.rb,
lib/generators/pg_rls/install_generator.rb,
lib/pg_rls/middleware/set_reset_connection.rb,
lib/pg_rls/middleware/set_reset_connection.rb,
lib/generators/pg_rls/active_record/active_record_generator.rb
Overview
Defined Under Namespace
Modules: Base, Database, Errors, Generators, Middleware, MultiTenancy, Schema, SecureConnection, Solo, Tenant
Classes: Error, FrozenConfiguration, Railtie
Constant Summary
collapse
- SECURE_USERNAME =
'app_user'
- WRITER_METHODS =
%i[table_name class_name search_methods establish_default_connection].freeze
- READER_METHODS =
%i[
connection_class database_configuration execute table_name class_name search_methods establish_default_connection
].freeze
- DELEGATORS_METHODS =
%i[
connection_class database_configuration execute table_name search_methods
class_name all_tenants main_model establish_default_connection
].freeze
- VERSION =
'0.0.2.6.12'
- @@as_db_admin =
false
- @@table_name =
'companies'
- @@class_name =
'Company'
- @@username =
'app_user'
- @@password =
'password'
- @@solo_mode =
false
- @@test_inline_tenant =
false
- @@search_methods =
%i[subdomain id tenant_id]
Class Method Summary
collapse
Class Method Details
.admin_execute(query = nil) ⇒ Object
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/pg_rls.rb', line 62
def admin_execute(query = nil)
self.as_db_admin = true
establish_new_connection
return yield if block_given?
execute(query)
ensure
self.as_db_admin = false
establish_new_connection
end
|
.all_tenants ⇒ Object
86
87
88
89
90
91
92
93
|
# File 'lib/pg_rls.rb', line 86
def all_tenants
main_model.all.each do |tenant|
allowed_search_fields = search_methods.map(&:to_s).intersection(main_model.column_names)
Tenant.switch tenant.send(allowed_search_fields.first)
yield(tenant) if block_given?
end
end
|
.connection_class ⇒ Object
52
53
54
|
# File 'lib/pg_rls.rb', line 52
def connection_class
@connection_class ||= ActiveRecord::Base
end
|
.current_connection_username ⇒ Object
95
96
97
|
# File 'lib/pg_rls.rb', line 95
def current_connection_username
connection_class.connection_db_config.configuration_hash[:username]
end
|
.database_admin_configuration ⇒ Object
109
110
111
112
113
114
115
|
# File 'lib/pg_rls.rb', line 109
def database_admin_configuration
environment_db_configuration = database_connection_file[Rails.env]
return environment_db_configuration if environment_db_configuration['username'].present?
environment_db_configuration.first.last
end
|
.database_configuration ⇒ Object
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/pg_rls.rb', line 117
def database_configuration
return database_admin_configuration if default_connection?
current_configuration = database_default_configuration.deep_dup
current_configuration.tap do |config|
config[:username] = PgRls.username
config[:password] = PgRls.password
end
current_configuration.freeze
end
|
.database_connection_file ⇒ Object
46
47
48
49
50
|
# File 'lib/pg_rls.rb', line 46
def database_connection_file
file = File.read(Rails.root.join('config/database.yml'))
YAML.safe_load(ERB.new(file).result, aliases: true)
end
|
.database_default_configuration ⇒ Object
103
104
105
106
107
|
# File 'lib/pg_rls.rb', line 103
def database_default_configuration
connection_class.connection.pool.db_config.configuration_hash
rescue ActiveRecord::NoDatabaseError
connection_class.connection_db_config.configuration_hash
end
|
.default_connection? ⇒ Boolean
78
79
80
|
# File 'lib/pg_rls.rb', line 78
def default_connection?
as_db_admin
end
|
.establish_default_connection=(value) ⇒ Object
73
74
75
76
|
# File 'lib/pg_rls.rb', line 73
def establish_default_connection=(value)
ENV['AS_DB_ADMIN'] = value.to_s
@default_connection = value
end
|
.establish_new_connection ⇒ Object
56
57
58
59
60
|
# File 'lib/pg_rls.rb', line 56
def establish_new_connection
ActiveRecord::Base.connection.disconnect! if ActiveRecord::Base.connection_pool.connected?
connection_class.establish_connection(**database_configuration)
end
|
.execute(query) ⇒ Object
99
100
101
|
# File 'lib/pg_rls.rb', line 99
def execute(query)
ActiveRecord::Migration.execute(query)
end
|
.main_model ⇒ Object
82
83
84
|
# File 'lib/pg_rls.rb', line 82
def main_model
class_name.to_s.camelize.constantize
end
|
.session_key_prefix ⇒ Object
30
31
32
|
# File 'lib/pg_rls/middleware/set_reset_connection.rb', line 30
def self.session_key_prefix
@session_key_prefix ||= @session_key_prefix || @session_store_server[:key_prefix]
end
|
.session_key_prefix=(val) ⇒ Object
34
35
36
37
38
|
# File 'lib/pg_rls/middleware/set_reset_connection.rb', line 34
def self.session_key_prefix=(val)
raise Errors::FrozenConfiguration unless @sessions.nil?
@session_key_prefix = val
end
|
.session_prefix ⇒ Object
10
11
12
13
14
15
16
|
# File 'lib/pg_rls/middleware/set_reset_connection.rb', line 10
def self.session_prefix
@session_prefix ||= begin
store_default_warden_key = @session_store_default_warden_key || '2'
"#{session_key_prefix}:#{store_default_warden_key}::"
end
end
|
.session_store_default_warden_key=(val) ⇒ Object
24
25
26
27
28
|
# File 'lib/pg_rls/middleware/set_reset_connection.rb', line 24
def self.session_store_default_warden_key=(val)
raise Errors::FrozenConfiguration unless @sessions.nil?
@session_store_default_warden_key = val
end
|
.session_store_server=(opts = {}) ⇒ Object
18
19
20
21
22
|
# File 'lib/pg_rls/middleware/set_reset_connection.rb', line 18
def self.session_store_server=(opts = {})
raise Errors::FrozenConfiguration unless @sessions.nil?
@session_store_server = opts.deep_symbolize_keys
end
|
.sessions ⇒ Object
6
7
8
|
# File 'lib/pg_rls/middleware/set_reset_connection.rb', line 6
def self.sessions
@sessions ||= Redis.new(@session_store_server)
end
|
.setup {|_self| ... } ⇒ Object
38
39
40
|
# File 'lib/pg_rls.rb', line 38
def setup
yield self
end
|
.solo_mode? ⇒ Boolean
42
43
44
|
# File 'lib/pg_rls.rb', line 42
def solo_mode?
solo_mode
end
|