Class: ActiveRecord::DatabaseConfigurations::HashConfig

Inherits:
DatabaseConfig
  • Object
show all
Defined in:
lib/active_record/database_configurations/hash_config.rb

Overview

# Active Record Database Hash Config

A ‘HashConfig` object is created for each database configuration entry that is created from a hash.

A hash config:

{ "development" => { "database" => "db_name" } }

Becomes:

#<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10
  @env_name="development", @name="primary", @config={database: "db_name"}>

See ActiveRecord::DatabaseConfigurations for more info.

Direct Known Subclasses

UrlConfig

Instance Attribute Summary collapse

Attributes inherited from DatabaseConfig

#env_name, #name

Instance Method Summary collapse

Methods inherited from DatabaseConfig

#adapter_class, #for_current_env?, #inspect, #new_connection, #validate!

Constructor Details

#initialize(env_name, name, configuration_hash) ⇒ HashConfig

Initialize a new ‘HashConfig` object

#### Parameters

  • ‘env_name` - The Rails environment, i.e. “development”.

  • ‘name` - The db config name. In a standard two-tier database configuration this will default to “primary”. In a multiple database three-tier database configuration this corresponds to the name used in the second tier, for example “primary_readonly”.

  • ‘configuration_hash` - The config hash. This is the hash that contains the database adapter, name, and other important information for database connections.



38
39
40
41
42
# File 'lib/active_record/database_configurations/hash_config.rb', line 38

def initialize(env_name, name, configuration_hash)
  super(env_name, name)
  @configuration_hash = configuration_hash.symbolize_keys.freeze
  validate_configuration!
end

Instance Attribute Details

#configuration_hashObject (readonly)

Returns the value of attribute configuration_hash.



23
24
25
# File 'lib/active_record/database_configurations/hash_config.rb', line 23

def configuration_hash
  @configuration_hash
end

Instance Method Details

#_database=(database) ⇒ Object

:nodoc:



69
70
71
# File 'lib/active_record/database_configurations/hash_config.rb', line 69

def _database=(database) # :nodoc:
  @configuration_hash = configuration_hash.merge(database: database).freeze
end

#adapterObject



130
131
132
# File 'lib/active_record/database_configurations/hash_config.rb', line 130

def adapter
  configuration_hash[:adapter]&.to_s
end

#checkout_timeoutObject



112
113
114
# File 'lib/active_record/database_configurations/hash_config.rb', line 112

def checkout_timeout
  (configuration_hash[:checkout_timeout] || 5).to_f
end

#databaseObject



65
66
67
# File 'lib/active_record/database_configurations/hash_config.rb', line 65

def database
  configuration_hash[:database]
end

#database_tasks?Boolean

:nodoc:

Returns:

  • (Boolean)


190
191
192
# File 'lib/active_record/database_configurations/hash_config.rb', line 190

def database_tasks? # :nodoc:
  !replica? && !!configuration_hash.fetch(:database_tasks, true)
end

#default_schema_cache_path(db_dir = "db") ⇒ Object



140
141
142
143
144
145
146
# File 'lib/active_record/database_configurations/hash_config.rb', line 140

def default_schema_cache_path(db_dir = "db")
  if primary?
    File.join(db_dir, "schema_cache.yml")
  else
    File.join(db_dir, "#{name}_schema_cache.yml")
  end
end

#hostObject



57
58
59
# File 'lib/active_record/database_configurations/hash_config.rb', line 57

def host
  configuration_hash[:host]
end

#idle_timeoutObject



120
121
122
123
# File 'lib/active_record/database_configurations/hash_config.rb', line 120

def idle_timeout
  timeout = configuration_hash.fetch(:idle_timeout, 300).to_f
  timeout if timeout > 0
end

#keepaliveObject



125
126
127
128
# File 'lib/active_record/database_configurations/hash_config.rb', line 125

def keepalive
  keepalive = (configuration_hash[:keepalive] || 600).to_f
  keepalive if keepalive > 0
end

#lazy_schema_cache_pathObject



148
149
150
# File 'lib/active_record/database_configurations/hash_config.rb', line 148

def lazy_schema_cache_path
  schema_cache_path || default_schema_cache_path
end

#max_ageObject



95
96
97
98
99
100
101
102
# File 'lib/active_record/database_configurations/hash_config.rb', line 95

def max_age
  v = configuration_hash[:max_age]&.to_i
  if v && v > 0
    v
  else
    Float::INFINITY
  end
end

#max_connectionsObject Also known as: pool



73
74
75
76
77
78
# File 'lib/active_record/database_configurations/hash_config.rb', line 73

def max_connections
  max_connections = configuration_hash.fetch(:max_connections) {
    configuration_hash.fetch(:pool, 5)
  }&.to_i
  max_connections if max_connections && max_connections >= 0
end

#max_queueObject



108
109
110
# File 'lib/active_record/database_configurations/hash_config.rb', line 108

def max_queue
  max_threads * 4
end

#max_threadsObject



91
92
93
# File 'lib/active_record/database_configurations/hash_config.rb', line 91

def max_threads
  (configuration_hash[:max_threads] || (max_connections || 5).clamp(0, 5)).to_i
end

#migrations_pathsObject

The migrations paths for a database configuration. If the ‘migrations_paths` key is present in the config, `migrations_paths` will return its value.



53
54
55
# File 'lib/active_record/database_configurations/hash_config.rb', line 53

def migrations_paths
  configuration_hash[:migrations_paths]
end

#min_connectionsObject



80
81
82
# File 'lib/active_record/database_configurations/hash_config.rb', line 80

def min_connections
  (configuration_hash[:min_connections] || 0).to_i
end

#min_threadsObject



87
88
89
# File 'lib/active_record/database_configurations/hash_config.rb', line 87

def min_threads
  (configuration_hash[:min_threads] || 0).to_i
end

#primary?Boolean

:nodoc:

Returns:

  • (Boolean)


152
153
154
# File 'lib/active_record/database_configurations/hash_config.rb', line 152

def primary? # :nodoc:
  Base.configurations.primary?(name)
end

#query_cacheObject



104
105
106
# File 'lib/active_record/database_configurations/hash_config.rb', line 104

def query_cache
  configuration_hash[:query_cache]
end

#reaping_frequencyObject

:nodoc:



116
117
118
# File 'lib/active_record/database_configurations/hash_config.rb', line 116

def reaping_frequency # :nodoc:
  configuration_hash.fetch(:reaping_frequency, default_reaping_frequency)&.to_f
end

#replica?Boolean

Determines whether a database configuration is for a replica / readonly connection. If the ‘replica` key is present in the config, `replica?` will return `true`.

Returns:

  • (Boolean)


47
48
49
# File 'lib/active_record/database_configurations/hash_config.rb', line 47

def replica?
  configuration_hash[:replica]
end

#schema_cache_pathObject

The path to the schema cache dump file for a database. If omitted, the filename will be read from ENV or a default will be derived.



136
137
138
# File 'lib/active_record/database_configurations/hash_config.rb', line 136

def schema_cache_path
  configuration_hash[:schema_cache_path]
end

#schema_dump(format = schema_format) ⇒ Object

Determines whether to dump the schema/structure files and the filename that should be used.

If ‘configuration_hash` is set to `false` or `nil` the schema will not be dumped.

If the config option is set that will be used. Otherwise Rails will generate the filename from the database config name.



172
173
174
175
176
177
178
179
180
181
182
# File 'lib/active_record/database_configurations/hash_config.rb', line 172

def schema_dump(format = schema_format)
  if configuration_hash.key?(:schema_dump)
    if config = configuration_hash[:schema_dump]
      config
    end
  elsif primary?
    schema_file_type(format)
  else
    "#{name}_#{schema_file_type(format)}"
  end
end

#schema_formatObject

:nodoc:



184
185
186
187
188
# File 'lib/active_record/database_configurations/hash_config.rb', line 184

def schema_format # :nodoc:
  format = configuration_hash.fetch(:schema_format, ActiveRecord.schema_format).to_sym
  raise "Invalid schema format" unless [:ruby, :sql].include?(format)
  format
end

#seeds?Boolean

Determines whether the db:prepare task should seed the database from db/seeds.rb.

If the ‘seeds` key is present in the config, `seeds?` will return its value. Otherwise, it will return `true` for the primary database and `false` for all other configs.

Returns:

  • (Boolean)


160
161
162
# File 'lib/active_record/database_configurations/hash_config.rb', line 160

def seeds?
  configuration_hash.fetch(:seeds, primary?)
end

#socketObject

:nodoc:



61
62
63
# File 'lib/active_record/database_configurations/hash_config.rb', line 61

def socket # :nodoc:
  configuration_hash[:socket]
end

#use_metadata_table?Boolean

:nodoc:

Returns:

  • (Boolean)


194
195
196
# File 'lib/active_record/database_configurations/hash_config.rb', line 194

def  # :nodoc:
  configuration_hash.fetch(:use_metadata_table, true)
end