voicemail 1.0.0 → 1.1.0
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 +4 -4
- data/.hound.yml +2 -0
- data/CHANGELOG.md +9 -0
- data/README.md +21 -5
- data/lib/voicemail.rb +2 -0
- data/lib/voicemail/call_controllers/mailbox_cleaner_controller.rb +40 -0
- data/lib/voicemail/call_controllers/mailbox_main_menu_controller.rb +10 -0
- data/lib/voicemail/call_controllers/mailbox_play_message_controller.rb +9 -5
- data/lib/voicemail/call_controllers/mailbox_set_greeting_controller.rb +29 -2
- data/lib/voicemail/call_controllers/mailbox_set_pin_controller.rb +4 -4
- data/lib/voicemail/call_controllers/voicemail_controller.rb +5 -0
- data/lib/voicemail/intro_message_creator.rb +84 -0
- data/lib/voicemail/matcher.rb +3 -2
- data/lib/voicemail/plugin.rb +15 -4
- data/lib/voicemail/storage_pstore.rb +8 -0
- data/lib/voicemail/version.rb +1 -1
- data/spec/voicemail/call_controllers/mailbox_cleaner_controller_spec.rb +24 -0
- data/spec/voicemail/call_controllers/mailbox_play_message_controller_spec.rb +6 -12
- data/spec/voicemail/call_controllers/mailbox_set_greeting_controller_spec.rb +18 -0
- data/spec/voicemail/call_controllers/mailbox_set_pin_controller_spec.rb +10 -10
- data/spec/voicemail/call_controllers/voicemail_controller_spec.rb +2 -0
- data/spec/voicemail/intro_message_creator_spec.rb +65 -0
- data/spec/voicemail/storage_pstore_spec.rb +15 -0
- data/templates/en.yml +18 -14
- data/voicemail.gemspec +1 -0
- metadata +42 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04851c91ceb009b391e4d88cd43136f058bfc729
|
4
|
+
data.tar.gz: 5c27720d3277680199ad4a5e73984669c0803e14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a00a3e02a77c97182063156e5d507d9208899246fadb180af9123da2e71eceb923f78239ba34387b457a7a240098591e1c90c2ae54f5d5c5ccea4a3b27880716
|
7
|
+
data.tar.gz: 76be7111e297639752090580c56061f465345339e6bd8657c28828021443121f12e1f06b7c770ed26cefdd69010e7891dc3e5b42c60ae9d02759c88a081ca1e4
|
data/.hound.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
#develop
|
2
|
+
* CHANGE - Menu intros are one message, making them skippable.
|
3
|
+
* FEATURE - Personalized voicemail greetings can be deleted
|
4
|
+
* FEATURE - Add message to play after recording a voicemail is complete
|
5
|
+
* FEATURE - Add an option to erase all messages from a mailbox
|
6
|
+
* FEATURE - Put a timeout on waiting for a PIN
|
7
|
+
* FEATURE - Allow messages to be skipped
|
8
|
+
* BUG - Resolve issue where caller presses the pound key twice in succession
|
9
|
+
|
1
10
|
#v1.0.0 - 2014-01-02
|
2
11
|
* FEATURE - Optional per-mailbox override of default recording hash
|
3
12
|
* FEATURE - Optional rerecording of voicemail messages
|
data/README.md
CHANGED
@@ -45,9 +45,19 @@ Alternatively, you can pass in a storage layer dynamically when invoking the con
|
|
45
45
|
# etc.
|
46
46
|
```
|
47
47
|
|
48
|
-
##
|
48
|
+
## Customizing Voicemail
|
49
49
|
|
50
|
-
|
50
|
+
The easiest way to customize the main menu is by subclassing (MailboxMainMenuController](https://github.com/adhearsion/voicemail/blob/develop/lib/voicemail/call_controllers/mailbox_main_menu_controller.rb) and replacing the `#main_menu` method with one of your own.
|
51
|
+
|
52
|
+
Within `#main_menu` you have several options that can be invoked, each by simply calling the method:
|
53
|
+
|
54
|
+
* listen_to_new_messages - self-explanatory
|
55
|
+
* listen_to_saved_messages - self-explanatory
|
56
|
+
* set_greeting - prompt to set the mailbox greeting
|
57
|
+
* set_pin - prompt to set the mailbox PIN
|
58
|
+
* empty_mailbox(:new or :saved or :all) - removes all (new or saved) messages from a given mailbox. Includes confirmation for safety
|
59
|
+
|
60
|
+
Then tell Adhearsion to use your new voicemail menu class:
|
51
61
|
```ruby
|
52
62
|
config.voicemail.main_menu_class = MyMenuController
|
53
63
|
```
|
@@ -95,8 +105,14 @@ Using I18n for the numeric method will nicely handle pluralizing message counts
|
|
95
105
|
|
96
106
|
## Authors
|
97
107
|
|
98
|
-
|
99
|
-
|
108
|
+
Original author: [Luca Pradovera](https://github.com/polysics)
|
109
|
+
|
110
|
+
Contributors:
|
111
|
+
* [Luca Pradovera](https://github.com/polysics)
|
112
|
+
* [Justin Aiken](https://github.com/JustinAiken)
|
113
|
+
* [Ben Klang](https://github.com/bklang)
|
114
|
+
* [Evan McGee](https://github.com/emcgee)
|
115
|
+
* [Will Drexler](https://github.com/wdrexler)
|
100
116
|
|
101
117
|
## Links
|
102
118
|
|
@@ -114,4 +130,4 @@ Using I18n for the numeric method will nicely handle pluralizing message counts
|
|
114
130
|
|
115
131
|
## Copyright
|
116
132
|
|
117
|
-
Copyright (c) 2012 Adhearsion Foundation Inc. MIT license (see LICENSE for details).
|
133
|
+
Copyright (c) 2012-2014 Adhearsion Foundation Inc. MIT license (see LICENSE for details).
|
data/lib/voicemail.rb
CHANGED
@@ -6,6 +6,7 @@ require "voicemail/storage_pstore"
|
|
6
6
|
require "voicemail/storage"
|
7
7
|
require "voicemail/matcher"
|
8
8
|
require "voicemail/localization_loader"
|
9
|
+
require "voicemail/intro_message_creator"
|
9
10
|
require "voicemail/call_controllers/application_controller"
|
10
11
|
require "voicemail/call_controllers/voicemail_controller"
|
11
12
|
require "voicemail/call_controllers/mailbox_controller"
|
@@ -16,6 +17,7 @@ require "voicemail/call_controllers/mailbox_play_message_intro_controller"
|
|
16
17
|
require "voicemail/call_controllers/mailbox_play_message_controller"
|
17
18
|
require "voicemail/call_controllers/mailbox_set_greeting_controller"
|
18
19
|
require "voicemail/call_controllers/mailbox_set_pin_controller"
|
20
|
+
require "voicemail/call_controllers/mailbox_cleaner_controller"
|
19
21
|
|
20
22
|
|
21
23
|
require "voicemail/plugin"
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Voicemail
|
4
|
+
class MailboxCleanerController < ApplicationController
|
5
|
+
def run
|
6
|
+
menu_prompt = metadata[:new_or_saved].to_s == "new" ? config.mailbox.clear_new_messages : config.mailbox.clear_saved_messages
|
7
|
+
menu menu_prompt, timeout: config.menu_timeout, tries: config.menu_tries do
|
8
|
+
match(1) { erase_all metadata[:new_or_saved] }
|
9
|
+
|
10
|
+
invalid { confirm_no_action_taken }
|
11
|
+
timeout { confirm_no_action_taken }
|
12
|
+
failure { confirm_no_action_taken }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def confirm_no_action_taken
|
17
|
+
play config.mailbox.no_messages_deleted
|
18
|
+
main_menu
|
19
|
+
end
|
20
|
+
|
21
|
+
def erase_all(type)
|
22
|
+
method = "next_#{type}_message"
|
23
|
+
|
24
|
+
messages_count = storage.send "count_#{type}_messages", mailbox[:id]
|
25
|
+
|
26
|
+
deleting_all_messages = metadata[:new_or_saved].to_s == "new" ? config.mailbox.deleting_all_new_messages : config.mailbox.deleting_all_saved_messages
|
27
|
+
play deleting_all_messages
|
28
|
+
|
29
|
+
messages_count.times do
|
30
|
+
message = storage.send(method, mailbox[:id])
|
31
|
+
storage.delete_message mailbox[:id], message[:id]
|
32
|
+
end
|
33
|
+
|
34
|
+
all_messages_deleted = metadata[:new_or_saved].to_s == "new" ? config.mailbox.all_new_messages_deleted : config.mailbox.all_saved_messages_deleted
|
35
|
+
play all_messages_deleted
|
36
|
+
|
37
|
+
main_menu
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -11,6 +11,8 @@ module Voicemail
|
|
11
11
|
match(2) { listen_to_saved_messages }
|
12
12
|
match(3) { set_greeting }
|
13
13
|
match(4) { set_pin }
|
14
|
+
match(7) { clear_new_messages }
|
15
|
+
match(9) { clear_saved_messages }
|
14
16
|
|
15
17
|
timeout do
|
16
18
|
play config.mailbox.menu_timeout_message
|
@@ -42,5 +44,13 @@ module Voicemail
|
|
42
44
|
def listen_to_saved_messages
|
43
45
|
invoke MailboxMessagesController, mailbox: mailbox[:id], new_or_saved: :saved
|
44
46
|
end
|
47
|
+
|
48
|
+
def clear_new_messages
|
49
|
+
invoke MailboxCleanerController, mailbox: mailbox[:id], new_or_saved: :new
|
50
|
+
end
|
51
|
+
|
52
|
+
def clear_saved_messages
|
53
|
+
invoke MailboxCleanerController, mailbox: mailbox[:id], new_or_saved: :saved
|
54
|
+
end
|
45
55
|
end
|
46
56
|
end
|
@@ -5,18 +5,16 @@ module Voicemail
|
|
5
5
|
|
6
6
|
def initialize(call, metadata={})
|
7
7
|
@new_or_saved = metadata[:new_or_saved] || :new
|
8
|
-
|
9
8
|
super call, metadata
|
10
9
|
end
|
11
10
|
|
12
11
|
def run
|
13
12
|
load_message
|
14
|
-
intro_message
|
15
13
|
play_message
|
16
14
|
end
|
17
15
|
|
18
16
|
def play_message
|
19
|
-
menu message_uri, play_message_menu, timeout: config.menu_timeout, tries: config.menu_tries do
|
17
|
+
menu intro_message, message_uri, play_message_menu, timeout: config.menu_timeout, tries: config.menu_tries do
|
20
18
|
match 1 do
|
21
19
|
archive_or_unarchive_message
|
22
20
|
end
|
@@ -26,6 +24,7 @@ module Voicemail
|
|
26
24
|
end
|
27
25
|
|
28
26
|
match(7) { rewind_message }
|
27
|
+
match(8) { skip_message }
|
29
28
|
match(9) { main_menu }
|
30
29
|
|
31
30
|
timeout do
|
@@ -38,13 +37,13 @@ module Voicemail
|
|
38
37
|
|
39
38
|
failure do
|
40
39
|
play config.mailbox.menu_failure_message
|
41
|
-
|
40
|
+
main_menu
|
42
41
|
end
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
46
45
|
def intro_message
|
47
|
-
|
46
|
+
IntroMessageCreator.new(current_message).intro_message
|
48
47
|
end
|
49
48
|
|
50
49
|
def play_message_menu
|
@@ -59,6 +58,10 @@ module Voicemail
|
|
59
58
|
play_message
|
60
59
|
end
|
61
60
|
|
61
|
+
def skip_message
|
62
|
+
# This method intentionally left blank
|
63
|
+
end
|
64
|
+
|
62
65
|
def archive_or_unarchive_message
|
63
66
|
if new_or_saved == :new
|
64
67
|
storage.archive_message mailbox[:id], current_message[:id]
|
@@ -69,6 +72,7 @@ module Voicemail
|
|
69
72
|
|
70
73
|
def delete_message
|
71
74
|
storage.delete_message mailbox[:id], current_message[:id]
|
75
|
+
play config.messages.message_deleted
|
72
76
|
end
|
73
77
|
|
74
78
|
def current_message
|
@@ -11,6 +11,7 @@ module Voicemail
|
|
11
11
|
timeout: config.menu_timeout, tries: config.menu_tries do
|
12
12
|
match(1) { listen_to_current_greeting }
|
13
13
|
match(2) { record_greeting }
|
14
|
+
match(3) { delete_greeting_menu }
|
14
15
|
match(9) { main_menu }
|
15
16
|
|
16
17
|
timeout do
|
@@ -23,7 +24,7 @@ module Voicemail
|
|
23
24
|
|
24
25
|
failure do
|
25
26
|
play config.mailbox.menu_failure_message
|
26
|
-
|
27
|
+
main_menu
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -62,11 +63,37 @@ module Voicemail
|
|
62
63
|
|
63
64
|
failure do
|
64
65
|
play config.mailbox.menu_failure_message
|
65
|
-
|
66
|
+
section_menu
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def delete_greeting_menu
|
72
|
+
menu config.set_greeting.delete_confirmation,
|
73
|
+
timeout: config.menu_timeout, tries: config.menu_tries do
|
74
|
+
match(1) { delete_greeting }
|
75
|
+
match(9) { section_menu }
|
76
|
+
timeout do
|
77
|
+
play config.mailbox.menu_timeout_message
|
78
|
+
end
|
79
|
+
|
80
|
+
invalid do
|
81
|
+
play config.mailbox.menu_invalid_message
|
82
|
+
end
|
83
|
+
|
84
|
+
failure do
|
85
|
+
play config.mailbox.menu_failure_message
|
86
|
+
section_menu
|
66
87
|
end
|
67
88
|
end
|
68
89
|
end
|
69
90
|
|
91
|
+
def delete_greeting
|
92
|
+
storage.delete_greeting_from_mailbox mailbox[:id]
|
93
|
+
play config.set_greeting.greeting_deleted
|
94
|
+
main_menu
|
95
|
+
end
|
96
|
+
|
70
97
|
def save_greeting
|
71
98
|
storage.save_greeting_for_mailbox mailbox[:id], temp_recording
|
72
99
|
main_menu
|
@@ -20,16 +20,16 @@ module Voicemail
|
|
20
20
|
|
21
21
|
failure do
|
22
22
|
play config.mailbox.menu_failure_message
|
23
|
-
|
23
|
+
main_menu
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
def set_pin
|
29
|
-
pin = ask config.set_pin.prompt, terminator: "#"
|
30
|
-
repeat_pin = ask config.set_pin.repeat_prompt, terminator: "#"
|
29
|
+
pin = ask config.set_pin.prompt, terminator: "#", timeout: 5
|
30
|
+
repeat_pin = ask config.set_pin.repeat_prompt, terminator: "#", timeout: 5
|
31
31
|
|
32
|
-
if pin.to_s.size < config.set_pin.pin_minimum_digits
|
32
|
+
if pin.to_s.nil? || pin.to_s.size < config.set_pin.pin_minimum_digits
|
33
33
|
play config.set_pin.pin_error
|
34
34
|
set_pin
|
35
35
|
elsif pin.to_s != repeat_pin.to_s
|
@@ -9,6 +9,7 @@ module Voicemail
|
|
9
9
|
play_greeting
|
10
10
|
answer if config.when_to_answer == :after_greeting
|
11
11
|
record_message
|
12
|
+
play_recording_confirmation
|
12
13
|
hangup
|
13
14
|
else
|
14
15
|
mailbox_not_found
|
@@ -19,6 +20,10 @@ module Voicemail
|
|
19
20
|
play mailbox[:greeting_message] || config.default_greeting
|
20
21
|
end
|
21
22
|
|
23
|
+
def play_recording_confirmation
|
24
|
+
play config.recording_confirmation
|
25
|
+
end
|
26
|
+
|
22
27
|
def record_message
|
23
28
|
@recording = record record_options
|
24
29
|
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Voicemail
|
2
|
+
class IntroMessageCreator
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'ahnsay'
|
6
|
+
rescue LoadError
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :current_message
|
10
|
+
|
11
|
+
def initialize(message)
|
12
|
+
raise ArgumentError, "MailboxPlayMessageIntroController needs a valid message passed to it" unless message
|
13
|
+
@current_message = message
|
14
|
+
end
|
15
|
+
|
16
|
+
def intro_message
|
17
|
+
Array(time_message) + Array(from_message)
|
18
|
+
end
|
19
|
+
|
20
|
+
def time_message
|
21
|
+
case config.numeric_method
|
22
|
+
when :i18n_string
|
23
|
+
I18n.t "voicemail.messages.message_received_on_x", received_on: I18n.localize(current_message[:received])
|
24
|
+
when :play_numeric
|
25
|
+
[config.messages.message_received_on, time_ssml]
|
26
|
+
when :ahn_say
|
27
|
+
[
|
28
|
+
config.messages.message_received_on,
|
29
|
+
Ahnsay.sounds_for_time(current_message[:received], format: config.datetime_format)
|
30
|
+
]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def from_message
|
35
|
+
case config.numeric_method
|
36
|
+
when :i18n_string
|
37
|
+
I18n.t "voicemail.messages.message_received_from_x", from: from_string
|
38
|
+
when :play_numeric
|
39
|
+
[config.messages.from, from_ssml]
|
40
|
+
when :ahn_say
|
41
|
+
[config.messages.from, Ahnsay.sounds_for_digits(from_digits)]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def from_digits
|
48
|
+
current_message[:from].scan(/\d/).join
|
49
|
+
end
|
50
|
+
|
51
|
+
def from_string
|
52
|
+
"".tap do |string|
|
53
|
+
from_digits.each_char do |char|
|
54
|
+
digit_word = I18n.t "numbers.#{char}"
|
55
|
+
if digit_word =~ /missing/
|
56
|
+
string << char
|
57
|
+
else
|
58
|
+
string << digit_word
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def time_ssml
|
65
|
+
output_formatter.ssml_for_time current_message[:received], format: config.datetime_format
|
66
|
+
end
|
67
|
+
|
68
|
+
def from_ssml
|
69
|
+
if from_digits != ""
|
70
|
+
output_formatter.ssml_for_characters from_digits
|
71
|
+
else
|
72
|
+
"unknown caller"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def output_formatter
|
77
|
+
@output_formatter ||= Adhearsion::CallController::Output::Formatter.new
|
78
|
+
end
|
79
|
+
|
80
|
+
def config
|
81
|
+
Voicemail::Plugin.config
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/voicemail/matcher.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# This template exists for the purpose of being overridden. See the README for more information.
|
3
|
+
|
1
4
|
module Voicemail
|
2
5
|
class Matcher
|
3
6
|
def initialize(entered, actual)
|
@@ -6,8 +9,6 @@ module Voicemail
|
|
6
9
|
end
|
7
10
|
|
8
11
|
def matches?
|
9
|
-
logger.info "input : #{@entered}"
|
10
|
-
logger.info "actual: #{@actual}"
|
11
12
|
@entered == @actual
|
12
13
|
end
|
13
14
|
end
|
data/lib/voicemail/plugin.rb
CHANGED
@@ -28,6 +28,7 @@ module Voicemail
|
|
28
28
|
|
29
29
|
allow_rerecording true, desc: "Allow caller to rerecord their voicemail"
|
30
30
|
after_record "Press 1 to save your voicemail. Press 2 to rerecord.", desc: "Message to play if allow_rerecording is set"
|
31
|
+
recording_confirmation "Your message has been saved. Thank you.", desc: "Message to play after the voicemail has been saved"
|
31
32
|
|
32
33
|
desc "Default recording options"
|
33
34
|
recording {
|
@@ -50,18 +51,27 @@ module Voicemail
|
|
50
51
|
number_before "You have ", desc: "What to play before the number of new messages"
|
51
52
|
number_after_new " new messages", desc: "What to play after the number of new messages"
|
52
53
|
number_after_saved " saved messages", desc: "What to play after the number of saved messages"
|
53
|
-
menu_greeting "Press 1 to listen to new messages, 2 to listen to saved messages, 3 to change your greeting, 4 to change your PIN", desc: "What to say before the main menu"
|
54
|
+
menu_greeting "Press 1 to listen to new messages, 2 to listen to saved messages, 3 to change your greeting, 4 to change your PIN, 7 to delete all new messages, 9 to delete all saved messages", desc: "What to say before the main menu"
|
54
55
|
menu_timeout_message "Please enter a digit for the menu", desc: "Message to play on main menu timeout"
|
55
56
|
menu_invalid_message "Please enter valid input", desc: "Message to play on main menu invalid"
|
56
57
|
menu_failure_message "Sorry, unable to understand your input.", desc: "Message to play on main menu failure"
|
58
|
+
clear_new_messages "Are you sure you want to permanently erase all new messages? Press 1 to delete, or any other key to cancel", desc: "New message clearing confirmation"
|
59
|
+
clear_saved_messages "Are you sure you want to permanently erase all saved messages? Press 1 to delete, or any other key to cancel", desc: "Saved message clearing confirmation"
|
60
|
+
no_messages_deleted "Your messages will not be deleted. Returning to main menu."
|
61
|
+
deleting_all_new_messages "All of your new messages are being deleted. Please wait."
|
62
|
+
deleting_all_saved_messages "All of your saved messages are being deleted. Please wait."
|
63
|
+
all_new_messages_deleted "All new messages have been successfully deleted."
|
64
|
+
all_saved_messages_deleted "All saved messages have been successfully deleted."
|
57
65
|
}
|
58
66
|
|
59
67
|
desc "Set greeting configuration"
|
60
68
|
set_greeting {
|
61
|
-
prompt "Press 1 to listen to your current greeting, 2 to record a new greeting, 9 to return to the main menu", desc: "Main prompt for setting greeting"
|
69
|
+
prompt "Press 1 to listen to your current greeting, 2 to record a new greeting, 3 to delete your personalized greeting, 9 to return to the main menu", desc: "Main prompt for setting greeting"
|
62
70
|
before_record "Please speak after the beep. The prompt will be played back after.", desc: "Recording instructions"
|
63
71
|
after_record "Press 1 to save your new greeting, 2 to discard it, 9 to go back to the menu", desc: "Menu to use after recording"
|
64
72
|
no_personal_greeting "You do not currently have a personalized greeting.", desc: "What to play if there is no specific greeting"
|
73
|
+
delete_confirmation "Your personlized greeting will be deleted. Press 1 to confirm, 9 to return to the main menu.", desc: "Ask the user to confirm removal of personalized greeting"
|
74
|
+
greeting_deleted "Your personalized greeting was deleted.", desc: "What to play after a greeting has been deleted"
|
65
75
|
}
|
66
76
|
|
67
77
|
desc "Set PIN configuration"
|
@@ -77,12 +87,13 @@ module Voicemail
|
|
77
87
|
|
78
88
|
desc "Listen to messages menu configuration"
|
79
89
|
messages {
|
80
|
-
menu_new "Press 1 to archive the message and go to the next, press 5 to delete the message and go to the next, press 7 to hear the message again, press 9 for the main menu", desc: "Menu to use inside new messages"
|
81
|
-
menu_saved "Press 1 to unarchive the message and go to the next, press 5 to delete the message and go to the next, press 7 to hear the message again, press 9 for the main menu", desc: "Menu to use inside saved messages"
|
90
|
+
menu_new "Press 1 to archive the message and go to the next, press 5 to delete the message and go to the next, press 7 to hear the message again, press 8 to skip the message, press 9 for the main menu", desc: "Menu to use inside new messages"
|
91
|
+
menu_saved "Press 1 to unarchive the message and go to the next, press 5 to delete the message and go to the next, press 7 to hear the message again, press 8 to skip the message, press 9 for the main menu", desc: "Menu to use inside saved messages"
|
82
92
|
no_new_messages "There are no new messages", desc: "Message to inform the user he has no new messages"
|
83
93
|
no_saved_messages "There are no saved messages", desc: "Message to inform the user he has no saved messages"
|
84
94
|
message_received_on "Message received on ", desc: "Prefix to menu intro"
|
85
95
|
from " from ", desc: "Used in message intro"
|
96
|
+
message_deleted "Message deleted.", desc: "Confirmation that a message has been deleted"
|
86
97
|
}
|
87
98
|
|
88
99
|
desc "Storage configuration"
|
@@ -72,6 +72,14 @@ module Voicemail
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
def delete_greeting_from_mailbox(mailbox_id)
|
76
|
+
store.transaction do
|
77
|
+
rec = store[:mailboxes][mailbox_id][:greeting_message]
|
78
|
+
File.unlink rec if File.exists? rec
|
79
|
+
store[:mailboxes][mailbox_id][:greeting_message] = nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
75
83
|
def change_pin_for_mailbox(mailbox_id, new_pin)
|
76
84
|
store.transaction do
|
77
85
|
store[:mailboxes][mailbox_id][:pin] = new_pin
|
data/lib/voicemail/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voicemail::MailboxCleanerController do
|
4
|
+
include VoicemailControllerSpecHelper
|
5
|
+
describe "#run" do
|
6
|
+
context "new messages" do
|
7
|
+
subject { flexmock(Voicemail::MailboxCleanerController.new call, {new_or_saved: :new}) }
|
8
|
+
it 'should call #menu with the proper arguments' do
|
9
|
+
subject.should_receive(:menu).with(config.mailbox.clear_new_messages,
|
10
|
+
{ timeout: config.menu_timeout, tries: config.menu_tries }, Proc)
|
11
|
+
subject.run
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "saved messages" do
|
16
|
+
subject { flexmock(Voicemail::MailboxCleanerController.new call, {new_or_saved: :saved}) }
|
17
|
+
it 'should call #menu with the proper arguments' do
|
18
|
+
subject.should_receive(:menu).with(config.mailbox.clear_saved_messages,
|
19
|
+
{ timeout: config.menu_timeout, tries: config.menu_tries }, Proc)
|
20
|
+
subject.run
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -39,27 +39,21 @@ describe Voicemail::MailboxPlayMessageController do
|
|
39
39
|
it "deletes the message" do
|
40
40
|
subject.should_receive(:current_message).once.and_return(message)
|
41
41
|
storage_instance.should_receive(:delete_message).once.with(mailbox[:id], message[:id])
|
42
|
+
subject.should_receive(:play).once.with(config.messages.message_deleted)
|
42
43
|
controller.delete_message
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
46
|
-
describe "#intro_message" do
|
47
|
-
it "plays the message introduction" do
|
48
|
-
subject.should_receive(:current_message).once.and_return message
|
49
|
-
should_invoke Voicemail::MailboxPlayMessageIntroController, message: message, mailbox: 100, storage: storage_instance
|
50
|
-
controller.intro_message
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
47
|
describe "#play_message" do
|
48
|
+
include FlexMock::ArgumentTypes
|
55
49
|
after { subject.play_message }
|
56
50
|
|
57
51
|
context "with a new message" do
|
58
52
|
before { subject.new_or_saved = :new }
|
59
53
|
|
60
54
|
it "plays the message, followed by the new message menu" do
|
61
|
-
subject.should_receive(:current_message).
|
62
|
-
subject.should_receive(:menu).once.with message[:uri], config.messages.menu_new,
|
55
|
+
subject.should_receive(:current_message).and_return message
|
56
|
+
subject.should_receive(:menu).once.with any, message[:uri], config.messages.menu_new,
|
63
57
|
{ timeout: config.menu_timeout, tries: config.menu_tries }, Proc
|
64
58
|
end
|
65
59
|
end
|
@@ -68,8 +62,8 @@ describe Voicemail::MailboxPlayMessageController do
|
|
68
62
|
before { subject.new_or_saved = :saved }
|
69
63
|
|
70
64
|
it "plays the message, followed by the saved message menu" do
|
71
|
-
subject.should_receive(:current_message).
|
72
|
-
subject.should_receive(:menu).once.with message[:uri], config.messages.menu_saved,
|
65
|
+
subject.should_receive(:current_message).and_return message
|
66
|
+
subject.should_receive(:menu).once.with any, message[:uri], config.messages.menu_saved,
|
73
67
|
{ timeout: config.menu_timeout, tries: config.menu_tries }, Proc
|
74
68
|
end
|
75
69
|
end
|
@@ -66,6 +66,24 @@ describe Voicemail::MailboxSetGreetingController do
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
describe "#delete_greeting_menu" do
|
70
|
+
it "calls #menu with proper parameters" do
|
71
|
+
subject.should_receive(:menu).once.with(config.set_greeting.delete_confirmation,
|
72
|
+
{timeout: config.menu_timeout,
|
73
|
+
tries: config.menu_tries}, Proc)
|
74
|
+
subject.delete_greeting_menu
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#delete_greeting" do
|
79
|
+
it "deletes the greeting and plays a confirmation" do
|
80
|
+
storage_instance.should_receive(:delete_greeting_from_mailbox).with(mailbox[:id])
|
81
|
+
subject.should_receive(:play).with(config.set_greeting.greeting_deleted)
|
82
|
+
subject.should_receive(:main_menu)
|
83
|
+
subject.delete_greeting
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
69
87
|
describe "#save_greeting" do
|
70
88
|
let(:file_path) { "/path/to/file" }
|
71
89
|
|
@@ -18,8 +18,8 @@ describe Voicemail::MailboxSetPinController do
|
|
18
18
|
let(:short_pin) { "9" }
|
19
19
|
|
20
20
|
it "makes the user enter a PIN and repeat it" do
|
21
|
-
should_ask(config.set_pin.prompt, terminator: "#").and_return(pin).ordered
|
22
|
-
should_ask(config.set_pin.repeat_prompt, terminator: "#").and_return(pin).ordered
|
21
|
+
should_ask(config.set_pin.prompt, terminator: "#", timeout: 5).and_return(pin).ordered
|
22
|
+
should_ask(config.set_pin.repeat_prompt, terminator: "#", timeout: 5).and_return(pin).ordered
|
23
23
|
should_play(config.set_pin.change_ok).ordered
|
24
24
|
storage_instance.should_receive(:change_pin_for_mailbox).with(mailbox[:id], pin).once.ordered
|
25
25
|
subject.should_receive(:main_menu).once
|
@@ -27,11 +27,11 @@ describe Voicemail::MailboxSetPinController do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it "makes the user start over if the PIN is too short" do
|
30
|
-
should_ask(config.set_pin.prompt, terminator: "#").and_return(short_pin).ordered
|
31
|
-
should_ask(config.set_pin.repeat_prompt, terminator: "#").and_return(short_pin).ordered
|
30
|
+
should_ask(config.set_pin.prompt, terminator: "#", timeout: 5).and_return(short_pin).ordered
|
31
|
+
should_ask(config.set_pin.repeat_prompt, terminator: "#", timeout: 5).and_return(short_pin).ordered
|
32
32
|
should_play(config.set_pin.pin_error).ordered
|
33
|
-
should_ask(config.set_pin.prompt, terminator: "#").and_return(pin).ordered
|
34
|
-
should_ask(config.set_pin.repeat_prompt, terminator: "#").and_return(pin).ordered
|
33
|
+
should_ask(config.set_pin.prompt, terminator: "#", timeout: 5).and_return(pin).ordered
|
34
|
+
should_ask(config.set_pin.repeat_prompt, terminator: "#", timeout: 5).and_return(pin).ordered
|
35
35
|
should_play(config.set_pin.change_ok).ordered
|
36
36
|
storage_instance.should_receive(:change_pin_for_mailbox).with(mailbox[:id], pin).once.ordered
|
37
37
|
subject.should_receive(:main_menu).once
|
@@ -39,11 +39,11 @@ describe Voicemail::MailboxSetPinController do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "makes the user start over if the PIN does not match confirmation" do
|
42
|
-
should_ask(config.set_pin.prompt, terminator: "#").and_return(pin).ordered
|
43
|
-
should_ask(config.set_pin.repeat_prompt, terminator: "#").and_return(not_matching_pin).ordered
|
42
|
+
should_ask(config.set_pin.prompt, terminator: "#", timeout: 5).and_return(pin).ordered
|
43
|
+
should_ask(config.set_pin.repeat_prompt, terminator: "#", timeout: 5).and_return(not_matching_pin).ordered
|
44
44
|
should_play(config.set_pin.match_error).ordered
|
45
|
-
should_ask(config.set_pin.prompt, terminator: "#").and_return(pin).ordered
|
46
|
-
should_ask(config.set_pin.repeat_prompt, terminator: "#").and_return(pin).ordered
|
45
|
+
should_ask(config.set_pin.prompt, terminator: "#", timeout: 5).and_return(pin).ordered
|
46
|
+
should_ask(config.set_pin.repeat_prompt, terminator: "#", timeout: 5).and_return(pin).ordered
|
47
47
|
should_play(config.set_pin.change_ok).ordered
|
48
48
|
storage_instance.should_receive(:change_pin_for_mailbox).with(mailbox[:id], pin).once.ordered
|
49
49
|
subject.should_receive(:main_menu).once
|
@@ -46,6 +46,7 @@ describe Voicemail::VoicemailController do
|
|
46
46
|
it "plays the default greeting if one is not specified" do
|
47
47
|
should_play config.default_greeting
|
48
48
|
subject.should_receive :record_message
|
49
|
+
should_play config.recording_confirmation
|
49
50
|
controller.run
|
50
51
|
end
|
51
52
|
end
|
@@ -56,6 +57,7 @@ describe Voicemail::VoicemailController do
|
|
56
57
|
it "plays the specific greeting message" do
|
57
58
|
should_play greeting_message
|
58
59
|
subject.should_receive :record_message
|
60
|
+
should_play config.recording_confirmation
|
59
61
|
controller.run
|
60
62
|
end
|
61
63
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voicemail::IntroMessageCreator do
|
4
|
+
include FlexMock::ArgumentTypes
|
5
|
+
|
6
|
+
let(:config) { Voicemail::Plugin.config }
|
7
|
+
let(:message) do
|
8
|
+
{
|
9
|
+
from: "1234",
|
10
|
+
received: Time.local(2012, 5, 1, 9, 0, 0)
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { flexmock described_class.new(message) }
|
15
|
+
|
16
|
+
describe "#intro_message" do
|
17
|
+
context "in :i18n_string mode" do
|
18
|
+
before { config.numeric_method = :i18n_string }
|
19
|
+
|
20
|
+
it "returns the translation" do
|
21
|
+
flexmock(I18n).should_receive('localize').with(Time.local(2012, 5, 1, 9, 0, 0)).and_return "9pm"
|
22
|
+
I18n.backend.store_translations :en, voicemail: {
|
23
|
+
messages: {
|
24
|
+
message_received_on_x: "Message received on %{received_on}",
|
25
|
+
message_received_from_x: "Message received from %{from}"
|
26
|
+
}
|
27
|
+
}, numbers: {'1' => "one ", '2' => "two ", '3' => 'three ', '4' => 'four '}
|
28
|
+
|
29
|
+
subject.intro_message.should == ["Message received on 9pm", "Message received from one two three four "]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "in :ahn_say mode" do
|
34
|
+
let!(:ahn_config) { flexmock(Adhearsion.config, punchblock: OpenStruct.new, ahnsay: OpenStruct.new(sounds_dir: "/")) }
|
35
|
+
|
36
|
+
before do
|
37
|
+
config.numeric_method = :ahn_say
|
38
|
+
config.datetime_format = "hmp"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns a nice array full of ahn_say sound files" do
|
42
|
+
subject.intro_message.should == [
|
43
|
+
"Message received on ",
|
44
|
+
["/9.ul", "/oclock.ul", "/a-m.ul"],
|
45
|
+
" from ",
|
46
|
+
["/1.ul", "/2.ul", "/3.ul", "/4.ul"]
|
47
|
+
]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "in :play_numeric mode" do
|
52
|
+
let(:formatter) { flexmock Adhearsion::CallController::Output::Formatter }
|
53
|
+
before do
|
54
|
+
flexmock Adhearsion::CallController::Output::Formatter, new: formatter
|
55
|
+
config.numeric_method = :play_numeric
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns speech and ssml in an array" do
|
59
|
+
formatter.should_receive(:ssml_for_time).with(Time.local(2012, 5, 1, 9, 0, 0), any).and_return :time
|
60
|
+
formatter.should_receive(:ssml_for_characters).with('1234').and_return :number
|
61
|
+
subject.intro_message.should == ["Message received on ", :time, " from ", :number]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -103,5 +103,20 @@ module Voicemail
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
end
|
106
|
+
|
107
|
+
describe "#delete_greeting_from_mailbox" do
|
108
|
+
before do
|
109
|
+
storage.store.transaction do |store|
|
110
|
+
store[:mailboxes][100][:greeting_message] = "/some/path"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
it "deletes the greeting message" do
|
115
|
+
storage.delete_greeting_from_mailbox 100
|
116
|
+
storage.store.transaction do |store|
|
117
|
+
store[:mailboxes][100][:greeting_message].should be_nil
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
106
121
|
end
|
107
122
|
end
|
data/templates/en.yml
CHANGED
@@ -17,14 +17,14 @@ en:
|
|
17
17
|
'0': "zero "
|
18
18
|
|
19
19
|
voicemail:
|
20
|
-
default_greeting: "You have reached
|
20
|
+
default_greeting: "You have reached Voicemail"
|
21
21
|
mailbox_not_found: "Mailbox not found"
|
22
22
|
|
23
23
|
mailbox:
|
24
24
|
greeting_message: "Welcome to the mailbox system."
|
25
25
|
please_enter_pin: "Please enter your PIN."
|
26
26
|
pin_wrong: "The PIN you entered does not match. Please try again."
|
27
|
-
could_not_auth: "We are sorry, the system could not authenticate you"
|
27
|
+
could_not_auth: "We are sorry, the system could not authenticate you."
|
28
28
|
number_before: "You have "
|
29
29
|
number_after: " new messages"
|
30
30
|
number_after_saved: " saved messages"
|
@@ -34,34 +34,38 @@ en:
|
|
34
34
|
x_saved_messages:
|
35
35
|
one: "You have one saved message. "
|
36
36
|
other: "You have %{count} saved messages. "
|
37
|
-
menu_greeting: "Press 1 to listen to new messages, 2 to change your greeting, 3 to change your PIN"
|
38
|
-
menu_timeout_message: "Please enter a digit for the menu"
|
39
|
-
menu_invalid_message: "Please enter valid input"
|
37
|
+
menu_greeting: "Press 1 to listen to new messages, 2 to change your greeting, 3 to change your PIN."
|
38
|
+
menu_timeout_message: "Please enter a digit for the menu."
|
39
|
+
menu_invalid_message: "Please enter valid input."
|
40
40
|
menu_failure_message: "Sorry, unable to understand your input."
|
41
41
|
|
42
42
|
after_record: "Press 1 to save your voicemail. Press 2 to rerecord."
|
43
|
+
recording_confirmation: "Your message has been saved. Thank you."
|
43
44
|
|
44
45
|
set_greeting:
|
45
|
-
prompt: "Press 1 to listen to your current greeting, 2 to record a new greeting, 9 to return to the main menu"
|
46
|
+
prompt: "Press 1 to listen to your current greeting, 2 to record a new greeting, 9 to return to the main menu."
|
46
47
|
before_record: "Please speak after the beep. The prompt will be played back after."
|
47
|
-
after_record: "Press 1 to save your new greeting, 2 to discard it, 9 to go back to the menu"
|
48
|
+
after_record: "Press 1 to save your new greeting, 2 to discard it, 9 to go back to the menu."
|
48
49
|
no_personal_greeting: "You do not currently have a personalized greeting."
|
49
50
|
|
50
51
|
set_pin:
|
51
|
-
menu: "Press 1 to change your current PIN, or 9 to go back to the main menu"
|
52
|
-
prompt: "Enter your new PIN of at least four digits followed by the pound sign"
|
53
|
-
repeat_prompt: "Please enter your new PIN again, followed by the pound sign"
|
52
|
+
menu: "Press 1 to change your current PIN, or 9 to go back to the main menu."
|
53
|
+
prompt: "Enter your new PIN of at least four digits followed by the pound sign."
|
54
|
+
repeat_prompt: "Please enter your new PIN again, followed by the pound sign."
|
54
55
|
pin_error: "Please enter at least four digits followed by the pound sign."
|
55
56
|
match_error: "The two entered PINs don't match, please try again."
|
56
|
-
change_ok: "Your PIN has been successfully changed"
|
57
|
+
change_ok: "Your PIN has been successfully changed."
|
57
58
|
|
58
59
|
messages:
|
59
60
|
menu_new: "Press 1 to archive the message and go to the next, press 5 to delete the message and go to the next, press 7 to hear the message again, press 9 for the main menu"
|
60
61
|
menu_saved: "Press 1 to unarchive the message and go to the next, press 5 to delete the message and go to the next, press 7 to hear the message again, press 9 for the main menu"
|
61
|
-
no_new_messages: "There are no new messages"
|
62
|
-
no_saved_messages: "There are no saved messages"
|
62
|
+
no_new_messages: "There are no new messages."
|
63
|
+
no_saved_messages: "There are no saved messages."
|
63
64
|
message_received_on: "Message received on "
|
64
65
|
from: " from "
|
65
66
|
message_received_on_x: "Message received on %{received_on}. "
|
66
67
|
message_received_from_x: "Message received from %{from}. "
|
67
|
-
|
68
|
+
deleting_all_new_messages: "All of your new messages are being deleted. Please wait."
|
69
|
+
deleting_all_saved_messages: "All of your saved messages are being deleted. Please wait."
|
70
|
+
all_new_messages_deleted: "All new messages have been deleted."
|
71
|
+
all_saved_messages_deleted: "All saved messages have been deleted."
|
data/voicemail.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: voicemail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Pradovera
|
@@ -9,104 +9,118 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: adhearsion
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '2.4'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '2.4'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: bundler
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: 2.14.0
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 2.14.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: yard
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: 0.6.0
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 0.6.0
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: guard-rspec
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: flexmock
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: ahnsay
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
110
124
|
- !ruby/object:Gem::Version
|
111
125
|
version: '0'
|
112
126
|
description: A simple, extensible voicemail implementation
|
@@ -117,8 +131,9 @@ executables: []
|
|
117
131
|
extensions: []
|
118
132
|
extra_rdoc_files: []
|
119
133
|
files:
|
120
|
-
- .gitignore
|
121
|
-
- .
|
134
|
+
- ".gitignore"
|
135
|
+
- ".hound.yml"
|
136
|
+
- ".rspec"
|
122
137
|
- CHANGELOG.md
|
123
138
|
- Gemfile
|
124
139
|
- Guardfile
|
@@ -128,6 +143,7 @@ files:
|
|
128
143
|
- lib/voicemail.rb
|
129
144
|
- lib/voicemail/call_controllers/application_controller.rb
|
130
145
|
- lib/voicemail/call_controllers/authentication_controller.rb
|
146
|
+
- lib/voicemail/call_controllers/mailbox_cleaner_controller.rb
|
131
147
|
- lib/voicemail/call_controllers/mailbox_controller.rb
|
132
148
|
- lib/voicemail/call_controllers/mailbox_main_menu_controller.rb
|
133
149
|
- lib/voicemail/call_controllers/mailbox_messages_controller.rb
|
@@ -136,6 +152,7 @@ files:
|
|
136
152
|
- lib/voicemail/call_controllers/mailbox_set_greeting_controller.rb
|
137
153
|
- lib/voicemail/call_controllers/mailbox_set_pin_controller.rb
|
138
154
|
- lib/voicemail/call_controllers/voicemail_controller.rb
|
155
|
+
- lib/voicemail/intro_message_creator.rb
|
139
156
|
- lib/voicemail/localization_loader.rb
|
140
157
|
- lib/voicemail/matcher.rb
|
141
158
|
- lib/voicemail/plugin.rb
|
@@ -146,6 +163,7 @@ files:
|
|
146
163
|
- spec/support/voicemail_controller_spec_helper.rb
|
147
164
|
- spec/voicemail/call_controllers/application_controller_spec.rb
|
148
165
|
- spec/voicemail/call_controllers/authentication_controller_spec.rb
|
166
|
+
- spec/voicemail/call_controllers/mailbox_cleaner_controller_spec.rb
|
149
167
|
- spec/voicemail/call_controllers/mailbox_controller_spec.rb
|
150
168
|
- spec/voicemail/call_controllers/mailbox_main_menu_controller_spec.rb
|
151
169
|
- spec/voicemail/call_controllers/mailbox_messages_controller_spec.rb
|
@@ -154,6 +172,7 @@ files:
|
|
154
172
|
- spec/voicemail/call_controllers/mailbox_set_greeting_controller_spec.rb
|
155
173
|
- spec/voicemail/call_controllers/mailbox_set_pin_controller_spec.rb
|
156
174
|
- spec/voicemail/call_controllers/voicemail_controller_spec.rb
|
175
|
+
- spec/voicemail/intro_message_creator_spec.rb
|
157
176
|
- spec/voicemail/localization_loader_spec.rb
|
158
177
|
- spec/voicemail/storage_pstore_spec.rb
|
159
178
|
- spec/voicemail/storage_spec.rb
|
@@ -170,17 +189,17 @@ require_paths:
|
|
170
189
|
- lib
|
171
190
|
required_ruby_version: !ruby/object:Gem::Requirement
|
172
191
|
requirements:
|
173
|
-
- -
|
192
|
+
- - ">="
|
174
193
|
- !ruby/object:Gem::Version
|
175
194
|
version: '0'
|
176
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
196
|
requirements:
|
178
|
-
- -
|
197
|
+
- - ">="
|
179
198
|
- !ruby/object:Gem::Version
|
180
199
|
version: '0'
|
181
200
|
requirements: []
|
182
201
|
rubyforge_project: voicemail
|
183
|
-
rubygems_version: 2.
|
202
|
+
rubygems_version: 2.2.2
|
184
203
|
signing_key:
|
185
204
|
specification_version: 4
|
186
205
|
summary: Voicemail for Adhearsion
|
@@ -189,6 +208,7 @@ test_files:
|
|
189
208
|
- spec/support/voicemail_controller_spec_helper.rb
|
190
209
|
- spec/voicemail/call_controllers/application_controller_spec.rb
|
191
210
|
- spec/voicemail/call_controllers/authentication_controller_spec.rb
|
211
|
+
- spec/voicemail/call_controllers/mailbox_cleaner_controller_spec.rb
|
192
212
|
- spec/voicemail/call_controllers/mailbox_controller_spec.rb
|
193
213
|
- spec/voicemail/call_controllers/mailbox_main_menu_controller_spec.rb
|
194
214
|
- spec/voicemail/call_controllers/mailbox_messages_controller_spec.rb
|
@@ -197,6 +217,7 @@ test_files:
|
|
197
217
|
- spec/voicemail/call_controllers/mailbox_set_greeting_controller_spec.rb
|
198
218
|
- spec/voicemail/call_controllers/mailbox_set_pin_controller_spec.rb
|
199
219
|
- spec/voicemail/call_controllers/voicemail_controller_spec.rb
|
220
|
+
- spec/voicemail/intro_message_creator_spec.rb
|
200
221
|
- spec/voicemail/localization_loader_spec.rb
|
201
222
|
- spec/voicemail/storage_pstore_spec.rb
|
202
223
|
- spec/voicemail/storage_spec.rb
|