And to answer this:
Those other functions are pure functions. They don’t depend on call/2 whatsoever and, as you said, are isolated from one another.
It might be nice to remember that even though Rumbl.Auth is a module plug, it is also a module. In Elixir (and many other FP languages), a module is usually just a collection of functions.
The login/2, login_by_username_and_pass/4, etc. are plain functions. Although login/2 fulfils the contract of a function plug, it is not used as such. They are called with Rumbl.Auth.login(user), and so on.
The reason that those functions are in the Rumbl.Auth module is most likely because as the name implies, they deal with user authentication, therefore it makes sense to group them under an Auth module.


















