adhearsion 2.6.4 → 3.0.0.beta1
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/.travis.yml +6 -9
- data/CHANGELOG.md +22 -7
- data/Gemfile +2 -0
- data/README.markdown +4 -5
- data/Rakefile +1 -2
- data/adhearsion.gemspec +19 -8
- data/features/cli_create.feature +19 -3
- data/features/step_definitions/cli_steps.rb +0 -11
- data/features/support/env.rb +3 -4
- data/lib/adhearsion.rb +48 -27
- data/lib/adhearsion/call.rb +34 -50
- data/lib/adhearsion/call_controller.rb +6 -12
- data/lib/adhearsion/call_controller/dial.rb +15 -53
- data/lib/adhearsion/call_controller/input.rb +39 -162
- data/lib/adhearsion/call_controller/input/ask_grammar_builder.rb +44 -0
- data/lib/adhearsion/call_controller/input/menu_builder.rb +136 -0
- data/lib/adhearsion/call_controller/input/prompt_builder.rb +78 -0
- data/lib/adhearsion/call_controller/input/result.rb +46 -0
- data/lib/adhearsion/call_controller/output.rb +48 -67
- data/lib/adhearsion/call_controller/output/abstract_player.rb +3 -3
- data/lib/adhearsion/call_controller/output/async_player.rb +3 -3
- data/lib/adhearsion/call_controller/output/player.rb +1 -1
- data/lib/adhearsion/call_controller/record.rb +23 -8
- data/lib/adhearsion/calls.rb +1 -1
- data/lib/adhearsion/cli_commands/ahn_command.rb +2 -65
- data/lib/adhearsion/cli_commands/thor_errors.rb +0 -6
- data/lib/adhearsion/configuration.rb +91 -39
- data/lib/adhearsion/core_ext/blather/stanza.rb +41 -0
- data/lib/adhearsion/core_ext/blather/stanza/presence.rb +13 -0
- data/lib/adhearsion/error.rb +5 -0
- data/lib/adhearsion/event.rb +21 -0
- data/lib/adhearsion/event/active_speaker.rb +11 -0
- data/lib/adhearsion/event/answered.rb +11 -0
- data/lib/adhearsion/event/asterisk.rb +10 -0
- data/lib/adhearsion/event/asterisk/ami.rb +34 -0
- data/lib/adhearsion/event/complete.rb +75 -0
- data/lib/adhearsion/event/dtmf.rb +11 -0
- data/lib/adhearsion/event/end.rb +22 -0
- data/lib/adhearsion/event/input_timers_started.rb +9 -0
- data/lib/adhearsion/event/joined.rb +17 -0
- data/lib/adhearsion/event/offer.rb +14 -0
- data/lib/adhearsion/event/ringing.rb +11 -0
- data/lib/adhearsion/event/started_speaking.rb +13 -0
- data/lib/adhearsion/event/stopped_speaking.rb +13 -0
- data/lib/adhearsion/event/unjoined.rb +17 -0
- data/lib/adhearsion/events.rb +47 -66
- data/lib/adhearsion/foundation.rb +0 -1
- data/lib/adhearsion/foundation/object.rb +0 -5
- data/lib/adhearsion/generators/app/app_generator.rb +4 -1
- data/lib/adhearsion/generators/app/templates/Gemfile.erb +2 -10
- data/lib/adhearsion/generators/app/templates/adhearsion.erb +9 -9
- data/lib/adhearsion/generators/app/templates/config.ru +7 -0
- data/lib/adhearsion/generators/app/templates/en.yml +4 -0
- data/lib/adhearsion/generators/app/templates/events.erb +2 -2
- data/lib/adhearsion/generators/app/templates/hello_world.wav +0 -0
- data/lib/adhearsion/generators/app/templates/simon_game.rb +2 -1
- data/lib/adhearsion/generators/app/templates/simon_game_spec.rb +2 -2
- data/lib/adhearsion/has_headers.rb +34 -0
- data/lib/adhearsion/http_server.rb +37 -0
- data/lib/adhearsion/initializer.rb +19 -153
- data/lib/adhearsion/logging.rb +6 -25
- data/lib/adhearsion/outbound_call.rb +5 -5
- data/lib/adhearsion/plugin.rb +1 -0
- data/lib/adhearsion/protocol_error.rb +26 -0
- data/lib/adhearsion/rayo.rb +30 -0
- data/lib/adhearsion/rayo/client.rb +62 -0
- data/lib/adhearsion/rayo/client/component_registry.rb +33 -0
- data/lib/adhearsion/rayo/command.rb +21 -0
- data/lib/adhearsion/rayo/command/accept.rb +16 -0
- data/lib/adhearsion/rayo/command/answer.rb +16 -0
- data/lib/adhearsion/rayo/command/dial.rb +57 -0
- data/lib/adhearsion/rayo/command/hangup.rb +16 -0
- data/lib/adhearsion/rayo/command/join.rb +43 -0
- data/lib/adhearsion/rayo/command/mute.rb +13 -0
- data/lib/adhearsion/rayo/command/redirect.rb +23 -0
- data/lib/adhearsion/rayo/command/reject.rb +40 -0
- data/lib/adhearsion/rayo/command/unjoin.rb +24 -0
- data/lib/adhearsion/rayo/command/unmute.rb +13 -0
- data/lib/adhearsion/rayo/command_node.rb +47 -0
- data/lib/adhearsion/rayo/component.rb +21 -0
- data/lib/adhearsion/rayo/component/asterisk.rb +13 -0
- data/lib/adhearsion/rayo/component/asterisk/agi.rb +14 -0
- data/lib/adhearsion/rayo/component/asterisk/agi/command.rb +46 -0
- data/lib/adhearsion/rayo/component/asterisk/ami.rb +14 -0
- data/lib/adhearsion/rayo/component/asterisk/ami/action.rb +61 -0
- data/lib/adhearsion/rayo/component/component_node.rb +90 -0
- data/lib/adhearsion/rayo/component/input.rb +186 -0
- data/lib/adhearsion/rayo/component/output.rb +471 -0
- data/lib/adhearsion/rayo/component/prompt.rb +53 -0
- data/lib/adhearsion/rayo/component/receive_fax.rb +26 -0
- data/lib/adhearsion/rayo/component/record.rb +165 -0
- data/lib/adhearsion/rayo/component/send_fax.rb +64 -0
- data/lib/adhearsion/rayo/component/stop.rb +11 -0
- data/lib/adhearsion/rayo/connection.rb +12 -0
- data/lib/adhearsion/rayo/connection/asterisk.rb +74 -0
- data/lib/adhearsion/rayo/connection/connected.rb +22 -0
- data/lib/adhearsion/rayo/connection/generic_connection.rb +22 -0
- data/lib/adhearsion/rayo/connection/xmpp.rb +198 -0
- data/lib/adhearsion/rayo/disconnected_error.rb +22 -0
- data/lib/adhearsion/{punchblock_plugin → rayo}/initializer.rb +19 -19
- data/lib/adhearsion/rayo/rayo_node.rb +127 -0
- data/lib/adhearsion/rayo/ref.rb +57 -0
- data/lib/adhearsion/statistics.rb +1 -1
- data/lib/adhearsion/tasks.rb +1 -2
- data/lib/adhearsion/tasks/configuration.rb +1 -1
- data/lib/adhearsion/tasks/environment.rb +0 -2
- data/lib/adhearsion/tasks/i18n.rb +49 -0
- data/lib/adhearsion/translator.rb +11 -0
- data/lib/adhearsion/translator/asterisk.rb +234 -0
- data/lib/adhearsion/translator/asterisk/agi_app.rb +17 -0
- data/lib/adhearsion/translator/asterisk/agi_command.rb +45 -0
- data/lib/adhearsion/translator/asterisk/ami_error_converter.rb +20 -0
- data/lib/adhearsion/translator/asterisk/call.rb +416 -0
- data/lib/adhearsion/translator/asterisk/channel.rb +43 -0
- data/lib/adhearsion/translator/asterisk/component.rb +88 -0
- data/lib/adhearsion/translator/asterisk/component/asterisk.rb +15 -0
- data/lib/adhearsion/translator/asterisk/component/asterisk/agi_command.rb +42 -0
- data/lib/adhearsion/translator/asterisk/component/asterisk/ami_action.rb +68 -0
- data/lib/adhearsion/translator/asterisk/component/composed_prompt.rb +76 -0
- data/lib/adhearsion/translator/asterisk/component/dtmf_recognizer.rb +137 -0
- data/lib/adhearsion/translator/asterisk/component/input.rb +34 -0
- data/lib/adhearsion/translator/asterisk/component/input_component.rb +90 -0
- data/lib/adhearsion/translator/asterisk/component/mrcp_native_prompt.rb +71 -0
- data/lib/adhearsion/translator/asterisk/component/mrcp_prompt.rb +55 -0
- data/lib/adhearsion/translator/asterisk/component/mrcp_recog_prompt.rb +165 -0
- data/lib/adhearsion/translator/asterisk/component/output.rb +233 -0
- data/lib/adhearsion/translator/asterisk/component/record.rb +101 -0
- data/lib/adhearsion/translator/asterisk/component/stop_by_redirect.rb +30 -0
- data/lib/adhearsion/translator/asterisk/unimrcp_app.rb +28 -0
- data/lib/adhearsion/uri_list.rb +21 -0
- data/lib/adhearsion/version.rb +1 -1
- data/spec/adhearsion/call_controller/dial_spec.rb +79 -1420
- data/spec/adhearsion/call_controller/input_spec.rb +1141 -237
- data/spec/adhearsion/call_controller/output/async_player_spec.rb +10 -10
- data/spec/adhearsion/call_controller/output/player_spec.rb +8 -8
- data/spec/adhearsion/call_controller/output_spec.rb +162 -215
- data/spec/adhearsion/call_controller/record_spec.rb +15 -16
- data/spec/adhearsion/call_controller_spec.rb +23 -40
- data/spec/adhearsion/call_spec.rb +123 -129
- data/spec/adhearsion/calls_spec.rb +3 -3
- data/spec/adhearsion/configuration_spec.rb +94 -108
- data/spec/adhearsion/event/answered_spec.rb +50 -0
- data/spec/adhearsion/event/asterisk/Find Results +402 -0
- data/spec/adhearsion/event/asterisk/ami_spec.rb +81 -0
- data/spec/adhearsion/event/complete_spec.rb +176 -0
- data/spec/adhearsion/event/dtmf_spec.rb +35 -0
- data/spec/adhearsion/event/end_spec.rb +85 -0
- data/spec/adhearsion/event/input_timers_started_spec.rb +19 -0
- data/spec/adhearsion/event/joined_spec.rb +53 -0
- data/spec/adhearsion/event/offer_spec.rb +106 -0
- data/spec/adhearsion/event/ringing_spec.rb +50 -0
- data/spec/adhearsion/event/started_speaking_spec.rb +37 -0
- data/spec/adhearsion/event/stopped_speaking_spec.rb +37 -0
- data/spec/adhearsion/event/unjoined_spec.rb +48 -0
- data/spec/adhearsion/event/untitled +0 -0
- data/spec/adhearsion/events_spec.rb +19 -45
- data/spec/adhearsion/initializer_spec.rb +12 -184
- data/spec/adhearsion/logging_spec.rb +5 -20
- data/spec/adhearsion/outbound_call_spec.rb +13 -13
- data/spec/adhearsion/plugin_spec.rb +3 -4
- data/spec/adhearsion/protocol_error_spec.rb +91 -0
- data/spec/adhearsion/rayo/client/component_registry_spec.rb +26 -0
- data/spec/adhearsion/rayo/client_spec.rb +134 -0
- data/spec/adhearsion/rayo/command/accept_spec.rb +63 -0
- data/spec/adhearsion/rayo/command/answer_spec.rb +73 -0
- data/spec/adhearsion/rayo/command/dial_spec.rb +156 -0
- data/spec/adhearsion/rayo/command/hangup_spec.rb +63 -0
- data/spec/adhearsion/rayo/command/join_spec.rb +158 -0
- data/spec/adhearsion/rayo/command/mute_spec.rb +32 -0
- data/spec/adhearsion/rayo/command/redirect_spec.rb +89 -0
- data/spec/adhearsion/rayo/command/reject_spec.rb +117 -0
- data/spec/adhearsion/rayo/command/unjoin_spec.rb +82 -0
- data/spec/adhearsion/rayo/command/unmute_spec.rb +32 -0
- data/spec/adhearsion/rayo/command_node_spec.rb +101 -0
- data/spec/adhearsion/rayo/component/asterisk/agi/command_spec.rb +111 -0
- data/spec/adhearsion/rayo/component/asterisk/ami/action_spec.rb +173 -0
- data/spec/adhearsion/rayo/component/component_node_spec.rb +110 -0
- data/spec/adhearsion/rayo/component/input_spec.rb +715 -0
- data/spec/adhearsion/rayo/component/output_spec.rb +1030 -0
- data/spec/adhearsion/rayo/component/prompt_spec.rb +171 -0
- data/spec/adhearsion/rayo/component/receive_fax_spec.rb +136 -0
- data/spec/adhearsion/rayo/component/record_spec.rb +497 -0
- data/spec/adhearsion/rayo/component/send_fax_spec.rb +144 -0
- data/spec/adhearsion/rayo/connection/asterisk_spec.rb +118 -0
- data/spec/adhearsion/rayo/connection/xmpp_spec.rb +449 -0
- data/spec/adhearsion/rayo/initializer_spec.rb +353 -0
- data/spec/adhearsion/rayo/ref_spec.rb +168 -0
- data/spec/adhearsion/rayo_spec.rb +7 -0
- data/spec/adhearsion/router/route_spec.rb +1 -1
- data/spec/adhearsion/statistics_spec.rb +2 -5
- data/spec/adhearsion/translator/asterisk/call_spec.rb +2047 -0
- data/spec/adhearsion/translator/asterisk/component/asterisk/agi_command_spec.rb +256 -0
- data/spec/adhearsion/translator/asterisk/component/asterisk/ami_action_spec.rb +151 -0
- data/spec/adhearsion/translator/asterisk/component/composed_prompt_spec.rb +257 -0
- data/spec/adhearsion/translator/asterisk/component/input_spec.rb +571 -0
- data/spec/adhearsion/translator/asterisk/component/mrcp_native_prompt_spec.rb +774 -0
- data/spec/adhearsion/translator/asterisk/component/mrcp_prompt_spec.rb +1244 -0
- data/spec/adhearsion/translator/asterisk/component/output_spec.rb +1850 -0
- data/spec/adhearsion/translator/asterisk/component/record_spec.rb +426 -0
- data/spec/adhearsion/translator/asterisk/component/stop_by_redirect_spec.rb +62 -0
- data/spec/adhearsion/translator/asterisk/component_spec.rb +83 -0
- data/spec/adhearsion/translator/asterisk_spec.rb +685 -0
- data/spec/adhearsion/uri_list_spec.rb +88 -0
- data/spec/adhearsion_spec.rb +89 -14
- data/spec/fixtures/locale/en.yml +13 -0
- data/spec/fixtures/locale/it.yml +13 -0
- data/spec/spec_helper.rb +18 -5
- data/spec/support/call_controller_test_helpers.rb +3 -2
- data/spec/support/initializer_stubs.rb +3 -1
- data/spec/support/punchblock_examples.rb +65 -0
- data/spec/support/punchblock_mocks.rb +12 -0
- metadata +412 -70
- data/features/cli_daemon.feature +0 -20
- data/features/cli_restart.feature +0 -52
- data/features/cli_stop.feature +0 -50
- data/lib/adhearsion/call_controller/menu_dsl.rb +0 -21
- data/lib/adhearsion/call_controller/menu_dsl/array_match_calculator.rb +0 -26
- data/lib/adhearsion/call_controller/menu_dsl/calculated_match.rb +0 -43
- data/lib/adhearsion/call_controller/menu_dsl/calculated_match_collection.rb +0 -45
- data/lib/adhearsion/call_controller/menu_dsl/fixnum_match_calculator.rb +0 -11
- data/lib/adhearsion/call_controller/menu_dsl/match_calculator.rb +0 -40
- data/lib/adhearsion/call_controller/menu_dsl/menu.rb +0 -207
- data/lib/adhearsion/call_controller/menu_dsl/menu_builder.rb +0 -92
- data/lib/adhearsion/call_controller/menu_dsl/range_match_calculator.rb +0 -60
- data/lib/adhearsion/call_controller/menu_dsl/string_match_calculator.rb +0 -25
- data/lib/adhearsion/call_controller/utility.rb +0 -77
- data/lib/adhearsion/foundation/custom_daemonizer.rb +0 -52
- data/lib/adhearsion/punchblock_plugin.rb +0 -63
- data/scripts/cloc-1.64.pl +0 -10483
- data/spec/adhearsion/call_controller/menu_dsl/array_match_calculator_spec.rb +0 -76
- data/spec/adhearsion/call_controller/menu_dsl/calculated_match_collection_spec.rb +0 -60
- data/spec/adhearsion/call_controller/menu_dsl/calculated_match_spec.rb +0 -61
- data/spec/adhearsion/call_controller/menu_dsl/fixnum_match_calculator_spec.rb +0 -39
- data/spec/adhearsion/call_controller/menu_dsl/match_calculator_spec.rb +0 -17
- data/spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb +0 -165
- data/spec/adhearsion/call_controller/menu_dsl/menu_spec.rb +0 -420
- data/spec/adhearsion/call_controller/menu_dsl/range_match_calculator_spec.rb +0 -32
- data/spec/adhearsion/call_controller/menu_dsl/string_match_calculator_spec.rb +0 -40
- data/spec/adhearsion/call_controller/utility_spec.rb +0 -90
- data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +0 -356
- data/spec/adhearsion/punchblock_plugin_spec.rb +0 -59
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'adhearsion/uri_list'
|
|
4
|
+
|
|
5
|
+
module Adhearsion
|
|
6
|
+
module Rayo
|
|
7
|
+
module Component
|
|
8
|
+
class Output < ComponentNode
|
|
9
|
+
include HasHeaders
|
|
10
|
+
|
|
11
|
+
register :output, :output
|
|
12
|
+
|
|
13
|
+
class Document < RayoNode
|
|
14
|
+
register :document, :output
|
|
15
|
+
|
|
16
|
+
SSML_CONTENT_TYPE = 'application/ssml+xml'
|
|
17
|
+
|
|
18
|
+
# @return [String] the URL from which the fetch the grammar
|
|
19
|
+
attribute :url
|
|
20
|
+
|
|
21
|
+
# @return [String] the document content type
|
|
22
|
+
attribute :content_type, String, default: ->(grammar, attribute) { grammar.url ? nil : SSML_CONTENT_TYPE }
|
|
23
|
+
|
|
24
|
+
# @return [String, RubySpeech::SSML::Speak, URIList] the document
|
|
25
|
+
attribute :value
|
|
26
|
+
|
|
27
|
+
def inherit(xml_node)
|
|
28
|
+
super
|
|
29
|
+
self.value = if ssml?
|
|
30
|
+
RubySpeech::SSML.import xml_node.content
|
|
31
|
+
elsif urilist?
|
|
32
|
+
URIList.import xml_node.content
|
|
33
|
+
else
|
|
34
|
+
xml_node.content
|
|
35
|
+
end
|
|
36
|
+
self
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def rayo_attributes
|
|
40
|
+
{
|
|
41
|
+
'url' => url,
|
|
42
|
+
'content-type' => content_type
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def rayo_children(root)
|
|
47
|
+
root.cdata xml_value
|
|
48
|
+
super
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def size
|
|
52
|
+
if ssml?
|
|
53
|
+
value.children.count
|
|
54
|
+
else
|
|
55
|
+
value.size
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def ssml?
|
|
60
|
+
content_type == SSML_CONTENT_TYPE
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def xml_value
|
|
66
|
+
if ssml?
|
|
67
|
+
value.to_s
|
|
68
|
+
elsif urilist?
|
|
69
|
+
value.to_s
|
|
70
|
+
elsif
|
|
71
|
+
value
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def urilist?
|
|
76
|
+
content_type == 'text/uri-list'
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def inherit(xml_node)
|
|
81
|
+
document_nodes = xml_node.xpath 'ns:document', ns: self.class.registered_ns
|
|
82
|
+
self.render_documents = document_nodes.to_a.map { |node| Document.from_xml node }
|
|
83
|
+
super
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# @return [String] the TTS voice to use
|
|
87
|
+
attribute :voice, String
|
|
88
|
+
|
|
89
|
+
# @return [Symbol] input type on which to interrupt output
|
|
90
|
+
attribute :interrupt_on, Symbol
|
|
91
|
+
|
|
92
|
+
# @return [Integer] Indicates some offset through which the output should be skipped before rendering begins.
|
|
93
|
+
attribute :start_offset, Integer
|
|
94
|
+
|
|
95
|
+
# @return [true, false] Indicates wether or not the component should be started in a paused state to be resumed at a later time.
|
|
96
|
+
attribute :start_paused, Boolean
|
|
97
|
+
|
|
98
|
+
# @return [Integer] Indicates the duration of silence that should space repeats of the rendered document.
|
|
99
|
+
attribute :repeat_interval, Integer
|
|
100
|
+
|
|
101
|
+
# @return [Integer] Indicates the number of times the output should be played.
|
|
102
|
+
attribute :repeat_times, Integer
|
|
103
|
+
|
|
104
|
+
# @return [Integer] Indicates the maximum amount of time for which the output should be allowed to run before being terminated. Includes repeats.
|
|
105
|
+
attribute :max_time, Integer
|
|
106
|
+
|
|
107
|
+
# @return [String] the rendering engine requested by the component
|
|
108
|
+
attribute :renderer, String
|
|
109
|
+
|
|
110
|
+
def rayo_attributes
|
|
111
|
+
{
|
|
112
|
+
'voice' => voice,
|
|
113
|
+
'interrupt-on' => interrupt_on,
|
|
114
|
+
'start-offset' => start_offset,
|
|
115
|
+
'start-paused' => start_paused,
|
|
116
|
+
'repeat-interval' => repeat_interval,
|
|
117
|
+
'repeat-times' => repeat_times,
|
|
118
|
+
'max-time' => max_time,
|
|
119
|
+
'renderer' => renderer
|
|
120
|
+
}
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def rayo_children(root)
|
|
124
|
+
render_documents.each do |render_document|
|
|
125
|
+
render_document.to_rayo root.parent
|
|
126
|
+
end
|
|
127
|
+
super
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# @return [Document] the document to render
|
|
131
|
+
attribute :render_documents, Array[Document], default: []
|
|
132
|
+
|
|
133
|
+
##
|
|
134
|
+
# @param [Hash] other
|
|
135
|
+
# @option other [String] :content_type the document content type
|
|
136
|
+
# @option other [String] :value the output doucment
|
|
137
|
+
# @option other [String] :url the url from which to fetch the document
|
|
138
|
+
#
|
|
139
|
+
def render_document=(other)
|
|
140
|
+
self.render_documents = [other].compact
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def ssml=(other)
|
|
144
|
+
self.render_documents = [{:value => other}]
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
state_machine :state do
|
|
148
|
+
event :paused do
|
|
149
|
+
transition :executing => :paused
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
event :resumed do
|
|
153
|
+
transition :paused => :executing
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Pauses a running Output
|
|
158
|
+
#
|
|
159
|
+
# @return [Command::Output::Pause] an Rayo pause message for the current Output
|
|
160
|
+
#
|
|
161
|
+
# @example
|
|
162
|
+
# output_obj.pause_action.to_xml
|
|
163
|
+
#
|
|
164
|
+
# returns:
|
|
165
|
+
# <pause xmlns="urn:xmpp:rayo:output:1"/>
|
|
166
|
+
def pause_action
|
|
167
|
+
Pause.new :component_id => component_id, :target_call_id => target_call_id
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
##
|
|
171
|
+
# Sends an Rayo pause message for the current Output
|
|
172
|
+
#
|
|
173
|
+
def pause!
|
|
174
|
+
raise InvalidActionError, "Cannot pause a Output that is not executing" unless executing?
|
|
175
|
+
pause_action.tap do |action|
|
|
176
|
+
result = write_action action
|
|
177
|
+
paused! if result
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
##
|
|
182
|
+
# Create an Rayo resume message for the current Output
|
|
183
|
+
#
|
|
184
|
+
# @return [Command::Output::Resume] an Rayo resume message
|
|
185
|
+
#
|
|
186
|
+
# @example
|
|
187
|
+
# output_obj.resume_action.to_xml
|
|
188
|
+
#
|
|
189
|
+
# returns:
|
|
190
|
+
# <resume xmlns="urn:xmpp:rayo:output:1"/>
|
|
191
|
+
def resume_action
|
|
192
|
+
Resume.new :component_id => component_id, :target_call_id => target_call_id
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
##
|
|
196
|
+
# Sends an Rayo resume message for the current Output
|
|
197
|
+
#
|
|
198
|
+
def resume!
|
|
199
|
+
raise InvalidActionError, "Cannot resume a Output that is not paused." unless paused?
|
|
200
|
+
resume_action.tap do |action|
|
|
201
|
+
result = write_action action
|
|
202
|
+
resumed! if result
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
class Pause < CommandNode # :nodoc:
|
|
207
|
+
register :pause, :output
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
class Resume < CommandNode # :nodoc:
|
|
211
|
+
register :resume, :output
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
##
|
|
215
|
+
# Creates an Rayo seek message for the current Output
|
|
216
|
+
#
|
|
217
|
+
# @return [Command::Output::Seek] a Rayo seek message
|
|
218
|
+
#
|
|
219
|
+
# @example
|
|
220
|
+
# output_obj.seek_action.to_xml
|
|
221
|
+
#
|
|
222
|
+
# returns:
|
|
223
|
+
# <seek xmlns="urn:xmpp:rayo:output:1"/>
|
|
224
|
+
def seek_action(options = {})
|
|
225
|
+
Seek.new({ :component_id => component_id, :target_call_id => target_call_id }.merge(options)).tap do |s|
|
|
226
|
+
s.original_component = self
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
##
|
|
231
|
+
# Sends a Rayo seek message for the current Output
|
|
232
|
+
#
|
|
233
|
+
def seek!(options = {})
|
|
234
|
+
raise InvalidActionError, "Cannot seek an Output that is already seeking." if seeking?
|
|
235
|
+
seek_action(options).tap do |action|
|
|
236
|
+
write_action action
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
state_machine :seek_status, :initial => :not_seeking do
|
|
241
|
+
event :seeking do
|
|
242
|
+
transition :not_seeking => :seeking
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
event :stopped_seeking do
|
|
246
|
+
transition :seeking => :not_seeking
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
class Seek < CommandNode # :nodoc:
|
|
251
|
+
register :seek, :output
|
|
252
|
+
|
|
253
|
+
attribute :direction
|
|
254
|
+
attribute :amount
|
|
255
|
+
|
|
256
|
+
def request!
|
|
257
|
+
source.seeking!
|
|
258
|
+
super
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def execute!
|
|
262
|
+
source.stopped_seeking!
|
|
263
|
+
super
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def rayo_attributes
|
|
267
|
+
{'direction' => direction, 'amount' => amount}
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
##
|
|
272
|
+
# Creates an Rayo speed up message for the current Output
|
|
273
|
+
#
|
|
274
|
+
# @return [Command::Output::SpeedUp] a Rayo speed up message
|
|
275
|
+
#
|
|
276
|
+
# @example
|
|
277
|
+
# output_obj.speed_up_action.to_xml
|
|
278
|
+
#
|
|
279
|
+
# returns:
|
|
280
|
+
# <speed-up xmlns="urn:xmpp:rayo:output:1"/>
|
|
281
|
+
def speed_up_action
|
|
282
|
+
SpeedUp.new(:component_id => component_id, :target_call_id => target_call_id).tap do |s|
|
|
283
|
+
s.original_component = self
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
##
|
|
288
|
+
# Sends a Rayo speed up message for the current Output
|
|
289
|
+
#
|
|
290
|
+
def speed_up!
|
|
291
|
+
raise InvalidActionError, "Cannot speed up an Output that is already speeding." unless not_speeding?
|
|
292
|
+
speed_up_action.tap do |action|
|
|
293
|
+
write_action action
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
##
|
|
298
|
+
# Creates an Rayo slow down message for the current Output
|
|
299
|
+
#
|
|
300
|
+
# @return [Command::Output::SlowDown] a Rayo slow down message
|
|
301
|
+
#
|
|
302
|
+
# @example
|
|
303
|
+
# output_obj.slow_down_action.to_xml
|
|
304
|
+
#
|
|
305
|
+
# returns:
|
|
306
|
+
# <speed-down xmlns="urn:xmpp:rayo:output:1"/>
|
|
307
|
+
def slow_down_action
|
|
308
|
+
SlowDown.new(:component_id => component_id, :target_call_id => target_call_id).tap do |s|
|
|
309
|
+
s.original_component = self
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
##
|
|
314
|
+
# Sends a Rayo slow down message for the current Output
|
|
315
|
+
#
|
|
316
|
+
def slow_down!
|
|
317
|
+
raise InvalidActionError, "Cannot slow down an Output that is already speeding." unless not_speeding?
|
|
318
|
+
slow_down_action.tap do |action|
|
|
319
|
+
write_action action
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
state_machine :speed_status, :initial => :not_speeding do
|
|
324
|
+
event :speeding_up do
|
|
325
|
+
transition :not_speeding => :speeding_up
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
event :slowing_down do
|
|
329
|
+
transition :not_speeding => :slowing_down
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
event :stopped_speeding do
|
|
333
|
+
transition [:speeding_up, :slowing_down] => :not_speeding
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
class SpeedUp < CommandNode # :nodoc:
|
|
338
|
+
register :'speed-up', :output
|
|
339
|
+
|
|
340
|
+
def request!
|
|
341
|
+
source.speeding_up!
|
|
342
|
+
super
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def execute!
|
|
346
|
+
source.stopped_speeding!
|
|
347
|
+
super
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
class SlowDown < CommandNode # :nodoc:
|
|
352
|
+
register :'speed-down', :output
|
|
353
|
+
|
|
354
|
+
def request!
|
|
355
|
+
source.slowing_down!
|
|
356
|
+
super
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def execute!
|
|
360
|
+
source.stopped_speeding!
|
|
361
|
+
super
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
##
|
|
366
|
+
# Creates an Rayo volume up message for the current Output
|
|
367
|
+
#
|
|
368
|
+
# @return [Command::Output::VolumeUp] a Rayo volume up message
|
|
369
|
+
#
|
|
370
|
+
# @example
|
|
371
|
+
# output_obj.volume_up_action.to_xml
|
|
372
|
+
#
|
|
373
|
+
# returns:
|
|
374
|
+
# <volume-up xmlns="urn:xmpp:rayo:output:1"/>
|
|
375
|
+
def volume_up_action
|
|
376
|
+
VolumeUp.new(:component_id => component_id, :target_call_id => target_call_id).tap do |s|
|
|
377
|
+
s.original_component = self
|
|
378
|
+
end
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
##
|
|
382
|
+
# Sends a Rayo volume up message for the current Output
|
|
383
|
+
#
|
|
384
|
+
def volume_up!
|
|
385
|
+
raise InvalidActionError, "Cannot volume up an Output that is already voluming." unless not_voluming?
|
|
386
|
+
volume_up_action.tap do |action|
|
|
387
|
+
write_action action
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
##
|
|
392
|
+
# Creates an Rayo volume down message for the current Output
|
|
393
|
+
#
|
|
394
|
+
# @return [Command::Output::VolumeDown] a Rayo volume down message
|
|
395
|
+
#
|
|
396
|
+
# @example
|
|
397
|
+
# output_obj.volume_down_action.to_xml
|
|
398
|
+
#
|
|
399
|
+
# returns:
|
|
400
|
+
# <volume-down xmlns="urn:xmpp:rayo:output:1"/>
|
|
401
|
+
def volume_down_action
|
|
402
|
+
VolumeDown.new(:component_id => component_id, :target_call_id => target_call_id).tap do |s|
|
|
403
|
+
s.original_component = self
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
##
|
|
408
|
+
# Sends a Rayo volume down message for the current Output
|
|
409
|
+
#
|
|
410
|
+
def volume_down!
|
|
411
|
+
raise InvalidActionError, "Cannot volume down an Output that is already voluming." unless not_voluming?
|
|
412
|
+
volume_down_action.tap do |action|
|
|
413
|
+
write_action action
|
|
414
|
+
end
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
state_machine :volume_status, :initial => :not_voluming do
|
|
418
|
+
event :voluming_up do
|
|
419
|
+
transition :not_voluming => :voluming_up
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
event :voluming_down do
|
|
423
|
+
transition :not_voluming => :voluming_down
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
event :stopped_voluming do
|
|
427
|
+
transition [:voluming_up, :voluming_down] => :not_voluming
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
class VolumeUp < CommandNode # :nodoc:
|
|
432
|
+
register :'volume-up', :output
|
|
433
|
+
|
|
434
|
+
def request!
|
|
435
|
+
source.voluming_up!
|
|
436
|
+
super
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
def execute!
|
|
440
|
+
source.stopped_voluming!
|
|
441
|
+
super
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
class VolumeDown < CommandNode # :nodoc:
|
|
446
|
+
register :'volume-down', :output
|
|
447
|
+
|
|
448
|
+
def request!
|
|
449
|
+
source.voluming_down!
|
|
450
|
+
super
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
def execute!
|
|
454
|
+
source.stopped_voluming!
|
|
455
|
+
super
|
|
456
|
+
end
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
class Complete
|
|
460
|
+
class Finish < Event::Complete::Reason
|
|
461
|
+
register :finish, :output_complete
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
class MaxTime < Event::Complete::Reason
|
|
465
|
+
register :'max-time', :output_complete
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
end
|
|
469
|
+
end
|
|
470
|
+
end
|
|
471
|
+
end
|