Class: Legion::Gaia::NotificationGate::PresenceEvaluator
- Inherits:
-
Object
- Object
- Legion::Gaia::NotificationGate::PresenceEvaluator
- Defined in:
- lib/legion/gaia/notification_gate/presence_evaluator.rb
Constant Summary collapse
- PRESENCE_THRESHOLDS =
{ 'Available' => :ambient, 'Busy' => :urgent, 'Away' => :urgent, 'BeRightBack' => :urgent, 'DoNotDisturb' => :critical, 'Offline' => :critical }.freeze
- PRIORITY_ORDER =
{ critical: 4, urgent: 3, normal: 2, low: 1, ambient: 0 }.freeze
Instance Attribute Summary collapse
-
#activity ⇒ Object
readonly
Returns the value of attribute activity.
-
#availability ⇒ Object
readonly
Returns the value of attribute availability.
-
#status_changed_at ⇒ Object
readonly
Returns the value of attribute status_changed_at.
-
#updated_at ⇒ Object
readonly
Returns the value of attribute updated_at.
Instance Method Summary collapse
- #delivery_allowed?(priority: :normal) ⇒ Boolean
-
#initialize ⇒ PresenceEvaluator
constructor
A new instance of PresenceEvaluator.
- #offline_duration ⇒ Object
- #partner_offline?(threshold: 1800) ⇒ Boolean
- #stale?(max_age: 120) ⇒ Boolean
- #transitioned_online?(new_availability) ⇒ Boolean
- #update(availability:, activity: nil) ⇒ Object
Constructor Details
#initialize ⇒ PresenceEvaluator
Returns a new instance of PresenceEvaluator.
20 21 22 23 24 25 26 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 20 def initialize @availability = nil @activity = nil @updated_at = nil @status_changed_at = nil @previous_availability = nil end |
Instance Attribute Details
#activity ⇒ Object (readonly)
Returns the value of attribute activity.
18 19 20 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 18 def activity @activity end |
#availability ⇒ Object (readonly)
Returns the value of attribute availability.
18 19 20 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 18 def availability @availability end |
#status_changed_at ⇒ Object (readonly)
Returns the value of attribute status_changed_at.
18 19 20 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 18 def status_changed_at @status_changed_at end |
#updated_at ⇒ Object (readonly)
Returns the value of attribute updated_at.
18 19 20 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 18 def updated_at @updated_at end |
Instance Method Details
#delivery_allowed?(priority: :normal) ⇒ Boolean
53 54 55 56 57 58 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 53 def delivery_allowed?(priority: :normal) return true unless @availability min_priority = PRESENCE_THRESHOLDS[@availability] || :ambient priority_rank(priority) >= priority_rank(min_priority) end |
#offline_duration ⇒ Object
43 44 45 46 47 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 43 def offline_duration return 0 unless @status_changed_at Time.now.utc - @status_changed_at end |
#partner_offline?(threshold: 1800) ⇒ Boolean
39 40 41 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 39 def partner_offline?(threshold: 1800) @availability == 'Offline' && offline_duration > threshold end |
#stale?(max_age: 120) ⇒ Boolean
60 61 62 63 64 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 60 def stale?(max_age: 120) return true unless @updated_at (Time.now.utc - @updated_at) > max_age end |
#transitioned_online?(new_availability) ⇒ Boolean
49 50 51 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 49 def transitioned_online?(new_availability) @availability == 'Offline' && %w[Available Away BeRightBack].include?(new_availability) end |
#update(availability:, activity: nil) ⇒ Object
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/legion/gaia/notification_gate/presence_evaluator.rb', line 28 def update(availability:, activity: nil) prev = @availability if prev != availability @status_changed_at = Time.now.utc @previous_availability = prev end @availability = availability @activity = activity @updated_at = Time.now.utc end |