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
# 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
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:



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

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

#adapterObject



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

def adapter
  configuration_hash[:adapter]&.to_s
end

#checkout_timeoutObject



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

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

#databaseObject



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

def database
  configuration_hash[:database]
end

#database_tasks?Boolean

:nodoc:

Returns:

  • (Boolean)


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

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

#default_schema_cache_path(db_dir = "db") ⇒ Object



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

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



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

def host
  configuration_hash[:host]
end

#idle_timeoutObject



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

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

#lazy_schema_cache_pathObject



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

def lazy_schema_cache_path
  schema_cache_path || default_schema_cache_path
end

#max_queueObject



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

def max_queue
  max_threads * 4
end

#max_threadsObject



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

def max_threads
  (configuration_hash[:max_threads] || pool).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.



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

def migrations_paths
  configuration_hash[:migrations_paths]
end

#min_threadsObject



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

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

#poolObject



72
73
74
# File 'lib/active_record/database_configurations/hash_config.rb', line 72

def pool
  (configuration_hash[:pool] || 5).to_i
end

#primary?Boolean

:nodoc:

Returns:

  • (Boolean)


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

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

#query_cacheObject



84
85
86
# File 'lib/active_record/database_configurations/hash_config.rb', line 84

def query_cache
  configuration_hash[:query_cache]
end

#reaping_frequencyObject

‘reaping_frequency` is configurable mostly for historical reasons, but it could also be useful if someone wants a very low `idle_timeout`.



98
99
100
# File 'lib/active_record/database_configurations/hash_config.rb', line 98

def reaping_frequency
  configuration_hash.fetch(:reaping_frequency, 60)&.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)


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

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.



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

def schema_cache_path
  configuration_hash[:schema_cache_path]
end

#schema_dump(format = ActiveRecord.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.



149
150
151
152
153
154
155
156
157
158
159
# File 'lib/active_record/database_configurations/hash_config.rb', line 149

def schema_dump(format = ActiveRecord.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

#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)


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

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

#socketObject

:nodoc:



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

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

#use_metadata_table?Boolean

:nodoc:

Returns:

  • (Boolean)


165
166
167
# File 'lib/active_record/database_configurations/hash_config.rb', line 165

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