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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d7c56e8ead6437f2554eea0fba508eaea1971133
|
|
4
|
+
data.tar.gz: 00795ee77e30cfb4ec49e5214c6a84cd82ac164f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 65d347d4f9141f0e99643c69b8df7e0d2008ca6ac51fa936641ffa27b9e848defe7435f45482593b12b21020677fa46707b4b4b9a259ee02d27c6d78d8b21944
|
|
7
|
+
data.tar.gz: fd7ae40b068100dfeab3b2ddc5aa22cec816076bb30ac719800eddd8b558fa227b401e1cb7f47c00c5054eb25a1f6593624759ba747bdbca78434e3029be4033
|
data/.travis.yml
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
|
-
-
|
|
4
|
-
- 2.
|
|
5
|
-
- 2.
|
|
6
|
-
- jruby
|
|
7
|
-
- rbx-2.1.1
|
|
3
|
+
- 2.2.0
|
|
4
|
+
- 2.2.1
|
|
5
|
+
- 2.2.2
|
|
6
|
+
- jruby-9.0.0.0.pre2
|
|
8
7
|
- ruby-head
|
|
9
8
|
jdk:
|
|
10
9
|
- openjdk7 # for jruby
|
|
11
10
|
before_script: export JRUBY_OPTS="--server -J-Xss1024k -J-Xmx652m -J-XX:+UseConcMarkSweepGC"
|
|
12
11
|
matrix:
|
|
13
12
|
allow_failures:
|
|
14
|
-
- rvm: rbx-2.1.1
|
|
15
13
|
- rvm: ruby-head
|
|
16
|
-
env: ARUBA_TIMEOUT=120
|
|
17
|
-
|
|
18
|
-
irc: "irc.freenode.org#adhearsion"
|
|
14
|
+
env: ARUBA_TIMEOUT=120 AHN_ENV=development
|
|
15
|
+
sudo: false
|
data/CHANGELOG.md
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
# [develop](https://github.com/adhearsion/adhearsion)
|
|
2
2
|
|
|
3
|
-
# [
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
|
|
9
|
-
# [2.6.2](https://github.com/adhearsion/adhearsion/compare/v2.6.1...v2.6.2) - [2015-06-16](https://rubygems.org/gems/adhearsion/versions/2.6.2)
|
|
3
|
+
# [3.0.0.beta1](https://github.com/adhearsion/adhearsion/compare/v2.6.1...v3.0.0.beta1) - [2015-06-24](https://rubygems.org/gems/adhearsion/versions/3.0.0.beta1)
|
|
4
|
+
* Change: Removed `Adhearsion.ahn_root=` which was deprecated in favour of `Adhearsion.root=`
|
|
5
|
+
* Change: Remove integration with `RAILS_ENV`
|
|
6
|
+
* Change: Merge `#dial_and_confirm` into `#dial` such that `#dial` has parallel confirmation behaviour. Remove the old broken confirmation behaviour.
|
|
7
|
+
* Merge adhearsion-asr in to core to replace the original `#menu` and `#ask` methods
|
|
8
|
+
* Change: Removed `#interruptible_play` and `#stream_file`, both leftovers from Adhearsion 1.x which are replaced by `#ask`
|
|
10
9
|
* Bugfix: Properly load application bundle. This requires the spawning removed in [#534](https://github.com/adhearsion/adhearsion/pull/534).
|
|
10
|
+
* Change: Removed daemonisation (`ahn daemon`, `ahn stop`, `ahn restart`, PID files) and persistent logging in favour of 12factor compliant deployment, which pushes these responsibilities up to a process manager or PaaS
|
|
11
|
+
* Change: Merge Punchblock into Adhearsion core
|
|
12
|
+
* `Punchblock::Event::*` becomes `Adhearsion::Event`
|
|
13
|
+
* `Punchblock::Component::*` and `Punchblock::Command::*` become `Adhearsion::Rayo::Component::*` and `Adhearsion::Rayo::Command::*` respectively
|
|
14
|
+
* `Adhearsion::Events.punchblock` callback becomes `Adhearsion::Events.rayo`
|
|
15
|
+
* `config.punchblock.*` becomes `config.platform.*`
|
|
16
|
+
* No longer any dependency on Punchblock, or any mention of that name
|
|
17
|
+
* Change: No longer supporting FreeSWITCH via IES (Rayo only) or Asterisk < 11
|
|
18
|
+
* Change: Ruby 1.9 is no longer supported. Minimum supported versions are Ruby 2.2.0 and JRuby 9.0.0.0
|
|
19
|
+
* Change: Rename "platform" to "core" relating to the config system, because "platform" is overloaded. Settings are now `config.core.*` or `AHN_CORE_*`.
|
|
20
|
+
* Change: Permit application environment to be set only by AHN_ENV. The config system depends on the environment, and the previous dependency was circular.
|
|
21
|
+
* Feature: Add i18n support via `CallController#t`
|
|
22
|
+
* Feature: Integrate a Rack-based HTTP server from the Virginia plugin
|
|
23
|
+
* Feature: Permit timing out when calling `Call#wait_for_end`
|
|
24
|
+
* Upgrade to Celluloid 0.16
|
|
25
|
+
* Move events system to Celluloid and do away with GirlFriday
|
|
11
26
|
|
|
12
27
|
# [2.6.1](https://github.com/adhearsion/adhearsion/compare/v2.6.0...v2.6.1) - [2015-06-15](https://rubygems.org/gems/adhearsion/versions/2.6.1)
|
|
13
28
|
* Bugfix: Improve Call initialization performance. Use an ActorProxy (subclass) instead of a method_missing definition on every Call.new. This considerably improves Call.new performance; benchmarks show approximately a 30-40% improvement: https://gist.github.com/kares/3576e272250204eb66d1
|
data/Gemfile
CHANGED
data/README.markdown
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
Adhearsion is an open-source voice application development framework. Adhearsion users write applications atop the framework with Ruby and **call into their code**.
|
|
11
11
|
|
|
12
|
-
Adhearsion rests above a lower-level telephony platform, for example [Asterisk](http://asterisk.org), [
|
|
12
|
+
Adhearsion rests above a lower-level telephony platform, for example [Asterisk](http://asterisk.org), [FreeSWITCH](http://freeswitch.org) or [Voxeo PRISM](http://voxeolabs.com/prism/), and provides a framework for integrating with various resources, such as SQL, LDAP and XMPP (Jabber).
|
|
13
13
|
|
|
14
14
|
## Features
|
|
15
15
|
|
|
@@ -24,15 +24,14 @@ Adhearsion rests above a lower-level telephony platform, for example [Asterisk](
|
|
|
24
24
|
|
|
25
25
|
## Requirements
|
|
26
26
|
|
|
27
|
-
* Ruby
|
|
27
|
+
* Ruby 2.2.0+ or JRuby 9.0.0.0+
|
|
28
28
|
* [ruby_speech dependencies](https://github.com/benlangfeld/ruby_speech#dependencies)
|
|
29
29
|
* A VoIP platform:
|
|
30
|
-
* Asterisk
|
|
31
|
-
* FreeSWITCH
|
|
30
|
+
* Asterisk 11+
|
|
32
31
|
* A Rayo server (Prism 11+ with rayo-server, or FreeSWITCH with mod_rayo)
|
|
33
32
|
* An interest in building cool new things
|
|
34
33
|
|
|
35
|
-
**Ruby 1.9
|
|
34
|
+
**Ruby 1.9 is no longer supported by Adhearsion or the Ruby core team. You should upgrade to Ruby 2.2 as a matter of urgency in order to continue receiving security fixes.**
|
|
36
35
|
|
|
37
36
|
## Install
|
|
38
37
|
|
data/Rakefile
CHANGED
|
@@ -14,7 +14,6 @@ end
|
|
|
14
14
|
require 'cucumber'
|
|
15
15
|
require 'cucumber/rake/task'
|
|
16
16
|
Cucumber::Rake::Task.new(:features) do |t|
|
|
17
|
-
t.cucumber_opts = %w{--tags ~@skip_jruby} if defined?(JRUBY_VERSION)
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
Cucumber::Rake::Task.new(:wip) do |t|
|
|
@@ -31,7 +30,7 @@ rescue LoadError
|
|
|
31
30
|
end
|
|
32
31
|
|
|
33
32
|
task :stats do
|
|
34
|
-
system '
|
|
33
|
+
system 'doc/cloc-1.55.pl . --exclude-dir=.git,vendor,coverage,doc'
|
|
35
34
|
end
|
|
36
35
|
|
|
37
36
|
task :encodeify do
|
data/adhearsion.gemspec
CHANGED
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
|
|
15
15
|
s.license = 'MIT'
|
|
16
16
|
|
|
17
|
-
s.required_ruby_version = '>=
|
|
17
|
+
s.required_ruby_version = '>= 2.2.0'
|
|
18
18
|
|
|
19
19
|
s.files = `git ls-files`.split("\n")
|
|
20
20
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
@@ -23,26 +23,37 @@ Gem::Specification.new do |s|
|
|
|
23
23
|
|
|
24
24
|
s.add_runtime_dependency 'activesupport', [">= 3.0.0", "< 5.0.0"]
|
|
25
25
|
s.add_runtime_dependency 'adhearsion-loquacious', ["~> 1.9"]
|
|
26
|
+
s.add_runtime_dependency 'blather', ["~> 1.0"]
|
|
26
27
|
s.add_runtime_dependency 'bundler', ["~> 1.0"]
|
|
27
|
-
s.add_runtime_dependency 'celluloid', ["~> 0.
|
|
28
|
+
s.add_runtime_dependency 'celluloid', ["~> 0.16"]
|
|
28
29
|
s.add_runtime_dependency 'countdownlatch'
|
|
29
30
|
s.add_runtime_dependency 'deep_merge'
|
|
30
31
|
s.add_runtime_dependency 'ffi', ["~> 1.0"]
|
|
31
|
-
s.add_runtime_dependency '
|
|
32
|
-
s.add_runtime_dependency 'has-guarded-handlers', ["~> 1.6"]
|
|
33
|
-
s.add_runtime_dependency '
|
|
34
|
-
s.add_runtime_dependency 'logging', ["~>
|
|
32
|
+
s.add_runtime_dependency 'future-resource', ["~> 1.0"]
|
|
33
|
+
s.add_runtime_dependency 'has-guarded-handlers', ["~> 1.6", ">= 1.6.3"]
|
|
34
|
+
s.add_runtime_dependency 'i18n', ["~> 0.6"]
|
|
35
|
+
s.add_runtime_dependency 'logging', ["~> 1.8"]
|
|
36
|
+
s.add_runtime_dependency 'nokogiri', ["~> 1.5", ">= 1.5.6"]
|
|
35
37
|
s.add_runtime_dependency 'pry'
|
|
36
|
-
s.add_runtime_dependency 'punchblock', ["~> 2.6"]
|
|
37
38
|
s.add_runtime_dependency 'rake'
|
|
38
|
-
s.add_runtime_dependency '
|
|
39
|
+
s.add_runtime_dependency 'reel', ["~> 0.5.0"]
|
|
40
|
+
s.add_runtime_dependency 'reel-rack', ["~> 0.2.0"]
|
|
41
|
+
s.add_runtime_dependency 'ruby_ami', ["~> 2.2"]
|
|
42
|
+
s.add_runtime_dependency 'ruby_jid', ["~> 1.0"]
|
|
43
|
+
s.add_runtime_dependency 'ruby_speech', ["~> 2.3"]
|
|
44
|
+
s.add_runtime_dependency 'state_machine', ["~> 1.0"]
|
|
39
45
|
s.add_runtime_dependency 'thor', "~> 0.18.0"
|
|
46
|
+
s.add_runtime_dependency 'virtus', ["~> 1.0"]
|
|
40
47
|
|
|
41
48
|
s.add_development_dependency 'aruba', "~> 0.5"
|
|
49
|
+
s.add_development_dependency 'ci_reporter_rspec'
|
|
50
|
+
s.add_development_dependency 'ci_reporter_cucumber'
|
|
42
51
|
s.add_development_dependency 'cucumber'
|
|
43
52
|
s.add_development_dependency 'guard-cucumber'
|
|
44
53
|
s.add_development_dependency 'guard-rspec'
|
|
45
54
|
s.add_development_dependency 'rspec', ["~> 3.0"]
|
|
55
|
+
s.add_development_dependency 'simplecov'
|
|
56
|
+
s.add_development_dependency 'simplecov-rcov'
|
|
46
57
|
s.add_development_dependency 'yard'
|
|
47
58
|
s.add_development_dependency 'guard-yard'
|
|
48
59
|
s.add_development_dependency 'coveralls'
|
data/features/cli_create.feature
CHANGED
|
@@ -7,9 +7,12 @@ Feature: Adhearsion Ahn CLI (Create)
|
|
|
7
7
|
When I run `ahn create path/somewhere`
|
|
8
8
|
And I cd to "path/somewhere"
|
|
9
9
|
Then the following directories should exist:
|
|
10
|
+
| app/assets/audio |
|
|
11
|
+
| app/assets/audio/en |
|
|
10
12
|
| app/call_controllers |
|
|
11
13
|
| lib |
|
|
12
14
|
| config |
|
|
15
|
+
| config/locales |
|
|
13
16
|
| script |
|
|
14
17
|
| spec |
|
|
15
18
|
| spec/call_controllers |
|
|
@@ -18,11 +21,14 @@ Feature: Adhearsion Ahn CLI (Create)
|
|
|
18
21
|
And the following files should exist:
|
|
19
22
|
| .gitignore |
|
|
20
23
|
| .rspec |
|
|
24
|
+
| app/assets/audio/en/hello_world.wav |
|
|
21
25
|
| app/call_controllers/simon_game.rb |
|
|
22
26
|
| config/adhearsion.rb |
|
|
23
27
|
| config/environment.rb |
|
|
24
28
|
| config/events.rb |
|
|
25
29
|
| config/routes.rb |
|
|
30
|
+
| config/locales/en.yml |
|
|
31
|
+
| config.ru |
|
|
26
32
|
| Gemfile |
|
|
27
33
|
| script/ahn |
|
|
28
34
|
| spec/spec_helper.rb |
|
|
@@ -35,7 +41,7 @@ Feature: Adhearsion Ahn CLI (Create)
|
|
|
35
41
|
"""
|
|
36
42
|
Adhearsion.config
|
|
37
43
|
logging.level
|
|
38
|
-
config.
|
|
44
|
+
config.core.username
|
|
39
45
|
"""
|
|
40
46
|
And the file "config/events.rb" should contain each of these content parts:
|
|
41
47
|
"""
|
|
@@ -45,6 +51,10 @@ Feature: Adhearsion Ahn CLI (Create)
|
|
|
45
51
|
"""
|
|
46
52
|
Adhearsion.router
|
|
47
53
|
"""
|
|
54
|
+
And the file "config.ru" should contain each of these content parts:
|
|
55
|
+
"""
|
|
56
|
+
run Sinatra::Application
|
|
57
|
+
"""
|
|
48
58
|
And the file "README.md" should contain each of these content parts:
|
|
49
59
|
"""
|
|
50
60
|
Start your new app with
|
|
@@ -53,19 +63,22 @@ Feature: Adhearsion Ahn CLI (Create)
|
|
|
53
63
|
And the file "Rakefile" should contain "adhearsion/tasks"
|
|
54
64
|
And the file "Gemfile" should contain each of these content parts:
|
|
55
65
|
"""
|
|
56
|
-
source 'https://rubygems.org
|
|
57
|
-
gem 'adhearsion
|
|
66
|
+
source 'https://rubygems.org'
|
|
67
|
+
gem 'adhearsion'
|
|
58
68
|
"""
|
|
59
69
|
And the file "app/call_controllers/simon_game.rb" should contain "class SimonGame"
|
|
60
70
|
And the file "script/ahn" should contain "require 'adhearsion'"
|
|
71
|
+
And the file "config/locales/en.yml" should contain "en:"
|
|
61
72
|
|
|
62
73
|
Scenario: Generate application --empty
|
|
63
74
|
When I run `ahn create path/somewhere --empty`
|
|
64
75
|
And I cd to "path/somewhere"
|
|
65
76
|
Then the following directories should exist:
|
|
77
|
+
| app/assets/audio |
|
|
66
78
|
| app/call_controllers |
|
|
67
79
|
| lib |
|
|
68
80
|
| config |
|
|
81
|
+
| config/locales |
|
|
69
82
|
| script |
|
|
70
83
|
| spec |
|
|
71
84
|
| spec/call_controllers |
|
|
@@ -78,6 +91,7 @@ Feature: Adhearsion Ahn CLI (Create)
|
|
|
78
91
|
| config/environment.rb |
|
|
79
92
|
| config/events.rb |
|
|
80
93
|
| config/routes.rb |
|
|
94
|
+
| config.ru |
|
|
81
95
|
| Gemfile |
|
|
82
96
|
| script/ahn |
|
|
83
97
|
| spec/spec_helper.rb |
|
|
@@ -86,7 +100,9 @@ Feature: Adhearsion Ahn CLI (Create)
|
|
|
86
100
|
| Procfile |
|
|
87
101
|
|
|
88
102
|
And the following files should not exist:
|
|
103
|
+
| app/assets/audio/en/hello_world.wav |
|
|
89
104
|
| app/call_controllers/simon_game.rb |
|
|
105
|
+
| config/locales/en.yml |
|
|
90
106
|
| spec/call_controllers/simon_game_spec.rb |
|
|
91
107
|
|
|
92
108
|
And the file "config/events.rb" should not contain each of these content parts:
|
|
@@ -4,7 +4,6 @@ Then /^I should see the usage message$/ do
|
|
|
4
4
|
steps %Q{
|
|
5
5
|
Then the output should contain "ahn create"
|
|
6
6
|
Then the output should contain "ahn start"
|
|
7
|
-
Then the output should contain "ahn daemon"
|
|
8
7
|
Then the output should contain "ahn version"
|
|
9
8
|
Then the output should contain "ahn plugin"
|
|
10
9
|
Then the output should contain "ahn help"
|
|
@@ -57,13 +56,3 @@ Then /^there should be a valid adhearsion directory named "([^"]*)"$/ do |path|
|
|
|
57
56
|
dotsback.shift if dotsback[0].is_a?(String) and dotsback[0].empty?
|
|
58
57
|
cd(dotsback)
|
|
59
58
|
end
|
|
60
|
-
|
|
61
|
-
When /^I terminate the process using the pid file "([^"]*)"$/ do |pidfile|
|
|
62
|
-
check_file_presence([pidfile], true)
|
|
63
|
-
prep_for_fs_check do
|
|
64
|
-
pid = File.read(pidfile).to_i
|
|
65
|
-
Process.kill("TERM", pid)
|
|
66
|
-
sleep 1
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
data/features/support/env.rb
CHANGED
|
@@ -9,16 +9,15 @@ require 'adhearsion'
|
|
|
9
9
|
|
|
10
10
|
Before do
|
|
11
11
|
@aruba_timeout_seconds = ENV.has_key?('ARUBA_TIMEOUT') ? ENV['ARUBA_TIMEOUT'].to_i : (RUBY_PLATFORM == 'java' ? 60 : 30)
|
|
12
|
-
ENV['
|
|
13
|
-
ENV['
|
|
12
|
+
ENV['AHN_CORE_RECONNECT_ATTEMPTS'] = '0'
|
|
13
|
+
ENV['AHN_CORE_PORT'] = '1'
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
Before '@reconnect' do
|
|
17
|
-
ENV['
|
|
17
|
+
ENV['AHN_CORE_RECONNECT_ATTEMPTS'] = '100'
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
# TODO: check for name space / run issues
|
|
21
|
-
# NOTE: this will not stop a forked process (eg. daemon mode)
|
|
22
21
|
After do
|
|
23
22
|
terminate_processes!
|
|
24
23
|
end
|
data/lib/adhearsion.rb
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
|
-
abort "ERROR: You are running Adhearsion on an unsupported version of Ruby (Ruby #{RUBY_VERSION} #{RUBY_RELEASE_DATE})! Please upgrade to at least Ruby
|
|
3
|
+
abort "ERROR: You are running Adhearsion on an unsupported version of Ruby (Ruby #{RUBY_VERSION} #{RUBY_RELEASE_DATE})! Please upgrade to at least Ruby v2.2.0 or JRuby 9.0.0.0." if RUBY_VERSION < "2.2"
|
|
4
4
|
|
|
5
5
|
%w(
|
|
6
|
-
|
|
6
|
+
adhearsion/rayo
|
|
7
7
|
celluloid
|
|
8
|
+
active_support/inflector
|
|
8
9
|
).each { |r| require r }
|
|
9
10
|
|
|
10
|
-
|
|
11
11
|
module Adhearsion
|
|
12
|
-
Error = Class.new StandardError
|
|
13
|
-
|
|
14
12
|
class << self
|
|
13
|
+
delegate :client, to: Rayo::Initializer
|
|
15
14
|
|
|
16
15
|
#
|
|
17
16
|
# Sets the application path
|
|
18
17
|
# @param[String|Pathname] The application path to set
|
|
19
18
|
#
|
|
20
19
|
def root=(path)
|
|
21
|
-
Adhearsion.config[:
|
|
20
|
+
Adhearsion.config[:core].root = path.nil? ? nil : File.expand_path(path)
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
#
|
|
@@ -26,19 +25,11 @@ module Adhearsion
|
|
|
26
25
|
# @return [Pathname] The application path
|
|
27
26
|
#
|
|
28
27
|
def root
|
|
29
|
-
Adhearsion.config[:
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
# @deprecated Use #root= instead
|
|
34
|
-
#
|
|
35
|
-
def ahn_root=(path)
|
|
36
|
-
Adhearsion.deprecated "#Adhearsion.root="
|
|
37
|
-
Adhearsion.root = path
|
|
28
|
+
Adhearsion.config[:core].root
|
|
38
29
|
end
|
|
39
30
|
|
|
40
31
|
def config(&block)
|
|
41
|
-
@config ||=
|
|
32
|
+
@config ||= Configuration.new(environment)
|
|
42
33
|
block_given? and yield @config
|
|
43
34
|
@config
|
|
44
35
|
end
|
|
@@ -48,19 +39,12 @@ module Adhearsion
|
|
|
48
39
|
logger.warn caller.join("\n")
|
|
49
40
|
end
|
|
50
41
|
|
|
51
|
-
def
|
|
52
|
-
|
|
53
|
-
env = environment.to_sym if environment.respond_to? :to_sym
|
|
54
|
-
unless _config.valid_environment? env
|
|
55
|
-
puts "You tried to initialize with an invalid environment name #{env}; environment-specific config may not load successfully. Valid values are #{_config.valid_environments}."
|
|
56
|
-
env = nil
|
|
57
|
-
end
|
|
58
|
-
_config.platform.environment = env if env
|
|
59
|
-
_config
|
|
42
|
+
def environment
|
|
43
|
+
@environment ||= (ENV['AHN_ENV'] || :development).to_sym
|
|
60
44
|
end
|
|
61
45
|
|
|
62
|
-
def environment
|
|
63
|
-
|
|
46
|
+
def environment=(other)
|
|
47
|
+
@environment = other ? other.to_sym : other
|
|
64
48
|
end
|
|
65
49
|
|
|
66
50
|
def environments
|
|
@@ -83,6 +67,10 @@ module Adhearsion
|
|
|
83
67
|
@active_calls ||= Calls.new
|
|
84
68
|
end
|
|
85
69
|
|
|
70
|
+
def active_calls=(other)
|
|
71
|
+
@active_calls = other
|
|
72
|
+
end
|
|
73
|
+
|
|
86
74
|
#
|
|
87
75
|
# @return [Adhearsion::Statistics] a statistics aggregator object capable of producing stats dumps
|
|
88
76
|
def statistics
|
|
@@ -96,6 +84,36 @@ module Adhearsion
|
|
|
96
84
|
def status
|
|
97
85
|
Adhearsion::Process.state_name
|
|
98
86
|
end
|
|
87
|
+
|
|
88
|
+
def new_uuid
|
|
89
|
+
SecureRandom.uuid
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def new_request_id
|
|
93
|
+
SecureRandom.uuid
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#
|
|
97
|
+
# Get a new client with a connection attached
|
|
98
|
+
#
|
|
99
|
+
# @param [Symbol] type the connection type (eg :XMPP, :asterisk)
|
|
100
|
+
# @param [Hash] options the options to pass to the connection (credentials, etc
|
|
101
|
+
#
|
|
102
|
+
# @return [Adhearsion::Rayo::Client] a client object
|
|
103
|
+
#
|
|
104
|
+
def client_with_connection(type, options)
|
|
105
|
+
connection = Rayo::Connection.const_get(type == :xmpp ? 'XMPP' : type.to_s.classify).new options
|
|
106
|
+
Rayo::Client.new :connection => connection
|
|
107
|
+
rescue NameError
|
|
108
|
+
raise ArgumentError, "Connection type #{type.inspect} is not valid."
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def execute_component(command, timeout = 60)
|
|
112
|
+
client.execute_command command, :async => true
|
|
113
|
+
response = command.response timeout
|
|
114
|
+
raise response if response.is_a? Exception
|
|
115
|
+
command
|
|
116
|
+
end
|
|
99
117
|
end
|
|
100
118
|
end
|
|
101
119
|
|
|
@@ -118,6 +136,8 @@ end
|
|
|
118
136
|
calls
|
|
119
137
|
configuration
|
|
120
138
|
console
|
|
139
|
+
error
|
|
140
|
+
event
|
|
121
141
|
events
|
|
122
142
|
generators
|
|
123
143
|
initializer
|
|
@@ -125,6 +145,7 @@ end
|
|
|
125
145
|
outbound_call
|
|
126
146
|
plugin
|
|
127
147
|
process
|
|
148
|
+
protocol_error
|
|
128
149
|
router
|
|
129
150
|
statistics
|
|
130
151
|
).each { |f| require "adhearsion/#{f}" }
|