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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b66ba083f1d159cc4e17b4006dfc9890501b5a8
4
- data.tar.gz: efdf4191ca17f8f92a5820efe735df7f39bbc888
3
+ metadata.gz: 6a7102f898c92e32f3843ea185051e1f94f36fa4
4
+ data.tar.gz: e154a6d559969dc26dc21c03b865c06eb95e570b
5
5
  SHA512:
6
- metadata.gz: 77bffe68cca61f58b1f0d177d3f5db898382c02030513a843f60f43cd5d3d8b854dca0d7140cfd34f13ed2f1ee7972f52f7e36af0c9b1aa1b1101f08a97e4997
7
- data.tar.gz: 80f8b7d68f4c4bbcd38f29947440a805f59e46b68f2d47656e85f4a7b7b77d01d66f97fbee88e3cf27153d42fde073768b5e2f62654805aba1084f147f78a935
6
+ metadata.gz: 4d95f9cbbbb6a9657fb2ed75308778d2b805e7eb25224ea3f41b9abb8e3434197fe0241aef5d160e78ecb11203f95fb51f11d0909a23f162be3d40e71e9f980e
7
+ data.tar.gz: 39ad72ddf662f81938854ab686d742e48219ef0afd2770c21679c162a91bd4179e24f083ab32a43ee065e6e0b82d651da8a2a8cd5fb8361a4bfc7caab18231e9
@@ -7,3 +7,5 @@ before_install:
7
7
  - gem install bundler
8
8
  notifications:
9
9
  email: false
10
+ services:
11
+ - memcached
@@ -30,7 +30,7 @@ module Chatbox
30
30
 
31
31
  def messages
32
32
  @messages ||= begin
33
- records = store.find_all_messages_by_to_id id
33
+ records = store.find_messages_by_to_id id
34
34
  records.map { |record| Message.new record: record, store: store }
35
35
  end
36
36
  end
@@ -1,54 +1,52 @@
1
- require 'dalli'
2
1
  require 'json'
3
2
 
4
3
  module Chatbox
5
4
  class MemcachedStore
6
- def initialize(namespace: nil)
7
- @dalli = Dalli::Client.new nil, namespace: namespace
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
- @dalli.set "messages/#{attrs['id']}", JSON.generate(
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(@dalli.get("from/#{attrs['from_id']}") || '[]')
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
- @dalli.set "from/#{attrs['from_id']}", JSON.generate(from_list)
19
+ client.set "from/#{attrs['from_id']}", JSON.generate(from_list)
22
20
 
23
- to_list = JSON.parse(@dalli.get("to/#{attrs['to_id']}") || '[]')
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
- @dalli.set "to/#{attrs['to_id']}", JSON.generate(to_list)
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 @dalli.get("messages/#{id}")
29
+ attrs = JSON.parse client.get("messages/#{id}")
32
30
  attrs['read'] = true
33
- @dalli.set "messages/#{id}", JSON.generate(attrs)
31
+ client.set "messages/#{id}", JSON.generate(attrs)
34
32
  end
35
33
 
36
34
  def mark_message_unread!(id)
37
- attrs = JSON.parse @dalli.get("messages/#{id}")
35
+ attrs = JSON.parse client.get("messages/#{id}")
38
36
  attrs['read'] = false
39
- @dalli.set "messages/#{id}", JSON.generate(attrs)
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 = @dalli.get("messages/#{id}")
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 find_all_messages_by_to_id(id)
51
- if json = @dalli.get("to/#{id}")
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 find_all_messages_by_from_id(id)
61
- if json = @dalli.get("from/#{id}")
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 :dalli
70
+ attr_reader :client
73
71
 
74
72
  class Record
75
73
  def initialize(id, attrs)
@@ -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 find_all_messages_by_to_id(id)
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 find_all_messages_by_from_id(id)
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
 
@@ -30,7 +30,7 @@ module Chatbox
30
30
 
31
31
  def messages
32
32
  @messages ||= begin
33
- records = store.find_all_messages_by_from_id(id)
33
+ records = store.find_messages_by_from_id(id)
34
34
  records.map { |record| Message.new record: record, store: store }
35
35
  end
36
36
  end
@@ -1,3 +1,3 @@
1
1
  module Chatbox
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -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
- memcached_store = Chatbox::MemcachedStore.new namespace: 'chatbox-text'
14
- memcached_store.flush
15
- Chatbox.configure { |config| config.store = memcached_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.2.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-24 00:00:00.000000000 Z
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/integration_spec.rb
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/integration_spec.rb
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