Class: Chatbox::MemcachedStore

Inherits:
Object
  • Object
show all
Defined in:
lib/chatbox/memcached_store.rb

Defined Under Namespace

Classes: Record

Instance Method Summary collapse

Constructor Details

#initialize(namespace: nil) ⇒ MemcachedStore

Returns a new instance of MemcachedStore.



6
7
8
# File 'lib/chatbox/memcached_store.rb', line 6

def initialize(namespace: nil)
  @dalli = Dalli::Client.new nil, namespace: namespace
end

Instance Method Details

#add_message(attrs) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/chatbox/memcached_store.rb', line 12

def add_message(attrs)
  @dalli.set "messages/#{attrs['id']}", JSON.generate(
    'from_id' => attrs['from_id'],
    'to_id' => attrs['to_id'],
    'body' => attrs['body'],
  )

  from_list = JSON.parse(@dalli.get("from/#{attrs['from_id']}") || '[]')
  from_list << {'from_id' => attrs['from_id'], 'message_id' => attrs['id']}
  @dalli.set "from/#{attrs['from_id']}", JSON.generate(from_list)

  to_list = JSON.parse(@dalli.get("to/#{attrs['to_id']}") || '[]')
  to_list << {'to_id' => attrs['to_id'], 'message_id' => attrs['id']}
  @dalli.set "to/#{attrs['to_id']}", JSON.generate(to_list)
end

#find_all_messages_by_from_id(id) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/chatbox/memcached_store.rb', line 60

def find_all_messages_by_from_id(id)
  if json = @dalli.get("from/#{id}")
    JSON.parse(json).map do |attrs|
      find_message attrs['message_id']
    end
  else
    []
  end
end

#find_all_messages_by_to_id(id) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/chatbox/memcached_store.rb', line 50

def find_all_messages_by_to_id(id)
  if json = @dalli.get("to/#{id}")
    JSON.parse(json).map do |attrs|
      find_message attrs['message_id']
    end
  else
    []
  end
end

#find_message(id) ⇒ Object



44
45
46
47
48
# File 'lib/chatbox/memcached_store.rb', line 44

def find_message(id)
  if json = @dalli.get("messages/#{id}")
    Record.new id, JSON.parse(json)
  end
end

#mark_message_read!(id) ⇒ Object



30
31
32
33
34
# File 'lib/chatbox/memcached_store.rb', line 30

def mark_message_read!(id)
  attrs = JSON.parse @dalli.get("messages/#{id}")
  attrs['read'] = true
  @dalli.set "messages/#{id}", JSON.generate(attrs)
end

#mark_message_unread!(id) ⇒ Object



36
37
38
39
40
# File 'lib/chatbox/memcached_store.rb', line 36

def mark_message_unread!(id)
  attrs = JSON.parse @dalli.get("messages/#{id}")
  attrs['read'] = false
  @dalli.set "messages/#{id}", JSON.generate(attrs)
end