Module: Kernel

Defined in:
lib/platanus/onetime.rb

Overview

onetime.rb : One time setter.

Copyright April 2012, Ignacio Baixas [email protected].

Instance Method Summary collapse

Instance Method Details

#onetime_attr_accessor(_name) ⇒ Object

Adds a one time writer instead of a regular writer.

  • Args :

    • _name -> Attribute name.



29
30
31
32
# File 'lib/platanus/onetime.rb', line 29

def onetime_attr_accessor(_name)
  attr_reader(_name)
  onetime_attr_writer(_name)
end

#onetime_attr_writer(_name) ⇒ Object

Creates a one time writer method.

A one time writer is undefined after the first time it is used.

  • Args :

    • _name -> Attribute name.



14
15
16
17
18
19
20
21
22
# File 'lib/platanus/onetime.rb', line 14

def onetime_attr_writer(_name)
  define_method _name.to_s + '=' do |_value|
    instance_variable_set('@' + _name.to_s, _value)
    # Unset method by modifying singleton class.
    metaclass = (class << self; self; end)
    metaclass.send(:undef_method,_name.to_s + '=')
    _value
  end
end