cartodb/config/initializers/01_app_config.rb

108 lines
3.7 KiB
Ruby
Raw Normal View History

2020-06-15 10:58:47 +08:00
require_dependency 'carto/configuration'
require_dependency 'carto/deep_freeze'
module Cartodb
def self.get_config(*config_chain)
current = Cartodb.config
config_chain.each { |config_param|
current = current[config_param]
if current.nil?
break
end
}
current if current.present?
end
def self.config
return @config if @config
begin
config_file_hash = Carto::Conf.new.app_config
rescue => e
raise "Missing or inaccessible config/app_config.yml: #{e.message}"
end
@config ||= config_file_hash[Rails.env].try(:to_options!)
Carto.deep_freeze(@config)
if @config.blank?
raise "Can't find App configuration for #{Rails.env} environment on config/app_config.yml"
end
# Check if we have all the important keys on config/app_config.yml
raise "Missing mandatory_keys key on config/app_config.yml" unless @config[:mandatory_keys].present?
unless(@config[:mandatory_keys].map(&:to_sym) - @config.keys).blank?
raise "Missing the following config keys on config/app_config.yml: #{(@config[:mandatory_keys].map(&:to_sym) - @config.keys).join(', ')}"
end
ActionDispatch::Http::URL.tld_length = @config[:session_domain].split('.').delete_if {|i| i.empty? }.length - 1
if !@config[:mailer].nil?
# AuthSMTP
CartoDB::Application.config.action_mailer.delivery_method = :smtp
CartoDB::Application.config.action_mailer.smtp_settings = {
:address => Cartodb.config[:mailer]['address'],
:port => Cartodb.config[:mailer]['port'],
:user_name => Cartodb.config[:mailer]['user_name'],
:password => Cartodb.config[:mailer]['password'],
:authentication => Cartodb.config[:mailer]['authentication'],
:enable_starttls_auto => Cartodb.config[:mailer]['enable_starttls_auto'] }
end
if !@config[:basemaps].present? || @config[:basemaps].count == 0
raise "Missing basemaps configuration, there should be at least one basemap"
end
end
def self.error_codes
return @error_codes if @error_codes
file_hash = YAML.load_file("#{Rails.root}/config/error_codes.yml")
@error_codes ||= file_hash["cartodb_errors"].try(:to_options!)
end
def self.asset_path
return @asset_path if @asset_path
if Cartodb.config[:app_assets]
@asset_path = Cartodb.config[:app_assets]['asset_host']
else
@asset_path = nil
end
end
def self.default_basemap(basemaps = Cartodb.config[:basemaps])
default_group = default_basemap_group(basemaps)
(default_group || basemaps.first)[1].first[1]
end
# Basemap group based on basemap `default` attribute. If it's not set, first basemap group is returned
def self.default_basemap_group(basemaps = Cartodb.config[:basemaps])
default_basemap_group = basemaps.find { |_, group_basemaps| group_basemaps.find { |_, attr| attr['default'] } }
default_basemap_group || basemaps.first
end
# Execute a block with overriden configuration parameters
# (useful for tests)
#
# Example:
#
# Cartodb.with_config http_port: 8080 do
# # here Cartodb.get_config(:http_port) is 80
# end
# # herer Cartodb.get_config(:http_port) has its original value
#
# Note that since inner keys are strings (not symbols), you must
# follow the same conventtion and use:
#
# Cartodb.with_config(ogr2ogr: { 'binary' => 'ogr2ogr' })
#
# and not:
#
# Cartodb.with_config(ogr2ogr: { 'binary': 'ogr2ogr' })
#
def self.with_config(options)
original_config = config
@config = original_config.merge(options)
return_value = yield
@config = original_config
return_value
end
end