]> nos-oignons.net Git - gestion-adh.git/blobdiff - lib/nos_oignons/reminder_db.rb
Implement send-membership-reminders
[gestion-adh.git] / lib / nos_oignons / reminder_db.rb
diff --git a/lib/nos_oignons/reminder_db.rb b/lib/nos_oignons/reminder_db.rb
new file mode 100644 (file)
index 0000000..6052875
--- /dev/null
@@ -0,0 +1,52 @@
+#-*- coding: utf-8 -*-
+
+require 'singleton'
+require 'tempfile'
+
+module NosOignons
+  class ReminderDb
+    DEFAULT_PATH = File.expand_path('../../../var/reminders.yaml', __FILE__)
+
+    include Singleton
+
+    def db_path
+      ENV['NOS_OIGNONS_REMINDER_DB'] || DEFAULT_PATH
+    end
+
+    def initialize
+      reload!
+    end
+
+    def reload!
+      # hash of email => last_reminder_date
+      begin
+        @reminders = YAML.load_file(db_path)
+      rescue Errno::ENOENT
+        @reminders = {}
+      end
+    end
+
+    def save
+      # save using atomic rename
+      file = Tempfile.new('reminder_db', File.dirname(db_path))
+      begin
+        file.write(YAML.dump(@reminders))
+        file.close
+        File.rename file.path, db_path
+      rescue
+        file.unlink
+        raise
+      end
+    end
+
+    def last_reminder(member)
+      @reminders[member.email]
+    end
+
+    def record(member)
+      @reminders[member.email] = Time.now.to_date
+      # Not efficient, but let's put people's mailbox as first priority
+      save
+    end
+  end
+end