class RailsSettingsUi::SettingsFormValidator

Constants

VALIDATABLE_TYPES

Public Class Methods

new(default_settings, settings) click to toggle source
# File lib/rails-settings-ui/settings_form_validator.rb, line 29
def initialize(default_settings, settings)
  @default_settings = default_settings
  @settings = settings
  build_validation_schema
end

Public Instance Methods

errors() click to toggle source
# File lib/rails-settings-ui/settings_form_validator.rb, line 35
def errors
  @schema.call(@settings.to_hash).messages
end

Private Instance Methods

build_validation_schema() click to toggle source
# File lib/rails-settings-ui/settings_form_validator.rb, line 41
def build_validation_schema
  registry = Dry::Validation::PredicateRegistry.new(CustomPredicates)
  v = Dry::Validation::Schema::Value.new(registry: registry)

  validatable_settings.each do |name, value|
    predicate = VALIDATABLE_TYPES[value.class]
    v.required(name.to_sym).filled(predicate) if predicate
  end

  SettingsSchema.configure do |config|
    config.rules = v.rules
    config.messages = :i18n
  end

  @schema = SettingsSchema.new
end
validatable_settings() click to toggle source
# File lib/rails-settings-ui/settings_form_validator.rb, line 58
def validatable_settings
  @default_settings.select { |_, value| value.class.in?(VALIDATABLE_TYPES.keys) }
end