TamTam

Build Status

TamTam is a Ruby gem to parse, filter, and analyze logs from chat clients. You can filter by various factors: date, participants, or contents.

TamTam is agnostic to operating system and chat client, and ships with adapters for:

  • Adium (OS X)

Additional adapters are planned, and welcome via pull request.

Installation

On the command line:

gem install tam_tam

Or via Bundler:

gem "tam_tam"

Usage

Instantiation

Create a new logs object with the default Adium adapter:

require "tam_tam"
logs = TamTam.new

Specify an adapter:

logs = TamTam.new(adapter: :messages)

List all registered adapters:

TamTam.adapters # [:adium, :messages]

Use a non-standard path for log files:

TamTam.new(path: "/path/to/logs")

Limiting the loaded adapters

When you require "tam_tam", all the included adapters are loaded. If you want to save memory and require only the one(s) you need, you may do so:

require "tam_tam/adapters/adium"

logs = TamTam.new

If an adapter is not provided when calling .new, TamTam defaults to the Adium adapter, or the first registered adapter if the Adium adapter has not been loaded. Details on using custom adapters are included later in this guide.

Filtering logs

Logs can be filtered by participants and date. All the filter methods are chainable, and return a new TamTam::Logs object with the filters applied.

#as

Limits logs to the account you were chatting as. Accepts any number of string arguments with the username of the account.

logs.as("MyAIMScreenName")
logs.as("MyAIMScreenName", "[email protected]")

#with

Limits logs to the account you were chatting with. Like as, accepts any number of string arguments with the username of the account.

logs.with("MyFriendJoe")
logs.with("MyFriendJoe", "[email protected]")

#on

Limits logs to chats that occurred on a particular date. The date can be supplied as a string (any format Chronic accepts) or a temporal object (Date, Time, etc.)

logs.on("September 23, 2013")
logs.on(Date.today)
logs.on(Time.now)

#between

Limits logs to chats that occurred within a date range. Takes two dates, which, like on, can be strings or temporal objects.

logs.between(5.days.ago, Date.today)

Accessing messages

Once you have filtered logs down to the set you want, you can examine the messages themselves:

messages = logs.messages

At this point, the logs on disk are loaded into memory, so the first call to messages may take a while, depending on how many logs are being loaded. The messages object is enumerable, and can receive any of the usual iteration and transformation methods.

Filtering messages

Messages can be filtered by contents. All the filter methods are chainable and return a new TamTam::MessageSet object with the filters applied.

#including

Limits messages to those that include the provided substring.

messages.including("how do you feel about")

#matching

Limits messages to those that match the provided regular expression.

messages.matching(/^lol,?\s+/)

#sent_by

Limits messages to those sent by the provided username.

messages.sent_by("MyFriendJoe")

Analyzing logs

These methods return interesting data about the messages.

#by_count

Returns a hash of all the messages grouped by text and the number of times a message with that text was sent. Useful for seeing what messages/phrases you and your chat buddies say most often.

messages.by_count # { "hi" => 4, "how's it going?" => 2 }

Individual messages

When enumerating messages, each message is a TamTam::Message object with the following attributes:

#sender

The username of the person who sent the message.

#text

The body of the message.

#time

The date and time the message was sent, as a Time object.

Custom adapters

An adapter is a class that inherits from TamTam::Adapter and implements its abstract interface. Once you have defined your adapter class, register it with TamTam:

TamTam.register_adapter(:crazy_chat, CrazyChatAdapter)

Adapters must define the following methods:

  • .default_path
  • #default_matches
  • #load_messages
  • #as
  • #with
  • #on
  • #between

See any of the included adapters for examples.

Contributing

Issues and pull requests are welcome! If you're opening a pull request, please make sure your branch maintains full test coverage (open coverage/index.html after running the specs), and that you don't get any warnings from running cane.

License

TamTam is available under the MIT license. See the provided LICENSE.txt for details.