Conspire is an incredibly cool app. It scans your inbox, and allows you to see the various ways in which you are connected to other people based on your email history and the history of other people who also use Conspire.
The goal of this exercise is to create an algorithm inspired by Conspire. Your mission, should you choose to accept it, is to figure out the relationships between people, purely based on their emails.
Your code should be able to:
- take an email address
- read through all of the emails in a given directory
- return data about each person the given email address has interacted with
Imagine two people: Sue and Joe.
Find Current Friends
We would say Sue is Joe's current friend if:
- Sue has sent 3 or more emails to Joe (ever)
- Joe has replied to 2 out of the last 3 emails
- The last email is within 2 weeks of today
We would also say the inverse is true. So if Sue has sent 3 emails, Joe replied to at least 2 of the last 3 and the latest was within the last 2 weeks, Sue would be his current friend.
Find Old Friends
We would say Sue is Joe's old friend if:
- Sue has sent 3 or more emails to Joe (ever)
- Joe replied to 2 out of every 3 emails
- The last email between them is later than 2 weeks ago
And the inverse would be true as well.
Your code should look something like this:
SomeClass.new('data').relationships('joe@example.com')
and should return a result like this:
{
"alice@example.com" => "Current Friend",
"ephram@example.com" => "Old Friend",
"phillis@example.com" => "Old Friend",
}
When you run your code against the files generated by rake generate
, you should get the following:
- alice@example.com and ephram@example.com are current friends
- inez@example.com and joe@example.com are current friends
- bob@example.com and hillary@example.com are old friends
- cecelia@example.com and fatima@example.com are old friends
Use the Mail Gem to parse the emails. Mail.read
will probably get you what you need.
rake generate
to generate sample data in thedata
directory- See
Rakefile
for examples of how to create Mail objects (useful for specs)
- Fork
- Clone
- Turn on TravisCI for the fork by visiting https://travis-ci.org/profile/, clicking the "Sync now" button and scrolling down to find the repository to build.
- Create a new branch for your work using
git checkout -b v1
- Implement specs and code
- Push using
git push -u origin v1
This warmup can be completed multiple times to increase your comfort level with the material. To work on this from scratch, you can:
- Add an upstream remote that points to the original repo
git remote add upstream git@github.com:gSchool/THIS-REPO.git
- Fetch the latest from the upstream remote using
git fetch upstream
- Create a new branch from the master branch of the upstream remote
git checkout -b v2 upstream/master
- Implement specs and code
- Push using
git push -u origin v2
Each time you do the exercise, create a new branch. For example the 3rd time you do the exercise the branch name will be v3 instead of v2.