chatbox 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/lib/chatbox/inbox.rb +1 -1
- data/lib/chatbox/memcached_store.rb +18 -20
- data/lib/chatbox/memory_store.rb +5 -3
- data/lib/chatbox/outbox.rb +1 -1
- data/lib/chatbox/version.rb +1 -1
- data/spec/{integration_spec.rb → integration/chatbox_spec.rb} +4 -3
- data/spec/integration/stores_spec.rb +93 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a7102f898c92e32f3843ea185051e1f94f36fa4
|
4
|
+
data.tar.gz: e154a6d559969dc26dc21c03b865c06eb95e570b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d95f9cbbbb6a9657fb2ed75308778d2b805e7eb25224ea3f41b9abb8e3434197fe0241aef5d160e78ecb11203f95fb51f11d0909a23f162be3d40e71e9f980e
|
7
|
+
data.tar.gz: 39ad72ddf662f81938854ab686d742e48219ef0afd2770c21679c162a91bd4179e24f083ab32a43ee065e6e0b82d651da8a2a8cd5fb8361a4bfc7caab18231e9
|
data/.travis.yml
CHANGED
data/lib/chatbox/inbox.rb
CHANGED
@@ -1,54 +1,52 @@
|
|
1
|
-
require 'dalli'
|
2
1
|
require 'json'
|
3
2
|
|
4
3
|
module Chatbox
|
5
4
|
class MemcachedStore
|
6
|
-
def initialize(
|
7
|
-
@
|
5
|
+
def initialize(client)
|
6
|
+
@client = client
|
8
7
|
end
|
9
8
|
|
10
|
-
delegate :flush, to: :dalli
|
11
|
-
|
12
9
|
def add_message(attrs)
|
13
|
-
|
10
|
+
client.set "messages/#{attrs['id']}", JSON.generate(
|
14
11
|
'from_id' => attrs['from_id'],
|
15
12
|
'to_id' => attrs['to_id'],
|
16
13
|
'body' => attrs['body'],
|
14
|
+
'read' => false,
|
17
15
|
)
|
18
16
|
|
19
|
-
from_list = JSON.parse(
|
17
|
+
from_list = JSON.parse(client.get("from/#{attrs['from_id']}") || '[]')
|
20
18
|
from_list << {'from_id' => attrs['from_id'], 'message_id' => attrs['id']}
|
21
|
-
|
19
|
+
client.set "from/#{attrs['from_id']}", JSON.generate(from_list)
|
22
20
|
|
23
|
-
to_list = JSON.parse(
|
21
|
+
to_list = JSON.parse(client.get("to/#{attrs['to_id']}") || '[]')
|
24
22
|
to_list << {'to_id' => attrs['to_id'], 'message_id' => attrs['id']}
|
25
|
-
|
23
|
+
client.set "to/#{attrs['to_id']}", JSON.generate(to_list)
|
26
24
|
end
|
27
25
|
|
28
26
|
##########
|
29
27
|
|
30
28
|
def mark_message_read!(id)
|
31
|
-
attrs = JSON.parse
|
29
|
+
attrs = JSON.parse client.get("messages/#{id}")
|
32
30
|
attrs['read'] = true
|
33
|
-
|
31
|
+
client.set "messages/#{id}", JSON.generate(attrs)
|
34
32
|
end
|
35
33
|
|
36
34
|
def mark_message_unread!(id)
|
37
|
-
attrs = JSON.parse
|
35
|
+
attrs = JSON.parse client.get("messages/#{id}")
|
38
36
|
attrs['read'] = false
|
39
|
-
|
37
|
+
client.set "messages/#{id}", JSON.generate(attrs)
|
40
38
|
end
|
41
39
|
|
42
40
|
##########
|
43
41
|
|
44
42
|
def find_message(id)
|
45
|
-
if json =
|
43
|
+
if json = client.get("messages/#{id}")
|
46
44
|
Record.new id, JSON.parse(json)
|
47
45
|
end
|
48
46
|
end
|
49
47
|
|
50
|
-
def
|
51
|
-
if json =
|
48
|
+
def find_messages_by_to_id(id)
|
49
|
+
if json = client.get("to/#{id}")
|
52
50
|
JSON.parse(json).map do |attrs|
|
53
51
|
find_message attrs['message_id']
|
54
52
|
end
|
@@ -57,8 +55,8 @@ module Chatbox
|
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
|
-
def
|
61
|
-
if json =
|
58
|
+
def find_messages_by_from_id(id)
|
59
|
+
if json = client.get("from/#{id}")
|
62
60
|
JSON.parse(json).map do |attrs|
|
63
61
|
find_message attrs['message_id']
|
64
62
|
end
|
@@ -69,7 +67,7 @@ module Chatbox
|
|
69
67
|
|
70
68
|
private
|
71
69
|
|
72
|
-
attr_reader :
|
70
|
+
attr_reader :client
|
73
71
|
|
74
72
|
class Record
|
75
73
|
def initialize(id, attrs)
|
data/lib/chatbox/memory_store.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
module Chatbox
|
2
2
|
class MemoryStore
|
3
3
|
def add_message(attrs)
|
4
|
-
attrs_list << attrs
|
4
|
+
attrs_list << attrs.merge('read' => false)
|
5
5
|
end
|
6
6
|
|
7
|
+
##########
|
8
|
+
|
7
9
|
def mark_message_read!(id)
|
8
10
|
attrs_list.detect { |attrs| attrs['id'] == id }.merge! 'read' => true
|
9
11
|
end
|
@@ -20,11 +22,11 @@ module Chatbox
|
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
25
|
+
def find_messages_by_to_id(id)
|
24
26
|
attrs_list.select { |attrs| attrs['to_id'] == id }.map { |attrs| Record.new attrs }
|
25
27
|
end
|
26
28
|
|
27
|
-
def
|
29
|
+
def find_messages_by_from_id(id)
|
28
30
|
attrs_list.select { |attrs| attrs['from_id'] == id }.map { |attrs| Record.new attrs }
|
29
31
|
end
|
30
32
|
|
data/lib/chatbox/outbox.rb
CHANGED
data/lib/chatbox/version.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'dalli'
|
1
2
|
require 'chatbox/memcached_store'
|
2
3
|
|
3
4
|
describe 'chatbox' do
|
@@ -10,9 +11,9 @@ describe 'chatbox' do
|
|
10
11
|
context "using #{store_type} store" do
|
11
12
|
before do
|
12
13
|
if store_type == :memcached
|
13
|
-
|
14
|
-
|
15
|
-
Chatbox.configure { |config| config.store =
|
14
|
+
client = Dalli::Client.new nil, namespace: 'chatbox-test'
|
15
|
+
client.flush
|
16
|
+
Chatbox.configure { |config| config.store = Chatbox::MemcachedStore.new client }
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'dalli'
|
2
|
+
require 'chatbox/memcached_store'
|
3
|
+
require 'chatbox/memory_store'
|
4
|
+
|
5
|
+
describe 'stores' do
|
6
|
+
[:memcached, :memory].each do |store_type|
|
7
|
+
context "using #{store_type} store" do
|
8
|
+
before do
|
9
|
+
@store = case store_type
|
10
|
+
when :memcached
|
11
|
+
client = Dalli::Client.new nil, namespace: 'chatbox-test'
|
12
|
+
client.flush
|
13
|
+
Chatbox::MemcachedStore.new client
|
14
|
+
when :memory
|
15
|
+
Chatbox::MemoryStore.new
|
16
|
+
end
|
17
|
+
|
18
|
+
[
|
19
|
+
{'id' => 1, 'from_id' => 20, 'to_id' => 30, 'body' => 'Hi'},
|
20
|
+
{'id' => 2, 'from_id' => 20, 'to_id' => 31, 'body' => 'Hello'},
|
21
|
+
{'id' => 3, 'from_id' => 21, 'to_id' => 31, 'body' => 'Howdy'},
|
22
|
+
].each do |attrs|
|
23
|
+
@store.add_message attrs
|
24
|
+
end
|
25
|
+
|
26
|
+
@values_list = [
|
27
|
+
{id: 1, from_id: 20, to_id: 30, body: 'Hi', read: false},
|
28
|
+
{id: 2, from_id: 20, to_id: 31, body: 'Hello', read: false},
|
29
|
+
{id: 3, from_id: 21, to_id: 31, body: 'Howdy', read: false},
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'finding messages by id' do
|
34
|
+
[1, 2, 3].each_with_index do |id, index|
|
35
|
+
message = @store.find_message id
|
36
|
+
@values_list[index].each do |name, value|
|
37
|
+
expect(message.public_send name).to eq value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'finding messages by to_id' do
|
43
|
+
messages = @store.find_messages_by_to_id 30
|
44
|
+
expect(messages.size).to eq 1
|
45
|
+
message = messages[0]
|
46
|
+
@values_list[0].each do |name, value|
|
47
|
+
expect(message.public_send name).to eq value
|
48
|
+
end
|
49
|
+
|
50
|
+
messages = @store.find_messages_by_to_id 31
|
51
|
+
expect(messages.size).to eq 2
|
52
|
+
[
|
53
|
+
[messages[0], @values_list[1]],
|
54
|
+
[messages[1], @values_list[2]],
|
55
|
+
].each do |message, values|
|
56
|
+
values.each do |name, value|
|
57
|
+
expect(message.public_send name).to eq value
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'finding messages by from_id' do
|
63
|
+
messages = @store.find_messages_by_from_id 21
|
64
|
+
expect(messages.size).to eq 1
|
65
|
+
message = messages[0]
|
66
|
+
@values_list[2].each do |name, value|
|
67
|
+
expect(message.public_send name).to eq value
|
68
|
+
end
|
69
|
+
|
70
|
+
messages = @store.find_messages_by_from_id 20
|
71
|
+
expect(messages.size).to eq 2
|
72
|
+
[
|
73
|
+
[messages[0], @values_list[0]],
|
74
|
+
[messages[1], @values_list[1]],
|
75
|
+
].each do |message, values|
|
76
|
+
values.each do |name, value|
|
77
|
+
expect(message.public_send name).to eq value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'marking messages as read/unread' do
|
83
|
+
@store.mark_message_read! 1
|
84
|
+
message = @store.find_message 1
|
85
|
+
expect(message.read).to eq true
|
86
|
+
|
87
|
+
@store.mark_message_unread! 1
|
88
|
+
message = @store.find_message 1
|
89
|
+
expect(message.read).to eq false
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chatbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Austin Schneider
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,7 +106,8 @@ files:
|
|
106
106
|
- lib/chatbox/outbox.rb
|
107
107
|
- lib/chatbox/version.rb
|
108
108
|
- spec/chatbox_spec.rb
|
109
|
-
- spec/
|
109
|
+
- spec/integration/chatbox_spec.rb
|
110
|
+
- spec/integration/stores_spec.rb
|
110
111
|
- spec/lib/draft_spec.rb
|
111
112
|
- spec/spec_helper.rb
|
112
113
|
homepage: ''
|
@@ -135,6 +136,7 @@ specification_version: 4
|
|
135
136
|
summary: Simple messaging system.
|
136
137
|
test_files:
|
137
138
|
- spec/chatbox_spec.rb
|
138
|
-
- spec/
|
139
|
+
- spec/integration/chatbox_spec.rb
|
140
|
+
- spec/integration/stores_spec.rb
|
139
141
|
- spec/lib/draft_spec.rb
|
140
142
|
- spec/spec_helper.rb
|