Module: RubyCms::Settings

Defined in:
lib/ruby_cms/settings.rb

Constant Summary collapse

IMPORT_SENTINEL_KEY =
"__internal_initializer_import_v1"

Class Method Summary collapse

Class Method Details

.allObject



36
37
38
39
40
# File 'lib/ruby_cms/settings.rb', line 36

def all
  return {} unless preference_table_available?

  RubyCms::Preference.all_as_hash
end

.ensure_defaults!Object



31
32
33
34
# File 'lib/ruby_cms/settings.rb', line 31

def ensure_defaults!
  RubyCms::SettingsRegistry.seed_defaults!
  RubyCms::Preference.ensure_defaults!
end

.get(key, default: nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/ruby_cms/settings.rb', line 10

def get(key, default: nil)
  k = key.to_s
  pref = fetch_preference(k)
  return pref.typed_value if pref

  entry = RubyCms::SettingsRegistry.fetch(k)
  return entry.default unless entry.nil?

  default
end

.import_initializer_values!(force: false) ⇒ Object

Imports initializer values for any key that exists in SettingsRegistry and is explicitly set on config.ruby_cms.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/ruby_cms/settings.rb', line 44

def import_initializer_values!(force: false)
  return skipped_result("preferences table unavailable") unless preference_table_available?

  ensure_defaults!

  return skipped_result("already imported") if imported_from_initializer? && !force

  config = ruby_cms_config
  return skipped_result("ruby_cms config unavailable") if config.nil?

  imported_keys = []

  RubyCms::SettingsRegistry.each do |entry|
    key = entry.key.to_sym
    next unless config.respond_to?(key)

    value = config.public_send(key)
    next if value.nil?

    set(key, value)
    imported_keys << entry.key
  end

  mark_imported!(imported_keys)

  {
    skipped: false,
    imported_count: imported_keys.size,
    imported_keys: imported_keys
  }
rescue StandardError => e
  skipped_result(e.message)
end

.imported_from_initializer?Boolean

Returns:



78
79
80
81
82
83
84
# File 'lib/ruby_cms/settings.rb', line 78

def imported_from_initializer?
  return false unless preference_table_available?

  RubyCms::Preference.exists?(key: IMPORT_SENTINEL_KEY)
rescue StandardError
  false
end

.set(key, value) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/ruby_cms/settings.rb', line 21

def set(key, value)
  raise "Settings table not available yet" unless preference_table_available?

  k = key.to_s
  entry = RubyCms::SettingsRegistry.fetch(k)
  coerced = coerce_by_entry(value, entry)

  RubyCms::Preference.set(k, coerced)
end