chatbox 0.3.0 → 0.3.1

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: 6a7102f898c92e32f3843ea185051e1f94f36fa4
4
- data.tar.gz: e154a6d559969dc26dc21c03b865c06eb95e570b
3
+ metadata.gz: b8e11dde0a77434ce3d109d0dafe7379723ea402
4
+ data.tar.gz: f7231a1d739ddd0db1ee719c0cb66b49d3c928cc
5
5
  SHA512:
6
- metadata.gz: 4d95f9cbbbb6a9657fb2ed75308778d2b805e7eb25224ea3f41b9abb8e3434197fe0241aef5d160e78ecb11203f95fb51f11d0909a23f162be3d40e71e9f980e
7
- data.tar.gz: 39ad72ddf662f81938854ab686d742e48219ef0afd2770c21679c162a91bd4179e24f083ab32a43ee065e6e0b82d651da8a2a8cd5fb8361a4bfc7caab18231e9
6
+ metadata.gz: 2a9aa4f200df75d0b2bf21b185c34bb4598f62e69a0bdfff0aab6fe9d5a1777fa8f95500e0d87c2ee3be6c309fe686a8d17ccac887974a004310d460a8af4c19
7
+ data.tar.gz: 0d42ecf210544a3f5e29d5c4b01f0b6c27f56beacac496be77c41a5a0a5de739c9b0212a8194fdb7a94b5561d4edfd576935db8a683c75f3a6def906be9c38df
@@ -1,29 +1,22 @@
1
- require 'securerandom'
2
1
  require 'chatbox/fake_missing_keywords'
3
2
 
4
3
  module Chatbox
5
4
  class Draft
6
5
  include FakeMissingKeywords
7
6
 
8
- def initialize(from: req(:from), to: req(:to), body: req(:body), store: req(:store), id_generator: -> { SecureRandom.uuid })
7
+ def initialize(from: req(:from), to: req(:to), body: req(:body), store: req(:store))
9
8
  @from = from
10
9
  @to = to
11
10
  @body = body
12
11
  @store = store
13
- @id_generator = id_generator
14
12
  end
15
13
 
16
14
  def deliver!
17
- store.add_message(
18
- 'id' => id_generator.(),
19
- 'from_id' => from.chatbox_id,
20
- 'to_id' => to.chatbox_id,
21
- 'body' => body,
22
- )
15
+ store.add_message from_id: from.chatbox_id, to_id: to.chatbox_id, body: body
23
16
  end
24
17
 
25
18
  private
26
19
 
27
- attr_reader :from, :to, :body, :store, :id_generator
20
+ attr_reader :from, :to, :body, :store
28
21
  end
29
22
  end
@@ -1,54 +1,58 @@
1
+ require 'securerandom'
1
2
  require 'json'
2
3
 
3
4
  module Chatbox
4
5
  class MemcachedStore
5
- def initialize(client)
6
+ def initialize(client, id_generator: -> { SecureRandom.uuid })
6
7
  @client = client
8
+ @id_generator = id_generator
7
9
  end
8
10
 
9
11
  def add_message(attrs)
10
- client.set "messages/#{attrs['id']}", JSON.generate(
11
- 'from_id' => attrs['from_id'],
12
- 'to_id' => attrs['to_id'],
13
- 'body' => attrs['body'],
14
- 'read' => false,
15
- )
16
-
17
- from_list = JSON.parse(client.get("from/#{attrs['from_id']}") || '[]')
18
- from_list << {'from_id' => attrs['from_id'], 'message_id' => attrs['id']}
19
- client.set "from/#{attrs['from_id']}", JSON.generate(from_list)
20
-
21
- to_list = JSON.parse(client.get("to/#{attrs['to_id']}") || '[]')
22
- to_list << {'to_id' => attrs['to_id'], 'message_id' => attrs['id']}
23
- client.set "to/#{attrs['to_id']}", JSON.generate(to_list)
12
+ id = id_generator.()
13
+
14
+ write "messages/#{id}", {
15
+ from_id: attrs[:from_id],
16
+ to_id: attrs[:to_id],
17
+ body: attrs[:body],
18
+ read: false,
19
+ }
20
+
21
+ from_list = read("from/#{attrs[:from_id]}") || []
22
+ from_list << {from_id: attrs[:from_id], message_id: id}
23
+ write "from/#{attrs[:from_id]}", from_list
24
+
25
+ to_list = read("to/#{attrs[:to_id]}") || []
26
+ to_list << {to_id: attrs[:to_id], message_id: id}
27
+ write "to/#{attrs[:to_id]}", to_list
24
28
  end
25
29
 
26
30
  ##########
27
31
 
28
32
  def mark_message_read!(id)
29
- attrs = JSON.parse client.get("messages/#{id}")
30
- attrs['read'] = true
31
- client.set "messages/#{id}", JSON.generate(attrs)
33
+ attrs = read "messages/#{id}"
34
+ attrs[:read] = true
35
+ write "messages/#{id}", attrs
32
36
  end
33
37
 
34
38
  def mark_message_unread!(id)
35
- attrs = JSON.parse client.get("messages/#{id}")
36
- attrs['read'] = false
37
- client.set "messages/#{id}", JSON.generate(attrs)
39
+ attrs = read "messages/#{id}"
40
+ attrs[:read] = false
41
+ write "messages/#{id}", attrs
38
42
  end
39
43
 
40
44
  ##########
41
45
 
42
46
  def find_message(id)
43
- if json = client.get("messages/#{id}")
44
- Record.new id, JSON.parse(json)
47
+ if attrs = read("messages/#{id}")
48
+ Record.new id, attrs
45
49
  end
46
50
  end
47
51
 
48
52
  def find_messages_by_to_id(id)
49
- if json = client.get("to/#{id}")
50
- JSON.parse(json).map do |attrs|
51
- find_message attrs['message_id']
53
+ if attrs_list = read("to/#{id}")
54
+ attrs_list.map do |attrs|
55
+ find_message attrs[:message_id]
52
56
  end
53
57
  else
54
58
  []
@@ -56,9 +60,9 @@ module Chatbox
56
60
  end
57
61
 
58
62
  def find_messages_by_from_id(id)
59
- if json = client.get("from/#{id}")
60
- JSON.parse(json).map do |attrs|
61
- find_message attrs['message_id']
63
+ if attrs_list = read("from/#{id}")
64
+ attrs_list.map do |attrs|
65
+ find_message attrs[:message_id]
62
66
  end
63
67
  else
64
68
  []
@@ -67,7 +71,17 @@ module Chatbox
67
71
 
68
72
  private
69
73
 
70
- attr_reader :client
74
+ attr_reader :client, :id_generator
75
+
76
+ def read(key)
77
+ if value = client.get(key)
78
+ JSON.parse value, symbolize_names: true
79
+ end
80
+ end
81
+
82
+ def write(key, value)
83
+ client.set key, JSON.generate(value)
84
+ end
71
85
 
72
86
  class Record
73
87
  def initialize(id, attrs)
@@ -77,7 +91,7 @@ module Chatbox
77
91
 
78
92
  attr_reader :id
79
93
 
80
- %w[from_id to_id body read].each do |name|
94
+ %i[from_id to_id body read].each do |name|
81
95
  define_method name do
82
96
  attrs[name]
83
97
  end
@@ -1,37 +1,46 @@
1
+ require 'securerandom'
2
+
1
3
  module Chatbox
2
4
  class MemoryStore
5
+ def initialize(id_generator: -> { SecureRandom.uuid })
6
+ @id_generator = id_generator
7
+ end
8
+
3
9
  def add_message(attrs)
4
- attrs_list << attrs.merge('read' => false)
10
+ attrs = attrs.merge id: id_generator.(), read: false
11
+ attrs_list << attrs
5
12
  end
6
13
 
7
14
  ##########
8
15
 
9
16
  def mark_message_read!(id)
10
- attrs_list.detect { |attrs| attrs['id'] == id }.merge! 'read' => true
17
+ attrs_list.detect { |attrs| attrs[:id] == id }.merge! read: true
11
18
  end
12
19
 
13
20
  def mark_message_unread!(id)
14
- attrs_list.detect { |attrs| attrs['id'] == id }.merge! 'read' => false
21
+ attrs_list.detect { |attrs| attrs[:id] == id }.merge! read: false
15
22
  end
16
23
 
17
24
  ##########
18
25
 
19
26
  def find_message(id)
20
- if attrs = attrs_list.detect { |attrs| attrs['id'] == id }
27
+ if attrs = attrs_list.detect { |attrs| attrs[:id] == id }
21
28
  Record.new attrs
22
29
  end
23
30
  end
24
31
 
25
32
  def find_messages_by_to_id(id)
26
- attrs_list.select { |attrs| attrs['to_id'] == id }.map { |attrs| Record.new attrs }
33
+ attrs_list.select { |attrs| attrs[:to_id] == id }.map { |attrs| Record.new attrs }
27
34
  end
28
35
 
29
36
  def find_messages_by_from_id(id)
30
- attrs_list.select { |attrs| attrs['from_id'] == id }.map { |attrs| Record.new attrs }
37
+ attrs_list.select { |attrs| attrs[:from_id] == id }.map { |attrs| Record.new attrs }
31
38
  end
32
39
 
33
40
  private
34
41
 
42
+ attr_reader :id_generator
43
+
35
44
  def attrs_list
36
45
  @attrs_list ||= []
37
46
  end
@@ -41,7 +50,7 @@ module Chatbox
41
50
  @attrs = attrs
42
51
  end
43
52
 
44
- %w[id from_id to_id body read].each do |name|
53
+ %i[id from_id to_id body read].each do |name|
45
54
  define_method name do
46
55
  attrs[name]
47
56
  end
@@ -1,3 +1,3 @@
1
1
  module Chatbox
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.1'
3
3
  end
@@ -6,19 +6,21 @@ describe 'stores' do
6
6
  [:memcached, :memory].each do |store_type|
7
7
  context "using #{store_type} store" do
8
8
  before do
9
+ id = 0
10
+ id_generator = -> { id += 1 }
9
11
  @store = case store_type
10
12
  when :memcached
11
13
  client = Dalli::Client.new nil, namespace: 'chatbox-test'
12
14
  client.flush
13
- Chatbox::MemcachedStore.new client
15
+ Chatbox::MemcachedStore.new client, id_generator: id_generator
14
16
  when :memory
15
- Chatbox::MemoryStore.new
17
+ Chatbox::MemoryStore.new id_generator: id_generator
16
18
  end
17
19
 
18
20
  [
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'},
21
+ {from_id: 20, to_id: 30, body: 'Hi'},
22
+ {from_id: 20, to_id: 31, body: 'Hello'},
23
+ {from_id: 21, to_id: 31, body: 'Howdy'},
22
24
  ].each do |attrs|
23
25
  @store.add_message attrs
24
26
  end
@@ -9,15 +9,9 @@ describe Chatbox::Draft do
9
9
  to: double('entity', chatbox_id: 2),
10
10
  body: 'Hi',
11
11
  store: store,
12
- id_generator: -> { 'b00c7e15-668b-44b8-9336-e87e7b7d892e' },
13
12
  )
14
13
 
15
- expect(store).to receive(:add_message).with(
16
- 'id' => 'b00c7e15-668b-44b8-9336-e87e7b7d892e',
17
- 'from_id' => 1,
18
- 'to_id' => 2,
19
- 'body' => 'Hi',
20
- )
14
+ expect(store).to receive(:add_message).with from_id: 1, to_id: 2, body: 'Hi'
21
15
  draft.deliver!
22
16
  end
23
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chatbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Austin Schneider