Class: ToiletTracker::Services::ShiftService
- Inherits:
-
Object
- Object
- ToiletTracker::Services::ShiftService
- Defined in:
- lib/toilet_tracker/services/shift_service.rb
Defined Under Namespace
Classes: ShiftEntry
Instance Attribute Summary collapse
-
#timezone_service ⇒ Object
readonly
Returns the value of attribute timezone_service.
Instance Method Summary collapse
- #clear_all_history ⇒ Object
- #clear_history(user) ⇒ Object
- #get_active_shift(user, at_time = Time.current) ⇒ Object
- #get_shift_history(user) ⇒ Object
-
#initialize(timezone_service = TimezoneService.new) ⇒ ShiftService
constructor
A new instance of ShiftService.
- #set_retroactive_shift(user, shift, effective_time, timezone = nil) ⇒ Object
- #set_shift(user, shift, effective_time = Time.current, timezone = nil) ⇒ Object
- #set_timezone(user, timezone_spec, effective_time = Time.current) ⇒ Object
Constructor Details
#initialize(timezone_service = TimezoneService.new) ⇒ ShiftService
Returns a new instance of ShiftService.
10 11 12 13 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 10 def initialize(timezone_service = TimezoneService.new) @timezone_service = timezone_service @user_shifts = Hash.new { |h, k| h[k] = [ default_shift_entry ] } end |
Instance Attribute Details
#timezone_service ⇒ Object (readonly)
Returns the value of attribute timezone_service.
8 9 10 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 8 def timezone_service @timezone_service end |
Instance Method Details
#clear_all_history ⇒ Object
71 72 73 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 71 def clear_all_history @user_shifts.clear end |
#clear_history(user) ⇒ Object
67 68 69 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 67 def clear_history(user) @user_shifts[user] = [ default_shift_entry ] end |
#get_active_shift(user, at_time = Time.current) ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 55 def get_active_shift(user, at_time = Time.current) history = @user_shifts[user] # Find the most recent shift that was set before or at the given time relevant_entry = history.reverse_each.find { |entry| entry.time <= at_time } relevant_entry&.shift || 0 end |
#get_shift_history(user) ⇒ Object
63 64 65 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 63 def get_shift_history(user) @user_shifts[user].dup end |
#set_retroactive_shift(user, shift, effective_time, timezone = nil) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 28 def set_retroactive_shift(user, shift, effective_time, timezone = nil) validate_shift!(shift) entry = ShiftEntry.new( time: effective_time, shift: shift, timezone: timezone ) # Remove any shifts that were set after this effective time @user_shifts[user].reject! { |existing| existing.time > effective_time } @user_shifts[user] << entry @user_shifts[user].sort_by!(&:time) end |
#set_shift(user, shift, effective_time = Time.current, timezone = nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 15 def set_shift(user, shift, effective_time = Time.current, timezone = nil) validate_shift!(shift) entry = ShiftEntry.new( time: effective_time, shift: shift, timezone: timezone ) @user_shifts[user] << entry @user_shifts[user].sort_by!(&:time) end |
#set_timezone(user, timezone_spec, effective_time = Time.current) ⇒ Object
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/toilet_tracker/services/shift_service.rb', line 44 def set_timezone(user, timezone_spec, effective_time = Time.current) timezone = timezone_service.resolve_timezone(timezone_spec) shift = timezone_service.calculate_shift( ToiletTracker.configuration.default_timezone, timezone, effective_time ) set_shift(user, shift, effective_time, timezone_spec) end |