class ParamsReady::Parameter::Parameter
Public Class Methods
new(definition)
click to toggle source
Calls superclass method
ParamsReady::Parameter::AbstractParameter::new
# File lib/params_ready/parameter/parameter.rb, line 216 def initialize(definition) @value = Extensions::Undefined super definition end
Public Instance Methods
allows_undefined?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 280 def allows_undefined? return true if optional? !default_defined? end
definite_default?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 247 def definite_default? default_defined? && !default.nil? end
eligible_for_output?(intent)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 286 def eligible_for_output?(intent) intent.preserve?(self) end
find_in_hash(hash, context)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 360 def find_in_hash(hash, context) Helpers::FindInHash.find_in_hash hash, hash_key(context) end
format(intent)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 313 def format(intent) value = memo(intent) return value if value != Extensions::Undefined value = marshal(intent) memo!(value, intent) value end
format_self_permitted(intent)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 308 def format_self_permitted(intent) intent = intent_for_children(intent) format(intent) end
freeze()
click to toggle source
Calls superclass method
ParamsReady::Extensions::Freezer::InstanceMethods#freeze
# File lib/params_ready/parameter/parameter.rb, line 379 def freeze if definition.memoize? and !frozen? @memo = Helpers::Memo.new(definition.memoize) end init_for_read true super end
hash()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 387 def hash [definition, @value].hash end
hash_key(format)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 290 def hash_key(format) format.hash_key(self) end
inspect_content()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 373 def inspect_content @value.inspect end
is_default?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 262 def is_default? return false unless default_defined? @value == Extensions::Undefined || @value == default end
is_definite?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 255 def is_definite? return true if @value != Extensions::Undefined && !@value.nil? return false if optional? && @value.nil? definite_default? end
is_nil?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 268 def is_nil? return false if is_definite? return true if optional? return true if nil_default? false end
is_undefined?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 276 def is_undefined? @value == Extensions::Undefined && allows_undefined? end
memo(intent)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 322 def memo(intent) return Extensions::Undefined if @memo.nil? @memo.cached_value(intent) end
memo!(value, intent)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 328 def memo!(value, intent) return if @memo.nil? || !frozen? @memo.cache_value(value, intent) end
nil_default?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 251 def nil_default? default_defined? && default.nil? end
populate_other(other)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 364 def populate_other(other) raise ParamsReadyError, "Not a matching param: #{other.class.name}" unless match? other return other unless is_definite? value = bare_value other.populate_with(value) other end
set_from_input(input, context, validator)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 294 def set_from_input(input, context, validator) preprocessed = definition.preprocess(input, context, validator) set_value preprocessed, context, validator definition.postprocess(self, context, validator) validator end
set_value(input, context = Format.instance(:backend), validator = nil)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 221 def set_value(input, context = Format.instance(:backend), validator = nil) if Extensions::Undefined.value_indefinite?(input) handle_indefinite_input(input, validator) elsif self.match? input @value = input.bare_value else begin value, validator = definition.try_canonicalize(input, context, validator) if validator.nil? || validator.ok? if Extensions::Undefined.value_indefinite?(value) handle_indefinite_input(value, validator) else @value = value end end rescue StandardError => e if validator.nil? raise e else validator.error! e end end end validator end
to_hash_if_eligible(intent = Intent.instance(:backend))
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 301 def to_hash_if_eligible(intent = Intent.instance(:backend)) return nil unless eligible_for_output? intent formatted = format_self_permitted(intent) wrap_output(formatted, intent) end
unwrap()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 346 def unwrap format(Intent.instance(:backend)) end
unwrap_or(default)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 350 def unwrap_or(default) if is_definite? unwrap else default end rescue StandardError => _ default end
wrap_output(output, intent)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 334 def wrap_output(output, intent) name_or_path = hash_key(intent) if name_or_path.is_a? Array *path, name = name_or_path result = {} Helpers::KeyMap::Mapping::Path.store(name, output, result, path) result else { name_or_path => output } end end
Protected Instance Methods
bare_value()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 427 def bare_value init_for_read return @value if is_definite? value_missing nil end
handle_indefinite_input(input, validator)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 395 def handle_indefinite_input(input, validator) value_missing validator if default_defined? # if value_missing doesn't crash, # and the parameter is optional # it's safe to set to nil or Extensions::Undefined @value = Extensions::Undefined elsif optional? # Clear possible previous state, # will be set to default on read @value = input else raise ParamsReadyError, "Unexpected state for '#{name}' in #handle_indefinite_input" if validator.ok? end end
init_for_read(to_be_frozen = false)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 435 def init_for_read(to_be_frozen = false) return unless @value == Extensions::Undefined return unless default_defined? @value = if to_be_frozen definition.default else definition.duplicate_default end end
init_for_write()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 446 def init_for_write return if is_definite? if default_defined? && !default.nil? @value = definition.duplicate_default else init_value end end
init_value()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 456 def init_value # NOOP end
nil_allowed?()
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 423 def nil_allowed? optional? || default_defined? end
value_missing(validator = nil)
click to toggle source
# File lib/params_ready/parameter/parameter.rb, line 411 def value_missing(validator = nil) if !nil_allowed? e = ValueMissingError.new self.name if validator validator.error!(e) else raise e end end validator end