Sha256: 11f7c9c422910ecf716cbd8a289f9cfdc242f88648703c4715465c40480055a9

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

require 'interactor'

module DiscoApp
  module Flow
    class ProcessTrigger

      include Interactor

      delegate :trigger, to: :context
      delegate :api_success, :api_errors, to: :context

      def call
        validate_trigger
        make_api_request
        update_trigger
        fail_if_errors_present
      end

      private

        def validate_trigger
          context.fail! unless trigger.pending?
        end

        def make_api_request
          context.api_success, context.api_errors = api_client.create_flow_trigger(
            trigger.title,
            trigger.resource_name,
            trigger.resource_url,
            trigger.properties
          )
        end

        def update_trigger
          trigger.update!(
            status: api_success ? Trigger.statuses[:succeeded] : Trigger.statuses[:failed],
            processing_errors: api_success ? [] : api_errors,
            processed_at: Time.current
          )
        end

        def fail_if_errors_present
          context.fail! unless api_success
        end

        def api_client
          @api_client ||= DiscoApp::GraphqlClient.new(trigger.shop)
        end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
disco_app-0.16.1.pre.sidekiq.pre.6.pre.release app/services/disco_app/flow/process_trigger.rb
disco_app-0.17.0 app/services/disco_app/flow/process_trigger.rb
disco_app-0.18.0 app/services/disco_app/flow/process_trigger.rb
disco_app-0.16.1 app/services/disco_app/flow/process_trigger.rb