Class: SiteSettings::DefaultsProvider

Inherits:
Object
  • Object
show all
Defined in:
lib/site_settings/defaults_provider.rb

Overview

A cache for providing default value based on site locale

Constant Summary collapse

DEFAULT_LOCALE =
"en"

Instance Method Summary collapse

Constructor Details

#initialize(site_setting) ⇒ DefaultsProvider

Returns a new instance of DefaultsProvider.



10
11
12
13
14
# File 'lib/site_settings/defaults_provider.rb', line 10

def initialize(site_setting)
  @site_setting = site_setting
  @defaults = {}
  @defaults[DEFAULT_LOCALE.to_sym] = {}
end

Instance Method Details

#all(locale = nil) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/site_settings/defaults_provider.rb', line 33

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

#db_allObject



29
30
31
# File 'lib/site_settings/defaults_provider.rb', line 29

def db_all
  @site_setting.provider.all
end

#get(name, locale = DEFAULT_LOCALE) ⇒ Object Also known as: []



44
45
46
# File 'lib/site_settings/defaults_provider.rb', line 44

def get(name, locale = DEFAULT_LOCALE)
  all(locale)[name.to_sym]
end

#has_setting?(name) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/site_settings/defaults_provider.rb', line 65

def has_setting?(name)
  has_key?(name.to_sym) || has_key?("#{name.to_s}?".to_sym) || name.to_sym == :default_locale
end

#load_setting(name_arg, value, locale_defaults) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/site_settings/defaults_provider.rb', line 16

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

#set_regardless_of_locale(name, value) ⇒ Object

Used to override site settings in dev/test env



50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/site_settings/defaults_provider.rb', line 50

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