module JSONAPI::Instrumentation
def self.build_relationship_payload(resource_type, resource_id, relationship_name, related_type, related_ids)
def self.build_relationship_payload(resource_type, resource_id, relationship_name, related_type, related_ids) { resource_type:, resource_id:, relationship_name: }.tap do |p| p[:related_type] = related_type if related_type p[:related_ids] = Array(related_ids) if related_ids end end
def self.enabled?
def self.enabled? defined?(Rails) && Rails.respond_to?(:event) && Rails.event.respond_to?(:notify) end
def self.notify_relationship(action, resource_type, payload)
def self.notify_relationship(action, resource_type, payload) Rails.event.tagged("jsonapi", "relationship") do Rails.event.notify("jsonapi.#{resource_type}.relationship.#{action}", payload) end end
def self.relationship_event(action:, resource_type:, resource_id:, relationship_name:, related_ids: nil,
def self.relationship_event(action:, resource_type:, resource_id:, relationship_name:, related_ids: nil, related_type: nil) return unless enabled? payload = build_relationship_payload(resource_type, resource_id, relationship_name, related_type, related_ids) notify_relationship(action, resource_type, payload) end
def self.resource_event(action:, resource_type:, resource_id:, changes: {})
def self.resource_event(action:, resource_type:, resource_id:, changes: {}) return unless enabled? Rails.event.tagged("jsonapi") do Rails.event.notify( "jsonapi.#{resource_type}.#{action}", resource_type:, resource_id:, changes: changes.compact, ) end end