Method: Class#instance_attr_reader

Defined in:
lib/openc3/core_ext/class.rb

#instance_attr_reader(*args) ⇒ Object

Creates instance variables in the class which have corresponding class method accessors. NOTE: You must define self.instance for this to work.

For example:

class MyClass
  instance_attr_reader :test
  @@instance = nil
  def self.instance
    @@instance ||= self.new
    return @@instance
  end
  def initialize
    @test = "Test"
    @@instance = self
  end

Will allow the following:

my = MyClass.new
my.test # returns "Test"
MyClass.test # returns "Test"

Parameters:

  • args (Array<Symbol>)

    Array of symbols which should be turned into instance variables with class method readers



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/openc3/core_ext/class.rb', line 48

def instance_attr_reader(*args)
  args.each do |arg|
    # Non-word characters (letter, number, underscore) are disallowed
    raise ArgumentError, "Non-word characters characters parsed" if arg =~ /\W/

    # Fortify: Dynamic Code Evaluation: Code Injection
    # This is true but we're whitelisting the input above
    self.class_eval("def #{arg};@#{arg};end")
    self.instance_eval("def #{arg};self.instance.#{arg};end")
  end
end