Class: ExisRay::Current

Inherits:
ActiveSupport::CurrentAttributes
  • Object
show all
Defined in:
lib/exis_ray/current.rb

Overview

Clase base para la gestión del contexto de negocio (User, ISP, Correlation). Debe ser heredada por la aplicación host (ej: class Current < ExisRay::Current).

Instance Method Summary collapse

Instance Method Details

#correlation_id=(id) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/exis_ray/current.rb', line 47

def correlation_id=(id)
  super
  assign_session_request_id(id)
  ActiveResource::Base.headers["CorrelationId"] = sanitize_header_value(id) if defined?(ActiveResource::Base)
  PaperTrail.request.controller_info = { correlation_id: id } if defined?(PaperTrail)
  sync_reporter_correlation_id(id)
end

#correlation_id?Boolean

Usa present? intencionalmente: un string vacío no es un correlation_id válido, a diferencia de user_id/isp_id donde 0 es un valor legítimo.

Returns:

  • (Boolean)


92
93
94
# File 'lib/exis_ray/current.rb', line 92

def correlation_id?
  correlation_id.present?
end

#ispObject



75
76
77
78
79
80
# File 'lib/exis_ray/current.rb', line 75

def isp
  return nil if isp_id.nil?
  return nil unless defined?(::Isp) && ::Isp.respond_to?(:find_by)

  @isp_object ||= ::Isp.find_by(id: isp_id) # rubocop:disable Naming/MemoizedInstanceVariableName
end

#isp=(object) ⇒ Object



71
72
73
# File 'lib/exis_ray/current.rb', line 71

def isp=(object)
  self.isp_id = object&.id
end

#isp?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/exis_ray/current.rb', line 86

def isp?
  !isp_id.nil?
end

#isp_id=(id) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/exis_ray/current.rb', line 39

def isp_id=(id)
  @isp_object = nil
  super
  return unless defined?(ActiveResource::Base)

  ActiveResource::Base.headers["IspId"] = sanitize_header_value(id)
end

#userObject



64
65
66
67
68
69
# File 'lib/exis_ray/current.rb', line 64

def user
  return nil if user_id.nil?
  return nil unless defined?(::User) && ::User.respond_to?(:find_by)

  @user_object ||= ::User.find_by(id: user_id) # rubocop:disable Naming/MemoizedInstanceVariableName
end

#user=(object) ⇒ Object

— Helpers de Objetos (Lazy Loading con cache por request) — Estos métodos asumen que la app host tiene modelos ::User e ::Isp. Memoizan el objeto en @user_object/@isp_object, que se limpian en el bloque resets al final de cada request/job, y al asignar un nuevo user_id/isp_id.



60
61
62
# File 'lib/exis_ray/current.rb', line 60

def user=(object)
  self.user_id = object&.id
end

#user?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/exis_ray/current.rb', line 82

def user?
  !user_id.nil?
end

#user_id=(id) ⇒ Object

— Setters con Hooks —



30
31
32
33
34
35
36
37
# File 'lib/exis_ray/current.rb', line 30

def user_id=(id)
  @user_object = nil
  super
  ActiveResource::Base.headers["UserId"] = sanitize_header_value(id) if defined?(ActiveResource::Base)
  return unless defined?(PaperTrail)

  PaperTrail.request.whodunnit = id
end