Class: ExisRay::Current
- Inherits:
-
ActiveSupport::CurrentAttributes
- Object
- ActiveSupport::CurrentAttributes
- ExisRay::Current
- 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).
Class Method Summary collapse
-
.log_fields ⇒ Hash
Hook overridable por la subclass de la app host.
Instance Method Summary collapse
- #correlation_id=(id) ⇒ Object
-
#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.
- #isp ⇒ Object
- #isp=(object) ⇒ Object
- #isp? ⇒ Boolean
- #isp_id=(id) ⇒ Object
- #user ⇒ Object
-
#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.
- #user? ⇒ Boolean
-
#user_id=(id) ⇒ Object
— Setters con Hooks —.
Class Method Details
.log_fields ⇒ Hash
Hook overridable por la subclass de la app host. Retorna un Hash de campos extra a inyectar en cada log line, junto a ‘user_id`/`isp_id`/`correlation_id`.
Pensado para cubrir tanto constantes de proceso (declaradas como ‘freeze`-d constants en la subclass) como valores dinámicos per-request (leídos de atributos de Current). El JsonFormatter invoca este método en cada log y mergea el resultado al payload — luego de los campos canónicos pero antes de las keys del propio mensaje del developer (que ganan por override).
31 32 33 |
# File 'lib/exis_ray/current.rb', line 31 def self.log_fields {} end |
Instance Method Details
#correlation_id=(id) ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/exis_ray/current.rb', line 71 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.
116 117 118 |
# File 'lib/exis_ray/current.rb', line 116 def correlation_id? correlation_id.present? end |
#isp ⇒ Object
99 100 101 102 103 104 |
# File 'lib/exis_ray/current.rb', line 99 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
95 96 97 |
# File 'lib/exis_ray/current.rb', line 95 def isp=(object) self.isp_id = object&.id end |
#isp? ⇒ Boolean
110 111 112 |
# File 'lib/exis_ray/current.rb', line 110 def isp? !isp_id.nil? end |
#isp_id=(id) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/exis_ray/current.rb', line 63 def isp_id=(id) @isp_object = nil super return unless defined?(ActiveResource::Base) ActiveResource::Base.headers["IspId"] = sanitize_header_value(id) end |
#user ⇒ Object
88 89 90 91 92 93 |
# File 'lib/exis_ray/current.rb', line 88 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.
84 85 86 |
# File 'lib/exis_ray/current.rb', line 84 def user=(object) self.user_id = object&.id end |
#user? ⇒ Boolean
106 107 108 |
# File 'lib/exis_ray/current.rb', line 106 def user? !user_id.nil? end |
#user_id=(id) ⇒ Object
— Setters con Hooks —
54 55 56 57 58 59 60 61 |
# File 'lib/exis_ray/current.rb', line 54 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 |