class Lipstick::Helpers::FormValidationBuilder

Public Class Methods

new(sym) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 6
def initialize(sym)
  @rules = {}
  @messages = {}
  @sym = sym
end

Public Instance Methods

auto_validate(obj, *fields) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 26
def auto_validate(obj, *fields)
  unless obj.class.respond_to?(:lipstick_auto_validators)
    raise("#{obj.class.name} does not include Lipstick::AutoValidation")
  end

  validators = obj.class.lipstick_auto_validators
  validators.slice(*fields).each do |field, opts|
    validate_field(field, opts)
  end
end
to_h() click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 12
def to_h
  { rules: @rules, messages: @messages }
end
validate_field(field, opts) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 16
def validate_field(field, opts)
  target = wrap_name(field)

  opts.each do |k, v|
    next validate_with_hash(target, k, v) if v.is_a?(Hash)

    validate_with_param(target, k, v)
  end
end

Private Instance Methods

add_message(target, key, value) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 59
def add_message(target, key, value)
  @messages[target] ||= {}
  @messages[target][key] = value
end
add_rule(target, key, value) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 54
def add_rule(target, key, value)
  @rules[target] ||= {}
  @rules[target][key] = value
end
validate_with_hash(target, validation, opts) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 39
def validate_with_hash(target, validation, opts)
  message = opts.delete(:message)
  add_message(target, validation, message) if message

  return validate_with_param(target, validation, true) if opts.empty?

  return validate_with_param(target, validation, opts[:param]) if opts.keys == [:param]

  add_rule(target, validation, opts)
end
validate_with_param(target, validation, param) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 50
def validate_with_param(target, validation, param)
  add_rule(target, validation, param)
end
wrap_name(name) click to toggle source
# File lib/lipstick/helpers/form_validation_builder.rb, line 64
def wrap_name(name)
  return name if @sym.nil?

  "#{@sym}[#{name}]"
end