module Fend::Plugins::Core::ParamMethods

Attributes

errors[R]

Get param validation errors

name[R]

Get param name

value[R]

Get param value

Public Class Methods

new(name, value) click to toggle source
# File lib/fend.rb, line 174
def initialize(name, value)
  @name = name
  @value = value
  @errors = []
end

Public Instance Methods

[](name) click to toggle source

Fetch nested value

# File lib/fend.rb, line 181
def [](name)
  fetch(name)
end
add_error(message) click to toggle source

Append param error message

# File lib/fend.rb, line 232
def add_error(message)
  @errors << message
end
each(opts = {}) { |param, index| ... } click to toggle source

Define enumerable param member and execute validation block

# File lib/fend.rb, line 204
def each(opts = {}, &block)
  return if (flat? && invalid?) || !@value.is_a?(Enumerable)

  is_hash = opts[:hash].eql?(true)

  return if is_hash && !@value.is_a?(Hash)

  @value.each_with_index do |value, index|
    param_name, param_value = is_hash ? value : [index, value]
    param = _build_param(param_name, param_value)

    yield(param, index)

    _nest_errors(param.name, param.errors) if param.invalid?
  end
end
fend_class() click to toggle source

Return Fend class under which Param class is namespaced

# File lib/fend.rb, line 245
def fend_class
  self.class::fend_class
end
fetch(name) click to toggle source
# File lib/fend.rb, line 185
def fetch(name)
  @value.fetch(name, nil) if @value.respond_to?(:fetch)
end
inspect() click to toggle source
# File lib/fend.rb, line 236
def inspect
  "#{fend_class.inspect}::Param #{super}"
end
invalid?() click to toggle source

Returns true if param is invalid/errors are present

# File lib/fend.rb, line 227
def invalid?
  !valid?
end
params(*names) { |*values| ... } click to toggle source

Define child params and execute validation block

# File lib/fend.rb, line 190
def params(*names, &block)
  return if flat? && invalid?

  params = names.each_with_object({}) do |name, result|
    param = _build_param(name, self[name])
    result[name] = param
  end

  yield(*params.values)

  params.each { |name, param| _nest_errors(name, param.errors) if param.invalid? }
end
to_s() click to toggle source
# File lib/fend.rb, line 240
def to_s
  "#{fend_class.inspect}::Param #{super}"
end
valid?() click to toggle source

Returns true if param is valid (no errors)

# File lib/fend.rb, line 222
def valid?
  errors.empty?
end

Private Instance Methods

_build_param(*args) click to toggle source
# File lib/fend.rb, line 260
def _build_param(*args)
  self.class.new(*args)
end
_nest_errors(name, messages) click to toggle source
# File lib/fend.rb, line 255
def _nest_errors(name, messages)
  @errors = {} unless @errors.is_a?(Hash)
  @errors[name] = messages
end
flat?() click to toggle source
# File lib/fend.rb, line 251
def flat?
  errors.is_a?(Array)
end