Coding Conventions
Do not use Class Instance Variables
They are not doing what one would expect and they violate the Liskov Principle
Example:
[136] pry(File):1> class A
[136] pry(File):1* cattr_accessor :a
[136] pry(File):1* end
=> [:a]
[137] pry(File):1> class B < A
[137] pry(File):1* cattr_accessor :a
[137] pry(File):1* end
=> [:a]
[138] pry(File):1> class C < A
[138] pry(File):1* cattr_accessor :a
[138] pry(File):1* end
=> [:a]
[139] pry(File):1> C.a
=> nil
[140] pry(File):1> A.a = 42
=> 42
[141] pry(File):1> C.a
=> 42
[142] pry(File):1> A.a
=> 42
[143] pry(File):1> B.a
=> 42
[144] pry(File):1> B.a = 84
=> 84
[145] pry(File):1> A.a
=> 84
[146] pry(File):1> C.a
=> 84
[147] pry(File):1>
What you want to do is this:
[17] pry(main)> class A
[17] pry(main)* class << self
[17] pry(main)* attr_accessor :a
[17] pry(main)* end
[17] pry(main)* end
=> nil
[18] pry(main)> class B < A
[18] pry(main)* class << self
[18] pry(main)* attr_accessor :a
[18] pry(main)* end
[18] pry(main)* end
=> nil
[19] pry(main)> class C < A
[19] pry(main)* class << self
[19] pry(main)* attr_accessor :a
[19] pry(main)* end
[19] pry(main)* end