Class: ParamsReady::Parameter::Parameter
Instance Attribute Summary
#definition
Instance Method Summary
collapse
#==, #dup, #inspect, intent_for_children, #match?, #populate, #to_hash, #update_if_applicable, #update_in
#freeze_variable, #freeze_variables, #variables_to_freeze
Methods included from FromHash
#set_from_hash
Constructor Details
#initialize(definition) ⇒ Parameter
Returns a new instance of Parameter.
216
217
218
219
|
# File 'lib/params_ready/parameter/parameter.rb', line 216
def initialize(definition)
@value = Extensions::Undefined
super definition
end
|
Instance Method Details
#allows_undefined? ⇒ Boolean
280
281
282
283
284
|
# File 'lib/params_ready/parameter/parameter.rb', line 280
def allows_undefined?
return true if optional?
!default_defined?
end
|
#definite_default? ⇒ Boolean
247
248
249
|
# File 'lib/params_ready/parameter/parameter.rb', line 247
def definite_default?
default_defined? && !default.nil?
end
|
#eligible_for_output?(intent) ⇒ Boolean
286
287
288
|
# File 'lib/params_ready/parameter/parameter.rb', line 286
def eligible_for_output?(intent)
intent.preserve?(self)
end
|
#find_in_hash(hash, context) ⇒ Object
364
365
366
|
# File 'lib/params_ready/parameter/parameter.rb', line 364
def find_in_hash(hash, context)
Helpers::FindInHash.find_in_hash hash, hash_key(context)
end
|
313
314
315
316
317
318
319
320
|
# 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
|
308
309
310
311
|
# File 'lib/params_ready/parameter/parameter.rb', line 308
def format_self_permitted(intent)
intent = intent_for_children(intent)
format(intent)
end
|
#freeze ⇒ Object
383
384
385
386
387
388
389
|
# File 'lib/params_ready/parameter/parameter.rb', line 383
def freeze
if definition.memoize? and !frozen?
@memo = Helpers::Memo.new(definition.memoize)
end
init_for_read true
super
end
|
#hash ⇒ Object
391
392
393
|
# File 'lib/params_ready/parameter/parameter.rb', line 391
def hash
[definition, @value].hash
end
|
#hash_key(format) ⇒ Object
290
291
292
|
# File 'lib/params_ready/parameter/parameter.rb', line 290
def hash_key(format)
format.hash_key(self)
end
|
#inspect_content ⇒ Object
377
378
379
|
# File 'lib/params_ready/parameter/parameter.rb', line 377
def inspect_content
@value.inspect
end
|
#is_default? ⇒ Boolean
262
263
264
265
266
|
# 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? ⇒ Boolean
255
256
257
258
259
260
|
# 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? ⇒ Boolean
268
269
270
271
272
273
274
|
# 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? ⇒ Boolean
276
277
278
|
# File 'lib/params_ready/parameter/parameter.rb', line 276
def is_undefined?
@value == Extensions::Undefined && allows_undefined?
end
|
#memo(intent) ⇒ Object
322
323
324
325
326
|
# 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) ⇒ Object
328
329
330
331
332
|
# 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? ⇒ Boolean
251
252
253
|
# File 'lib/params_ready/parameter/parameter.rb', line 251
def nil_default?
default_defined? && default.nil?
end
|
#populate_other(other) ⇒ Object
368
369
370
371
372
373
374
375
|
# File 'lib/params_ready/parameter/parameter.rb', line 368
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
|
294
295
296
297
298
299
|
# 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) ⇒ Object
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
|
# 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)) ⇒ Object
301
302
303
304
305
306
|
# 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 ⇒ Object
346
347
348
|
# File 'lib/params_ready/parameter/parameter.rb', line 346
def unwrap
format(Intent.instance(:backend))
end
|
#unwrap_or(*args, &block) ⇒ Object
350
351
352
353
354
355
356
357
358
359
360
361
362
|
# File 'lib/params_ready/parameter/parameter.rb', line 350
def unwrap_or(*args, &block)
ensure_default_present!(*args, &block)
if is_definite?
begin
unwrap
rescue StandardError => _
supply_default(*args, &block)
end
else
supply_default(*args, &block)
end
end
|
#wrap_output(output, intent) ⇒ Object
334
335
336
337
338
339
340
341
342
343
344
|
# 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
|