generalize api `push()` method