module Shrine::Plugins::Instrumentation::ClassMethods

Public Instance Methods

instrument(event_name, payload = {}, &block) click to toggle source

Sends a ‘*.shrine` event.

# sends a `my_event.shrine` event
Shrine.instrument(:my_event) do
  # work
end
# File lib/shrine/plugins/instrumentation.rb, line 33
def instrument(event_name, payload = {}, &block)
  payload[:uploader] = self

  notifications.instrument("#{event_name}.shrine", payload, &block)
end
subscribe(event_name, &subscriber) click to toggle source

Subscribes to a ‘*.shrine` event. It rejects duplicate subscribers.

# subscribes to the `storage_upload.shrine` event
Shrine.subscribe(:storage_upload) do |event|
  event.name #=> :storage_upload
  event.payload #=> { location: "...", ... }
  event[:location] #=> "..."
  event.duration #=> 50 (in milliseconds)
end
# File lib/shrine/plugins/instrumentation.rb, line 48
def subscribe(event_name, &subscriber)
  return if subscriber.nil?
  return if subscribers[event_name]&.include?(subscriber)

  notifications.subscribe("#{event_name}.shrine") do |event|
    subscriber.call(event) if event[:uploader] <= self
  end

  subscribers[event_name] ||= []
  subscribers[event_name] << subscriber
end

Private Instance Methods

notifications() click to toggle source
# File lib/shrine/plugins/instrumentation.rb, line 62
def notifications
  Notifications.new(opts[:instrumentation][:notifications])
end
subscribers() click to toggle source
# File lib/shrine/plugins/instrumentation.rb, line 66
def subscribers
  opts[:instrumentation][:subscribers]
end