From b4cc830bf8c78546ceff5f3fdc98dba05f31d0e9 Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Sun, 3 Mar 2024 10:33:24 +0000 Subject: [PATCH] Parse dates from CardDAV MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We’re now correctly building an array of names and birthdates from CardDAV data --- lib/birthdaze.rb | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/birthdaze.rb b/lib/birthdaze.rb index e0f5855..6c6ee2e 100644 --- a/lib/birthdaze.rb +++ b/lib/birthdaze.rb @@ -6,22 +6,41 @@ class Birthdaze < Thor desc "generate", "Generate calendars" def generate puts "Generate calendars" - auth(config["url"], config["username"], config["password"]) + birthdays end private - def config - config_file = "#{ENV["HOME"]}/.config/birthdaze.yaml" + def config(config_file = "#{ENV["HOME"]}/.config/birthdaze.yaml") unless File.file?(config_file) puts "Please add a configuration file" return end + @config ||= YAML.load_file(config_file) end - def auth(url, username, password) - config - client = Carddav::Client.new(url, username, password) + def client(url: config["url"], username: config["username"], password: config["password"]) + @client ||= Carddav::Client.new(url, username, password) + end + + def birthdays + birthdays = [] + client.cards.each do |card| + card = card.parsed.to_s + birthday = birthday_regex.match(card)[1] if birthday_regex.match?(card) + name = name_regex.match(card)[1] if name_regex.match?(card) + birthdays << [ name, birthday ] if name && birthday + end + birthdays + end + + def birthday_regex + # We need the dash for dates which don’t specify a year + /.*BDAY.*:([\d-]*).*/ + end + + def name_regex + /FN.*:(.*)/ end end