module RaspbergAddress
RaspbergAddress — basic 3-field address book (VB Adress Book).
Public Instance Methods
Source
# File lib/raspberg_address.rb, line 9 def add(nick:, text:, store:) parts = text.to_s.split(/\s*\|\s*/, 3) return { error: "Usage: !raspberg address add <name> | <phone> | <address>" } if parts.length < 3 name, phone, address = parts.map(&:strip) return { error: "Name cannot be empty." } if name.empty? contacts = RaspbergAddressStore.load(nick: nick, store: store) if contacts.any? { |c| c["name"].to_s.casecmp(name).zero? } return { error: "Contact already exists: #{name}" } end contact = { "name" => name, "phone" => phone, "address" => address } contacts << contact contacts.sort_by! { |c| c["name"].to_s.downcase } RaspbergAddressStore.save(nick: nick, contacts: contacts, store: store) { contact: contact } end
Source
# File lib/raspberg_address.rb, line 47 def del(nick:, name:, store:) query = name.to_s.strip return { error: "Usage: !raspberg address del <name>" } if query.empty? contacts = RaspbergAddressStore.load(nick: nick, store: store) idx = contacts.index { |c| c["name"].to_s.casecmp(query).zero? } return { error: "No contact found: #{query}" } unless idx removed = contacts.delete_at(idx) RaspbergAddressStore.save(nick: nick, contacts: contacts, store: store) { contact: removed } end
Source
# File lib/raspberg_address.rb, line 60 def find_contact(nick:, name:, store:) RaspbergAddressStore.load(nick: nick, store: store).find do |c| c["name"].to_s.casecmp(name).zero? end end
Source
# File lib/raspberg_address.rb, line 38 def list(nick:, letter: nil, store:) contacts = RaspbergAddressStore.load(nick: nick, store: store) if letter && !letter.to_s.strip.empty? ch = letter.to_s.strip[0].upcase contacts = contacts.select { |c| c["name"].to_s[0]&.upcase == ch } end { contacts: contacts } end
Source
# File lib/raspberg_address.rb, line 28 def show(nick:, name:, store:) query = name.to_s.strip return { error: "Usage: !raspberg address show <name>" } if query.empty? contact = find_contact(nick: nick, name: query, store: store) return { error: "No contact found: #{query}" } unless contact { contact: contact } end