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
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
module NamespaceHelper
|
|
4
|
-
class BeValidNamespace
|
|
5
|
-
|
|
6
|
-
def matches?(target)
|
|
7
|
-
@target = target
|
|
8
|
-
Theatre::ActorNamespaceManager.valid_namespace_path? target
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def failure_message
|
|
12
|
-
"expected #{@target.inspect} to be a valid namespace"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def negative_failure_message
|
|
16
|
-
"expected #{@target.inspect} not to be a valid namespace"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def be_valid_actor_event_namespace
|
|
22
|
-
BeValidNamespace.new
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe "ActorNamespaceManager" do
|
|
28
|
-
|
|
29
|
-
it "should make a registered namespace findable once registered" do
|
|
30
|
-
nm = Theatre::ActorNamespaceManager.new
|
|
31
|
-
nm.register_namespace_name "/foo/bar/qaz"
|
|
32
|
-
nm.search_for_namespace("/foo/bar/qaz").should be_kind_of(Theatre::ActorNamespaceManager::NamespaceNode)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "should return the new namespace when registering it" do
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "#search_for_namespace should raise a NamespaceNotFound exception if a namespace one level deep was not found" do
|
|
40
|
-
nm = Theatre::ActorNamespaceManager.new
|
|
41
|
-
lambda do
|
|
42
|
-
nm.search_for_namespace "/foo"
|
|
43
|
-
end.should raise_error(Theatre::NamespaceNotFound)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "#search_for_namespace should raise a NamespaceNotFound exception if a namespace two levels deep was not found" do
|
|
47
|
-
nm = Theatre::ActorNamespaceManager.new
|
|
48
|
-
lambda do
|
|
49
|
-
nm.search_for_namespace "/foo/bar"
|
|
50
|
-
end.should raise_error(Theatre::NamespaceNotFound)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
describe '::normalize_path_to_array' do
|
|
54
|
-
it "should split a standard path properly" do
|
|
55
|
-
Theatre::ActorNamespaceManager.normalize_path_to_array("/foo/bar/qaz").should == [:foo, :bar, :qaz]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should split out Array()'d form of a String path properly" do
|
|
59
|
-
Theatre::ActorNamespaceManager.normalize_path_to_array(["/jay/thomas/phillips"]).should == [:jay,:thomas,:phillips]
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
describe "NamespaceNode" do
|
|
66
|
-
|
|
67
|
-
it "when registering a new namespace, the new NamespaceNode should be returned" do
|
|
68
|
-
node = Theatre::ActorNamespaceManager::NamespaceNode.new "foobar"
|
|
69
|
-
node.register_namespace_name("foobar").should be_instance_of(Theatre::ActorNamespaceManager::NamespaceNode)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "should not blow away an existing callback when registering a new one with the same name" do
|
|
73
|
-
name = "blah"
|
|
74
|
-
node = Theatre::ActorNamespaceManager::NamespaceNode.new name
|
|
75
|
-
node.register_namespace_name name
|
|
76
|
-
before = node.child_named(name)
|
|
77
|
-
before.should be_instance_of(Theatre::ActorNamespaceManager::NamespaceNode)
|
|
78
|
-
node.register_namespace_name name
|
|
79
|
-
before.should eql(node.child_named(name))
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
describe '#register_namespace_name' do
|
|
83
|
-
it "should return the NamespaceNode" do
|
|
84
|
-
Theatre::ActorNamespaceManager::NamespaceNode.new("foo").register_namespace_name("bar").should \
|
|
85
|
-
be_instance_of(Theatre::ActorNamespaceManager::NamespaceNode)
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
describe "Valid namespace segments" do
|
|
92
|
-
|
|
93
|
-
include NamespaceHelper
|
|
94
|
-
|
|
95
|
-
describe "a valid namespace path" do
|
|
96
|
-
|
|
97
|
-
it "should require a namespace path start with a /" do
|
|
98
|
-
"/foo". should be_valid_actor_event_namespace
|
|
99
|
-
"foo". should_not be_valid_actor_event_namespace
|
|
100
|
-
"foo/bar".should_not be_valid_actor_event_namespace
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "should allow multiple namespace segments" do
|
|
104
|
-
"/foo_foo/bar".should be_valid_actor_event_namespace
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should not allow a trailing forward slash" do
|
|
108
|
-
"/foo/bar/".should_not be_valid_actor_event_namespace
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "should not allow backslashes" do
|
|
112
|
-
'\foo'.should_not be_valid_actor_event_namespace
|
|
113
|
-
'\foo\bar'.should_not be_valid_actor_event_namespace
|
|
114
|
-
'foo\bar'.should_not be_valid_actor_event_namespace
|
|
115
|
-
'\bar\\'.should_not be_valid_actor_event_namespace
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "should not allow weird characters" do
|
|
119
|
-
%w[ ! @ # $ % ^ & * ( ) { } | ' : ? > < - = ].each do |bad_character|
|
|
120
|
-
"/foo#{bad_character}foo/bar".should_not be_valid_actor_event_namespace
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
end
|
|
125
|
-
end
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe "Example" do
|
|
4
|
-
|
|
5
|
-
it "should properly load the YAML in a file" do
|
|
6
|
-
example_name = :kewlz0rz
|
|
7
|
-
data_structure = {:foo => :bar, :qaz => [1,2,3,4,5]}
|
|
8
|
-
yaml = data_structure.to_yaml
|
|
9
|
-
file_contents = <<-FILE
|
|
10
|
-
# Some comment here
|
|
11
|
-
=begin YAML
|
|
12
|
-
#{yaml}
|
|
13
|
-
=end
|
|
14
|
-
events.blah.each { |event| }
|
|
15
|
-
events.blah2.each { |event| }
|
|
16
|
-
|
|
17
|
-
# More comments
|
|
18
|
-
=begin
|
|
19
|
-
another block
|
|
20
|
-
=end
|
|
21
|
-
FILE
|
|
22
|
-
|
|
23
|
-
flexmock(File).should_receive(:read).once.with(/kewlz0rz\.rb$/).and_return file_contents
|
|
24
|
-
example = Example.new(example_name)
|
|
25
|
-
example.metadata.should == data_structure
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
end
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe "Theatre::Theatre" do
|
|
4
|
-
|
|
5
|
-
it "should start the quantity of threads given to its constructor" do
|
|
6
|
-
number_of_threads = 13
|
|
7
|
-
theatre = Theatre::Theatre.new(number_of_threads)
|
|
8
|
-
|
|
9
|
-
flexmock(Thread).should_receive(:new).times(number_of_threads).and_return
|
|
10
|
-
flexstub(theatre.send(:instance_variable_get, :@thread_group)).should_receive(:add).and_return
|
|
11
|
-
|
|
12
|
-
theatre.start!
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should not spawn new threads when calling start twice" do
|
|
16
|
-
number_of_threads = 5
|
|
17
|
-
|
|
18
|
-
theatre = Theatre::Theatre.new(number_of_threads)
|
|
19
|
-
|
|
20
|
-
threads = Array.new(number_of_threads) { Thread.new(&theatre.method(:thread_loop)) }
|
|
21
|
-
flexmock(Thread).should_receive(:new).times(number_of_threads).and_return *threads
|
|
22
|
-
|
|
23
|
-
theatre.start!
|
|
24
|
-
theatre.start!
|
|
25
|
-
theatre.start!
|
|
26
|
-
theatre.start!
|
|
27
|
-
theatre.graceful_stop!
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
describe '#trigger' do
|
|
31
|
-
|
|
32
|
-
it "should properly execute the block given" do
|
|
33
|
-
|
|
34
|
-
has_ran = false
|
|
35
|
-
|
|
36
|
-
theatre = Theatre::Theatre.new
|
|
37
|
-
theatre.register_namespace_name "cheezburger"
|
|
38
|
-
theatre.register_callback_at_namespace "cheezburger", lambda { |payload| has_ran = payload }
|
|
39
|
-
|
|
40
|
-
theatre.start!
|
|
41
|
-
|
|
42
|
-
theatre.trigger "cheezburger", :yes
|
|
43
|
-
theatre.graceful_stop!
|
|
44
|
-
theatre.join
|
|
45
|
-
|
|
46
|
-
has_ran.should equal(:yes)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should return an Array of Invocation objects" do
|
|
50
|
-
theatre = Theatre::Theatre.new
|
|
51
|
-
theatre.register_namespace_name "qaz"
|
|
52
|
-
theatre.register_callback_at_namespace "qaz", lambda {}
|
|
53
|
-
return_value = theatre.trigger("qaz")
|
|
54
|
-
return_value.should be_instance_of(Array)
|
|
55
|
-
return_value.should have(1).item
|
|
56
|
-
return_value.first.should be_instance_of(Theatre::Invocation)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
describe '#trigger_immediately' do
|
|
62
|
-
it "should continue executing callbacks when a link in the chain raises an Exception" do
|
|
63
|
-
callbacks = [lambda { 1 }, lambda { raise LocalJumpError }, lambda { 3 }]
|
|
64
|
-
|
|
65
|
-
theatre = Theatre::Theatre.new
|
|
66
|
-
theatre.register_namespace_name "breakage"
|
|
67
|
-
|
|
68
|
-
callbacks.each do |callback|
|
|
69
|
-
theatre.register_callback_at_namespace "breakage", callback
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
flexmock(Adhearsion::Events).should_receive(:trigger).once.with('/exception', FlexMock.on {|e| e.is_a?(StandardError)})
|
|
73
|
-
return_value = theatre.trigger_immediately("breakage")
|
|
74
|
-
return_value.first.should equal(1)
|
|
75
|
-
return_value[1].should be_instance_of(LocalJumpError)
|
|
76
|
-
return_value.last.should equal(3)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
describe '#callbacks_for_namespaces' do
|
|
81
|
-
it "should properly return Procs which have been registered against a namespace" do
|
|
82
|
-
callback = lambda { :callback }
|
|
83
|
-
theatre = Theatre::Theatre.new
|
|
84
|
-
theatre.register_namespace_name "pumpkin"
|
|
85
|
-
theatre.register_callback_at_namespace "pumpkin", callback
|
|
86
|
-
theatre.namespace_manager.callbacks_for_namespaces("pumpkin").should eql([callback])
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
describe '#join' do
|
|
91
|
-
it "should execute join() on every ThreadGroup thread" do
|
|
92
|
-
thread_mocks = Array(3) do
|
|
93
|
-
bogus_thread = flexmock "bogus thread"
|
|
94
|
-
bogus_thread.should_receive(:join).once.and_return
|
|
95
|
-
bogus_thread
|
|
96
|
-
end
|
|
97
|
-
bogus_thread_group = flexmock "A ThreadGroup which returns an Array of mock Threads", :list => thread_mocks
|
|
98
|
-
theatre = Theatre::Theatre.new
|
|
99
|
-
theatre.send(:instance_variable_set, :@thread_group, bogus_thread_group)
|
|
100
|
-
theatre.join
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
describe '#thread_loop' do
|
|
105
|
-
|
|
106
|
-
it "should continue looping even after an exception been raised" do
|
|
107
|
-
mock_invocation = flexmock "mock Invocation which raises when started"
|
|
108
|
-
mock_invocation.should_receive(:start).once.and_raise ArgumentError # Simulate logic error
|
|
109
|
-
|
|
110
|
-
theatre = Theatre::Theatre.new
|
|
111
|
-
master_queue = theatre.send(:instance_variable_get, :@master_queue)
|
|
112
|
-
flexmock(theatre).should_receive(:loop).once.and_yield
|
|
113
|
-
flexmock(master_queue).should_receive(:pop).once.and_return mock_invocation
|
|
114
|
-
|
|
115
|
-
lambda do
|
|
116
|
-
theatre.send(:thread_loop).should equal(:stopped)
|
|
117
|
-
end.should_not raise_error(ArgumentError)
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should run the callback of the Invocation it receives from the master_queue" do
|
|
121
|
-
has_executed = false
|
|
122
|
-
|
|
123
|
-
invocation = Theatre::Invocation.new("/foo/bar", lambda { has_executed = true })
|
|
124
|
-
invocation.queued
|
|
125
|
-
|
|
126
|
-
theatre = Theatre::Theatre.new
|
|
127
|
-
|
|
128
|
-
master_queue = theatre.send(:instance_variable_get, :@master_queue)
|
|
129
|
-
|
|
130
|
-
flexmock(theatre).should_receive(:loop).and_yield
|
|
131
|
-
flexmock(master_queue).should_receive(:pop).once.and_return invocation
|
|
132
|
-
|
|
133
|
-
theatre.send :thread_loop
|
|
134
|
-
|
|
135
|
-
has_executed.should be_true
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should stop when receiving the shutdown command and return :stopped" do
|
|
139
|
-
theatre = Theatre::Theatre.new
|
|
140
|
-
master_queue = theatre.send(:instance_variable_get, :@master_queue)
|
|
141
|
-
flexmock(theatre).should_receive(:loop).once.and_yield
|
|
142
|
-
flexmock(master_queue).should_receive(:pop).once.and_return :THEATRE_SHUTDOWN!
|
|
143
|
-
theatre.send(:thread_loop).should equal(:stopped)
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
end
|