USAGE.md
changeset 17 23c7f5c8ee39
child 20 9d59d30685cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USAGE.md	Tue May 16 13:58:34 2017 -0700
@@ -0,0 +1,126 @@
+
+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.
+
+