Class: Voicemail::StoragePstore

Inherits:
Object
  • Object
show all
Defined in:
lib/voicemail/storage_pstore.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeStoragePstore

Returns a new instance of StoragePstore.



7
8
9
10
# File 'lib/voicemail/storage_pstore.rb', line 7

def initialize
  @store = PStore.new config.storage.pstore_location
  setup_schema
end

Instance Attribute Details

#storeObject

Returns the value of attribute store.



5
6
7
# File 'lib/voicemail/storage_pstore.rb', line 5

def store
  @store
end

Instance Method Details

#archive_message(mailbox_id, message_id) ⇒ Object



42
43
44
45
46
47
48
49
50
51
# File 'lib/voicemail/storage_pstore.rb', line 42

def archive_message(mailbox_id, message_id)
  store.transaction do
    item = store[:recordings][mailbox_id].select { |i| i[:id] == message_id }
    rec = item.first
    if rec
      store[:archived][mailbox_id] << rec
      store[:recordings][mailbox_id].delete(rec)
    end
  end
end

#change_pin_for_mailbox(mailbox_id, new_pin) ⇒ Object



83
84
85
86
87
# File 'lib/voicemail/storage_pstore.rb', line 83

def change_pin_for_mailbox(mailbox_id, new_pin)
  store.transaction do
    store[:mailboxes][mailbox_id][:pin] = new_pin
  end
end

#count_new_messages(mailbox_id) ⇒ Object



18
19
20
21
22
# File 'lib/voicemail/storage_pstore.rb', line 18

def count_new_messages(mailbox_id)
  store.transaction true do
    store[:recordings][mailbox_id].size
  end
end

#count_saved_messages(mailbox_id) ⇒ Object



24
25
26
27
28
# File 'lib/voicemail/storage_pstore.rb', line 24

def count_saved_messages(mailbox_id)
  store.transaction true do
    store[:archived][mailbox_id].size
  end
end

#create_mailboxObject



102
103
# File 'lib/voicemail/storage_pstore.rb', line 102

def create_mailbox
end

#delete_greeting_from_mailbox(mailbox_id) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/voicemail/storage_pstore.rb', line 75

def delete_greeting_from_mailbox(mailbox_id)
  store.transaction do
    rec = store[:mailboxes][mailbox_id][:greeting_message]
    File.unlink rec if File.exists? rec
    store[:mailboxes][mailbox_id][:greeting_message] = nil
  end
end

#delete_message(mailbox_id, message_id) ⇒ Object



64
65
66
67
# File 'lib/voicemail/storage_pstore.rb', line 64

def delete_message(mailbox_id, message_id)
  File.unlink(rec[:uri]) if File.exists?(rec[:uri])
  store[:recordings][mailbox_id].delete(rec)
end

#get_mailbox(mailbox_id) ⇒ Object



12
13
14
15
16
# File 'lib/voicemail/storage_pstore.rb', line 12

def get_mailbox(mailbox_id)
  store.transaction true do
    store[:mailboxes][mailbox_id]
  end
end

#next_new_message(mailbox_id) ⇒ Object



30
31
32
33
34
# File 'lib/voicemail/storage_pstore.rb', line 30

def next_new_message(mailbox_id)
  store.transaction true do
    store[:recordings][mailbox_id].first
  end
end

#next_saved_message(mailbox_id) ⇒ Object



36
37
38
39
40
# File 'lib/voicemail/storage_pstore.rb', line 36

def next_saved_message(mailbox_id)
  store.transaction true do
    store[:archived][mailbox_id].first
  end
end

#save_greeting_for_mailbox(mailbox_id, recording_uri) ⇒ Object



69
70
71
72
73
# File 'lib/voicemail/storage_pstore.rb', line 69

def save_greeting_for_mailbox(mailbox_id, recording_uri)
  store.transaction do
    store[:mailboxes][mailbox_id][:greeting_message] = recording_uri
  end
end

#save_recording(mailbox_id, from, recording_object) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/voicemail/storage_pstore.rb', line 89

def save_recording(mailbox_id, from, recording_object)
  store.transaction do
    recording = {
      id:       SecureRandom.uuid,
      from:     from,
      received: Time.now,
      uri:      recording_object.uri
    }
    store[:recordings][mailbox_id] << recording
    logger.info "Saving recording: #{recording.inspect}"
  end
end

#unarchive_message(mailbox_id, message_id) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/voicemail/storage_pstore.rb', line 53

def unarchive_message(mailbox_id, message_id)
  store.transaction do
    item = store[:archived][mailbox_id].select { |i| i[:id] == message_id }
    rec  = item.first
    if rec
      store[:recordings][mailbox_id] << rec
      store[:archived][mailbox_id].delete(rec)
    end
  end
end