Module: BulmaX::Dsl::Validations::ClassMethods

Defined in:
lib/bulma_x/dsl/validations.rb

Constant Summary collapse

ValidatorResult =
Data.define(:result, :source_location, :details, :validator)
Validator =
Data.define(:option, :validator, :message) do
  def valid?(component, value)
    source_location = nil
    result = case validator
             in Symbol
               source_location = component.method(validator).source_location
               component.send(validator, value)
             in Proc
               source_location = validator.source_location
               component.instance_exec(value, &validator)
             end

    ValidatorResult.new(result, source_location.join(':'), message, self)
  end
end

Instance Method Summary collapse

Instance Method Details

#remove_validations(option_name) ⇒ Object



38
39
40
41
42
# File 'lib/bulma_x/dsl/validations.rb', line 38

def remove_validations(option_name)
  removed, @validators = validators.partition { _1.option == option_name }

  removed
end

#validate(*options, validator, message: nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/bulma_x/dsl/validations.rb', line 27

def validate(*options, validator, message: nil)
  options.each do |option|
    if validator.is_a?(Proc) && validator.arity != 1
      raise InvalidValidator,
            'Your validator must accept exactly on argument (the option value received during initialization)'
    end

    validators << Validator.new(option, validator, message)
  end
end

#validatorsObject



44
# File 'lib/bulma_x/dsl/validations.rb', line 44

def validators = @validators ||= []