discourse/lib/site_settings/defaults_provider.rb
Jarek Radosz 694b5f108b
DEV: Fix various rubocop lints (#24749)
These (21 + 3 from previous PRs) are soon to be enabled in rubocop-discourse:

Capybara/VisibilityMatcher
Lint/DeprecatedOpenSSLConstant
Lint/DisjunctiveAssignmentInConstructor
Lint/EmptyConditionalBody
Lint/EmptyEnsure
Lint/LiteralInInterpolation
Lint/NonLocalExitFromIterator
Lint/ParenthesesAsGroupedExpression
Lint/RedundantCopDisableDirective
Lint/RedundantRequireStatement
Lint/RedundantSafeNavigation
Lint/RedundantStringCoercion
Lint/RedundantWithIndex
Lint/RedundantWithObject
Lint/SafeNavigationChain
Lint/SafeNavigationConsistency
Lint/SelfAssignment
Lint/UnreachableCode
Lint/UselessMethodDefinition
Lint/Void

Previous PRs:
Lint/ShadowedArgument
Lint/DuplicateMethods
Lint/BooleanSymbol
RSpec/SpecFilePathSuffix
2023-12-06 23:25:00 +01:00

79 lines
2.0 KiB
Ruby

# frozen_string_literal: true
module SiteSettings
end
# A cache for providing default value based on site locale
class SiteSettings::DefaultsProvider
DEFAULT_LOCALE = "en"
def initialize(site_setting)
@site_setting = site_setting
@defaults = {}
@defaults[DEFAULT_LOCALE.to_sym] = {}
end
def load_setting(name_arg, value, locale_defaults)
name = name_arg.to_sym
@defaults[DEFAULT_LOCALE.to_sym][name] = value
if (locale_defaults)
locale_defaults.each do |locale, v|
locale = locale.to_sym
@defaults[locale] ||= {}
@defaults[locale][name] = v
end
end
end
def db_all
@site_setting.provider.all
end
def all(locale = nil)
result =
if locale
@defaults[DEFAULT_LOCALE.to_sym].merge(@defaults[locale.to_sym] || {})
else
@defaults[DEFAULT_LOCALE.to_sym].dup
end
DiscoursePluginRegistry.apply_modifier(:site_setting_defaults, result)
end
def get(name, locale = DEFAULT_LOCALE)
all(locale)[name.to_sym]
end
alias [] get
# Used to override site settings in dev/test env
def set_regardless_of_locale(name, value)
name = name.to_sym
if name == :default_locale || @site_setting.has_setting?(name)
@defaults.each { |_, hash| hash.delete(name) }
@defaults[DEFAULT_LOCALE.to_sym][name] = value
value, type = @site_setting.type_supervisor.to_db_value(name, value)
@defaults[SiteSetting.default_locale.to_sym] ||= {}
@defaults[SiteSetting.default_locale.to_sym][
name
] = @site_setting.type_supervisor.to_rb_value(name, value, type)
else
raise ArgumentError.new("No setting named '#{name}' exists")
end
end
def has_setting?(name)
has_key?(name.to_sym) || has_key?("#{name}?".to_sym) || name.to_sym == :default_locale
end
private
def has_key?(name)
@defaults[DEFAULT_LOCALE.to_sym].key?(name)
end
def current_db
RailsMultisite::ConnectionManagement.current_db
end
end