Class: RailsSettingsUi::TypeConverter

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

Constant Summary collapse

VALUE_TYPES_MAP =
{
  String => RailsSettingsUi::ValueTypes::String,
  Symbol => RailsSettingsUi::ValueTypes::Symbol,
  integer_klass => RailsSettingsUi::ValueTypes::Fixnum,
  # ActiveSupport::HashWithIndifferentAccess => RailsSettingsUi::ValueTypes::Hash,
  ActiveSupport::Duration => RailsSettingsUi::ValueTypes::Float,
  Float => RailsSettingsUi::ValueTypes::Float,
  Array => RailsSettingsUi::ValueTypes::Array,
  FalseClass => RailsSettingsUi::ValueTypes::Boolean,
  TrueClass => RailsSettingsUi::ValueTypes::Boolean,
  boolean: RailsSettingsUi::ValueTypes::Boolean,
  string: RailsSettingsUi::ValueTypes::String,
  integer: RailsSettingsUi::ValueTypes::Fixnum,
  float: RailsSettingsUi::ValueTypes::Float,
  array: RailsSettingsUi::ValueTypes::Array,
  hash: RailsSettingsUi::ValueTypes::Hash
}

Class Method Summary collapse

Class Method Details

.cast(settings) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rails-settings-ui/type_converter.rb', line 33

def self.cast(settings)
  errors = {}
  settings.each do |name, value|
    sc = RailsSettingsUi.setting_config(name.to_s)
    type = setting_value_type(name, value, sc)
    settings[name] = type.cast
    if type.errors.any?
      errors[name.to_sym] = type.errors
    end
  end
  settings = set_non_presented_settings(settings)

  settings[:errors] = errors
  settings
end

.set_non_presented_settings(settings) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rails-settings-ui/type_converter.rb', line 66

def self.set_non_presented_settings(settings)
  RailsSettingsUi.default_settings.each do |name, value|
    if !settings[name.to_sym].present?
      if [TrueClass, FalseClass].include?(value.class)
        settings[name.to_sym] = false
      elsif [Array].include?(value.class)
        settings[name.to_sym] = []
      end
    end
  end
  settings
end

.setting_value_type(name, value, setting_config) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/rails-settings-ui/type_converter.rb', line 49

def self.setting_value_type(name, value, setting_config)
  default_setting_value_type = if setting_config[:type].nil? || setting_config[:type] == :string
                                 setting_config[:default].class
                               else
                                 setting_config[:type]
                               end

  unless VALUE_TYPES_MAP.keys.include?(default_setting_value_type)
    raise RailsSettingsUi::UnknownDefaultValueType,
      "Unknown default value type #{default_setting_value_type} for #{name}"
  end

  # puts "--- #{name}: #{default_setting_value_type} ---"
  setting_value_type_class = VALUE_TYPES_MAP[default_setting_value_type]
  setting_value_type_class.new(value)
end