Usage ======= Here's a quick rundown of how to use this library. For specifics, see the generated RDoc. Examples -------- ### Print the list address for all lists in a directory: Ezmlm.each_list( '/lists' ) do |list| puts list.address end ### Check if I'm subscribed to a list, and if so, unsubscribe: (You don't really have to check first, subscribe and unsubscribe are idempotent.) list = Ezmlm::List.new( '/lists/waffle-lovers' ) if list.include?( 'mahlon@martini.nu' ) list.unsubscribe( 'mahlon@martini.nu' ) end puts "The list now has %d subscribers!" % [ list.subscribers.size ] ### Iterate over the subscriber list: list.subscribers.each do |subscriber| # ... end ### Make the list moderated, and add a moderator: list.moderated = true list.add_moderator( 'mahlon@martini.nu' ) list.moderated? #=> true All other list behavior tunables operate in a similar fashion, see RDoc for details. ### Archiving! All of the archival pieces take advantage of Ezmlm-IDX extensions. If you want to use these features, you'll want to enable archiving and indexing for your lists, using the -a and -i flags to ezmlm-make. (Enabling archiving with this library also enables indexing and thread indexes, I assume that since you're using ezmlm-idx, you want these enhancements!) list.archived? #=> false list.archived = true list.archived? #=> true If your list(s) already had archiving enabled (the default to ezmlm-make) but not indexing, you can manually run ezmlm-archive to rebuild the necessary files - afterwards, they are kept up to date automatically. ### How many messages are in the archive?: list.message_count #=> 123 ### Fetch message number 100 from the archive: message = list.message( 100 ) or abort "No such message." puts message.subject puts message.body.to_s # Print just the body of the message. puts message.to_s # Print the entire, unparsed message. thread = message.thread # Returns an Ezmlm::List::Thread object author = message.author # Returns an Ezmlm::List::Author object As a general rule, methods called on the Ezmlm::List object return nil if they are unable to perform the requested task. Instantiating the underlying objects directly raise with a specific error. The following are equivalent, but behave differently: message = list.message( 10000 ) # nonexistent message, returns nil message = Ezmlm::List::Message.new( list, 10000 ) # Raises a RuntimeError Message objects act as "Mail" objects from the excellent library from Mikel Lindsaar (https://github.com/mikel/mail). See its documentation for specifics. ### Iterate over messages in a specific thread: Messages know what thread they belong to. Once you have a thread object from a message, it is an enumerable. Iterate or sort on it using standard Ruby methods. thread.each do |message| # ... end Threads are also aware of who participated in the conversation, via the 'authors' and 'each_author' methods. ### Iterate over messages from a specific author: Messages know who authored them. Once you have an author object from a message, it is an enumerable. Iterate or sort on it using standard Ruby methods. author.each do |message| # ... end An Author object is also aware of all threads the author participated in, via the 'threads' and 'each_thread' methods.