Sha256: bb97b0b6ef7e71296d0d77bc2d2cbe8c509a2e12a4826b15cffad5346345add5

Contents?: true

Size: 1 KB

Versions: 5

Compression:

Stored size: 1 KB

Contents

# The base class for all jobs that should be performed in the context of a
# particular Shop's API session. The first argument to any job inheriting from
# this class must be the domain of the relevant store, so that the appropriate
# Shop model can be fetched and the temporary API session created.

require 'rollbar'

class DiscoApp::ShopJob < ActiveJob::Base

  queue_as :default

  before_perform { |job| find_shop(job) }
  before_enqueue { |job| find_shop(job) }

  around_enqueue { |job, block| shop_context(job, block) }
  around_perform { |job, block| shop_context(job, block) }

  private

    def find_shop(job)
      @shop ||= job.arguments.first.is_a?(DiscoApp::Shop) ? job.arguments.first : DiscoApp::Shop.find_by!(shopify_domain: job.arguments.first)
    end

    def shop_context(job, block)
      Rollbar.scoped(rollbar_scope) do
        @shop.with_api_context { block.call(job.arguments) }
      end
    end

    def rollbar_scope
      { person: { id: @shop.id, username: @shop.shopify_domain } }
    end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
disco_app-0.13.5 app/jobs/disco_app/shop_job.rb
disco_app-0.13.6 app/jobs/disco_app/shop_job.rb
disco_app-0.13.7 app/jobs/disco_app/shop_job.rb
disco_app-0.13.8 app/jobs/disco_app/shop_job.rb
disco_app-0.13.6.pre.puma.pre.3 app/jobs/disco_app/shop_job.rb