Film the bottom of a large saucepan or Dutch oven—preferably not nonstick—with olive oil, and place the pan over medium heat.
Add the onion, and cook, stirring frequently, until it is deeply caramelized and even charred in some spots. Be patient. The more color, the more full-flavored the final dish will be.
Reduce the heat to low. Add the garlic, stirring, and add a bit more oil if the pan seems dry.
Add the cumin seeds, coriander, ginger, garam masala, and cardamom pods, and fry them, stirring constantly, until fragrant and toasty, about 30 seconds. Add ¼ cup water, and stir to scrape up any brown bits from the bottom of the pan. Cook until the water has evaporated away completely.
Pour in the juice from can of tomatoes, followed by the tomatoes themselves, using your hands to break them apart as you add them; alternatively, add them whole and crush them in the pot with a potato masher. Add the salt.
Raise the heat to medium, and bring the pot to a boil. Reduce the heat to low, add the cilantro and cayenne, and simmer the sauce gently, stirring occasionally, until it reduces a bit and begins to thicken. Taste, and adjust the seasoning as necessary.
Add the chickpeas, stirring well, and cook over low heat for about five minutes. Add 2 Tbs water, and cook for another five minutes. Add another 2 Tbs water, and cook until the water is absorbed, a few minutes more. This process of adding and cooking off water helps to concentrate the sauce’s flavor and makes the chickpeas more tender and toothsome. Taste, and adjust the seasoning as necessary.
Stir in the yogurt, if you like, or garnish with lemon wedges and cilantro. Serve.