tam_tam 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,27 @@
1
+ module TamTam
2
+ # An individual message. Simple wrapper around a Hash with the message data.
3
+ class Message
4
+ attr_accessor :data
5
+ protected :data
6
+
7
+ def initialize(data)
8
+ self.data = data
9
+ end
10
+
11
+ def sender
12
+ data[:sender]
13
+ end
14
+
15
+ def text
16
+ data[:text]
17
+ end
18
+
19
+ def time
20
+ data[:time]
21
+ end
22
+
23
+ def ==(other)
24
+ data == other.data
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,59 @@
1
+ require "tam_tam/message"
2
+
3
+ module TamTam
4
+ # A collection of messages. Responsible for filtering and manipulating
5
+ # messages.
6
+ class MessageSet
7
+ include Enumerable
8
+
9
+ attr_accessor :data
10
+ protected :data
11
+
12
+ def initialize(data)
13
+ self.data = data.map { |data| Message.new(data) }
14
+ end
15
+
16
+ def including(phrase)
17
+ copy = dup
18
+ copy.data = data.select { |message| message.text.include?(phrase) }
19
+ copy
20
+ end
21
+
22
+ def matching(pattern)
23
+ copy = dup
24
+ copy.data = data.select { |message| message.text.match(pattern) }
25
+ copy
26
+ end
27
+
28
+ def sent_by(sender)
29
+ copy = dup
30
+ copy.data = data.select { |message| message.sender == sender }
31
+ copy
32
+ end
33
+
34
+ def by_count
35
+ Hash[group_by { |message| message.text }.inject({}) { |counts, groups|
36
+ counts[groups[0]] = groups[1].size
37
+ counts
38
+ }.sort_by { |key, value| -value }]
39
+ end
40
+
41
+ def each
42
+ data.each { |message| yield message }
43
+ end
44
+
45
+ def ==(other)
46
+ data == other.data
47
+ end
48
+
49
+ def to_s
50
+ %{#<#{self.class.name}:0x#{object_id.to_s(16)} size=#{size}>}
51
+ end
52
+ alias_method :inspect, :to_s
53
+
54
+ def size
55
+ data.size
56
+ end
57
+ alias_method :length, :size
58
+ end
59
+ end
@@ -0,0 +1,3 @@
1
+ module TamTam
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <chat xmlns="http://purl.org/net/ulf/ns/0.4-02" account="bongo" service="AIM">
3
+ <event type="windowOpened" sender="bongo" time="2011-07-23T14:55:48-07:00"></event>
4
+ <message sender="bongita" time="2011-07-23T14:55:47-07:00" alias="Bongita Wongita"><div>ipsam debitis voluptates dicta ut ad enim</div></message>
5
+ <message sender="bongo" time="2011-07-23T14:55:59-07:00" alias="Bongo Wongo"><div>iure quaerat dolorem placeat maiores</div></message>
6
+ <message sender="bongo" time="2011-07-23T14:56:09-07:00" alias="Bongo Wongo"><div>aspernatur assumenda facere sit sint optio</div></message>
7
+ <message sender="bongita" time="2011-07-23T14:56:23-07:00" alias="Bongita Wongita"><div>ut ullam voluptatum iste est</div></message>
8
+ <message sender="bongo" time="2011-07-23T14:56:23-07:00" alias="Bongo Wongo"><div>ducimus voluptatibus blanditiis fugiat</div></message>
9
+ <message sender="bongo" time="2011-07-23T14:56:35-07:00" alias="Bongo Wongo"><div>nostrum consequatur deserunt sint cumque asperiores aut</div></message>
10
+ <message sender="bongita" time="2011-07-23T14:56:41-07:00" alias="Bongita Wongita"><div>quia assumenda debitis doloremque aut qui nihil</div></message>
11
+ <message sender="bongo" time="2011-07-23T14:56:45-07:00" alias="Bongo Wongo"><div>aut culpa qui ratione saepe eum</div></message>
12
+ <message sender="bongita" time="2011-07-23T14:56:53-07:00" alias="Bongita Wongita"><div>amet</div></message>
13
+ <message sender="bongita" time="2011-07-23T14:57:05-07:00" alias="Bongita Wongita"><div>cumque fugiat repudiandae saepe sunt dicta cum velit</div></message>
14
+ <message sender="bongo" time="2011-07-23T14:57:07-07:00" alias="Bongo Wongo"><div>voluptas libero fugiat quibusdam sit et ea distinctio excepturi</div></message>
15
+ <message sender="bongita" time="2011-07-23T14:57:15-07:00" alias="Bongita Wongita"><div>velit ad architecto minus laborum</div></message>
16
+ <message sender="bongita" time="2011-07-23T14:58:01-07:00" alias="Bongita Wongita"><div>dolorum consequatur</div></message>
17
+ <message sender="bongo" time="2011-07-23T14:58:24-07:00" alias="Bongo Wongo"><div>velit autem</div></message>
18
+ <message sender="bongo" time="2011-07-23T14:58:30-07:00" alias="Bongo Wongo"><div>aut molestias quis aliquid incidunt ullam</div></message>
19
+ <message sender="bongita" time="2011-07-23T14:58:44-07:00" alias="Bongita Wongita"><div>aut</div></message>
20
+ <message sender="bongita" time="2011-07-23T14:58:57-07:00" alias="Bongita Wongita"><div>iure</div></message>
21
+ <message sender="bongita" time="2011-07-23T14:59:10-07:00" alias="Bongita Wongita"><div>quam doloremque blanditiis dolor atque consectetur eligendi molestiae facere</div></message>
22
+ <message sender="bongita" time="2011-07-23T14:59:21-07:00" alias="Bongita Wongita"><div>autem rerum omnis quaerat et quasi molestiae</div></message>
23
+ <message sender="bongita" time="2011-07-23T14:59:47-07:00" alias="Bongita Wongita"><div>voluptatem est quas adipisci</div></message>
24
+ <message sender="bongo" time="2011-07-23T15:01:35-07:00" alias="Bongo Wongo"><div>quaerat accusantium</div></message>
25
+ <message sender="bongo" time="2011-07-23T15:03:00-07:00" alias="Bongo Wongo"><div>in</div></message>
26
+ <event type="windowClosed" sender="bongo" time="2011-07-23T15:03:36-07:00"></event>
27
+ <event type="windowOpened" sender="bongo" time="2011-07-23T15:03:38-07:00"></event>
28
+ <message sender="bongita" time="2011-07-23T15:03:52-07:00" alias="Bongita Wongita"><div>rerum</div></message>
29
+ <message sender="bongita" time="2011-07-23T15:04:02-07:00" alias="Bongita Wongita"><div>aut facere id est debitis rerum ea fuga laudantium</div></message>
30
+ <message sender="bongita" time="2011-07-23T15:04:09-07:00" alias="Bongita Wongita"><div>odit voluptates doloremque ducimus voluptatibus</div></message>
31
+ <message sender="bongo" time="2011-07-23T15:04:40-07:00" alias="Bongo Wongo"><div>ut suscipit aut</div></message>
32
+ <message sender="bongo" time="2011-07-23T15:04:51-07:00" alias="Bongo Wongo"><div>rerum aut</div></message>
33
+ <message sender="bongo" time="2011-07-23T15:04:58-07:00" alias="Bongo Wongo"><div>delectus fugiat quas nihil occaecati et veniam ipsa</div></message>
34
+ <message sender="bongita" time="2011-07-23T15:06:15-07:00" alias="Bongita Wongita"><div>aut voluptates beatae saepe molestias enim doloribus</div></message>
35
+ <message sender="bongita" time="2011-07-23T15:06:17-07:00" alias="Bongita Wongita"><div>consequatur nihil ut sed nesciunt quis qui ab qui</div></message>
36
+ <message sender="bongita" time="2011-07-23T15:06:33-07:00" alias="Bongita Wongita"><div>autem</div></message>
37
+ <message sender="bongita" time="2011-07-23T15:06:56-07:00" alias="Bongita Wongita"><div>sed perspiciatis autem fugit libero non mollitia est</div></message>
38
+ <message sender="bongita" time="2011-07-23T15:07:12-07:00" alias="Bongita Wongita"><div>non ad aut totam nemo porro</div></message>
39
+ <message sender="bongita" time="2011-07-23T15:07:17-07:00" alias="Bongita Wongita"><div>voluptas porro sit ipsum tempore impedit iusto</div></message>
40
+ <message sender="bongo" time="2011-07-23T15:07:37-07:00" alias="Bongo Wongo"><div>ad ex sed est</div></message>
41
+ <message sender="bongita" time="2011-07-23T15:07:54-07:00" alias="Bongita Wongita"><div>quo non voluptatem non aliquid commodi consequatur ut illo</div></message>
42
+ <message sender="bongita" time="2011-07-23T15:08:07-07:00" alias="Bongita Wongita"><div>rerum natus nisi nostrum doloremque et modi error in</div></message>
43
+ <message sender="bongo" time="2011-07-23T15:08:49-07:00" alias="Bongo Wongo"><div>voluptas</div></message>
44
+ <message sender="bongo" time="2011-07-23T15:09:47-07:00" alias="Bongo Wongo"><div>soluta voluptas voluptatem error voluptatem</div></message>
45
+ <event type="windowClosed" sender="bongo" time="2011-07-23T15:09:48-07:00"></event></chat>
@@ -0,0 +1,126 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <chat xmlns="http://purl.org/net/ulf/ns/0.4-02" account="bongo" service="AIM">
3
+ <event type="windowOpened" sender="bongo" time="2011-07-24T15:10:09-07:00"></event>
4
+ <message sender="bongo" time="2011-07-24T15:10:09-07:00" alias="Bongo Wongo"><div>id tempore repellat quis autem sint ipsum</div></message>
5
+ <message sender="bongita" time="2011-07-24T15:10:17-07:00" alias="Bongita Wongita"><div>alias ut id enim at quae blanditiis tempore</div></message>
6
+ <message sender="bongita" time="2011-07-24T15:10:23-07:00" alias="Bongita Wongita"><div>blanditiis in iure sint</div></message>
7
+ <message sender="bongo" time="2011-07-24T15:10:32-07:00" alias="Bongo Wongo"><div>perspiciatis omnis fugit</div></message>
8
+ <message sender="bongita" time="2011-07-24T15:10:39-07:00" alias="Bongita Wongita"><div>illo</div></message>
9
+ <message sender="bongita" time="2011-07-24T15:10:46-07:00" alias="Bongita Wongita"><div>in debitis inventore ipsa fugiat ipsam molestias</div></message>
10
+ <message sender="bongo" time="2011-07-24T15:10:47-07:00" alias="Bongo Wongo"><div>assumenda nesciunt nisi dolores omnis enim harum</div></message>
11
+ <message sender="bongita" time="2011-07-24T15:10:52-07:00" alias="Bongita Wongita"><div>perferendis odit consequatur omnis nemo provident sequi voluptatibus et</div></message>
12
+ <message sender="bongita" time="2011-07-24T15:11:03-07:00" alias="Bongita Wongita"><div>blanditiis cum velit</div></message>
13
+ <message sender="bongita" time="2011-07-24T15:11:09-07:00" alias="Bongita Wongita"><div>vel nam dolor voluptatum dolorem facere eum voluptas alias</div></message>
14
+ <message sender="bongita" time="2011-07-24T15:11:11-07:00" alias="Bongita Wongita"><div>consequatur iure sit</div></message>
15
+ <message sender="bongo" time="2011-07-24T15:11:13-07:00" alias="Bongo Wongo"><div>tempore in esse veniam enim exercitationem molestias</div></message>
16
+ <message sender="bongita" time="2011-07-24T15:11:18-07:00" alias="Bongita Wongita"><div>officia vel sint</div></message>
17
+ <message sender="bongo" time="2011-07-24T15:11:23-07:00" alias="Bongo Wongo"><div>voluptate nihil autem omnis</div></message>
18
+ <message sender="bongita" time="2011-07-24T15:12:53-07:00" alias="Bongita Wongita"><div>ex quo et saepe</div></message>
19
+ <message sender="bongita" time="2011-07-24T15:12:58-07:00" alias="Bongita Wongita"><div>aperiam quam odit</div></message>
20
+ <message sender="bongita" time="2011-07-24T15:13:11-07:00" alias="Bongita Wongita"><div>quam</div></message>
21
+ <message sender="bongo" time="2011-07-24T15:13:19-07:00" alias="Bongo Wongo"><div>ab nostrum consectetur rerum mollitia sapiente non ratione quaerat</div></message>
22
+ <message sender="bongo" time="2011-07-24T15:13:24-07:00" alias="Bongo Wongo"><div>voluptatem aut itaque ipsam dolorem cum assumenda</div></message>
23
+ <message sender="bongita" time="2011-07-24T15:13:27-07:00" alias="Bongita Wongita"><div>eos et accusantium quisquam</div></message>
24
+ <message sender="bongo" time="2011-07-24T15:19:07-07:00" alias="Bongo Wongo"><div>explicabo assumenda eligendi ut ut molestias quis tempora labore</div></message>
25
+ <message sender="bongo" time="2011-07-24T15:19:20-07:00" alias="Bongo Wongo"><div>voluptatibus</div></message>
26
+ <status type="away" sender="bongita" time="2011-07-24T15:20:59-07:00" alias="Bongita Wongita"><div>ea aut sapiente</div></status>
27
+ <status type="idle" sender="bongita" time="2011-07-24T15:20:59-07:00" alias="Bongita Wongita"></status>
28
+ <status type="available" sender="bongita" time="2011-07-24T15:23:23-07:00" alias="Bongita Wongita"></status>
29
+ <status type="online" sender="bongita" time="2011-07-24T15:23:23-07:00" alias="Bongita Wongita"></status>
30
+ <message sender="bongita" time="2011-07-24T15:23:49-07:00" alias="Bongita Wongita"><div>voluptatem et autem est eum fugiat architecto doloremque</div></message>
31
+ <message sender="bongo" time="2011-07-24T15:24:06-07:00" alias="Bongo Wongo"><div>vel voluptatem et rerum accusantium facilis temporibus facere</div></message>
32
+ <status type="away" sender="bongita" time="2011-07-24T15:28:52-07:00" alias="Bongita Wongita"><div>maxime perferendis quis est omnis</div></status>
33
+ <status type="idle" sender="bongita" time="2011-07-24T15:28:52-07:00" alias="Bongita Wongita"></status>
34
+ <status type="online" sender="bongita" time="2011-07-24T15:32:43-07:00" alias="Bongita Wongita"></status>
35
+ <status type="available" sender="bongita" time="2011-07-24T15:32:43-07:00" alias="Bongita Wongita"></status>
36
+ <message sender="bongita" time="2011-07-24T15:32:48-07:00" alias="Bongita Wongita"><div>debitis sit autem libero voluptatem ex</div></message>
37
+ <message sender="bongita" time="2011-07-24T15:33:03-07:00" alias="Bongita Wongita"><div>optio fugit est rerum</div></message>
38
+ <message sender="bongo" time="2011-07-24T15:33:07-07:00" alias="Bongo Wongo"><div>corporis dolor qui molestias ex maiores eaque dolorem</div></message>
39
+ <message sender="bongo" time="2011-07-24T15:33:19-07:00" alias="Bongo Wongo"><div>impedit harum quis</div></message>
40
+ <message sender="bongita" time="2011-07-24T15:34:30-07:00" alias="Bongita Wongita"><div>possimus reprehenderit voluptatem cumque error debitis et et sed</div></message>
41
+ <message sender="bongo" time="2011-07-24T15:34:31-07:00" alias="Bongo Wongo"><div>consequuntur voluptas aliquam molestiae eos ipsa enim illo</div></message>
42
+ <message sender="bongita" time="2011-07-24T15:34:40-07:00" alias="Bongita Wongita"><div>consequatur</div></message>
43
+ <message sender="bongo" time="2011-07-24T15:35:01-07:00" alias="Bongo Wongo"><div>perspiciatis aspernatur voluptatibus eligendi</div></message>
44
+ <message sender="bongo" time="2011-07-24T15:35:07-07:00" alias="Bongo Wongo"><div>repellat</div></message>
45
+ <message sender="bongita" time="2011-07-24T15:35:18-07:00" alias="Bongita Wongita"><div>adipisci dignissimos ut mollitia voluptatem a nam</div></message>
46
+ <message sender="bongo" time="2011-07-24T15:35:23-07:00" alias="Bongo Wongo"><div>adipisci dignissimos ut mollitia voluptatem a nam</div></message>
47
+ <message sender="bongita" time="2011-07-24T15:35:28-07:00" alias="Bongita Wongita"><div>aliquid vitae incidunt aut quas</div></message>
48
+ <message sender="bongita" time="2011-07-24T15:35:34-07:00" alias="Bongita Wongita"><div>fugit veniam suscipit</div></message>
49
+ <message sender="bongita" time="2011-07-24T15:35:37-07:00" alias="Bongita Wongita"><div>temporibus quidem voluptates exercitationem</div></message>
50
+ <message sender="bongo" time="2011-07-24T15:35:40-07:00" alias="Bongo Wongo"><div>velit earum nulla quis dolor perferendis</div></message>
51
+ <message sender="bongo" time="2011-07-24T15:35:45-07:00" alias="Bongo Wongo"><div>ut quasi iste in est</div></message>
52
+ <message sender="bongita" time="2011-07-24T15:35:54-07:00" alias="Bongita Wongita"><div>architecto iste est provident tempora aut</div></message>
53
+ <message sender="bongita" time="2011-07-24T15:38:49-07:00" alias="Bongita Wongita"><div>perspiciatis numquam nisi eaque et voluptas</div></message>
54
+ <message sender="bongita" time="2011-07-24T15:38:52-07:00" alias="Bongita Wongita"><div>et sint nihil id doloremque consectetur consequatur voluptas</div></message>
55
+ <message sender="bongita" time="2011-07-24T15:38:53-07:00" alias="Bongita Wongita"><div>a id</div></message>
56
+ <message sender="bongo" time="2011-07-24T15:39:11-07:00" alias="Bongo Wongo"><div>velit amet rerum pariatur aut voluptate</div></message>
57
+ <message sender="bongita" time="2011-07-24T15:39:43-07:00" alias="Bongita Wongita"><div>officia molestiae quidem consequuntur reiciendis sequi et culpa pariatur</div></message>
58
+ <message sender="bongita" time="2011-07-24T15:40:01-07:00" alias="Bongita Wongita"><div>omnis et quisquam repudiandae sed illo occaecati</div></message>
59
+ <message sender="bongita" time="2011-07-24T15:40:09-07:00" alias="Bongita Wongita"><div>error cumque ipsa enim doloribus quo aliquam</div></message>
60
+ <message sender="bongita" time="2011-07-24T15:40:13-07:00" alias="Bongita Wongita"><div>suscipit repudiandae deserunt sint similique</div></message>
61
+ <message sender="bongita" time="2011-07-24T15:40:16-07:00" alias="Bongita Wongita"><div>sed eum</div></message>
62
+ <message sender="bongo" time="2011-07-24T15:40:44-07:00" alias="Bongo Wongo"><div>non aut eligendi</div></message>
63
+ <message sender="bongita" time="2011-07-24T15:40:55-07:00" alias="Bongita Wongita"><div>animi et est vitae ut qui vel fuga et</div></message>
64
+ <message sender="bongo" time="2011-07-24T15:41:05-07:00" alias="Bongo Wongo"><div>cum</div></message>
65
+ <message sender="bongita" time="2011-07-24T15:41:07-07:00" alias="Bongita Wongita"><div>ut doloribus</div></message>
66
+ <message sender="bongita" time="2011-07-24T15:41:08-07:00" alias="Bongita Wongita"><div>eligendi est dolore iste sit</div></message>
67
+ <message sender="bongita" time="2011-07-24T15:45:55-07:00" alias="Bongita Wongita"><div>cupiditate dignissimos maxime non vel iusto modi repellat neque</div></message>
68
+ <message sender="bongita" time="2011-07-24T15:45:58-07:00" alias="Bongita Wongita"><div>ducimus ipsa et et maiores aut occaecati qui quo</div></message>
69
+ <message sender="bongo" time="2011-07-24T15:46:39-07:00" alias="Bongo Wongo"><div>ullam dolorum est magnam velit laborum</div></message>
70
+ <message sender="bongo" time="2011-07-24T15:47:39-07:00" alias="Bongo Wongo"><div>itaque dolore rerum modi odio</div></message>
71
+ <message sender="bongita" time="2011-07-24T15:49:40-07:00" alias="Bongita Wongita"><div>reiciendis ipsam</div></message>
72
+ <status type="purple" time="2011-07-24T15:49:50-07:00"><div>ullam sapiente et eius molestiae accusantium</div></status>
73
+ <status type="purple" time="2011-07-24T15:51:07-07:00"><div>occaecati laudantium quos consequatur</div></status>
74
+ <status type="purple" time="2011-07-24T15:51:09-07:00"><div>rerum incidunt</div></status>
75
+ <message sender="bongo" time="2011-07-24T15:51:27-07:00" alias="Bongo Wongo"><div>accusantium omnis dolorum dignissimos non</div></message>
76
+ <message sender="bongo" time="2011-07-24T15:51:30-07:00" alias="Bongo Wongo"><div>sint animi ipsum delectus voluptatem deserunt vel totam</div></message>
77
+ <message sender="bongo" time="2011-07-24T15:51:39-07:00" alias="Bongo Wongo"><div>et nemo aperiam illo et perspiciatis</div></message>
78
+ <message sender="bongo" time="2011-07-24T15:51:40-07:00" alias="Bongo Wongo"><div>voluptatum necessitatibus tempore aliquid magnam consectetur corrupti</div></message>
79
+ <message sender="bongita" time="2011-07-24T15:51:44-07:00" alias="Bongita Wongita"><div>laboriosam minus quos occaecati ut porro modi molestias</div></message>
80
+ <message sender="bongo" time="2011-07-24T15:51:49-07:00" alias="Bongo Wongo"><div>enim ea distinctio rerum eaque iusto harum</div></message>
81
+ <message sender="bongo" time="2011-07-24T15:51:51-07:00" alias="Bongo Wongo"><div>sint ex et necessitatibus optio</div></message>
82
+ <message sender="bongo" time="2011-07-24T15:51:55-07:00" alias="Bongo Wongo"><div>fugit tenetur vel et enim rerum</div></message>
83
+ <message sender="bongita" time="2011-07-24T15:51:56-07:00" alias="Bongita Wongita"><div>et consequatur eligendi ut aut totam commodi</div></message>
84
+ <message sender="bongo" time="2011-07-24T15:51:59-07:00" alias="Bongo Wongo"><div>quam occaecati qui nulla et sed molestiae</div></message>
85
+ <message sender="bongo" time="2011-07-24T15:52:03-07:00" alias="Bongo Wongo"><div>quia nobis error dolor ipsa dolorem</div></message>
86
+ <message sender="bongita" time="2011-07-24T15:52:09-07:00" alias="Bongita Wongita"><div>quia id</div></message>
87
+ <message sender="bongita" time="2011-07-24T15:52:12-07:00" alias="Bongita Wongita"><div>expedita est sed corporis</div></message>
88
+ <message sender="bongo" time="2011-07-24T15:52:12-07:00" alias="Bongo Wongo"><div>quam animi culpa excepturi quis</div></message>
89
+ <message sender="bongita" time="2011-07-24T15:52:17-07:00" alias="Bongita Wongita"><div>qui</div></message>
90
+ <message sender="bongita" time="2011-07-24T15:52:21-07:00" alias="Bongita Wongita"><div>suscipit inventore sed</div></message>
91
+ <message sender="bongo" time="2011-07-24T15:52:24-07:00" alias="Bongo Wongo"><div>eos iste incidunt natus molestiae hic</div></message>
92
+ <message sender="bongo" time="2011-07-24T15:52:28-07:00" alias="Bongo Wongo"><div>adipisci voluptates</div></message>
93
+ <message sender="bongo" time="2011-07-24T15:52:31-07:00" alias="Bongo Wongo"><div>doloribus qui dignissimos sequi</div></message>
94
+ <message sender="bongita" time="2011-07-24T15:53:08-07:00" alias="Bongita Wongita"><div>ea voluptatibus omnis veritatis rem ab et</div></message>
95
+ <message sender="bongo" time="2011-07-24T15:53:55-07:00" alias="Bongo Wongo"><div>ex asperiores dolorem</div></message>
96
+ <message sender="bongita" time="2011-07-24T15:55:11-07:00" alias="Bongita Wongita"><div>rerum consequatur eum est sed</div></message>
97
+ <message sender="bongo" time="2011-07-24T15:55:32-07:00" alias="Bongo Wongo"><div>quo voluptas ratione et aliquam</div></message>
98
+ <message sender="bongita" time="2011-07-24T15:55:39-07:00" alias="Bongita Wongita"><div>exercitationem blanditiis voluptatem delectus vel facilis est</div></message>
99
+ <message sender="bongita" time="2011-07-24T15:55:42-07:00" alias="Bongita Wongita"><div>perspiciatis quos</div></message>
100
+ <message sender="bongo" time="2011-07-24T15:55:47-07:00" alias="Bongo Wongo"><div>voluptate adipisci</div></message>
101
+ <message sender="bongo" time="2011-07-24T15:55:48-07:00" alias="Bongo Wongo"><div>maiores architecto eligendi in</div></message>
102
+ <message sender="bongita" time="2011-07-24T15:56:11-07:00" alias="Bongita Wongita"><div>ipsam molestiae alias molestiae adipisci qui praesentium ullam quo</div></message>
103
+ <message sender="bongo" time="2011-07-24T15:56:50-07:00" alias="Bongo Wongo"><div>deserunt</div></message>
104
+ <message sender="bongo" time="2011-07-24T15:57:06-07:00" alias="Bongo Wongo"><div>dicta delectus ut rerum est veritatis repellat</div></message>
105
+ <message sender="bongo" time="2011-07-24T15:57:11-07:00" alias="Bongo Wongo"><div>ut dolor</div></message>
106
+ <message sender="bongita" time="2011-07-24T15:58:02-07:00" alias="Bongita Wongita"><div>inventore velit enim minus itaque ut</div></message>
107
+ <message sender="bongita" time="2011-07-24T15:58:28-07:00" alias="Bongita Wongita"><div>illum voluptatum</div></message>
108
+ <message sender="bongo" time="2011-07-24T15:59:58-07:00" alias="Bongo Wongo"><div>exercitationem et</div></message>
109
+ <message sender="bongo" time="2011-07-24T16:05:24-07:00" alias="Bongo Wongo"><div>cum quia nihil quasi voluptas nam est</div></message>
110
+ <message sender="bongo" time="2011-07-24T16:05:34-07:00" alias="Bongo Wongo"><div>nesciunt</div></message>
111
+ <message sender="bongita" time="2011-07-24T16:05:45-07:00" alias="Bongita Wongita"><div>temporibus recusandae aut dolorem laborum minima totam sequi autem</div></message>
112
+ <message sender="bongo" time="2011-07-24T16:06:04-07:00" alias="Bongo Wongo"><div>id facere iusto</div></message>
113
+ <message sender="bongita" time="2011-07-24T16:09:00-07:00" alias="Bongita Wongita"><div>et cum ut mollitia soluta molestias ipsa sed</div></message>
114
+ <message sender="bongita" time="2011-07-24T16:09:07-07:00" alias="Bongita Wongita"><div>error non eum voluptatum in ut architecto optio eos</div></message>
115
+ <message sender="bongita" time="2011-07-24T16:09:18-07:00" alias="Bongita Wongita"><div>voluptas suscipit qui iste rerum dolores ratione</div></message>
116
+ <message sender="bongita" time="2011-07-24T16:09:23-07:00" alias="Bongita Wongita"><div>maiores ducimus at</div></message>
117
+ <message sender="bongita" time="2011-07-24T16:11:37-07:00" alias="Bongita Wongita"><div>voluptatem</div></message>
118
+ <message sender="bongita" time="2011-07-24T16:11:44-07:00" alias="Bongita Wongita"><div>soluta nisi</div></message>
119
+ <message sender="bongita" time="2011-07-24T16:18:28-07:00" alias="Bongita Wongita"><div>sed et aliquam quia inventore aut omnis</div></message>
120
+ <message sender="bongita" time="2011-07-24T16:18:31-07:00" alias="Bongita Wongita"><div>natus explicabo incidunt quia</div></message>
121
+ <message sender="bongita" time="2011-07-24T16:18:48-07:00" alias="Bongita Wongita"><div>est atque voluptatem vel est quia quam fugit</div></message>
122
+ <message sender="bongita" time="2011-07-24T16:24:14-07:00" alias="Bongita Wongita"><div>voluptates repellendus non ipsum ducimus molestias</div></message>
123
+ <message sender="bongita" time="2011-07-24T16:24:33-07:00" alias="Bongita Wongita"><div>quis</div></message>
124
+ <message sender="bongita" time="2011-07-24T16:24:43-07:00" alias="Bongita Wongita"><div>sunt quas consequuntur maiores velit quos rerum et et</div></message>
125
+ <status type="offline" sender="bongita" time="2011-07-24T16:25:15-07:00" alias="Bongita Wongita"></status>
126
+ <event type="windowClosed" sender="bongo" time="2011-07-24T16:33:30-07:00"></event></chat>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <chat xmlns="http://purl.org/net/ulf/ns/0.4-02" account="bongo@gmail.com" service="GTalk">
3
+ <event type="windowOpened" sender="bongo@gmail.com" time="2012-01-13T11:27:55-08:00"></event>
4
+ <message sender="bongo@gmail.com" time="2012-01-13T11:27:55-08:00" alias="Bongo Wongo"><div>eaque quia est</div></message>
5
+ <message sender="rumples@gmail.com" time="2012-01-13T11:28:05-08:00" alias="Rumples"><div>hic</div></message>
6
+ <message sender="rumples@gmail.com" time="2012-01-13T11:28:08-08:00" alias="Rumples"><div>reprehenderit ut nihil impedit</div></message>
7
+ <message sender="bongo@gmail.com" time="2012-01-13T11:28:38-08:00" alias="Bongo Wongo"><div>error accusamus</div></message>
8
+ <message sender="rumples@gmail.com" time="2012-01-13T11:28:56-08:00" alias="Rumples"><div>assumenda dolore labore quibusdam aperiam totam et voluptas</div></message>
9
+ <message sender="bongo@gmail.com" time="2012-01-13T11:29:01-08:00" alias="Bongo Wongo"><div>ratione reprehenderit saepe</div></message>
10
+ <message sender="bongo@gmail.com" time="2012-01-13T11:29:05-08:00" alias="Bongo Wongo"><div>accusamus quidem necessitatibus eos facilis libero ea porro</div></message>
11
+ <message sender="rumples@gmail.com" time="2012-01-13T11:29:13-08:00" alias="Rumples"><div>in magnam modi aut cum explicabo</div></message>
12
+ <message sender="bongo@gmail.com" time="2012-01-13T11:29:26-08:00" alias="Bongo Wongo"><div>molestiae dolorem esse enim nihil repellendus accusamus</div></message>
13
+ <message sender="rumples@gmail.com" time="2012-01-13T11:29:39-08:00" alias="Rumples"><div>sit cum inventore doloribus dolor</div></message>
14
+ <message sender="bongo@gmail.com" time="2012-01-13T11:29:50-08:00" alias="Bongo Wongo"><div>unde quam nulla dicta ipsa et voluptatem voluptatum libero</div></message>
15
+ <message sender="rumples@gmail.com" time="2012-01-13T11:30:09-08:00" alias="Rumples"><div>autem</div></message>
16
+ <message sender="bongo@gmail.com" time="2012-01-13T11:31:34-08:00" alias="Bongo Wongo"><div>consequatur numquam corrupti magni</div></message>
17
+ <message sender="bongo@gmail.com" time="2012-01-13T11:31:48-08:00" alias="Bongo Wongo"><div>harum aspernatur quisquam voluptatem labore sed magni quia tempore</div></message>
18
+ <message sender="rumples@gmail.com" time="2012-01-13T11:31:55-08:00" alias="Rumples"><div>nisi odit consequatur</div></message>
19
+ <message sender="bongo@gmail.com" time="2012-01-13T11:40:19-08:00" alias="Bongo Wongo"><div>animi ex dolorum natus quis et</div></message>
20
+ <message sender="bongo@gmail.com" time="2012-01-13T11:45:46-08:00" alias="Bongo Wongo"><div>aut consectetur</div></message>
21
+ <status type="away" sender="rumples@gmail.com" time="2012-01-13T11:50:59-08:00" alias="Rumples"></status>
22
+ <status type="online" sender="rumples@gmail.com" time="2012-01-13T11:58:10-08:00" alias="Rumples"></status>
23
+ <message sender="rumples@gmail.com" time="2012-01-13T11:58:45-08:00" alias="Rumples"><div>velit qui consequuntur qui mollitia excepturi repellat consequatur est</div></message>
24
+ <message sender="rumples@gmail.com" time="2012-01-13T11:58:46-08:00" alias="Rumples"><div>velit distinctio id</div></message>
25
+ <message sender="rumples@gmail.com" time="2012-01-13T11:58:48-08:00" alias="Rumples"><div>omnis cupiditate</div></message>
26
+ <message sender="rumples@gmail.com" time="2012-01-13T11:58:49-08:00" alias="Rumples"><div>eveniet unde nobis et voluptas nesciunt aut ut consequatur</div></message>
27
+ <status type="away" sender="rumples@gmail.com" time="2012-01-13T11:58:51-08:00" alias="Rumples"><div>quia deleniti fugiat omnis autem id</div></status>
28
+ <message sender="bongo@gmail.com" time="2012-01-13T12:14:46-08:00" alias="Bongo Wongo"><div>facilis quis blanditiis</div></message>
29
+ <event type="windowClosed" sender="bongo@gmail.com" time="2012-01-13T12:31:33-08:00"></event></chat>
@@ -0,0 +1,45 @@
1
+ module SpecHelper
2
+ def fixtures_for(adapter)
3
+ File.expand_path(File.join("..", "fixtures", adapter), __FILE__)
4
+ end
5
+ end
6
+
7
+ RSpec.configure do |config|
8
+ config.include(SpecHelper)
9
+ end
10
+
11
+ require "simplecov"
12
+
13
+ class SimpleCov::Formatter::QualityFormatter
14
+ def format(result)
15
+ SimpleCov::Formatter::HTMLFormatter.new.format(result)
16
+ File.open("coverage/covered_percent", "w") do |f|
17
+ f.puts result.source_files.covered_percent.to_i
18
+ end
19
+ end
20
+ end
21
+
22
+ SimpleCov.formatter = SimpleCov::Formatter::QualityFormatter
23
+ SimpleCov.start { add_filter "spec" }
24
+
25
+ require "pry"
26
+ require "debugger"
27
+ require "debugger/pry"
28
+
29
+ require "tam_tam"
30
+
31
+ module TamTam
32
+ module Adapters
33
+ class Test < Adapter
34
+ def self.default_path
35
+ ""
36
+ end
37
+
38
+ def default_matches
39
+ []
40
+ end
41
+ end
42
+ end
43
+
44
+ register_adapter :test, Adapters::Test
45
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ describe TamTam::Adapter do
4
+ it "uses a specified path" do
5
+ adapter = described_class.new("/foo")
6
+ expect(adapter.path).to eq("/foo")
7
+ end
8
+
9
+ it "uses .default_path if no path is specified" do
10
+ expect {
11
+ subject
12
+ }.to raise_error(NoMethodError)
13
+ end
14
+
15
+ describe "#to_s" do
16
+ it "includes the class name, object ID, and path" do
17
+ string = described_class.new("/foo").to_s
18
+ expect(string).to match(%r{#<TamTam::Adapter:0x[a-f0-9]+ path="/foo">})
19
+ end
20
+ end
21
+
22
+ %w[default_matches load_messages as with on between].each do |method|
23
+ it "raises an error if ##{method} is not defined" do
24
+ expect {
25
+ described_class.new("/foo").send(method)
26
+ }.to raise_error(TamTam::AbstractMethodError)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,63 @@
1
+ require "spec_helper"
2
+
3
+ describe TamTam::Adapters::Adium do
4
+ let(:fixtures) { fixtures_for("adium") }
5
+
6
+ subject { described_class.new(fixtures) }
7
+
8
+ describe "#load_messages" do
9
+ it "returns an array of message hashes" do
10
+ matches = Dir["#{fixtures}/GTalk*/**/*.xml"]
11
+ messages = subject.load_messages(matches)
12
+ expect(messages).to respond_to(:each)
13
+ expect(messages.first.keys).to match_array([:sender, :text, :time])
14
+ end
15
+ end
16
+
17
+ describe "#as" do
18
+ it "filters the logs by a single account" do
19
+ expect(subject.as(["bongo"])).to match_array(
20
+ Dir["#{fixtures}/AIM.bongo/**/*.xml"]
21
+ )
22
+ end
23
+
24
+ it "filters the logs by multiple accounts" do
25
+ expect(subject.as(["bongo", "bongo@gmail.com"])).to match_array(
26
+ Dir["#{fixtures}/**/*.xml"]
27
+ )
28
+ end
29
+ end
30
+
31
+ describe "#with" do
32
+ it "filters the logs by a single participant" do
33
+ expect(subject.with(["bongita"])).to match_array(
34
+ Dir["#{fixtures}/AIM.bongo/**/*.xml"]
35
+ )
36
+ end
37
+
38
+ it "filters the logs by multiple participants" do
39
+ expect(subject.with(["bongita", "rumples@gmail.com"])).to match_array(
40
+ Dir["#{fixtures}/**/*.xml"]
41
+ )
42
+ end
43
+ end
44
+
45
+ describe "#on" do
46
+ it "filters the logs by date" do
47
+ expect(subject.on(Time.new(2011, 7, 23))).to match_array(
48
+ Dir["#{fixtures}/AIM.bongo/bongita/*07-23*/*.xml"]
49
+ )
50
+ end
51
+ end
52
+
53
+ describe "#between" do
54
+ it "filters the logs by a date range" do
55
+ start = Time.new(2011, 7, 23)
56
+ stop = Time.new(2011, 7, 24)
57
+
58
+ expect(subject.between(start, stop)).to match_array(
59
+ Dir["#{fixtures}/AIM.bongo/**/*.xml"]
60
+ )
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,101 @@
1
+ require "spec_helper"
2
+
3
+ describe TamTam::LogSet do
4
+ let(:adapter) do
5
+ adapter = double("adapter")
6
+ adapter.stub(:default_matches) { ["foo"] }
7
+ adapter.stub(:load_messages)
8
+ adapter.stub(:as) { "accounts" }
9
+ adapter.stub(:with) { "participants" }
10
+ adapter.stub(:on) { "time" }
11
+ adapter.stub(:between) { "time range" }
12
+ adapter
13
+ end
14
+
15
+ subject { TamTam::LogSet.new(adapter) }
16
+
17
+ it "starts with the default matches from the adapter" do
18
+ expect(subject.matches).to eql(subject.adapter.default_matches)
19
+ end
20
+
21
+ describe "#messages" do
22
+ let(:messages) { double("messages") }
23
+
24
+ before { TamTam::MessageSet.stub(:new).and_return(messages) }
25
+
26
+ it "returns a MessageSet with the matches" do
27
+ expect(subject.messages).to eql(messages)
28
+ end
29
+
30
+ it "only loads the messages once" do
31
+ TamTam::MessageSet.should_receive(:new).once
32
+ subject.messages
33
+ subject.messages
34
+ end
35
+ end
36
+
37
+ describe "#as" do
38
+ it "calls filter with the results of the adapter's #as" do
39
+ subject.should_receive(:filter).with("accounts")
40
+ subject.as("myself")
41
+ end
42
+ end
43
+
44
+ describe "#with" do
45
+ it "calls filter with the results of the adapter's #with" do
46
+ subject.should_receive(:filter).with("participants")
47
+ subject.with("someone else")
48
+ end
49
+ end
50
+
51
+ describe "#on" do
52
+ it "calls filter with the results of the adapter's #on" do
53
+ subject.should_receive(:filter).with("time")
54
+ subject.on(Time.new)
55
+ end
56
+
57
+ it "converts string arguments to Time objects" do
58
+ subject.stub(:filter)
59
+ Chronic.should_receive(:parse).with("today")
60
+ subject.on("today")
61
+ end
62
+ end
63
+
64
+ describe "#between" do
65
+ it "calls filter with the results of the adapter's #between" do
66
+ subject.should_receive(:filter).with("time range")
67
+ time = Time.new
68
+ subject.between(time, time)
69
+ end
70
+
71
+ it "converts string arguments to Time objects" do
72
+ subject.stub(:filter)
73
+ Chronic.should_receive(:parse).with("yesterday")
74
+ Chronic.should_receive(:parse).with("today")
75
+ subject.between("yesterday", "today")
76
+ end
77
+ end
78
+
79
+ describe "#to_s" do
80
+ it "includes the class name, object ID, and path" do
81
+ string = subject.to_s
82
+ expect(string).to match(%r{#<TamTam::LogSet:0x[a-f0-9]+ adapter=.*>})
83
+ end
84
+ end
85
+
86
+ describe "#clear_messages_cache" do
87
+ it "clears the messages so they can be regenerated" do
88
+ TamTam::MessageSet.should_receive(:new).twice
89
+ subject.messages
90
+ subject.send(:clear_messages_cache)
91
+ subject.messages
92
+ end
93
+ end
94
+
95
+ describe "#filter" do
96
+ it "returns a copy of the set with filtered matches" do
97
+ copy = subject.send(:filter, [])
98
+ expect(copy).not_to eql(subject)
99
+ end
100
+ end
101
+ end