Module: Databases::Utilities
- Included in:
- Sequel::Postgres::Bootstrap
- Defined in:
- lib/story_teller/database.rb
Overview
The Utilities module
Defined Under Namespace
Classes: DatabaseConfig
Constant Summary collapse
- DefaultSchema =
if JavaPattern.match?(RUBY_PLATFORM) 'jdbc:postgresql' else 'postgresql' end.freeze
- DatabaseURITemplate =
'%<schema>s://%<host>s%<port>s/%<database_name>s'.freeze
- PortTemplate =
':%<port>s'.freeze
- URITemplate =
'%<uri>s?%<query_string>s'.freeze
- EmptyString =
''.freeze
Instance Method Summary collapse
-
#connection_config ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/CyclomaticComplexity.
-
#create_user(username = database) ⇒ Object
rubocop: disable Metrics/MethodLength.
-
#database_url(overrides = {}, exclude: []) ⇒ Object
Build a JDBC URL string from config + overrides.
-
#delete_user(username = database) ⇒ Object
rubocop: disable Metrics/MethodLength.
- #switch_database(database_name = database) ⇒ Object
- #switch_user(username = database, database_name = nil) ⇒ Object
Instance Method Details
#connection_config ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/CyclomaticComplexity
371 372 373 374 375 376 377 378 379 380 381 382 383 |
# File 'lib/story_teller/database.rb', line 371 def connection_config opts = Sequel::Model.db.opts DatabaseConfig.new( schema: opts[:adapter] && opts[:adapter].to_s || DEFAULT_SCHEMA, host: opts[:host] || "localhost", port: opts[:port], database: opts[:database] || database, user: opts[:user] || database, password: opts[:password] || opts[:user] || database, logger_level: "OFF" ).to_h end |
#create_user(username = database) ⇒ Object
rubocop: disable Metrics/MethodLength
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 |
# File 'lib/story_teller/database.rb', line 388 def create_user(username = database) return false if user_exist?(username) begin log.debug "Creating user: #{username}" run "create user #{username}" run "alter role #{username} with password '#{username}'" return true rescue Sequel::DatabaseError => e log.error e.inspect return false rescue StandardError => e log.error e.inspect return false end end |
#database_url(overrides = {}, exclude: []) ⇒ Object
Build a JDBC URL string from config + overrides.
overrides: hash of config keys (schema, host, port, database, user, password, logger_level) exclude: array of query param keys as external names, e.g. [:loggerLevel] rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 |
# File 'lib/story_teller/database.rb', line 346 def database_url(overrides = {}, exclude: []) config = connection_config.merge(overrides) base_url = format( DatabaseURITemplate, schema: config[:schema] || DefaultSchema, host: config[:host], port: config[:port] ? format(PortTemplate, port: config[:port]) : EmptyString, database_name: config[:database] ) query = {} query[:user] = config[:user] query[:password] = config[:password] query[:loggerLevel] = config[:loggerLevel] query.reject! { |k, v| v.nil? || exclude.include?(k) } return base_url if query.empty? query_string = URI.encode_www_form(query.transform_keys(&:to_s)) format(URITemplate, uri: base_url, query_string: query_string) end |
#delete_user(username = database) ⇒ Object
rubocop: disable Metrics/MethodLength
406 407 408 409 410 411 412 413 414 415 416 417 418 419 |
# File 'lib/story_teller/database.rb', line 406 def delete_user(username = database) return false unless user_exist?(username) begin log.debug "Dropping user: #{username}" run "reassign owned by #{username} to postgres" run "drop user #{username}" rescue Sequel::DatabaseError => e log.error e.inspect return false rescue StandardError => e log.error e.inspect return false end end |
#switch_database(database_name = database) ⇒ Object
329 330 331 332 |
# File 'lib/story_teller/database.rb', line 329 def switch_database(database_name = database) reconnect_database(database_url({database_name: database_name})) true end |
#switch_user(username = database, database_name = nil) ⇒ Object
334 335 336 337 338 |
# File 'lib/story_teller/database.rb', line 334 def switch_user(username = database, database_name = nil) url = database_url({username: username, database_name: database_name}) reconnect_database(url) true end |