Sha256: c9868efc46ffa804ec23c447173ce3b06d3c4c0d4db3c8ebb519603d932b03da

Contents?: true

Size: 1 KB

Versions: 8

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 < ApplicationJob

  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

8 entries across 8 versions & 1 rubygems

Version Path
disco_app-0.14.1 app/jobs/disco_app/shop_job.rb
disco_app-0.14.2 app/jobs/disco_app/shop_job.rb
disco_app-0.15.0 app/jobs/disco_app/shop_job.rb
disco_app-0.16.0 app/jobs/disco_app/shop_job.rb
disco_app-0.14.4 app/jobs/disco_app/shop_job.rb
disco_app-0.14.3 app/jobs/disco_app/shop_job.rb
disco_app-0.15.2 app/jobs/disco_app/shop_job.rb
disco_app-0.14.0 app/jobs/disco_app/shop_job.rb