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