Class: ActiveRecord::DatabaseConfigurations
- Inherits:
-
Object
- Object
- ActiveRecord::DatabaseConfigurations
- Defined in:
- lib/active_record/database_configurations.rb,
lib/active_record/database_configurations/url_config.rb,
lib/active_record/database_configurations/hash_config.rb,
lib/active_record/database_configurations/database_config.rb
Overview
ActiveRecord::DatabaseConfigurations returns an array of DatabaseConfig objects (either a HashConfig or UrlConfig) that are constructed from the application’s database configuration hash or URL string.
Defined Under Namespace
Classes: DatabaseConfig, HashConfig, InvalidConfigurationError, UrlConfig
Instance Attribute Summary collapse
-
#configurations ⇒ Object
readonly
Returns the value of attribute configurations.
Instance Method Summary collapse
-
#configs_for(env_name: nil, spec_name: nil, include_replicas: false) ⇒ Object
Collects the configs for the environment and optionally the specification name passed in.
-
#default_hash(env = ActiveRecord::ConnectionHandling::DEFAULT_ENV.call.to_s) ⇒ Object
(also: #[])
Returns the config hash that corresponds with the environment.
- #each ⇒ Object
-
#empty? ⇒ Boolean
(also: #blank?)
Checks if the application’s configurations are empty.
-
#find_db_config(env) ⇒ Object
Returns a single DatabaseConfig object based on the requested environment.
- #first ⇒ Object
-
#initialize(configurations = {}) ⇒ DatabaseConfigurations
constructor
A new instance of DatabaseConfigurations.
-
#to_h ⇒ Object
Returns the DatabaseConfigurations object as a Hash.
Constructor Details
#initialize(configurations = {}) ⇒ DatabaseConfigurations
Returns a new instance of DatabaseConfigurations.
17 18 19 |
# File 'lib/active_record/database_configurations.rb', line 17 def initialize(configurations = {}) @configurations = build_configs(configurations) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &blk) ⇒ Object (private)
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/active_record/database_configurations.rb', line 201 def method_missing(method, *args, &blk) case method when :fetch throw_getter_deprecation(method) configs_for(env_name: args.first) when :values throw_getter_deprecation(method) configurations.map(&:config) when :[]= throw_setter_deprecation(method) env_name = args[0] config = args[1] remaining_configs = configurations.reject { |db_config| db_config.env_name == env_name } new_config = build_configs(env_name => config) new_configs = remaining_configs + new_config ActiveRecord::Base.configurations = new_configs else raise NotImplementedError, "`ActiveRecord::Base.configurations` in Rails 6 now returns an object instead of a hash. The `#{method}` method is not supported. Please use `configs_for` or consult the documentation for supported methods." end end |
Instance Attribute Details
#configurations ⇒ Object (readonly)
Returns the value of attribute configurations.
14 15 16 |
# File 'lib/active_record/database_configurations.rb', line 14 def configurations @configurations end |
Instance Method Details
#configs_for(env_name: nil, spec_name: nil, include_replicas: false) ⇒ Object
Collects the configs for the environment and optionally the specification name passed in. To include replica configurations pass include_replicas: true
.
If a spec name is provided a single DatabaseConfig object will be returned, otherwise an array of DatabaseConfig objects will be returned that corresponds with the environment and type requested.
Options
-
env_name:
The environment name. Defaults tonil
which will collect configs for all environments. -
spec_name:
The specification name (i.e. primary, animals, etc.). Defaults tonil
. -
include_replicas:
Determines whether to include replicas in the returned list. Most of the time we’re only iterating over the write connection (i.e. migrations don’t need to run for the write and read connection). Defaults tofalse
.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/active_record/database_configurations.rb', line 38 def configs_for(env_name: nil, spec_name: nil, include_replicas: false) configs = env_with_configs(env_name) unless include_replicas configs = configs.select do |db_config| !db_config.replica? end end if spec_name configs.find do |db_config| db_config.spec_name == spec_name end else configs end end |
#default_hash(env = ActiveRecord::ConnectionHandling::DEFAULT_ENV.call.to_s) ⇒ Object Also known as: []
Returns the config hash that corresponds with the environment
If the application has multiple databases default_hash
will return the first config hash for the environment.
{ database: "my_db", adapter: "mysql2" }
62 63 64 65 |
# File 'lib/active_record/database_configurations.rb', line 62 def default_hash(env = ActiveRecord::ConnectionHandling::DEFAULT_ENV.call.to_s) default = find_db_config(env) default.config if default end |
#each ⇒ Object
96 97 98 99 100 101 |
# File 'lib/active_record/database_configurations.rb', line 96 def each throw_getter_deprecation(:each) configurations.each { |config| yield [config.env_name, config.config] } end |
#empty? ⇒ Boolean Also known as: blank?
Checks if the application’s configurations are empty.
Aliased to blank?
91 92 93 |
# File 'lib/active_record/database_configurations.rb', line 91 def empty? configurations.empty? end |
#find_db_config(env) ⇒ Object
Returns a single DatabaseConfig object based on the requested environment.
If the application has multiple databases find_db_config
will return the first DatabaseConfig for the environment.
72 73 74 75 76 77 |
# File 'lib/active_record/database_configurations.rb', line 72 def find_db_config(env) configurations.find do |db_config| db_config.env_name == env.to_s || (db_config.for_current_env? && db_config.spec_name == env.to_s) end end |
#first ⇒ Object
103 104 105 106 107 |
# File 'lib/active_record/database_configurations.rb', line 103 def first throw_getter_deprecation(:first) config = configurations.first [config.env_name, config.config] end |
#to_h ⇒ Object
Returns the DatabaseConfigurations object as a Hash.
80 81 82 83 84 85 86 |
# File 'lib/active_record/database_configurations.rb', line 80 def to_h configs = configurations.reverse.inject({}) do |memo, db_config| memo.merge(db_config.to_legacy_hash) end Hash[configs.to_a.reverse] end |