Class: ToiletTracker::Configuration
- Inherits:
-
Object
- Object
- ToiletTracker::Configuration
- Defined in:
- lib/toilet_tracker/configuration.rb
Instance Attribute Summary collapse
-
#date_formats ⇒ Object
Returns the value of attribute date_formats.
-
#default_timezone ⇒ Object
Returns the value of attribute default_timezone.
-
#max_shift_hours ⇒ Object
Returns the value of attribute max_shift_hours.
-
#message_patterns ⇒ Object
Returns the value of attribute message_patterns.
Instance Method Summary collapse
- #default_timezone_object ⇒ Object
- #edited_message_suffix ⇒ Object
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
- #valid_shift?(shift) ⇒ Boolean
- #whatsapp_message_pattern ⇒ Object
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/toilet_tracker/configuration.rb', line 9 def initialize @default_timezone = "UTC" @max_shift_hours = 12 # Capture group 1 is always metadata emojis, subsequent groups are pattern-specific @message_patterns = { # 💩 🩸 14:30 event_at_time_only: /💩\s*([^+\-\dA-Za-z\s]*)\s*(\d{1,2}:\d{2})$/, # 💩 🩸 +5 14:30, 💩 🩸 +5:30 14:30 event_at_time_only_shifted: /💩\s*([^+\-\dA-Za-z\s]*)\s*([+-]?\d+(?::\d{2})?)\s+(\d{1,2}:\d{2})$/, # 💩 🩸 Asia/Kolkata 14:30 event_in_timezone_at_time_only: %r{💩\s*([^+\-\dA-Za-z\s]*)\s*([A-Za-z_/][A-Za-z0-9_/+-]*)\s+(\d{1,2}:\d{2})$}, # 🚽 📍 +5 14:30, 🚽 📍 +5:30 14:30 shift_set_at_time_only: /🚽\s*([^+\-\dA-Za-z\s]*)\s*([+-]?\d+(?::\d{2})?)\s+(\d{1,2}:\d{2})$/, # 🚽 📍 Asia/Kolkata 14:30 timezone_set_at_time_only: %r{🚽\s*([^+\-\dA-Za-z\s]*)\s*([A-Za-z_/][A-Za-z0-9_/+-]*)\s+(\d{1,2}:\d{2})$}, # 🚽 📍 +2, 🚽 📍 -3, 🚽 📍 +5:30 shift_set: /🚽\s*([^+\-\dA-Za-z\s]*)\s*([+-]?\d+(?::\d{2})?)$/, # 🚽 📍 +2 2025-01-15 14:30, 🚽 📍 +5:30 2025-01-15 14:30 shift_set_at_time: %r{🚽\s*([^+\-\dA-Za-z\s]*)\s*([+-]?\d+(?::\d{2})?)\s+(\d{4}[-/]\d{1,2}[-/]\d{1,2}\s+\d{1,2}:\d{1,2}(?::\d{1,2})?)$}, # 🚽 📍 Europe/Rome, 🚽 📍 PST timezone_set: %r{🚽\s*([^+\-\dA-Za-z\s]*)\s*([A-Za-z_/][A-Za-z0-9_/+-]*)$}, # 🚽 📍 Asia/Kolkata 2025-01-15 14:30 timezone_set_at_time: %r{🚽\s*([^+\-\dA-Za-z\s]*)\s*([A-Za-z_/][A-Za-z0-9_/+-]*)\s+(\d{4}[-/]\d{1,2}[-/]\d{1,2}\s+\d{1,2}:\d{1,2}(?::\d{1,2})?)$}, # 💩, 💩 🩸 event_now: /💩\s*([^+\-\dA-Za-z\s]*)$/, # 💩 🩸 +2, 💩 🩸 -1, 💩 🩸 +5:30 event_now_shifted: /💩\s*([^+\-\dA-Za-z\s]*)\s*([+-]?\d+(?::\d{2})?)$/, # 💩 🩸 2025-01-15 14:30 event_at_time: %r{💩\s*([^+\-\dA-Za-z\s]*)\s*(\d{4}[-/]\d{1,2}[-/]\d{1,2}\s+\d{1,2}:\d{1,2}(?::\d{1,2})?)$}, # 💩 🩸 +2 2025-01-15 14:30, 💩 🩸 +5:30 2025-01-15 14:30 event_at_time_shifted: %r{💩\s*([^+\-\dA-Za-z\s]*)\s*([+-]?\d+(?::\d{2})?)\s+(\d{4}[-/]\d{1,2}[-/]\d{1,2}\s+\d{1,2}:\d{1,2}(?::\d{1,2})?)$}, # 💩 🩸 Europe/Rome, 💩 🩸 PST event_in_timezone: %r{💩\s*([^+\-\dA-Za-z\s]*)\s*([A-Za-z_/][A-Za-z0-9_/+-]*)\s*$}, # 💩 🩸 Asia/Kolkata 2025-01-15 14:30 event_in_timezone_at_time: %r{💩\s*([^+\-\dA-Za-z\s]*)\s*([A-Za-z_/][A-Za-z0-9_/+-]*)\s+(\d{4}[-/]\d{1,2}[-/]\d{1,2}\s+\d{1,2}:\d{1,2}(?::\d{1,2})?)$} } @date_formats = [ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M", "%Y/%m/%d %H:%M:%S", "%Y/%m/%d %H:%M", "%H:%M" ] end |
Instance Attribute Details
#date_formats ⇒ Object
Returns the value of attribute date_formats.
7 8 9 |
# File 'lib/toilet_tracker/configuration.rb', line 7 def date_formats @date_formats end |
#default_timezone ⇒ Object
Returns the value of attribute default_timezone.
7 8 9 |
# File 'lib/toilet_tracker/configuration.rb', line 7 def default_timezone @default_timezone end |
#max_shift_hours ⇒ Object
Returns the value of attribute max_shift_hours.
7 8 9 |
# File 'lib/toilet_tracker/configuration.rb', line 7 def max_shift_hours @max_shift_hours end |
#message_patterns ⇒ Object
Returns the value of attribute message_patterns.
7 8 9 |
# File 'lib/toilet_tracker/configuration.rb', line 7 def @message_patterns end |
Instance Method Details
#default_timezone_object ⇒ Object
54 55 56 57 |
# File 'lib/toilet_tracker/configuration.rb', line 54 def default_timezone_object ActiveSupport::TimeZone[@default_timezone] || (raise Core::InvalidTimezone, @default_timezone) end |
#edited_message_suffix ⇒ Object
69 70 71 |
# File 'lib/toilet_tracker/configuration.rb', line 69 def "<This message was edited>" end |
#valid_shift?(shift) ⇒ Boolean
59 60 61 |
# File 'lib/toilet_tracker/configuration.rb', line 59 def valid_shift?(shift) (shift.is_a?(Integer) || shift.is_a?(Float)) && shift.abs <= max_shift_hours end |
#whatsapp_message_pattern ⇒ Object
63 64 65 66 67 |
# File 'lib/toilet_tracker/configuration.rb', line 63 def # WhatsApp exports vary by platform and locale: years are either 2 or 4 # digits, day and month may be zero-padded or not, and seconds may be absent. @whatsapp_message_pattern ||= %r{\[(?<day>\d{1,2})/(?<month>\d{1,2})/(?<year>\d{4}|\d{2}),\s*(?<time>\d{1,2}:\d{2}(?::\d{2})?)\]\s*(?<sender>[^:]+):\s*(?<content>.+?)(?:\s*<This message was edited>)?$} end |