class Ez::Settings::Backend::ActiveRecord

Public Instance Methods

read() click to toggle source
# File lib/ez/settings/backend/active_record.rb, line 8
def read
  return {} unless try_db_connection && check_settings_table

  ActiveRecordStore.all.each_with_object({}) do |settings, hsh|
    hsh[settings.group] ||= {}
    hsh[settings.group][settings.key] = settings.value
  end.deep_symbolize_keys
end
write(data) click to toggle source
# File lib/ez/settings/backend/active_record.rb, line 17
def write(data)
  return unless try_db_connection && check_settings_table

  group = data.keys[0]
  pairs = data.values[0]
  existing_settings = ActiveRecordStore.where(group: group, key: pairs.keys)
  pairs.map do |key, value|
    record(existing_settings, key, value) || ActiveRecordStore.new(group: group, key: key, value: value)
  end.each(&:save!)
end

Private Instance Methods

check_settings_table() click to toggle source
# File lib/ez/settings/backend/active_record.rb, line 45
def check_settings_table
  settings_table = Ez::Settings.config.active_record_table_name || :ez_settings
  if ::ActiveRecord::Base.connection.data_source_exists?(settings_table)
    return true
  end

  message("Table #{settings_table} does not exists. Please, check migrations")
  false
end
message(txt, level = 'WARN') click to toggle source
# File lib/ez/settings/backend/active_record.rb, line 55
def message(txt, level = 'WARN')
  STDOUT.puts("[#{level}] Ez::Settings: #{txt}")
end
record(existing_settings, key, value) click to toggle source
# File lib/ez/settings/backend/active_record.rb, line 30
def record(existing_settings, key, value)
  record = existing_settings.find { |r| r.key == key.to_s }

  return unless record

  record.tap { |r| r.value = value }
end
try_db_connection() click to toggle source
# File lib/ez/settings/backend/active_record.rb, line 38
def try_db_connection
  ::ActiveRecord::Base.connection
rescue ::ActiveRecord::NoDatabaseError
  message('Database does not exist')
  false
end