class Infrastructure::Databases
Attributes
environment[R]
global_defaults[R]
orm[R]
system[R]
Public Class Methods
new(orm, environment)
click to toggle source
# File lib/infrastructure/databases.rb, line 9 def initialize(orm, environment) @orm = orm @environment = environment.to_sym @global_defaults = {} @environment_defaults = {} @system = { id: 'system' } callback :after_configure, -> { merge_defaults } callback :after_assignment, -> (key, value) { merge_defaults } end
Public Instance Methods
available()
click to toggle source
# File lib/infrastructure/databases.rb, line 43 def available connection.execute("SELECT datname FROM pg_database").map { |result| result['datname'] } end
available?(id)
click to toggle source
# File lib/infrastructure/databases.rb, line 39 def available?(id) available.include? database(id) end
connect(id, params = {})
click to toggle source
# File lib/infrastructure/databases.rb, line 99 def connect(id, params = {}) config = config(id) unless params[:fallback] raise ArgumentError, "database configuration for #{id} in environment #{environment} is not configured" if config[:id] != id.to_s end orm.establish_connection config end
connect!(id, params = {})
click to toggle source
# File lib/infrastructure/databases.rb, line 107 def connect!(id, params = {}) begin connect id, params rescue StandardError connect system create id connect id, params end end
connection()
click to toggle source
# File lib/infrastructure/databases.rb, line 47 def connection orm.connection end
create(id)
click to toggle source
# File lib/infrastructure/databases.rb, line 95 def create(id) connection.create_database database(id) end
databases(environment = environment)
click to toggle source
# File lib/infrastructure/databases.rb, line 117 def databases(environment = environment) configs(environment).map { |id, configs| configs[:database] }.compact.uniq.sort end
drop(id)
click to toggle source
# File lib/infrastructure/databases.rb, line 91 def drop(id) connection.drop_database database(id) end
environment_config(id)
click to toggle source
# File lib/infrastructure/databases.rb, line 70 def environment_config(id) if id.is_a?(String) || id.is_a?(Symbol) id = id.to_sym if config = configs.fetch(id) return config.to_h end if id.to_s == defaults[:id] if config = configs.fetch(defaults[:id]) return config.to_h else raise ArgumentError, "default database #{defaults[:id]} in environment #{environment} is not configured" end end return system if id == :system elsif id.is_a? Hash return id end raise ArgumentError, "database configuration for #{id} in environment #{environment} is not configured" end
Also aliased as: config
environment_configs(environment = environment)
click to toggle source
# File lib/infrastructure/databases.rb, line 55 def environment_configs(environment = environment) fetch(environment) || raise(ArgumentError, "database configurations for environment #{environment} are not configured") end
Also aliased as: configs
environment_database(id)
click to toggle source
# File lib/infrastructure/databases.rb, line 60 def environment_database(id) config(id)[:database] end
Also aliased as: database
environment_defaults(environment = environment)
click to toggle source
# File lib/infrastructure/databases.rb, line 65 def environment_defaults(environment = environment) @environment_defaults[environment] ||= Hash.new end
Also aliased as: defaults
merge_defaults()
click to toggle source
# File lib/infrastructure/databases.rb, line 21 def merge_defaults @global_defaults = @global_defaults.merge(configuration.fetch(:defaults) || {}) configuration.delete :defaults @system = @system.merge(configuration.fetch(:system) || {}).merge @global_defaults configuration.delete :system configuration.each do |environment, configs| @environment_defaults[environment] ||= Hash.new @environment_defaults[environment] = @environment_defaults[environment].merge(configs.fetch(:defaults) || {}) configs.delete :defaults configs.each do |id, config| config.assign :database, "#{environment}_#{id}" unless config.fetch :database config.assign :id, id.to_s unless config.fetch(:id) == id.to_s @environment_defaults[environment].each { |k,v| config.assign k, v unless config.fetch k } @global_defaults.each { |k,v| config.assign k, v unless config.fetch k } end end end
tables()
click to toggle source
# File lib/infrastructure/databases.rb, line 51 def tables connection.tables end