def handle_option_call(option_name, *args, &block)
      if getter?(option_name, *args, &block)
        current_value(option_name)
      else
        new_value = new_value(option_name, *args, &block)
        instance.class.new(@values.merge(option_name.to_sym => new_value))
      end
    end
def handle_option_call(option_name, *args, &block)
      if getter?(option_name, *args, &block)
        current_value(option_name)
      else
        new_value = new_value(option_name, *args, &block)
        instance.class.new(@values.merge(option_name.to_sym => new_value))
      end
    end
Handles a call of #option_name.
 Determines whether the call was meant to be a setter or a getter and
 acts accordingly.