Class: Kodo::Memory::Reminders
- Inherits:
-
Object
- Object
- Kodo::Memory::Reminders
- Defined in:
- lib/kodo/memory/reminders.rb
Constant Summary collapse
- MAX_ACTIVE =
50- MAX_CONTENT_LENGTH =
500
Instance Method Summary collapse
- #active_count ⇒ Object
- #add(content:, due_at:, channel_id: nil, chat_id: nil) ⇒ Object
- #all_active ⇒ Object
- #dismiss(id) ⇒ Object
- #due_reminders ⇒ Object
- #fire!(id) ⇒ Object
-
#initialize(passphrase: nil) ⇒ Reminders
constructor
A new instance of Reminders.
Constructor Details
#initialize(passphrase: nil) ⇒ Reminders
Returns a new instance of Reminders.
13 14 15 16 17 18 |
# File 'lib/kodo/memory/reminders.rb', line 13 def initialize(passphrase: nil) @reminders_dir = File.join(Kodo.home_dir, "memory", "reminders") @passphrase = passphrase FileUtils.mkdir_p(@reminders_dir) @reminders = load_reminders end |
Instance Method Details
#active_count ⇒ Object
68 69 70 |
# File 'lib/kodo/memory/reminders.rb', line 68 def active_count all_active.length end |
#add(content:, due_at:, channel_id: nil, chat_id: nil) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/kodo/memory/reminders.rb', line 20 def add(content:, due_at:, channel_id: nil, chat_id: nil) if active_count >= MAX_ACTIVE raise Kodo::Error, "Too many active reminders (max #{MAX_ACTIVE}). Dismiss some first." end now = Time.now.iso8601 reminder = { "id" => SecureRandom.uuid, "content" => content, "due_at" => due_at.is_a?(Time) ? due_at.iso8601 : due_at, "channel_id" => channel_id, "chat_id" => chat_id, "status" => "active", "created_at" => now } @reminders << reminder save_reminders reminder end |
#all_active ⇒ Object
64 65 66 |
# File 'lib/kodo/memory/reminders.rb', line 64 def all_active @reminders.select { |r| r["status"] == "active" } end |
#dismiss(id) ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/kodo/memory/reminders.rb', line 41 def dismiss(id) reminder = @reminders.find { |r| r["id"] == id && r["status"] == "active" } return nil unless reminder reminder["status"] = "dismissed" save_reminders reminder end |
#due_reminders ⇒ Object
59 60 61 62 |
# File 'lib/kodo/memory/reminders.rb', line 59 def due_reminders now = Time.now all_active.select { |r| Time.parse(r["due_at"]) <= now } end |
#fire!(id) ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'lib/kodo/memory/reminders.rb', line 50 def fire!(id) reminder = @reminders.find { |r| r["id"] == id && r["status"] == "active" } return nil unless reminder reminder["status"] = "fired" save_reminders reminder end |