module ParamsReady::Extensions::ClassReaderWriter

Public Instance Methods

class_reader_writer(method_name) click to toggle source
# File lib/params_ready/extensions/class_reader_writer.rb, line 6
def class_reader_writer(method_name)
  ivar = :"@#{method_name}"
  define_singleton_method method_name do |*args|
    if args.length == 0
      value = instance_variable_get(ivar)
      if value.nil?
        if superclass.respond_to? method_name
          superclass.send method_name
        else
          raise ParamsReadyError, "Class variable '#{ivar}' not set for '#{name}'"
        end
      else
        value
      end
    elsif args.length == 1
      if instance_variable_get(ivar).nil?
        instance_variable_set(ivar, args[0])
      else
        raise ParamsReadyError, "Class variable '#{ivar}' already set for '#{name}'"
      end
    else
      raise ParamsReadyError, "Unexpected parameters to '#{method_name}': #{args}"
    end
  end
end