Sha256: d2590692f773360d8668e9fd436ad9f837834ce1817c48218a40866a75a36f1b

Contents?: true

Size: 801 Bytes

Versions: 7

Compression:

Stored size: 801 Bytes

Contents

# frozen_string_literal: true

module AnyCable
  module Rails
    module Middlewares
      # Executor runs Rails executor for each call
      # See https://guides.rubyonrails.org/v5.2.0/threading_and_code_execution.html#framework-behavior
      class Executor < AnyCable::Middleware
        attr_reader :executor

        def initialize(executor)
          @executor = executor
        end

        def call(method, message, metadata)
          if ::Rails.respond_to?(:error)
            executor.wrap do
              sid = metadata["sid"]

              ::Rails.error.record(context: {method: method, payload: message.to_h, sid: sid}) do
                yield
              end
            end
          else
            executor.wrap { yield }
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
anycable-rails-core-1.4.1 lib/anycable/rails/middlewares/executor.rb
anycable-rails-core-1.4.0 lib/anycable/rails/middlewares/executor.rb
anycable-rails-1.4.0 lib/anycable/rails/middlewares/executor.rb
anycable-rails-1.4.0.rc.4 lib/anycable/rails/middlewares/executor.rb
anycable-rails-1.4.0.rc.3 lib/anycable/rails/middlewares/executor.rb
anycable-rails-1.4.0.rc.2 lib/anycable/rails/middlewares/executor.rb
anycable-rails-1.4.0.rc.1 lib/anycable/rails/middlewares/executor.rb