class ParamsReady::Parameter::Definition

Attributes

default[R]

Public Class Methods

new( *args, default: Extensions::Undefined, optional: false, preprocessor: nil, populator: nil, postprocessor: nil, no_input: nil, no_output: nil, **opts ) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 92
def initialize(
  *args,
  default: Extensions::Undefined,
  optional: false,
  preprocessor: nil,
  populator: nil,
  postprocessor: nil,
  no_input: nil,
  no_output: nil,
  **opts
)
  super *args, **opts
  @default = Extensions::Undefined
  @optional = optional
  @preprocessor = preprocessor
  @postprocessor = postprocessor
  @populator = populator
  @no_input = no_input
  @no_output = no_output

  set_default(default) unless default == Extensions::Undefined
end

Public Instance Methods

canonical_default(value) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 121
def canonical_default(value)
  return value if value.nil?
  ensure_canonical value
rescue => e
  raise ParamsReadyError, "Invalid default: #{e.message}"
end
default_defined?() click to toggle source
# File lib/params_ready/parameter/definition.rb, line 115
def default_defined?
  return false unless defined? @default
  return false if @default == Extensions::Undefined
  true
end
duplicate_default() click to toggle source
# File lib/params_ready/parameter/definition.rb, line 222
def duplicate_default
  return Extensions::Undefined unless default_defined?
  return nil if @default.nil?

  duplicate_value(@default)
end
finish() click to toggle source
# File lib/params_ready/parameter/definition.rb, line 230
def finish
  if @populator && !@no_input
    raise ParamsReadyError, "Populator set for input parameter '#{name}'"
  end

  if @preprocessor && @no_input == true
    raise ParamsReadyError, "Preprocessor set for no-input parameter '#{name}'"
  end

  if @postprocessor && @no_input == true
    raise ParamsReadyError, "Postprocessor set for no-input parameter '#{name}'"
  end

  super
end
memoize?() click to toggle source
# File lib/params_ready/parameter/definition.rb, line 133
def memoize?
  return false if @memoize.nil?

  @memoize > 0
end
name_for_formatter() click to toggle source
# File lib/params_ready/parameter/definition.rb, line 88
def name_for_formatter
  self.class.name_for_formatter
end
no_input?(format) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 190
def no_input?(format)
  restricted_for_format?(@no_input, format)
end
no_output?(format) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 194
def no_output?(format)
  restricted_for_format?(@no_output, format)
end
postprocess(param, context, validator) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 163
def postprocess(param, context, validator)
  return if @postprocessor.nil?
  return unless @postprocessor.perform?(!context.local?, context.name)
  @postprocessor.block.call param, context
rescue => error
  postprocessor_error = PostprocessorError.new(error)
  if validator.nil?
    raise postprocessor_error
  else
    validator.error! postprocessor_error
  end
  validator
end
preprocess(input, context, validator) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 149
def preprocess(input, context, validator)
  return input if @preprocessor.nil?
  return input unless @preprocessor.perform?(!context.local?, context.name)
  @preprocessor.block.call input, context, self
rescue => error
  preprocessor_error = PreprocessorError.new(error)
  if validator.nil?
    raise preprocessor_error
  else
    validator.error! preprocessor_error
    Extensions::Undefined
  end
end
restricted_for_format?(rule, format) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 198
def restricted_for_format?(rule, format)
  case rule
  when nil, false
    false
  when true
    !format.local?
  when Helpers::Rule
    rule.include?(format.name)
  else
    raise ParamsReadyError, "Unexpected rule: #{rule}"
  end
end
set_local(*arr, rule: nil) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 184
def set_local(*arr, rule: nil)
  rule = Helpers::Rule(rule)
  set_no_input(*arr, rule: rule)
  set_no_output(rule || true)
end
set_no_input(*arr, rule: nil) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 177
def set_no_input(*arr, rule: nil)
  @no_input = Helpers::Rule(rule) || true
  raise ParamsReadyError, "Default not expected: #{arr}" if rule == false

  set_default *arr unless arr.empty?
end
set_postprocessor(rule: nil, &block) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 144
def set_postprocessor(rule: nil, &block)
  raise "Postprocessor already set in '#{name}'" unless @postprocessor.nil?
  @postprocessor = Helpers::ConditionalBlock.new(rule: rule, &block)
end
set_preprocessor(rule: nil, &block) click to toggle source
# File lib/params_ready/parameter/definition.rb, line 139
def set_preprocessor(rule: nil, &block)
  raise "Preprocesser already set in '#{name}'" unless @preprocessor.nil?
  @preprocessor = Helpers::ConditionalBlock.new(rule: rule, &block)
end