chatbox 0.2.0 → 0.3.0
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.
- 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
|