tam_tam 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +200 -0
- data/Rakefile +10 -0
- data/lib/tam_tam.rb +1 -0
- data/lib/tam_tam/adapter.rb +29 -0
- data/lib/tam_tam/adapters/adium.rb +58 -0
- data/lib/tam_tam/core.rb +28 -0
- data/lib/tam_tam/log_set.rb +59 -0
- data/lib/tam_tam/message.rb +27 -0
- data/lib/tam_tam/message_set.rb +59 -0
- data/lib/tam_tam/version.rb +3 -0
- data/spec/fixtures/adium/AIM.bongo/bongita/bongita (2011-07-23T14.55.47-0700).chatlog/bongita (2011-07-23T14.55.47-0700).xml +45 -0
- data/spec/fixtures/adium/AIM.bongo/bongita/bongita (2011-07-24T15.10.02-0700).chatlog/bongita (2011-07-24T15.10.02-0700).xml +126 -0
- data/spec/fixtures/adium/GTalk.bongo@gmail.com/rumples@gmail.com/rumples@gmail.com (2012-01-13T11.27.54-0800).chatlog/rumples@gmail.com (2012-01-13T11.27.54-0800).xml +29 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/tam_tam/adapter_spec.rb +29 -0
- data/spec/tam_tam/adapters/adium_spec.rb +63 -0
- data/spec/tam_tam/log_set_spec.rb +101 -0
- data/spec/tam_tam/message_set_spec.rb +63 -0
- data/spec/tam_tam/message_spec.rb +37 -0
- data/spec/tam_tam_spec.rb +27 -0
- data/tam_tam.gemspec +29 -0
- metadata +237 -0
@@ -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,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>
|
data/spec/spec_helper.rb
ADDED
@@ -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
|