module Pakyow::Support::ClassState

Public Class Methods

extended(base) click to toggle source
# File lib/pakyow/support/class_state.rb, line 26
def self.extended(base)
  unless base.instance_variable_defined?(:@__class_state)
    base.instance_variable_set(:@__class_state, {})
  end
end

Public Instance Methods

class_state(name, default: nil, inheritable: false, reader: true) click to toggle source
# File lib/pakyow/support/class_state.rb, line 10
def class_state(name, default: nil, inheritable: false, reader: true)
  ivar = :"@#{name}"
  @__class_state[ivar] = {
    default: default,
    inheritable: inheritable
  }

  instance_variable_set(ivar, default.deep_dup)

  if reader
    define_singleton_method name do
      instance_variable_get(ivar)
    end
  end
end
inherited(subclass) click to toggle source
Calls superclass method
# File lib/pakyow/support/class_state.rb, line 32
def inherited(subclass)
  subclass.instance_variable_set(:@__class_state, @__class_state.deep_dup)

  @__class_state.each do |ivar, options|
    if options[:inheritable]
      subclass.instance_variable_set(ivar, instance_variable_get(ivar).deep_dup)
    elsif @__class_state[ivar][:default]
      subclass.instance_variable_set(ivar, @__class_state[ivar][:default].deep_dup)
    else
      subclass.instance_variable_set(ivar, nil)
    end
  end

  super
end