Git Product home page Git Product logo

mac_address_book's Introduction

mac_address_book

This is a simple wrapper around OS X's AddressBook framework's classes allowing access to the Address Book database from Ruby.

This is mainly an experiment to play with making Ruby interact with Apple frameworks and is not nearly ready for real-world use. I highly recommend checking out MacRuby if you need this functionality.

TODO

  • Tests
  • Fix compatibility bugs with Lion (reading some properties of a Person causes a crash)

Installation & Usage

Installation

clone git://github.com/deardaniel/mac_address_book.git
cd mac_address_book
bundle install
rake install

Accessing the Address Book

Require the library:

require 'mac_address_book'

Use the AddressBook class in the MacAddressBook module to access OS X's address book:

MacAddressBook::AddressBook

See examples below for further usage.

Examples

List all people

p MacAddressBook::AddressBook.people

Display the current user

me = MacAddressBook::AddressBook.me
puts "I am #{me.to_s}"

# Person.formatted_address is an array of hashes.
# Each hash has a :label key and a :value key.
# :label is not unique to each address.
me.formatted_address.each do |address|
  puts "#{address[:label].upcase}\n----\n#{address[:value]}\n\n"
end

Get vCard data for a user

# Returns a string with vcard data
MacAddressBook::AddressBook.me.vcard_representation

Change "me" to the first person in the address book, then back again

old_me = MacAddressBook::AddressBook.me
# show first name
puts "Old me: #{old_me.first}"
# pick a new "me"
new_me = MacAddressBook::AddressBook.people.first
puts "New me should be: #{new_me.first}"
# set "me"
MacAddressBook::AddressBook.me = new_me
puts "New me is: #{MacAddressBook::AddressBook.me.first}"

puts "Resetting me to: #{old_me.first}"
MacAddressBook::AddressBook.me = old_me
puts "Me is now: #{MacAddressBook::AddressBook.me.first}"

Adding a note to a user

me = MacAddressBook::AddressBook.me
to = rand.to_s # Random string (which happens to be numerical)
puts "#{me.note.inspect} => #{to.inspect}"
me.note = to
puts " ==> #{me.note.inspect}"

Show each group's parent groups and subgroups

MacAddressBook::AddressBook.groups.each do |g|
  p "Members of #{g}:", g.members
  p "Subgroups of #{g}:", g.subgroups
end

Contributing to mac_address_book

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
  • Fork the project
  • Start a feature/bugfix branch
  • Commit and push until you are happy with your contribution
  • Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright

Copyright (c) 2011 Daniel Heffernan. See LICENSE.txt for further details.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.