adhearsion 2.0.1 → 2.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.
- data/.travis.yml +4 -3
- data/CHANGELOG.md +30 -0
- data/README.markdown +1 -0
- data/adhearsion.gemspec +3 -4
- data/bin/ahn +0 -20
- data/features/cli_create.feature +1 -1
- data/features/cli_restart.feature +25 -1
- data/features/cli_start.feature +0 -2
- data/features/plugin_generator.feature +66 -15
- data/features/support/env.rb +0 -13
- data/lib/adhearsion.rb +26 -6
- data/lib/adhearsion/call.rb +42 -7
- data/lib/adhearsion/call_controller.rb +5 -2
- data/lib/adhearsion/call_controller/dial.rb +92 -50
- data/lib/adhearsion/call_controller/input.rb +19 -6
- data/lib/adhearsion/call_controller/menu_dsl/menu.rb +4 -0
- data/lib/adhearsion/call_controller/output.rb +143 -161
- data/lib/adhearsion/call_controller/output/abstract_player.rb +30 -0
- data/lib/adhearsion/call_controller/output/async_player.rb +26 -0
- data/lib/adhearsion/call_controller/output/formatter.rb +81 -0
- data/lib/adhearsion/call_controller/output/player.rb +25 -0
- data/lib/adhearsion/call_controller/record.rb +19 -2
- data/lib/adhearsion/events.rb +3 -0
- data/lib/adhearsion/foundation.rb +12 -6
- data/lib/adhearsion/foundation/exception_handler.rb +8 -6
- data/lib/adhearsion/generators/app/templates/README.md +13 -0
- data/lib/adhearsion/generators/app/templates/config/adhearsion.rb +7 -1
- data/lib/adhearsion/generators/plugin/plugin_generator.rb +1 -0
- data/lib/adhearsion/generators/plugin/templates/plugin-template.gemspec.tt +3 -7
- data/lib/adhearsion/generators/plugin/templates/spec/spec_helper.rb.tt +0 -1
- data/lib/adhearsion/outbound_call.rb +15 -5
- data/lib/adhearsion/punchblock_plugin.rb +13 -2
- data/lib/adhearsion/punchblock_plugin/initializer.rb +13 -12
- data/lib/adhearsion/router.rb +43 -2
- data/lib/adhearsion/router/evented_route.rb +15 -0
- data/lib/adhearsion/router/openended_route.rb +16 -0
- data/lib/adhearsion/router/route.rb +31 -13
- data/lib/adhearsion/router/unaccepting_route.rb +11 -0
- data/lib/adhearsion/version.rb +1 -1
- data/pre-commit +14 -1
- data/spec/adhearsion/call_controller/dial_spec.rb +105 -10
- data/spec/adhearsion/call_controller/input_spec.rb +19 -21
- data/spec/adhearsion/call_controller/output/async_player_spec.rb +67 -0
- data/spec/adhearsion/call_controller/output/formatter_spec.rb +90 -0
- data/spec/adhearsion/call_controller/output/player_spec.rb +65 -0
- data/spec/adhearsion/call_controller/output_spec.rb +436 -190
- data/spec/adhearsion/call_controller/record_spec.rb +49 -6
- data/spec/adhearsion/call_controller_spec.rb +10 -2
- data/spec/adhearsion/call_spec.rb +138 -0
- data/spec/adhearsion/calls_spec.rb +1 -1
- data/spec/adhearsion/outbound_call_spec.rb +48 -8
- data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +34 -23
- data/spec/adhearsion/router/evented_route_spec.rb +34 -0
- data/spec/adhearsion/router/openended_route_spec.rb +61 -0
- data/spec/adhearsion/router/route_spec.rb +26 -4
- data/spec/adhearsion/router/unaccepting_route_spec.rb +72 -0
- data/spec/adhearsion/router_spec.rb +107 -2
- data/spec/adhearsion_spec.rb +19 -0
- data/spec/capture_warnings.rb +28 -21
- data/spec/spec_helper.rb +2 -3
- data/spec/support/call_controller_test_helpers.rb +31 -30
- metadata +32 -29
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,10 +1,11 @@ | |
| 1 1 | 
             
            language: ruby
         | 
| 2 | 
            +
            script: bundle exec rake --trace
         | 
| 2 3 | 
             
            rvm:
         | 
| 3 4 | 
             
              - 1.9.2
         | 
| 4 5 | 
             
              - 1.9.3
         | 
| 5 | 
            -
              - jruby-19mode # JRuby in 1.9 mode
         | 
| 6 | 
            -
              - rbx-19mode # currently in active development, may or may not work for your project
         | 
| 7 | 
            -
              - ruby-head
         | 
| 6 | 
            +
              # - jruby-19mode # JRuby in 1.9 mode
         | 
| 7 | 
            +
              # - rbx-19mode # currently in active development, may or may not work for your project
         | 
| 8 | 
            +
              # - ruby-head
         | 
| 8 9 | 
             
            env: ARUBA_TIMEOUT=120 RAILS_ENV=development AHN_ENV=development
         | 
| 9 10 | 
             
            notifications:
         | 
| 10 11 | 
             
              irc: "irc.freenode.org#adhearsion"
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,35 @@ | |
| 1 1 | 
             
            # [develop](https://github.com/adhearsion/adhearsion)
         | 
| 2 2 |  | 
| 3 | 
            +
            # [2.1.0](https://github.com/adhearsion/adhearsion/compare/v2.0.1...v2.1.0) - [2012-08-07](https://rubygems.org/gems/adhearsion/versions/2.1.0)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Features
         | 
| 6 | 
            +
              * Initial support for FreeSWITCH
         | 
| 7 | 
            +
              * Added the possibility to specify a confirmation controller on `#dial` operations
         | 
| 8 | 
            +
              * Allow specifying a controller to run when originating an outbound call
         | 
| 9 | 
            +
              * Allow `Call#execute_controller` to take a block instead of a controller instance. Simplifies event-based execution of simple controllers (eg whisper into a call)
         | 
| 10 | 
            +
              * Allow route modifiers such that they:
         | 
| 11 | 
            +
                * Do not accept calls that match
         | 
| 12 | 
            +
                * Do not execute a controller
         | 
| 13 | 
            +
                * Do not hangup after controller execution
         | 
| 14 | 
            +
              * Permit asynchronous output using bang version of methods (eg `CallController#play!`), returning an output component, which can be stopped
         | 
| 15 | 
            +
              * Added `CallController#safely` which will catch and log `StandardError` in a call controller, but will not allow it to crash the controller
         | 
| 16 | 
            +
              * `CallController#record` now has an `:interruptible` option that allows recording to be stopped by pressing any DTMF key
         | 
| 17 | 
            +
              * Added `Call#on_joined` and `Call#on_unjoined` for easily registering joined/unjoined handlers
         | 
| 18 | 
            +
              * `Adhearsion.root` and `Adhearsion.root=` are now available to return the root path to the application. `Adhearsion.ahn_root=` is deprecated
         | 
| 19 | 
            +
              * `Adhearsion.deprecated` added for internal use to clearly mark deprecated methods
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ## Bugfixes
         | 
| 22 | 
            +
              * All output methods will now raise `Adhearsion::CallController::Output::PlaybackError` when output fails, instead of failing silently
         | 
| 23 | 
            +
              * `CallController#hangup` now prevents further execution of the controller
         | 
| 24 | 
            +
              * Calls which do not match any routes are rejected with an error
         | 
| 25 | 
            +
              * Calls are not accepted until a matching route is found
         | 
| 26 | 
            +
              * Give sensible dependency defaults for generated plugins
         | 
| 27 | 
            +
              * Fixed mocha-fail in generated plugins
         | 
| 28 | 
            +
              * Plugins generated with a snake_case name did not have the appropriate constants camelized
         | 
| 29 | 
            +
              * `CallController#dial` no longer creates outbound calls if the dialing party hangs up before it executes
         | 
| 30 | 
            +
              * `CallController#ask` no longer loops on timeout
         | 
| 31 | 
            +
              * Correct default port for Asterisk
         | 
| 32 | 
            +
             | 
| 3 33 | 
             
            # [2.0.1](https://github.com/adhearsion/adhearsion/compare/v2.0.0...v2.0.1) - [2012-06-04](https://rubygems.org/gems/adhearsion/versions/2.0.1)
         | 
| 4 34 | 
             
              * Bugfix: Avoid infinitely recursive exception handlers
         | 
| 5 35 | 
             
              * Bugfix: Don't require rubygems where we don't need it
         | 
    
        data/README.markdown
    CHANGED
    
    
    
        data/adhearsion.gemspec
    CHANGED
    
    | @@ -30,19 +30,18 @@ Gem::Specification.new do |s| | |
| 30 30 | 
             
              s.add_runtime_dependency 'jruby-openssl' if RUBY_PLATFORM == 'java'
         | 
| 31 31 | 
             
              s.add_runtime_dependency 'logging', [">= 1.6.1"]
         | 
| 32 32 | 
             
              s.add_runtime_dependency 'pry'
         | 
| 33 | 
            -
              s.add_runtime_dependency 'punchblock', ["~> 1. | 
| 33 | 
            +
              s.add_runtime_dependency 'punchblock', ["~> 1.4"]
         | 
| 34 34 | 
             
              s.add_runtime_dependency 'rake'
         | 
| 35 35 | 
             
              s.add_runtime_dependency 'ruby_speech', ["~> 1.0"]
         | 
| 36 36 | 
             
              s.add_runtime_dependency 'thor'
         | 
| 37 | 
            -
              s.add_runtime_dependency 'uuid'
         | 
| 38 37 |  | 
| 39 | 
            -
              s.add_development_dependency 'aruba'
         | 
| 38 | 
            +
              s.add_development_dependency 'aruba', "~> 0.4"
         | 
| 40 39 | 
             
              s.add_development_dependency 'ci_reporter'
         | 
| 41 40 | 
             
              s.add_development_dependency 'cucumber'
         | 
| 42 41 | 
             
              s.add_development_dependency 'flexmock'
         | 
| 43 42 | 
             
              s.add_development_dependency 'guard-cucumber'
         | 
| 44 43 | 
             
              s.add_development_dependency 'guard-rspec'
         | 
| 45 | 
            -
              s.add_development_dependency 'rspec', ["~> 2. | 
| 44 | 
            +
              s.add_development_dependency 'rspec', ["~> 2.11.0"]
         | 
| 46 45 | 
             
              s.add_development_dependency 'ruby_gntp'
         | 
| 47 46 | 
             
              s.add_development_dependency 'simplecov'
         | 
| 48 47 | 
             
              s.add_development_dependency 'simplecov-rcov'
         | 
    
        data/bin/ahn
    CHANGED
    
    | @@ -1,24 +1,4 @@ | |
| 1 1 | 
             
            #!/usr/bin/env ruby
         | 
| 2 2 |  | 
| 3 | 
            -
            # This is the main executable file.
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            # Adhearsion, open source collaboration framework
         | 
| 6 | 
            -
            # Copyright (C) 2006,2007,2008 Jay Phillips
         | 
| 7 | 
            -
            #
         | 
| 8 | 
            -
            # This library is free software; you can redistribute it and/or modify it under
         | 
| 9 | 
            -
            # the terms of the GNU Lesser General Public License as published by the Free
         | 
| 10 | 
            -
            # Software Foundation; either version 2.1 of the License, or (at your option)
         | 
| 11 | 
            -
            # any later version.
         | 
| 12 | 
            -
            #
         | 
| 13 | 
            -
            # This library is distributed in the hope that it will be useful, but WITHOUT
         | 
| 14 | 
            -
            # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
         | 
| 15 | 
            -
            # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
         | 
| 16 | 
            -
            # details.
         | 
| 17 | 
            -
            #
         | 
| 18 | 
            -
            # You should have received a copy of the GNU Lesser General Public License along
         | 
| 19 | 
            -
            # with this library; if not, write to the Free Software Foundation, Inc.,
         | 
| 20 | 
            -
            # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
         | 
| 21 | 
            -
             | 
| 22 3 | 
             
            require 'adhearsion/cli'
         | 
| 23 | 
            -
             | 
| 24 4 | 
             
            Adhearsion::CLI::AhnCommand.start
         | 
    
        data/features/cli_create.feature
    CHANGED
    
    | @@ -19,6 +19,6 @@ Feature: Adhearsion Ahn CLI (Create) | |
| 19 19 | 
             
                When I run `ahn create`
         | 
| 20 20 | 
             
                Then the output should contain:
         | 
| 21 21 | 
             
                """
         | 
| 22 | 
            -
                 | 
| 22 | 
            +
                ahn create requires at least 1 argument: "ahn create /path/to/directory".
         | 
| 23 23 | 
             
                """
         | 
| 24 24 | 
             
                And the exit status should be 1
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            Feature: Adhearsion Ahn CLI ( | 
| 1 | 
            +
            Feature: Adhearsion Ahn CLI (restart)
         | 
| 2 2 | 
             
              As an Adhearsion user
         | 
| 3 3 | 
             
              I want the ahn command to provide a 'restart' command
         | 
| 4 4 | 
             
              So that I can restart a running Adhearsion daemon
         | 
| @@ -17,3 +17,27 @@ Feature: Adhearsion Ahn CLI (stop) | |
| 17 17 | 
             
                """
         | 
| 18 18 | 
             
                Starting Adhearsion
         | 
| 19 19 | 
             
                """
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              @reconnect
         | 
| 22 | 
            +
              Scenario: Command restart with no path outside of the app directory
         | 
| 23 | 
            +
                Given that I create a valid app under "path/somewhere"
         | 
| 24 | 
            +
                When I run `ahn daemon path/somewhere --pid-file=ahn.pid`
         | 
| 25 | 
            +
                And I run `ahn restart --pid-file=ahn.pid`
         | 
| 26 | 
            +
                Then the output should contain:
         | 
| 27 | 
            +
                """
         | 
| 28 | 
            +
                A valid path is required for restart, unless run from an Adhearson app directory
         | 
| 29 | 
            +
                """
         | 
| 30 | 
            +
                And the exit status should be 1
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              @reconnect
         | 
| 33 | 
            +
              Scenario: Command restart with no path inside of the app directory
         | 
| 34 | 
            +
                Given JRuby skip test
         | 
| 35 | 
            +
                Given that I create a valid app under "path/somewhere"
         | 
| 36 | 
            +
                When I cd to "path/somewhere"
         | 
| 37 | 
            +
                And I run `ahn daemon --pid-file=ahn.pid`
         | 
| 38 | 
            +
                And I run `ahn restart --pid-file=ahn.pid`
         | 
| 39 | 
            +
                Then the output should contain:
         | 
| 40 | 
            +
                """
         | 
| 41 | 
            +
                Starting Adhearsion
         | 
| 42 | 
            +
                """
         | 
| 43 | 
            +
                And the exit status should be 0
         | 
    
        data/features/cli_start.feature
    CHANGED
    
    | @@ -18,7 +18,6 @@ Feature: Adhearsion Ahn CLI (start) | |
| 18 18 | 
             
                And I run `ahn start` interactively
         | 
| 19 19 | 
             
                And I wait for output to contain "Starting connection to server"
         | 
| 20 20 | 
             
                Then the output should contain "Adhearsion::Console: Launching Adhearsion Console"
         | 
| 21 | 
            -
                And the output should contain "AHN>"
         | 
| 22 21 | 
             
                And the output should contain "Adhearsion shut down"
         | 
| 23 22 |  | 
| 24 23 | 
             
              Scenario: Command start with only path works properly
         | 
| @@ -27,5 +26,4 @@ Feature: Adhearsion Ahn CLI (start) | |
| 27 26 | 
             
                When I run `ahn start path/somewhere` interactively
         | 
| 28 27 | 
             
                And I wait for output to contain "Starting connection to server"
         | 
| 29 28 | 
             
                Then the output should contain "Adhearsion::Console: Launching Adhearsion Console"
         | 
| 30 | 
            -
                And the output should contain "AHN>"
         | 
| 31 29 | 
             
                And the output should contain "Adhearsion shut down"
         | 
| @@ -3,29 +3,80 @@ Feature: Adhearsion plugin generator | |
| 3 3 | 
             
              As an Adhearsion plugin developer
         | 
| 4 4 | 
             
              I want to generate a plugin and its basic structure
         | 
| 5 5 |  | 
| 6 | 
            -
              Scenario: Generate the basic structure for a plugin
         | 
| 6 | 
            +
              Scenario: Generate the basic structure for a plugin with a constant name
         | 
| 7 7 | 
             
                When I run `ahn generate plugin TestPlugin`
         | 
| 8 8 | 
             
                Then the following directories should exist:
         | 
| 9 | 
            -
                | test_plugin | 
| 10 | 
            -
                | test_plugin/lib | 
| 11 | 
            -
                | test_plugin/lib/test_plugin | 
| 12 | 
            -
                | test_plugin/spec | 
| 9 | 
            +
                | test_plugin                 |
         | 
| 10 | 
            +
                | test_plugin/lib             |
         | 
| 11 | 
            +
                | test_plugin/lib/test_plugin |
         | 
| 12 | 
            +
                | test_plugin/spec            |
         | 
| 13 13 | 
             
                And the following files should exist:
         | 
| 14 | 
            -
                | test_plugin/test_plugin.gemspec | 
| 15 | 
            -
                | test_plugin/Rakefile | 
| 16 | 
            -
                | test_plugin/README.md | 
| 17 | 
            -
                | test_plugin/Gemfile | 
| 18 | 
            -
                | test_plugin/lib/test_plugin.rb | 
| 19 | 
            -
                | test_plugin/lib/test_plugin/version.rb | 
| 20 | 
            -
                | test_plugin/lib/test_plugin/plugin.rb | 
| 21 | 
            -
                | test_plugin/lib/test_plugin/controller_methods.rb | 
| 22 | 
            -
                | test_plugin/spec/spec_helper.rb | 
| 23 | 
            -
                | test_plugin/spec/test_plugin/controller_methods_spec.rb | 
| 14 | 
            +
                | test_plugin/test_plugin.gemspec                         |
         | 
| 15 | 
            +
                | test_plugin/Rakefile                                    |
         | 
| 16 | 
            +
                | test_plugin/README.md                                   |
         | 
| 17 | 
            +
                | test_plugin/Gemfile                                     |
         | 
| 18 | 
            +
                | test_plugin/lib/test_plugin.rb                          |
         | 
| 19 | 
            +
                | test_plugin/lib/test_plugin/version.rb                  |
         | 
| 20 | 
            +
                | test_plugin/lib/test_plugin/plugin.rb                   |
         | 
| 21 | 
            +
                | test_plugin/lib/test_plugin/controller_methods.rb       |
         | 
| 22 | 
            +
                | test_plugin/spec/spec_helper.rb                         |
         | 
| 23 | 
            +
                | test_plugin/spec/test_plugin/controller_methods_spec.rb |
         | 
| 24 24 | 
             
                And the file "test_plugin/test_plugin.gemspec" should contain "test_plugin/version"
         | 
| 25 25 | 
             
                And the file "test_plugin/README.md" should contain "TestPlugin"
         | 
| 26 26 | 
             
                And the file "test_plugin/lib/test_plugin.rb" should contain each of these content parts:
         | 
| 27 27 | 
             
                """
         | 
| 28 | 
            +
                TestPlugin
         | 
| 29 | 
            +
                test_plugin/version
         | 
| 30 | 
            +
                test_plugin/plugin
         | 
| 31 | 
            +
                test_plugin/controller_methods
         | 
| 32 | 
            +
                """
         | 
| 33 | 
            +
                And the file "test_plugin/lib/test_plugin/version.rb" should contain each of these content parts:
         | 
| 34 | 
            +
                """
         | 
| 28 35 | 
             
                module TestPlugin
         | 
| 36 | 
            +
                VERSION
         | 
| 37 | 
            +
                """
         | 
| 38 | 
            +
                And the file "test_plugin/lib/test_plugin/plugin.rb" should contain each of these content parts:
         | 
| 39 | 
            +
                """
         | 
| 40 | 
            +
                module TestPlugin
         | 
| 41 | 
            +
                init :test_plugin
         | 
| 42 | 
            +
                config :test_plugin
         | 
| 43 | 
            +
                namespace :test_plugin
         | 
| 44 | 
            +
                """
         | 
| 45 | 
            +
                And the file "test_plugin/lib/test_plugin/controller_methods.rb" should contain each of these content parts:
         | 
| 46 | 
            +
                """
         | 
| 47 | 
            +
                module TestPlugin
         | 
| 48 | 
            +
                def greet
         | 
| 49 | 
            +
                """
         | 
| 50 | 
            +
                And the file "test_plugin/spec/spec_helper.rb" should contain "require 'test_plugin'"
         | 
| 51 | 
            +
                And the file "test_plugin/spec/test_plugin/controller_methods_spec.rb" should contain each of these content parts:
         | 
| 52 | 
            +
                """
         | 
| 53 | 
            +
                module TestPlugin
         | 
| 54 | 
            +
                include TestPlugin::ControllerMethods
         | 
| 55 | 
            +
                """
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              Scenario: Generate the basic structure for a plugin with an underscored name
         | 
| 58 | 
            +
                When I run `ahn generate plugin test_plugin`
         | 
| 59 | 
            +
                Then the following directories should exist:
         | 
| 60 | 
            +
                | test_plugin                 |
         | 
| 61 | 
            +
                | test_plugin/lib             |
         | 
| 62 | 
            +
                | test_plugin/lib/test_plugin |
         | 
| 63 | 
            +
                | test_plugin/spec            |
         | 
| 64 | 
            +
                And the following files should exist:
         | 
| 65 | 
            +
                | test_plugin/test_plugin.gemspec                         |
         | 
| 66 | 
            +
                | test_plugin/Rakefile                                    |
         | 
| 67 | 
            +
                | test_plugin/README.md                                   |
         | 
| 68 | 
            +
                | test_plugin/Gemfile                                     |
         | 
| 69 | 
            +
                | test_plugin/lib/test_plugin.rb                          |
         | 
| 70 | 
            +
                | test_plugin/lib/test_plugin/version.rb                  |
         | 
| 71 | 
            +
                | test_plugin/lib/test_plugin/plugin.rb                   |
         | 
| 72 | 
            +
                | test_plugin/lib/test_plugin/controller_methods.rb       |
         | 
| 73 | 
            +
                | test_plugin/spec/spec_helper.rb                         |
         | 
| 74 | 
            +
                | test_plugin/spec/test_plugin/controller_methods_spec.rb |
         | 
| 75 | 
            +
                And the file "test_plugin/test_plugin.gemspec" should contain "test_plugin/version"
         | 
| 76 | 
            +
                And the file "test_plugin/README.md" should contain "TestPlugin"
         | 
| 77 | 
            +
                And the file "test_plugin/lib/test_plugin.rb" should contain each of these content parts:
         | 
| 78 | 
            +
                """
         | 
| 79 | 
            +
                TestPlugin
         | 
| 29 80 | 
             
                test_plugin/version
         | 
| 30 81 | 
             
                test_plugin/plugin
         | 
| 31 82 | 
             
                test_plugin/controller_methods
         | 
    
        data/features/support/env.rb
    CHANGED
    
    | @@ -1,18 +1,5 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 2 |  | 
| 3 | 
            -
            require 'simplecov'
         | 
| 4 | 
            -
            require 'simplecov-rcov'
         | 
| 5 | 
            -
            class SimpleCov::Formatter::MergedFormatter
         | 
| 6 | 
            -
              def format(result)
         | 
| 7 | 
            -
                 SimpleCov::Formatter::HTMLFormatter.new.format(result)
         | 
| 8 | 
            -
                 SimpleCov::Formatter::RcovFormatter.new.format(result)
         | 
| 9 | 
            -
              end
         | 
| 10 | 
            -
            end
         | 
| 11 | 
            -
            SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
         | 
| 12 | 
            -
            SimpleCov.start do
         | 
| 13 | 
            -
              add_filter "/vendor/"
         | 
| 14 | 
            -
            end
         | 
| 15 | 
            -
             | 
| 16 3 | 
             
            JRUBY_OPTS_SAVED=ENV['JRUBY_OPTS']
         | 
| 17 4 | 
             
            JAVA_OPTS_SAVED=ENV['JAVA_OPTS']
         | 
| 18 5 |  | 
    
        data/lib/adhearsion.rb
    CHANGED
    
    | @@ -4,14 +4,9 @@ abort "ERROR: You are running Adhearsion on an unsupported version of Ruby (Ruby | |
| 4 4 |  | 
| 5 5 | 
             
            %w{
         | 
| 6 6 | 
             
              active_support/all
         | 
| 7 | 
            -
              uuid
         | 
| 8 | 
            -
              future-resource
         | 
| 9 7 | 
             
              punchblock
         | 
| 10 | 
            -
              ostruct
         | 
| 11 8 | 
             
              ruby_speech
         | 
| 12 9 | 
             
              countdownlatch
         | 
| 13 | 
            -
              has_guarded_handlers
         | 
| 14 | 
            -
              girl_friday
         | 
| 15 10 | 
             
              loquacious
         | 
| 16 11 | 
             
              celluloid
         | 
| 17 12 |  | 
| @@ -42,16 +37,41 @@ module Adhearsion | |
| 42 37 |  | 
| 43 38 | 
             
              class << self
         | 
| 44 39 |  | 
| 45 | 
            -
                 | 
| 40 | 
            +
                #
         | 
| 41 | 
            +
                # Sets the application path
         | 
| 42 | 
            +
                # @param[String|Pathname] The application path to set
         | 
| 43 | 
            +
                #
         | 
| 44 | 
            +
                def root=(path)
         | 
| 46 45 | 
             
                  Adhearsion.config[:platform].root = path.nil? ? nil : File.expand_path(path)
         | 
| 47 46 | 
             
                end
         | 
| 48 47 |  | 
| 48 | 
            +
                #
         | 
| 49 | 
            +
                # Returns the current application path
         | 
| 50 | 
            +
                # @return [Pathname] The application path
         | 
| 51 | 
            +
                #
         | 
| 52 | 
            +
                def root
         | 
| 53 | 
            +
                  Adhearsion.config[:platform].root
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                #
         | 
| 57 | 
            +
                # @deprecated Use #root= instead
         | 
| 58 | 
            +
                #
         | 
| 59 | 
            +
                def ahn_root=(path)
         | 
| 60 | 
            +
                  Adhearsion.deprecated "#Adhearsion.root="
         | 
| 61 | 
            +
                  Adhearsion.root = path
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 49 64 | 
             
                def config(&block)
         | 
| 50 65 | 
             
                  @config ||= initialize_config
         | 
| 51 66 | 
             
                  block_given? and yield @config
         | 
| 52 67 | 
             
                  @config
         | 
| 53 68 | 
             
                end
         | 
| 54 69 |  | 
| 70 | 
            +
                def deprecated(new_method)
         | 
| 71 | 
            +
                  logger.info "#{caller[0]} - This method is deprecated, please use #{new_method}."
         | 
| 72 | 
            +
                  logger.warn caller.join("\n")
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 55 75 | 
             
                def initialize_config
         | 
| 56 76 | 
             
                  _config = Configuration.new
         | 
| 57 77 | 
             
                  env = ENV['AHN_ENV'] || ENV['RAILS_ENV']
         | 
    
        data/lib/adhearsion/call.rb
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'has_guarded_handlers'
         | 
| 3 4 | 
             
            require 'thread'
         | 
| 4 5 |  | 
| 5 6 | 
             
            module Adhearsion
         | 
| @@ -114,16 +115,14 @@ module Adhearsion | |
| 114 115 | 
             
                    throw :pass
         | 
| 115 116 | 
             
                  end
         | 
| 116 117 |  | 
| 117 | 
            -
                   | 
| 118 | 
            +
                  on_joined do |event|
         | 
| 118 119 | 
             
                    target = event.call_id || event.mixer_name
         | 
| 119 120 | 
             
                    signal :joined, target
         | 
| 120 | 
            -
                    throw :pass
         | 
| 121 121 | 
             
                  end
         | 
| 122 122 |  | 
| 123 | 
            -
                   | 
| 123 | 
            +
                  on_unjoined do |event|
         | 
| 124 124 | 
             
                    target = event.call_id || event.mixer_name
         | 
| 125 125 | 
             
                    signal :unjoined, target
         | 
| 126 | 
            -
                    throw :pass
         | 
| 127 126 | 
             
                  end
         | 
| 128 127 |  | 
| 129 128 | 
             
                  on_end do |event|
         | 
| @@ -132,6 +131,7 @@ module Adhearsion | |
| 132 131 | 
             
                    @end_reason = event.reason
         | 
| 133 132 | 
             
                    commands.terminate
         | 
| 134 133 | 
             
                    after(after_end_hold_time) { current_actor.terminate! }
         | 
| 134 | 
            +
                    throw :pass
         | 
| 135 135 | 
             
                  end
         | 
| 136 136 | 
             
                end
         | 
| 137 137 |  | 
| @@ -140,6 +140,39 @@ module Adhearsion | |
| 140 140 | 
             
                  30
         | 
| 141 141 | 
             
                end
         | 
| 142 142 |  | 
| 143 | 
            +
                ##
         | 
| 144 | 
            +
                # Registers a callback for when this call is joined to another call or a mixer
         | 
| 145 | 
            +
                #
         | 
| 146 | 
            +
                # @param [Call, String, Hash, nil] target the target to guard on. May be a Call object, a call ID (String, Hash) or a mixer name (Hash)
         | 
| 147 | 
            +
                # @option target [String] call_id The call ID to guard on
         | 
| 148 | 
            +
                # @option target [String] mixer_name The mixer name to guard on
         | 
| 149 | 
            +
                #
         | 
| 150 | 
            +
                def on_joined(target = nil, &block)
         | 
| 151 | 
            +
                  register_event_handler Punchblock::Event::Joined, *guards_for_target(target) do |event|
         | 
| 152 | 
            +
                    block.call event
         | 
| 153 | 
            +
                    throw :pass
         | 
| 154 | 
            +
                  end
         | 
| 155 | 
            +
                end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                ##
         | 
| 158 | 
            +
                # Registers a callback for when this call is unjoined from another call or a mixer
         | 
| 159 | 
            +
                #
         | 
| 160 | 
            +
                # @param [Call, String, Hash, nil] target the target to guard on. May be a Call object, a call ID (String, Hash) or a mixer name (Hash)
         | 
| 161 | 
            +
                # @option target [String] call_id The call ID to guard on
         | 
| 162 | 
            +
                # @option target [String] mixer_name The mixer name to guard on
         | 
| 163 | 
            +
                #
         | 
| 164 | 
            +
                def on_unjoined(target = nil, &block)
         | 
| 165 | 
            +
                  register_event_handler Punchblock::Event::Unjoined, *guards_for_target(target) do |event|
         | 
| 166 | 
            +
                    block.call event
         | 
| 167 | 
            +
                    throw :pass
         | 
| 168 | 
            +
                  end
         | 
| 169 | 
            +
                end
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                # @private
         | 
| 172 | 
            +
                def guards_for_target(target)
         | 
| 173 | 
            +
                  target ? [join_options_with_target(target)] : []
         | 
| 174 | 
            +
                end
         | 
| 175 | 
            +
             | 
| 143 176 | 
             
                def on_end(&block)
         | 
| 144 177 | 
             
                  register_event_handler Punchblock::Event::End do |event|
         | 
| 145 178 | 
             
                    block.call event
         | 
| @@ -233,11 +266,11 @@ module Adhearsion | |
| 233 266 | 
             
                end
         | 
| 234 267 |  | 
| 235 268 | 
             
                def mute
         | 
| 236 | 
            -
                  write_and_await_response  | 
| 269 | 
            +
                  write_and_await_response Punchblock::Command::Mute.new
         | 
| 237 270 | 
             
                end
         | 
| 238 271 |  | 
| 239 272 | 
             
                def unmute
         | 
| 240 | 
            -
                  write_and_await_response  | 
| 273 | 
            +
                  write_and_await_response Punchblock::Command::Unmute.new
         | 
| 241 274 | 
             
                end
         | 
| 242 275 |  | 
| 243 276 | 
             
                # @private
         | 
| @@ -287,8 +320,10 @@ module Adhearsion | |
| 287 320 | 
             
                  "#<#{self.class}:#{id} #{attrs.join ', '}>"
         | 
| 288 321 | 
             
                end
         | 
| 289 322 |  | 
| 290 | 
            -
                def execute_controller(controller, completion_callback = nil)
         | 
| 323 | 
            +
                def execute_controller(controller = nil, completion_callback = nil, &block)
         | 
| 324 | 
            +
                  raise ArgumentError if controller && block_given?
         | 
| 291 325 | 
             
                  call = current_actor
         | 
| 326 | 
            +
                  controller ||= CallController.new call, &block
         | 
| 292 327 | 
             
                  Thread.new do
         | 
| 293 328 | 
             
                    catching_standard_errors do
         | 
| 294 329 | 
             
                      begin
         | 
| @@ -139,8 +139,9 @@ module Adhearsion | |
| 139 139 | 
             
                #
         | 
| 140 140 | 
             
                def hangup(headers = nil)
         | 
| 141 141 | 
             
                  block_until_resumed
         | 
| 142 | 
            -
                   | 
| 143 | 
            -
                  after_call | 
| 142 | 
            +
                  call.hangup headers
         | 
| 143 | 
            +
                  after_call
         | 
| 144 | 
            +
                  raise Call::Hangup
         | 
| 144 145 | 
             
                end
         | 
| 145 146 |  | 
| 146 147 | 
             
                # @private
         | 
| @@ -221,6 +222,8 @@ module Adhearsion | |
| 221 222 | 
             
                  end
         | 
| 222 223 | 
             
                end
         | 
| 223 224 |  | 
| 225 | 
            +
                alias :safely :catching_standard_errors
         | 
| 226 | 
            +
             | 
| 224 227 | 
             
                # @private
         | 
| 225 228 | 
             
                def block_until_resumed
         | 
| 226 229 | 
             
                  instance_variable_defined?(:@pause_latch) && @pause_latch.wait
         |