tansengming/stripe-rails

Add a hook to run some code before any Stripe event callbacks

ndbroadbent opened this issue · 6 comments

Hello,

I saw that the stripe.event callback is run at the very end:

      def run_callbacks(evt, target)
        _run_callbacks evt.type, evt, target
        _run_callbacks 'stripe.event', evt, target
      end

It would be very useful if I could also run a callback at the beginning. In my case, I want to add the event ID as extra context for my Sentry error reports, in case one of my event handlers crashes with an error. e.g.

before_stripe_event_callback do |event|
   Raven.extra_context(event_id: event.id)
end

This would make it much easier for me to look up the Stripe event in the Stripe web UI, so I can see what event data caused the error to happen.

Do you have any feedback or suggestions for this idea, or any thoughts on how this could be implemented?

Here's a monkey-patch I'm using for now if anyone is interested!

# frozen_string_literal: true

require 'stripe/callbacks'
require 'stripe/rails/version'

if Stripe::Rails::VERSION != '2.0.0'
  raise "stripe-rails has been updated to version #{Stripe::Rails::VERSION}! " \
    "Please make sure that Stripe::Callbacks#run_callbacks hasn't been updated:\n" \
    "https://github.com/tansengming/stripe-rails/blob/master/lib/stripe/callbacks.rb\n" \
    '(Compare this to the "Original method:" below.)' \
    'Please also check this GitHub issue to see if this patch is still required: ' \
    'https://github.com/tansengming/stripe-rails/issues/188'
end

module Stripe
  module Callbacks
    # Original method:
    # def run_callbacks(evt, target)
    #   _run_callbacks evt.type, evt, target
    #   _run_callbacks 'stripe.event', evt, target
    # end

    def self.run_callbacks(evt, target)
      Raven.extra_context(
        stripe_event_id: evt[:id],
        stripe_event_type: evt[:type],
        stripe_event_created: evt[:created]
      )
      _run_callbacks evt.type, evt, target
      _run_callbacks 'stripe.event', evt, target
    end
  end
end

UPDATE: Still works in 2.0.0

UPDATE: I'm still using this monkeypatch, and it's still working fine on the latest version (2.4.0). I don't mind it too much but would be cool to have an officially supported way to do this

Hi @ndbroadbent thanks for the suggestion. I like the idea!

However I don't have the bandwidth to work on this from scratch. If you (or anyone else!) would like to create a PR for this it stands a fair chance of getting merged.

Sure, I would be happy to look into this! I will open a PR to get some feedback

Hi @tansengming, my company is taking part in Hacktoberfest this year and we're looking for some repos to contribute to. I remembered this issue and would like to create a PR! I was just wondering if you could please add the hacktoberfest topic to the repo so that my PR will count towards this? Thanks!

@ndbroadbent that's a great idea! Thanks for helping out!

I just added the topic.

image