Class: RailsSettingsUi::SettingsFormCoercible

Inherits:
Object
  • Object
show all
Defined in:
lib/rails-settings-ui/settings_form_coercible.rb

Constant Summary collapse

COERCIONS_MAP =
{
    String => Types::Coercible::String,
    Symbol => Types::CustomCoercions::Symbol,
    (1.class == Integer ? Integer : Fixnum) => Types::Form::Int,
    ActiveSupport::HashWithIndifferentAccess => Types::CustomCoercions::Hash,
    ActiveSupport::Duration => Types::Form::Int,
    Float => Types::Form::Float,
    Array => Types::CustomCoercions::Array,
    FalseClass => Types::Form::Bool,
    TrueClass => Types::Form::Bool
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(default_settings, settings) ⇒ SettingsFormCoercible

Returns a new instance of SettingsFormCoercible.



57
58
59
60
61
# 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

Instance Attribute Details

#coerced_settingsObject

Returns the value of attribute coerced_settings.



43
44
45
# File 'lib/rails-settings-ui/settings_form_coercible.rb', line 43

def coerced_settings
  @coerced_settings
end

#default_settingsObject (readonly)

Returns the value of attribute default_settings.



42
43
44
# File 'lib/rails-settings-ui/settings_form_coercible.rb', line 42

def default_settings
  @default_settings
end

#settingsObject (readonly)

Returns the value of attribute settings.



42
43
44
# File 'lib/rails-settings-ui/settings_form_coercible.rb', line 42

def settings
  @settings
end

Instance Method Details

#coerce!Object



63
64
65
66
67
68
69
70
71
72
# 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