parkerduckworth / bamboo_gmail

Gmail Adapter for Bamboo
MIT License
2 stars 1 forks source link

Breaking changes coming to Bamboo v.2.0.0 #7

Closed germsvel closed 3 years ago

germsvel commented 3 years ago

👋 Hi Parker,

Thanks for maintaining this Bamboo adapter. 🥳

There will be a breaking change coming to Bamboo in v2.0.0 where the deliver_now function will no longer raise an error on failure to deliver an email. Instead, it will return :ok or :error tuples. That way, users of the library can decide how to handle the errors. I've completed that work in https://github.com/thoughtbot/bamboo/pull/571.

I've also added a deliver_now! function that is meant to behave exactly as deliver_now currently behaves. So, there's an easy upgrade path for users who don't want to handle their own errors. They can change deliver_now -> deliver_now!.

(There are also deliver_later corresponding changes, but from the adapter's perspective, I don't know that it matters).

What that means for adapters

In order for people to upgrade to Bamboo v2.0.0, the adapters will need to stop raising errors when they fail to deliver emails. In order to accommodate that, the adapter's callbacks are changing like this:

- @callback deliver(%Bamboo.Email{}, %{}) :: any
+ @callback deliver(%Bamboo.Email{}, %{}) :: {:ok, any} | {:error, Exception.t() | String.t()}

In other words, adapters should now return an {:ok, response} tuple or an {:error, error} tuple, where the error is either an exception struct that can later be raised or an error message.

To facilitate that work, PR 571 also introduces a Bamboo.ApiError.build_api_error function that can be used by adapters — if you want to easily build an error to return in the {:error, error} response.

Sample changes to other adapters

I have already done some changes to the Sendgrid, Mailgun, and Mandrill adapters. They might serve as a guide:

Why open this issue?

I wanted to open this issue for two reasons:

  1. To let you know about the changes that are coming up (all of the above), and
  2. To ask you if there's anything I can do to help with the transition.

Unfortunately, I can't offer to open PRs to make the changes in all the adapter repos, but if it's helpful, I'd be happy to review PRs.

And if there's some change to Bamboo that would make it easier to work with your adapter, or if you have suggestions or comments on PR 571, I'd love to know.

Thanks again for maintaining this adapter, and please feel free to close this issue whenever you've read it (if it's of no further use). It just seemed like the easiest way to communicate about the upcoming changes with you.

lovebes commented 3 years ago

If this change is minimal I'd like to try making the PR. Else I might have to fork this and work there.

parkerduckworth commented 3 years ago

If this change is minimal I'd like to try making the PR.

Else I might have to fork this and work there.

@lovebes please feel free to contribute here. Make a PR when ready 👌

lovebes commented 3 years ago

Is the linking issue not working? Sorry this is my very first PR contribution in open source repos haha - here's my PR https://github.com/parkerduckworth/bamboo_gmail/pull/9