module ParamsReady::Extensions::LateInit
Public Instance Methods
late_init( name, obligatory: true, freeze: true, getter: true, boolean: false, once: true, definite: true, &block )
click to toggle source
# File lib/params_ready/extensions/late_init.rb, line 6 def late_init( name, obligatory: true, freeze: true, getter: true, boolean: false, once: true, definite: true, &block ) ivar = :"@#{name}" define_method "set_#{name}" do |value| raise ParamsReadyError, "Can't initialize '#{name}' to nil" if value.nil? && definite value = instance_exec(value, &block) unless block.nil? next if value == Extensions::Undefined current = instance_variable_get ivar raise ParamsReadyError, "Variable '#{name}' already set" unless current.nil? || !once value.freeze if freeze instance_variable_set "@#{name}", value end if boolean define_method "#{name}?" do instance_variable_get ivar end end attr_reader name if getter obligatory! name if obligatory end