adhearsion 1.2.6 → 2.0.0.alpha1
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/.gitignore +17 -10
- data/CHANGELOG.md +273 -0
- data/Gemfile +1 -1
- data/Guardfile +17 -0
- data/README.markdown +61 -9
- data/Rakefile +16 -48
- data/adhearsion.gemspec +21 -7
- data/bin/ahn +3 -1
- data/cucumber.yml +4 -0
- data/features/app_generator.feature +42 -0
- data/features/cli.feature +108 -0
- data/features/step_definitions/app_generator_steps.rb +6 -0
- data/features/step_definitions/cli_steps.rb +74 -0
- data/features/support/aruba_helper.rb +22 -0
- data/features/support/env.rb +37 -0
- data/features/support/utils.rb +8 -0
- data/lib/adhearsion.rb +85 -41
- data/lib/adhearsion/call.rb +176 -0
- data/lib/adhearsion/call_controller.rb +134 -0
- data/lib/adhearsion/call_controller/dial.rb +70 -0
- data/lib/adhearsion/call_controller/input.rb +173 -0
- data/lib/adhearsion/call_controller/menu.rb +124 -0
- data/lib/adhearsion/call_controller/output.rb +267 -0
- data/lib/adhearsion/call_controller/record.rb +42 -0
- data/lib/adhearsion/call_controller/utility.rb +60 -0
- data/lib/adhearsion/calls.rb +81 -0
- data/lib/adhearsion/cli.rb +1 -3
- data/lib/adhearsion/cli_commands.rb +142 -0
- data/lib/adhearsion/configuration.rb +149 -0
- data/lib/adhearsion/console.rb +19 -8
- data/lib/adhearsion/dialplan_controller.rb +9 -0
- data/lib/adhearsion/events.rb +84 -0
- data/lib/adhearsion/foundation/all.rb +0 -7
- data/lib/adhearsion/foundation/custom_daemonizer.rb +4 -6
- data/lib/adhearsion/foundation/exception_handler.rb +9 -0
- data/lib/adhearsion/foundation/object.rb +26 -8
- data/lib/adhearsion/foundation/synchronized_hash.rb +3 -6
- data/lib/adhearsion/foundation/thread_safety.rb +17 -1
- data/lib/adhearsion/generators/app/app_generator.rb +4 -13
- data/lib/adhearsion/generators/app/templates/Gemfile +10 -5
- data/lib/adhearsion/generators/app/templates/Procfile +1 -0
- data/lib/adhearsion/generators/app/templates/README.md +28 -0
- data/lib/adhearsion/generators/app/templates/config/adhearsion.rb +41 -0
- data/lib/adhearsion/generators/app/templates/{components/simon_game → lib}/simon_game.rb +6 -18
- data/lib/adhearsion/generators/app/templates/script/ahn +2 -2
- data/lib/adhearsion/initializer.rb +151 -293
- data/lib/adhearsion/initializer/logging.rb +33 -0
- data/lib/adhearsion/logging.rb +65 -69
- data/lib/adhearsion/menu_dsl.rb +15 -0
- data/lib/adhearsion/menu_dsl/calculated_match.rb +39 -0
- data/lib/adhearsion/menu_dsl/calculated_match_collection.rb +41 -0
- data/lib/adhearsion/menu_dsl/fixnum_match_calculator.rb +18 -0
- data/lib/adhearsion/menu_dsl/match_calculator.rb +36 -0
- data/lib/adhearsion/{voip/menu_state_machine/menu_class.rb → menu_dsl/menu.rb} +38 -40
- data/lib/adhearsion/menu_dsl/menu_builder.rb +69 -0
- data/lib/adhearsion/menu_dsl/range_match_calculator.rb +55 -0
- data/lib/adhearsion/menu_dsl/string_match_calculator.rb +21 -0
- data/lib/adhearsion/outbound_call.rb +64 -0
- data/lib/adhearsion/plugin.rb +319 -0
- data/lib/adhearsion/plugin/collection.rb +19 -0
- data/lib/adhearsion/plugin/initializer.rb +37 -0
- data/lib/adhearsion/plugin/methods_container.rb +6 -0
- data/lib/adhearsion/process.rb +94 -0
- data/lib/adhearsion/punchblock_plugin.rb +29 -0
- data/lib/adhearsion/punchblock_plugin/initializer.rb +137 -0
- data/lib/adhearsion/router.rb +30 -0
- data/lib/adhearsion/router/route.rb +42 -0
- data/lib/adhearsion/script_ahn_loader.rb +2 -2
- data/lib/adhearsion/tasks.rb +14 -9
- data/lib/adhearsion/tasks/configuration.rb +26 -0
- data/lib/adhearsion/tasks/plugins.rb +17 -0
- data/lib/adhearsion/version.rb +8 -14
- data/spec/adhearsion/call_controller/dial_spec.rb +138 -0
- data/spec/adhearsion/call_controller/input_spec.rb +278 -0
- data/spec/adhearsion/call_controller/menu_spec.rb +120 -0
- data/spec/adhearsion/call_controller/output_spec.rb +466 -0
- data/spec/adhearsion/call_controller/record_spec.rb +125 -0
- data/spec/adhearsion/call_controller_spec.rb +395 -0
- data/spec/adhearsion/call_spec.rb +438 -0
- data/spec/adhearsion/calls_spec.rb +47 -0
- data/spec/adhearsion/configuration_spec.rb +308 -0
- data/spec/adhearsion/dialplan_controller_spec.rb +26 -0
- data/spec/adhearsion/events_spec.rb +112 -0
- data/spec/adhearsion/initializer/logging_spec.rb +58 -0
- data/spec/adhearsion/initializer_spec.rb +209 -122
- data/spec/adhearsion/logging_spec.rb +58 -47
- data/spec/adhearsion/menu_dsl/calculated_match_collection_spec.rb +56 -0
- data/spec/adhearsion/menu_dsl/calculated_match_spec.rb +57 -0
- data/spec/adhearsion/menu_dsl/fixnum_match_calculator_spec.rb +33 -0
- data/spec/adhearsion/menu_dsl/match_calculator_spec.rb +13 -0
- data/spec/adhearsion/menu_dsl/menu_builder_spec.rb +118 -0
- data/spec/adhearsion/menu_dsl/menu_spec.rb +210 -0
- data/spec/adhearsion/menu_dsl/range_match_calculator_spec.rb +28 -0
- data/spec/adhearsion/menu_dsl/string_match_calculator_spec.rb +36 -0
- data/spec/adhearsion/menu_dsl_spec.rb +12 -0
- data/spec/adhearsion/outbound_call_spec.rb +174 -0
- data/spec/adhearsion/plugin_spec.rb +489 -0
- data/spec/adhearsion/process_spec.rb +34 -0
- data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +294 -0
- data/spec/adhearsion/router/route_spec.rb +99 -0
- data/spec/adhearsion/router_spec.rb +106 -0
- data/spec/adhearsion_spec.rb +46 -0
- data/spec/spec_helper.rb +14 -14
- data/spec/support/call_controller_test_helpers.rb +48 -0
- data/spec/support/initializer_stubs.rb +8 -13
- data/spec/support/punchblock_mocks.rb +6 -0
- metadata +255 -253
- data/CHANGELOG +0 -174
- data/bin/ahnctl +0 -68
- data/bin/jahn +0 -43
- data/examples/asterisk_manager_interface/standalone.rb +0 -51
- data/lib/adhearsion/commands.rb +0 -302
- data/lib/adhearsion/component_manager.rb +0 -278
- data/lib/adhearsion/component_manager/component_tester.rb +0 -54
- data/lib/adhearsion/component_manager/spec_framework.rb +0 -18
- data/lib/adhearsion/events_support.rb +0 -65
- data/lib/adhearsion/foundation/blank_slate.rb +0 -3
- data/lib/adhearsion/foundation/event_socket.rb +0 -205
- data/lib/adhearsion/foundation/future_resource.rb +0 -36
- data/lib/adhearsion/foundation/metaprogramming.rb +0 -17
- data/lib/adhearsion/foundation/numeric.rb +0 -13
- data/lib/adhearsion/foundation/pseudo_guid.rb +0 -10
- data/lib/adhearsion/foundation/relationship_properties.rb +0 -42
- data/lib/adhearsion/foundation/string.rb +0 -26
- data/lib/adhearsion/generators/app/templates/.ahnrc +0 -34
- data/lib/adhearsion/generators/app/templates/README +0 -8
- data/lib/adhearsion/generators/app/templates/components/ami_remote/ami_remote.rb +0 -15
- data/lib/adhearsion/generators/app/templates/components/disabled/HOW_TO_ENABLE +0 -7
- data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/README.markdown +0 -47
- data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/stomp_gateway.rb +0 -34
- data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/stomp_gateway.yml +0 -12
- data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/README.markdown +0 -3
- data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/xmpp_gateway.rb +0 -11
- data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/xmpp_gateway.yml +0 -0
- data/lib/adhearsion/generators/app/templates/config/startup.rb +0 -81
- data/lib/adhearsion/generators/app/templates/dialplan.rb +0 -3
- data/lib/adhearsion/generators/app/templates/events.rb +0 -33
- data/lib/adhearsion/host_definitions.rb +0 -67
- data/lib/adhearsion/initializer/asterisk.rb +0 -86
- data/lib/adhearsion/initializer/configuration.rb +0 -324
- data/lib/adhearsion/initializer/database.rb +0 -60
- data/lib/adhearsion/initializer/drb.rb +0 -31
- data/lib/adhearsion/initializer/freeswitch.rb +0 -22
- data/lib/adhearsion/initializer/ldap.rb +0 -57
- data/lib/adhearsion/initializer/rails.rb +0 -41
- data/lib/adhearsion/initializer/xmpp.rb +0 -42
- data/lib/adhearsion/tasks/components.rb +0 -32
- data/lib/adhearsion/tasks/database.rb +0 -5
- data/lib/adhearsion/tasks/deprecations.rb +0 -59
- data/lib/adhearsion/tasks/generating.rb +0 -20
- data/lib/adhearsion/tasks/lint.rb +0 -4
- data/lib/adhearsion/voip/asterisk.rb +0 -4
- data/lib/adhearsion/voip/asterisk/agi_server.rb +0 -121
- data/lib/adhearsion/voip/asterisk/commands.rb +0 -1966
- data/lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb +0 -140
- data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +0 -102
- data/lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb +0 -250
- data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +0 -240
- data/lib/adhearsion/voip/asterisk/config_manager.rb +0 -64
- data/lib/adhearsion/voip/asterisk/manager_interface.rb +0 -697
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +0 -1681
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +0 -341
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb +0 -78
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl +0 -87
- data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +0 -80
- data/lib/adhearsion/voip/call.rb +0 -521
- data/lib/adhearsion/voip/call_routing.rb +0 -64
- data/lib/adhearsion/voip/commands.rb +0 -17
- data/lib/adhearsion/voip/constants.rb +0 -39
- data/lib/adhearsion/voip/conveniences.rb +0 -18
- data/lib/adhearsion/voip/dial_plan.rb +0 -252
- data/lib/adhearsion/voip/dsl/dialing_dsl.rb +0 -151
- data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +0 -37
- data/lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb +0 -27
- data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +0 -124
- data/lib/adhearsion/voip/dsl/dialplan/parser.rb +0 -69
- data/lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb +0 -16
- data/lib/adhearsion/voip/dsl/numerical_string.rb +0 -128
- data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +0 -48
- data/lib/adhearsion/voip/freeswitch/event_handler.rb +0 -58
- data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +0 -129
- data/lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb +0 -38
- data/lib/adhearsion/voip/freeswitch/oes_server.rb +0 -195
- data/lib/adhearsion/voip/menu_state_machine/calculated_match.rb +0 -80
- data/lib/adhearsion/voip/menu_state_machine/matchers.rb +0 -123
- data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +0 -57
- data/lib/adhearsion/xmpp/connection.rb +0 -61
- data/lib/theatre.rb +0 -147
- data/lib/theatre/README.markdown +0 -64
- data/lib/theatre/callback_definition_loader.rb +0 -86
- data/lib/theatre/guid.rb +0 -23
- data/lib/theatre/invocation.rb +0 -131
- data/lib/theatre/namespace_manager.rb +0 -153
- data/lib/theatre/version.rb +0 -2
- data/spec/adhearsion/cli_spec.rb +0 -306
- data/spec/adhearsion/component_manager_spec.rb +0 -292
- data/spec/adhearsion/constants_spec.rb +0 -8
- data/spec/adhearsion/drb_spec.rb +0 -65
- data/spec/adhearsion/fixtures/dialplan.rb +0 -3
- data/spec/adhearsion/foundation/event_socket_spec.rb +0 -168
- data/spec/adhearsion/host_definitions_spec.rb +0 -79
- data/spec/adhearsion/initializer/configuration_spec.rb +0 -291
- data/spec/adhearsion/initializer/loading_spec.rb +0 -154
- data/spec/adhearsion/initializer/paths_spec.rb +0 -74
- data/spec/adhearsion/relationship_properties_spec.rb +0 -54
- data/spec/adhearsion/voip/asterisk/agi_server_spec.rb +0 -473
- data/spec/adhearsion/voip/asterisk/ami/ami_spec.rb +0 -550
- data/spec/adhearsion/voip/asterisk/ami/lexer/ami_fixtures.yml +0 -30
- data/spec/adhearsion/voip/asterisk/ami/lexer/lexer_story +0 -291
- data/spec/adhearsion/voip/asterisk/ami/lexer/lexer_story.rb +0 -241
- data/spec/adhearsion/voip/asterisk/ami/lexer/story_helper.rb +0 -124
- data/spec/adhearsion/voip/asterisk/commands_spec.rb +0 -3241
- data/spec/adhearsion/voip/asterisk/config_file_generators/agents_spec.rb +0 -251
- data/spec/adhearsion/voip/asterisk/config_file_generators/queues_spec.rb +0 -323
- data/spec/adhearsion/voip/asterisk/config_file_generators/voicemail_spec.rb +0 -306
- data/spec/adhearsion/voip/asterisk/config_manager_spec.rb +0 -127
- data/spec/adhearsion/voip/asterisk/menu_command/calculated_match_spec.rb +0 -109
- data/spec/adhearsion/voip/asterisk/menu_command/matchers_spec.rb +0 -97
- data/spec/adhearsion/voip/call_routing_spec.rb +0 -125
- data/spec/adhearsion/voip/dialplan_manager_spec.rb +0 -468
- data/spec/adhearsion/voip/dsl/dialing_dsl_spec.rb +0 -270
- data/spec/adhearsion/voip/dsl/dispatcher_spec.rb +0 -82
- data/spec/adhearsion/voip/dsl/dispatcher_spec_helper.rb +0 -45
- data/spec/adhearsion/voip/dsl/parser_spec.rb +0 -69
- data/spec/adhearsion/voip/freeswitch/basic_connection_manager_spec.rb +0 -39
- data/spec/adhearsion/voip/freeswitch/inbound_connection_manager_spec.rb +0 -39
- data/spec/adhearsion/voip/freeswitch/oes_server_spec.rb +0 -9
- data/spec/adhearsion/voip/numerical_string_spec.rb +0 -61
- data/spec/adhearsion/voip/phone_number_spec.rb +0 -45
- data/spec/support/the_following_code.rb +0 -3
- data/spec/theatre/dsl_examples/simple_before_call.rb +0 -7
- data/spec/theatre/dsl_spec.rb +0 -69
- data/spec/theatre/invocation_spec.rb +0 -182
- data/spec/theatre/namespace_spec.rb +0 -125
- data/spec/theatre/spec_helper_spec.rb +0 -28
- data/spec/theatre/theatre_class_spec.rb +0 -148
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Adhearsion::Configuration do
|
|
4
|
+
|
|
5
|
+
describe "when initializing the config instance" do
|
|
6
|
+
subject do
|
|
7
|
+
Adhearsion::Configuration.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should have an empty configuration for the platform" do
|
|
11
|
+
subject.should respond_to :platform
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should have a platform configuration object" do
|
|
15
|
+
subject.platform.should be_instance_of Loquacious::Configuration
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should initialize root to nil" do
|
|
19
|
+
subject.platform.root.should be_nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should initialize logging to level info" do
|
|
23
|
+
subject.platform.logging.level.should == :info
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should allow to update a config value" do
|
|
27
|
+
subject.platform.automatically_accept_incoming_calls.should == true
|
|
28
|
+
subject.platform.automatically_accept_incoming_calls = false
|
|
29
|
+
subject.platform.automatically_accept_incoming_calls.should == false
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should allow to create new config values" do
|
|
33
|
+
subject.platform.bar = "foo"
|
|
34
|
+
subject.platform.bar.should == "foo"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "when initializing the config instance with specific values" do
|
|
39
|
+
subject do
|
|
40
|
+
Adhearsion::Configuration.new do
|
|
41
|
+
root "foo", :desc => "Adhearsion application root folder"
|
|
42
|
+
automatically_accept_incoming_calls false, :desc => "Adhearsion will not accept automatically any inbound call"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should return the root value" do
|
|
47
|
+
subject.platform.root.should == "foo"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should return the automatically_accept_incoming_calls value" do
|
|
51
|
+
subject.platform.automatically_accept_incoming_calls.should == false
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should return a description for the platform configuration" do
|
|
55
|
+
Adhearsion.config.description(:platform).should be_instance_of String
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should allow to update a config value" do
|
|
59
|
+
subject.platform.automatically_accept_incoming_calls.should == false
|
|
60
|
+
subject.platform.automatically_accept_incoming_calls = true
|
|
61
|
+
subject.platform.automatically_accept_incoming_calls.should == true
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should allow to create new config values" do
|
|
65
|
+
subject.platform.bar = "bazz"
|
|
66
|
+
subject.platform.bar.should == "bazz"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe "when configuring a non existing object" do
|
|
71
|
+
it "should raise a ConfigurationError" do
|
|
72
|
+
lambda {
|
|
73
|
+
Adhearsion.config.foo.bar = "bazz"
|
|
74
|
+
}.should raise_error Adhearsion::ConfigurationError, "Invalid plugin foo"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "when accessing the platform configuration" do
|
|
79
|
+
after do
|
|
80
|
+
Adhearsion.config = nil
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
subject{ Adhearsion.config[:platform] }
|
|
84
|
+
|
|
85
|
+
it "should return the valid platform configuration object" do
|
|
86
|
+
subject.should be_instance_of ::Loquacious::Configuration
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should allow to retrieve any platform configuration value" do
|
|
90
|
+
subject.automatically_accept_incoming_calls.should == true
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe "if configuration has a named environment" do
|
|
94
|
+
|
|
95
|
+
let :config_obj do
|
|
96
|
+
Adhearsion::Configuration.new
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
let :env_values do
|
|
100
|
+
config_obj.valid_environments.inject({}) do |hash, k|
|
|
101
|
+
hash[k] = hash.keys.length
|
|
102
|
+
hash
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
let :config_object do
|
|
107
|
+
config = config_obj do
|
|
108
|
+
my_level -1, :desc => "An index to check the environment value is being retrieved"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
subject do
|
|
113
|
+
config_object.production do |env|
|
|
114
|
+
env.platform.my_level = 0
|
|
115
|
+
end
|
|
116
|
+
config_object.development do |env|
|
|
117
|
+
env.platform.my_level = 1
|
|
118
|
+
end
|
|
119
|
+
config_object.staging do |env|
|
|
120
|
+
env.platform.my_level = 2
|
|
121
|
+
end
|
|
122
|
+
config_object.test do |env|
|
|
123
|
+
env.platform.my_level = 3
|
|
124
|
+
end
|
|
125
|
+
config_object
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should return by default the development value" do
|
|
129
|
+
subject.platform.my_level.should == 1
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
[:staging, :production, :test].each do |env|
|
|
133
|
+
it "should return the #{env.to_s} value when environment set to #{env.to_s}" do
|
|
134
|
+
config_object.platform.environment = env
|
|
135
|
+
subject.platform.my_level.should == env_values[env]
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
describe "while defining the environment" do
|
|
142
|
+
|
|
143
|
+
after do
|
|
144
|
+
ENV['AHN_ENV'] = nil
|
|
145
|
+
Adhearsion.config = nil
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should return 'development' by default" do
|
|
149
|
+
Adhearsion.config.platform.environment.should == :development
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
[:development, :production, :staging, :test].each do |env|
|
|
153
|
+
it "should respond to #{env.to_s}" do
|
|
154
|
+
Adhearsion.config.should respond_to(env)
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
context "when the ENV value is valid" do
|
|
159
|
+
[:production, :staging, :test].each do |env|
|
|
160
|
+
it "should override the environment value with #{env.to_s} when set in ENV value" do
|
|
161
|
+
ENV['AHN_ENV'] = env.to_s
|
|
162
|
+
Adhearsion.config.platform.environment.should == env.to_s
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it "should not override the default environment with the ENV value if valid" do
|
|
168
|
+
ENV['AHN_ENV'] = "invalid_value"
|
|
169
|
+
Adhearsion.config.platform.environment.should == :development
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should allow to add a new environment" do
|
|
173
|
+
Adhearsion.config.valid_environment?(:another_environment).should == false
|
|
174
|
+
Adhearsion.environments << :another_environment
|
|
175
|
+
Adhearsion.config.valid_environment?(:another_environment).should == true
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
describe "while retrieving configuration descriptions" do
|
|
181
|
+
before do
|
|
182
|
+
Adhearsion.config = nil
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
subject { Adhearsion.config }
|
|
186
|
+
|
|
187
|
+
it "should retrieve a string with the platform configuration" do
|
|
188
|
+
desc = subject.description :platform, :show_values => false
|
|
189
|
+
desc.length.should > 0
|
|
190
|
+
desc.should match /^.*automatically_accept_incoming_calls.*$/
|
|
191
|
+
desc.should match /^.*root.*$/
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it "should retrieve a string with the platform configuration and values" do
|
|
195
|
+
desc = subject.description :platform
|
|
196
|
+
desc.length.should > 0
|
|
197
|
+
desc.should match /^.*automatically_accept_incoming_calls.*true.*$/
|
|
198
|
+
desc.should match /^.*root.*$/
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
describe "if there are plugins installed" do
|
|
202
|
+
before do
|
|
203
|
+
Adhearsion::Logging.silence!
|
|
204
|
+
|
|
205
|
+
Class.new Adhearsion::Plugin do
|
|
206
|
+
config :my_plugin do
|
|
207
|
+
name "user" , :desc => "name to authenticate user"
|
|
208
|
+
password "password" , :desc => "authentication password"
|
|
209
|
+
host "localhost", :desc => "valid IP or hostname"
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
describe "retrieving configuration for the plugin" do
|
|
215
|
+
context "via a method" do
|
|
216
|
+
subject { Adhearsion.config.my_plugin }
|
|
217
|
+
|
|
218
|
+
it "should have the correct values" do
|
|
219
|
+
subject[:name].should == 'user'
|
|
220
|
+
subject[:password].should == 'password'
|
|
221
|
+
subject[:host].should == 'localhost'
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
context "using the hash accessor syntax" do
|
|
226
|
+
subject { Adhearsion.config[:my_plugin] }
|
|
227
|
+
|
|
228
|
+
it "should have the correct values" do
|
|
229
|
+
subject[:name].should == 'user'
|
|
230
|
+
subject[:password].should == 'password'
|
|
231
|
+
subject[:host].should == 'localhost'
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
context "when config has named environments" do
|
|
236
|
+
subject do
|
|
237
|
+
Adhearsion.config do |c|
|
|
238
|
+
c.production do |env|
|
|
239
|
+
env.my_plugin.name = "production"
|
|
240
|
+
end
|
|
241
|
+
c.development do |env|
|
|
242
|
+
env.my_plugin.name = "development"
|
|
243
|
+
end
|
|
244
|
+
c.staging do |env|
|
|
245
|
+
env.my_plugin.name = "staging"
|
|
246
|
+
end
|
|
247
|
+
c.test do |env|
|
|
248
|
+
env.my_plugin.name = "test"
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
Adhearsion.config[:my_plugin]
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
it "should return the development value by default" do
|
|
255
|
+
Adhearsion.config # initialize
|
|
256
|
+
subject.name.should == "development"
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
[:development, :staging, :production, :test].each do |env|
|
|
260
|
+
it "should return the #{env.to_s} value when environment is set to #{env.to_s}" do
|
|
261
|
+
Adhearsion.config.platform.environment = env
|
|
262
|
+
subject.name.should == env.to_s
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
it "should retrieve a valid plugin description" do
|
|
269
|
+
desc = subject.description :my_plugin
|
|
270
|
+
desc.length.should > 0
|
|
271
|
+
desc.should match /^.*name.*user.*$/
|
|
272
|
+
desc.should match /^.*password.*password.*$/
|
|
273
|
+
desc.should match /^.*host.*localhost.*$/
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
it "should retrieve a valid plugin description with no values" do
|
|
277
|
+
desc = subject.description :my_plugin, :show_values => false
|
|
278
|
+
desc.length.should > 0
|
|
279
|
+
desc.should match /^.*name.*$/
|
|
280
|
+
desc.should match /^.*password.*$/
|
|
281
|
+
desc.should match /^.*host.*$/
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
it "should retrieve both platform and plugin configuration" do
|
|
285
|
+
desc = subject.description :all
|
|
286
|
+
desc.length.should > 0
|
|
287
|
+
desc.should match /^.*automatically_accept_incoming_calls.*true.*$/
|
|
288
|
+
desc.should match /^.*root.*$/
|
|
289
|
+
desc.should match /^.*name.*user.*$/
|
|
290
|
+
desc.should match /^.*password.*password.*$/
|
|
291
|
+
desc.should match /^.*host.*localhost.*$/
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
it "should retrieve both platform and plugin configuration with no values" do
|
|
295
|
+
desc = subject.description :all, :show_values => false
|
|
296
|
+
desc.length.should > 0
|
|
297
|
+
desc.should match /^.*Configuration for platform.*$/
|
|
298
|
+
desc.should match /^.*automatically_accept_incoming_calls.*$/
|
|
299
|
+
desc.should match /^.*root.*$/
|
|
300
|
+
desc.should match /^.*Configuration for my_plugin.*$/
|
|
301
|
+
desc.should match /^.*name.*$/
|
|
302
|
+
desc.should match /^.*password.*$/
|
|
303
|
+
desc.should match /^.*host.*$/
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
end
|
|
308
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Adhearsion
|
|
4
|
+
describe DialplanController do
|
|
5
|
+
include CallControllerTestHelpers
|
|
6
|
+
|
|
7
|
+
it { should be_a DialplanController }
|
|
8
|
+
it { should be_a CallController }
|
|
9
|
+
|
|
10
|
+
let :dialplan do
|
|
11
|
+
Proc.new { foo value }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
before { subject.dialplan = dialplan }
|
|
15
|
+
|
|
16
|
+
its(:dialplan) { should be dialplan }
|
|
17
|
+
|
|
18
|
+
describe "running" do
|
|
19
|
+
it "should execute the dialplan in the context of the controller" do
|
|
20
|
+
flexmock subject, :value => :bar
|
|
21
|
+
subject.should_receive(:foo).once.with(:bar)
|
|
22
|
+
subject.run
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Adhearsion
|
|
4
|
+
describe Events do
|
|
5
|
+
|
|
6
|
+
EventClass = Class.new
|
|
7
|
+
ExceptionClass = Class.new StandardError
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
Events.refresh!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should have a GirlFriday::Queue to handle events" do
|
|
14
|
+
Events.queue.should be_a GirlFriday::WorkQueue
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should allow adding events to the queue and handle them appropriately" do
|
|
18
|
+
t = nil
|
|
19
|
+
o = nil
|
|
20
|
+
latch = CountDownLatch.new 1
|
|
21
|
+
|
|
22
|
+
flexmock(Events.instance).should_receive(:handle_message).and_return do |message|
|
|
23
|
+
t = message.type
|
|
24
|
+
o = message.object
|
|
25
|
+
latch.countdown!
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Events.trigger :event, :foo
|
|
29
|
+
|
|
30
|
+
latch.wait(2).should be_true
|
|
31
|
+
t.should == :event
|
|
32
|
+
o.should == :foo
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should allow executing events immediately" do
|
|
36
|
+
t = nil
|
|
37
|
+
o = nil
|
|
38
|
+
|
|
39
|
+
flexmock(Events.instance).should_receive(:handle_message).and_return do |message|
|
|
40
|
+
sleep 0.25
|
|
41
|
+
t = message.type
|
|
42
|
+
o = message.object
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
Events.trigger_immediately :event, :foo
|
|
46
|
+
|
|
47
|
+
t.should == :event
|
|
48
|
+
o.should == :foo
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should handle events using registered guarded handlers" do
|
|
52
|
+
result = nil
|
|
53
|
+
|
|
54
|
+
Events.register_handler :event, EventClass do |event|
|
|
55
|
+
result = :foo
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
Events.trigger_immediately :event, EventClass.new
|
|
59
|
+
|
|
60
|
+
result.should == :foo
|
|
61
|
+
|
|
62
|
+
Events.clear_handlers :event, EventClass
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should handle exceptions in event processing by raising the exception as an event" do
|
|
66
|
+
flexmock(Events.instance).should_receive(:trigger).with(:exception, ExceptionClass).once
|
|
67
|
+
|
|
68
|
+
Events.register_handler :event, EventClass do |event|
|
|
69
|
+
raise ExceptionClass
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
Events.trigger_immediately :event, EventClass.new
|
|
73
|
+
Events.clear_handlers :event, EventClass
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should implicitly pass on all handlers" do
|
|
77
|
+
result = nil
|
|
78
|
+
|
|
79
|
+
Events.register_handler :event, EventClass do |event|
|
|
80
|
+
result = :foo
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
Events.register_handler :event, EventClass do |event|
|
|
84
|
+
result = :bar
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
Events.trigger_immediately :event, EventClass.new
|
|
88
|
+
|
|
89
|
+
result.should == :bar
|
|
90
|
+
|
|
91
|
+
Events.clear_handlers :event, EventClass
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe '#draw' do
|
|
95
|
+
it "should allow registering handlers by type" do
|
|
96
|
+
result = nil
|
|
97
|
+
Events.draw do
|
|
98
|
+
event do
|
|
99
|
+
result = :foo
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
Events.trigger_immediately :event
|
|
104
|
+
|
|
105
|
+
result.should == :foo
|
|
106
|
+
|
|
107
|
+
Events.clear_handlers :event
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Adhearsion::Initializer::Logging do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
Adhearsion::Initializer::Logging.start
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
after do
|
|
10
|
+
Adhearsion::Logging.reset
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after(:all) do
|
|
14
|
+
Adhearsion::Initializer::Logging.start
|
|
15
|
+
Adhearsion::Logging.silence!
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "initializes properly a Logging object" do
|
|
19
|
+
::Logging.logger.root.appenders.length.should eql(1)
|
|
20
|
+
::Logging.logger.root.appenders.select{|a| a.is_a?(::Logging::Appenders::Stdout)}.length.should eql(1)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should created the predefined set of log levels' do
|
|
24
|
+
::Logging::LEVELS.length.should eql(Adhearsion::Logging::LOG_LEVELS.length)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "initializes properly a Logging object with appenders as parameter" do
|
|
28
|
+
Adhearsion::Initializer::Logging.start([::Logging.appenders.stdout, ::Logging.appenders.file('example.log')])
|
|
29
|
+
::Logging.logger.root.appenders.length.should eql(2)
|
|
30
|
+
::Logging.logger.root.appenders.select{|a| a.is_a?(::Logging::Appenders::Stdout)}.length.should eql(1)
|
|
31
|
+
::Logging.logger.root.appenders.select{|a| a.is_a?(::Logging::Appenders::File)}.length.should eql(1)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "initializes properly a Logging object with appenders and log level as parameter" do
|
|
35
|
+
Adhearsion::Initializer::Logging.start([::Logging.appenders.stdout, ::Logging.appenders.file('example.log')], :debug)
|
|
36
|
+
::Logging.logger.root.appenders.length.should eql(2)
|
|
37
|
+
::Logging.logger.root.appenders.select{|a| a.is_a?(::Logging::Appenders::Stdout)}.length.should eql(1)
|
|
38
|
+
::Logging.logger.root.appenders.select{|a| a.is_a?(::Logging::Appenders::File)}.length.should eql(1)
|
|
39
|
+
::Logging.logger.root.level.should eql(::Logging::LEVELS["debug"])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
Foo = Class.new
|
|
43
|
+
Foo::Bar = Class.new Foo
|
|
44
|
+
|
|
45
|
+
it "should create only a Logging object per Class (reuse per all the instances)" do
|
|
46
|
+
_logger = Foo.new.logger
|
|
47
|
+
10.times do
|
|
48
|
+
Foo.new.logger.object_id.should eql(_logger.object_id)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should reuse a Logging instance in all Class instances but not with child instances" do
|
|
53
|
+
_foo_logger = Foo.new.logger
|
|
54
|
+
_bar_logger = Foo::Bar.new.logger
|
|
55
|
+
_foo_logger.object_id.should_not eql(_bar_logger)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|