class RailsSettingsUi::SettingsFormCoercible

Constants

COERCIONS_MAP

Attributes

coerced_settings[RW]
default_settings[R]
settings[R]

Public Class Methods

new(default_settings, settings) click to toggle source
# File lib/rails-settings-ui/settings_form_coercible.rb, line 57
def initialize(default_settings, settings)
  @default_settings = default_settings
  @settings = settings
  @coerced_settings = {}
end

Public Instance Methods

coerce!() click to toggle source
# File lib/rails-settings-ui/settings_form_coercible.rb, line 63
def coerce!
  settings.to_hash.symbolize_keys.each do |name, value|
    default_value_class = default_settings[name].class
    coercible_type = COERCIONS_MAP[default_value_class]
    raise NotCoercibleError, "can't coerce #{default_value_class}" unless coercible_type
    coerced_settings[name] = coercible_type[value]
  end
  set_default_boolean_value!(coerced_settings)
  coerced_settings
end

Private Instance Methods

set_default_boolean_value!(settings) click to toggle source
# File lib/rails-settings-ui/settings_form_coercible.rb, line 76
def set_default_boolean_value!(settings)
  default_settings.each do |name, value|
    setting_value = settings[name.to_sym]
    next if setting_value.present?

    settings[name.to_sym] = case value.class.name
                            when 'TrueClass', 'FalseClass'
                              false
                            when 'Array'
                              []
                            end
  end
end