tam_tam 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|