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
data/CHANGELOG
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
support/1.x.x
|
|
2
|
-
1.2.6
|
|
3
|
-
- Bugfix: Adhearsion was not explicitly closing dialplan.rb or events.rb files when loading them. This caused file descriptors to remain open on JRuby even though they were GC'd by CRuby.
|
|
4
|
-
|
|
5
|
-
1.2.5
|
|
6
|
-
- Catch missing exceptions raised in the after_initialized hook
|
|
7
|
-
- Fixed memory leak in logging when lots of calls come in with unique call id's.
|
|
8
|
-
- Fixed bug where we modified the filename variable passed to #record, which could lead to confusion by callers
|
|
9
|
-
- Avoid some bugs on Ruby 1.8 and JRuby
|
|
10
|
-
- Fixed a bug where generated component config files were not loaded
|
|
11
|
-
- Prevent infinite loops when raising exceptions in exception handlers
|
|
12
|
-
- ahn command now avoids issues with mismatch between installed and bundled gems
|
|
13
|
-
|
|
14
|
-
1.2.4
|
|
15
|
-
- Backported Thor-based generators from Adhearsion 2 in order to escape Rubigen.
|
|
16
|
-
|
|
17
|
-
1.2.3
|
|
18
|
-
- Changes from 1.2.2, without an accidental API change which slipped in
|
|
19
|
-
|
|
20
|
-
1.2.2 - yanked
|
|
21
|
-
- Fixed a console bug related to recent versions of Pry passing extra arguments. Thanks to Alvaro Parres
|
|
22
|
-
- Introducing new :initial_timeout and :interdigit_timeout options to #input in order to control the wait delay for the 1st and subsequent digits, respectively. Maintains support for the existing :timeout option. (https://github.com/adhearsion/adhearsion/pull/41)
|
|
23
|
-
- Updated #input documentation for new features in Adhearsion 1.2.x
|
|
24
|
-
- Fix bug where setting log formatters when demonising would not work (https://github.com/adhearsion/adhearsion/issues/36)
|
|
25
|
-
|
|
26
|
-
1.2.1
|
|
27
|
-
- Removed the restful_rpc component since it is now in a gem.
|
|
28
|
-
- Allow overriding the path to a component in the testing framework so as to support new style components (lib/)
|
|
29
|
-
- Added a GUID to the default recording filename to ensure uniqueness
|
|
30
|
-
- ECONNRESET exceptions are now handled as a call hangup
|
|
31
|
-
- Fixed escaping of TTS strings containing commas when used with Cepstral via #speak
|
|
32
|
-
- Made logging exceptions the responsibility of the framework rather than the app, so that this may not be disabled
|
|
33
|
-
|
|
34
|
-
1.2.0
|
|
35
|
-
- New method: #play_or_speak allows playback of an audio file with TTS fallback
|
|
36
|
-
- #input now takes :speak as a hash for TTS prompt or fallback
|
|
37
|
-
- New method: #speak provides abstracted TTS rendering for UniMRCP and Cepstral
|
|
38
|
-
- Allow leading "+" in Caller ID (E.164 format)
|
|
39
|
-
- Allow using --pid-file without "daemon" for JRuby
|
|
40
|
-
- Allow passing a block to #input to enable caller to detect when enough digits are collected.
|
|
41
|
-
- Fix some issues with starting apps outside of their directory, generally related to Bundler/gem environments
|
|
42
|
-
- Allow configuration of logging outputters/formatters
|
|
43
|
-
- Using ahn_log in a dialplan context or on a call object logs to the call's context, named after its unique identifier
|
|
44
|
-
- New method: #record_to_file with more useful return values
|
|
45
|
-
|
|
46
|
-
1.1.1
|
|
47
|
-
- Command#play now returns false if audio failed to play
|
|
48
|
-
- Added new commands (#play!, #interruptible_play!, #input!) which raise PlaybackError if audio fails to play
|
|
49
|
-
|
|
50
|
-
1.1.0
|
|
51
|
-
- Added interactive call control console: ahn start console <path>
|
|
52
|
-
- Added centralized exception handler through eventing system
|
|
53
|
-
- Support for using ahn_hoptoad to send Adhearsion exceptions to Hoptoad
|
|
54
|
-
- Adhearsion.active_calls can now use hash syntax to find calls by ID
|
|
55
|
-
- Added Adhearsion::Calls#to_h
|
|
56
|
-
- Add a Monitor to synchronize access to an AGI connection
|
|
57
|
-
|
|
58
|
-
1.0.3
|
|
59
|
-
- Fix the play() command regression when passing an array of strings. This was breaking the SimonGame
|
|
60
|
-
- Deprecate ManagerInterface#send_action_asynchronously
|
|
61
|
-
|
|
62
|
-
1.0.2
|
|
63
|
-
- Fix rcov Rake task
|
|
64
|
-
- Add Ben Langfeld as an author (Thanks, Ben!)
|
|
65
|
-
- Add "rake" as a runtime dependency
|
|
66
|
-
- Remove usage of BEGIN blocks (for Rubinius; CS)
|
|
67
|
-
|
|
68
|
-
1.0.1
|
|
69
|
-
NOTE for Ruby 1.9 users: The behavior of Ruby 1.9 and case statements has changed
|
|
70
|
-
in a way that renders NumericalString objects incompatible with
|
|
71
|
-
case statements. The suggested workaround is to cast the NumericalString
|
|
72
|
-
to a string and then compare. Example:
|
|
73
|
-
|
|
74
|
-
obj = NumericalString.new("0987")
|
|
75
|
-
case obj.to_s
|
|
76
|
-
when "0987" then true
|
|
77
|
-
else false
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
Or, if you need to ignore the leading zero:
|
|
81
|
-
case obj.to_i
|
|
82
|
-
when 987 then true
|
|
83
|
-
else false
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
See https://adhearsion.lighthouseapp.com/projects/5871/tickets/127-ruby-19-and-numericalstring-comparisons-in-case-statements
|
|
87
|
-
- Add say_chars command.
|
|
88
|
-
- Add say_phonetic command.
|
|
89
|
-
- Update play_time to accept format and timezone paramenters. This allows you to read back any particular section of the Time object. (i.e. Using format => 'IMp' would result in "eleven twenty-three" being said.)
|
|
90
|
-
- Update play_time to allow using Date objects.
|
|
91
|
-
- QueueAgentsListProxy#new now returns an AgentProxy instance if the agent was added successfully.
|
|
92
|
-
- Add state_interface parameter to QueueAgentsListProxy#new. This allows you to specify a separate interface to watch for state changes on. (i.e. Your agents log in with Local channel extensions, but you want to check their direct SIP exten for state.)
|
|
93
|
-
- Fixed issue with Queue#join! that would raise a QueueDoesNotExist error if the call was completed successfully.
|
|
94
|
-
- Add support for AGI script parameter to Queue#join!
|
|
95
|
-
- Migrate unit tests to RSpec 2
|
|
96
|
-
- New components now include RubyGems skeleton files
|
|
97
|
-
- Fix support for setting Caller ID name on AGI dial() command
|
|
98
|
-
- Generate new apps with Bundler support, including auto-requiring of all gems
|
|
99
|
-
- Update component testing framework to RSpec 2.x and mock with rspec
|
|
100
|
-
|
|
101
|
-
1.0.0
|
|
102
|
-
- Fall back to using Asterisk's context if the AGI URI context is not found
|
|
103
|
-
- Enable configuration of :auto_reconnect parameter for AMI
|
|
104
|
-
- Replace all uses of Object#returning with Object#tap
|
|
105
|
-
- Add support for loading Adhearsion components from RubyGems
|
|
106
|
-
- Fix long-running AMI session parser failure bug (#72)
|
|
107
|
-
- Support for Rails 3 (and ActiveSupport 3.0)
|
|
108
|
-
|
|
109
|
-
0.8.6
|
|
110
|
-
- Fix packaging problem so all files are publicly readable
|
|
111
|
-
- Improve AMI reconnecting logic; add "connection refused" retry timer
|
|
112
|
-
- AGI protocol improvements: parse the status code and response text
|
|
113
|
-
|
|
114
|
-
0.8.5
|
|
115
|
-
NOTE: If you are upgrading an Adhearsion application to 0.8.5, note the change
|
|
116
|
-
to how request URIs are handled. With 0.8.4, the context name in Asterisk was
|
|
117
|
-
required to match the Adhearsion context in dialplan.rb. Starting in 0.8.5 if
|
|
118
|
-
an application path is passed in on the AGI URI, it will be preferred over the
|
|
119
|
-
context name. For example:
|
|
120
|
-
|
|
121
|
-
[stuff]
|
|
122
|
-
exten => _X.,1,AGI(agi://localhost/myapp)
|
|
123
|
-
|
|
124
|
-
AHN 0.8.4- will execute the "stuff" context in dialplan.rb
|
|
125
|
-
AHN 0.8.5+ will execute the "myapp" context in dialplan.rb
|
|
126
|
-
|
|
127
|
-
If you followed the documentation and did not specify an application path in
|
|
128
|
-
the URI (eg. agi://localhost) you will not be impacted by this change.
|
|
129
|
-
|
|
130
|
-
Other changes:
|
|
131
|
-
- Added XMPP module and sample component. This allows you to easily write components which utilise a persistent XMPP connection maintained by Adhearsion
|
|
132
|
-
- Prefer finding the dialplan.rb entry point by the AGI request URI instead of the calling context
|
|
133
|
-
- Added :use_static_conf option for "meetme" to allow the use of disk-file-managed conferences
|
|
134
|
-
- Logging object now shared with ActiveRecord and Blather
|
|
135
|
-
- Fixed a longstanding bug where newlines were not sent after each AGI command
|
|
136
|
-
- Fixed parsing of DBGet AMI command/response
|
|
137
|
-
- Better shutdown handling/cleanup
|
|
138
|
-
- Attempt to allow the AMI socket to reconnect if connection is lost
|
|
139
|
-
- Improved support for Ruby 1.9
|
|
140
|
-
- Numerous smaller bugs fixed. See: https://adhearsion.lighthouseapp.com/projects/5871-adhearsion/milestones/76510-085
|
|
141
|
-
|
|
142
|
-
0.8.4
|
|
143
|
-
- Add configurable argument delimiter for talking to Asterisk. This enables Adhearsion to support Asterisk versions 1.4 (and prior) as well as 1.6 (and later).
|
|
144
|
-
- Fixed using ActiveRecord in Adhearsion components
|
|
145
|
-
- Daemonizing no longer truncates the Adhearsion log file
|
|
146
|
-
- Add support for using ActiveLdap
|
|
147
|
-
- Misc improvements to support Asterisk 1.6 changes
|
|
148
|
-
- Escape commands sent to Asterisk via AGI
|
|
149
|
-
- Manager Events now work when daemonized
|
|
150
|
-
|
|
151
|
-
0.8.3
|
|
152
|
-
- The "uniqueid" call channel variable available in dialplan.rb is now *always* a String
|
|
153
|
-
- Renamed interruptable_play to interruptible_play and made interruptible_play() public instead of protected.
|
|
154
|
-
- Fixed an Asterisk Manager Interface parsing issue in which colons sometimes got stuck into the key name.
|
|
155
|
-
- AGI "request" variable coercer will not blow up if no request is given. (Helps in testing with netcat/telnet)
|
|
156
|
-
|
|
157
|
-
0.8.2
|
|
158
|
-
- When a call hangs up, Adhearsion will no longer show random exceptions (that were okay) and instead allows the user to rescue a Hangup exception.
|
|
159
|
-
- ManagerInterfaceResponse now include()s DRbUndumped, allowing send_action() to be called directly over DRb.
|
|
160
|
-
- Fixes an inconsequential bug when CTL-C'ing Adhearsion.
|
|
161
|
-
|
|
162
|
-
0.8.1
|
|
163
|
-
- The sandbox component now comes
|
|
164
|
-
- Minor bug fixes
|
|
165
|
-
|
|
166
|
-
0.8.0 rev 2
|
|
167
|
-
- Added a few non-critical files to the .gemspec. They were ignored
|
|
168
|
-
|
|
169
|
-
Notes from before 0.8.0:
|
|
170
|
-
- (NOTE: This is obviously not a comprehensive list of pre-0.8.0 work. 0.8.0 was a complete rewrite of the previous version)
|
|
171
|
-
- Adding a deprecation warning about Fixnum#digit and Fixnum#digits
|
|
172
|
-
- Removed the AMI class and replaced it with the ManagerInterface class.
|
|
173
|
-
- The old AMI high-level instance methods are available in the new ManagerInterface class, but a deprecation warning will be logged each time they're used. When the SuperManager class is implemented, they'll be removed entirely.
|
|
174
|
-
- Moved Theatre into Adhearsion's lib folder.
|
data/bin/ahnctl
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
#
|
|
3
|
-
# ahnctl - Adhearsion daemon controller
|
|
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
|
|
9
|
-
# modify it under the terms of the GNU Lesser General Public
|
|
10
|
-
# License as published by the Free Software Foundation; either
|
|
11
|
-
# version 2.1 of the License, or (at your option) any later version.
|
|
12
|
-
#
|
|
13
|
-
# This library is distributed in the hope that it will be useful,
|
|
14
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
16
|
-
# Lesser General Public License for more details.
|
|
17
|
-
#
|
|
18
|
-
# You should have received a copy of the GNU Lesser General Public
|
|
19
|
-
# License along with this library; if not, write to the Free Software
|
|
20
|
-
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
-
|
|
22
|
-
USAGE = "Usage: ahnctl start|stop|restart /path/to/adhearsion/app [--pid-file=/path/to/pid_file.pid]"
|
|
23
|
-
|
|
24
|
-
# Blow up if the CLI arguments are invalid
|
|
25
|
-
abort USAGE unless (2..3).include?(ARGV.size) && %w[start stop restart].include?(ARGV.first)
|
|
26
|
-
|
|
27
|
-
# By default, ahnctl will use the version of Adhearsion it was installed with.
|
|
28
|
-
|
|
29
|
-
pid_file = ARGV.pop if ARGV.size == 3
|
|
30
|
-
ahn_command = File.expand_path File.dirname(__FILE__) + "/ahn"
|
|
31
|
-
app_dir = File.expand_path ARGV.last
|
|
32
|
-
|
|
33
|
-
pid_file_path_regexp = /^--pid-file=(.+)$/
|
|
34
|
-
abort USAGE if pid_file && pid_file !~ pid_file_path_regexp
|
|
35
|
-
|
|
36
|
-
# If pid_file is not nil, let's extract the path specified.
|
|
37
|
-
pid_file &&= File.expand_path pid_file[pid_file_path_regexp,1]
|
|
38
|
-
|
|
39
|
-
# If there was no third argument and pid_file is still nil, let's use the default.
|
|
40
|
-
pid_file ||= app_dir + '/adhearsion.pid'
|
|
41
|
-
|
|
42
|
-
abort "Directory is not an Adhearsion application!" unless File.exists?(app_dir + "/.ahnrc")
|
|
43
|
-
|
|
44
|
-
def terminate(pid) `kill -s TERM #{pid} 2> /dev/null` end
|
|
45
|
-
def kill(pid) `kill -s KILL #{pid} 2> /dev/null` end
|
|
46
|
-
|
|
47
|
-
# Even if we're starting Adhearsion, we need to make sure to clean up after any stale
|
|
48
|
-
# pid files. In effect, start is the same as restart.
|
|
49
|
-
puts "Stopping Adhearsion app at #{app_dir}" if %w[stop restart].include? ARGV.first
|
|
50
|
-
|
|
51
|
-
if File.exists?(pid_file)
|
|
52
|
-
# An Adhearsion process may still be running. Let's kill the other one as cleanly as possible
|
|
53
|
-
pid = File.read(pid_file).to_i
|
|
54
|
-
|
|
55
|
-
# Time to spend waiting for Adhearsion to exit
|
|
56
|
-
waiting_timeout = Time.now + 15
|
|
57
|
-
|
|
58
|
-
terminate pid
|
|
59
|
-
sleep 0.25 until `ps -p #{pid} | sed -e '1d'`.strip.empty? || Time.now > waiting_timeout
|
|
60
|
-
kill pid
|
|
61
|
-
|
|
62
|
-
`rm -f #{pid_file}`
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
if ['start', 'restart'].include? ARGV.first
|
|
66
|
-
puts "Starting Adhearsion app at #{app_dir}"
|
|
67
|
-
`#{ahn_command} start daemon #{app_dir} --pid-file=#{pid_file}`
|
|
68
|
-
end
|
data/bin/jahn
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env jruby
|
|
2
|
-
|
|
3
|
-
# This "jahn" script is "ahn" for JRUBY!
|
|
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
|
-
$:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
|
|
23
|
-
|
|
24
|
-
require 'rubygems'
|
|
25
|
-
require 'bundler/setup'
|
|
26
|
-
require 'adhearsion'
|
|
27
|
-
require 'adhearsion/cli'
|
|
28
|
-
|
|
29
|
-
# jahn will soon have JRuby-specific behavior such as creating a compiled .jar
|
|
30
|
-
# file from an app.
|
|
31
|
-
# require 'adhearsion/jruby'
|
|
32
|
-
|
|
33
|
-
abort(<<-MESSAGE) unless RUBY_PLATFORM =~ /java/
|
|
34
|
-
You must use jahn with JRuby! Are you running this script after installing Adhearsion with non-JRuby RubyGems?
|
|
35
|
-
|
|
36
|
-
If you don't want to install Adhearsion with the JRuby version of RubyGems, try running jahn directly with an absolute path:
|
|
37
|
-
|
|
38
|
-
#{File.expand_path(__FILE__)} start your_app_name
|
|
39
|
-
|
|
40
|
-
Note: You must have the jruby executable in your $PATH and $JRUBY_HOME set.
|
|
41
|
-
MESSAGE
|
|
42
|
-
|
|
43
|
-
Adhearsion::CLI::AhnCommand.execute!
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# This is a file which shows you how to use the Asterisk Manager Interface library in a standalone Ruby script.
|
|
2
|
-
|
|
3
|
-
PATH_TO_ADHEARSION = File.join(File.dirname(__FILE__), "/../..")
|
|
4
|
-
|
|
5
|
-
MANAGER_CONNECTION_INFORMATION = {
|
|
6
|
-
:host => "10.0.1.97",
|
|
7
|
-
:username => "jicksta",
|
|
8
|
-
:password => "roflcopter",
|
|
9
|
-
:events => true
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
require 'rubygems'
|
|
13
|
-
begin
|
|
14
|
-
require 'adhearsion'
|
|
15
|
-
rescue LoadError
|
|
16
|
-
begin
|
|
17
|
-
require File.join(PATH_TO_ADHEARSION, "/lib/adhearsion")
|
|
18
|
-
rescue LoadError
|
|
19
|
-
abort "Could not find Adhearsion! Please update the PATH_TO_ADHEARSION constant in this file"
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
require 'adhearsion/voip/asterisk/manager_interface'
|
|
24
|
-
|
|
25
|
-
# If you'd like to see the AMI protocol data, change this to :debug
|
|
26
|
-
Adhearsion::Logging.logging_level = :warn
|
|
27
|
-
|
|
28
|
-
# This makes addressing the ManagerInterface class a little cleaner
|
|
29
|
-
include Adhearsion::VoIP::Asterisk::Manager
|
|
30
|
-
|
|
31
|
-
# Let's instantiate a new ManagerInterface object and have it automatically connect using the Hash we defined above.
|
|
32
|
-
interface = ManagerInterface.connect MANAGER_CONNECTION_INFORMATION
|
|
33
|
-
|
|
34
|
-
# Send an AMI action with our new ManagerInterface object. This will return an Array of SIPPeer events.
|
|
35
|
-
sip_peers = interface.send_action "SIPPeers"
|
|
36
|
-
|
|
37
|
-
# Pretty-print the SIP peers on the server
|
|
38
|
-
|
|
39
|
-
if sip_peers.any?
|
|
40
|
-
sip_peers.each do |peer|
|
|
41
|
-
# Uncomment the following line to view all the headers for each peer.
|
|
42
|
-
# p peer.headers
|
|
43
|
-
|
|
44
|
-
peer_name = peer.headers["ObjectName"]
|
|
45
|
-
peer_status = peer.headers["Status"]
|
|
46
|
-
|
|
47
|
-
puts "#{peer_name}: #{peer_status}"
|
|
48
|
-
end
|
|
49
|
-
else
|
|
50
|
-
puts "This Asterisk server has no SIP peers!"
|
|
51
|
-
end
|
data/lib/adhearsion/commands.rb
DELETED
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
require 'adhearsion/script_ahn_loader'
|
|
3
|
-
|
|
4
|
-
module Adhearsion
|
|
5
|
-
module CLI
|
|
6
|
-
module AhnCommand
|
|
7
|
-
USAGE = <<USAGE
|
|
8
|
-
Usage:
|
|
9
|
-
ahn create /path/to/directory
|
|
10
|
-
ahn start [console|daemon] [/path/to/directory]
|
|
11
|
-
ahn version|-v|--v|-version|--version
|
|
12
|
-
ahn help|-h|--h|--help|-help
|
|
13
|
-
|
|
14
|
-
ahn enable component COMPONENT_NAME
|
|
15
|
-
ahn disable component COMPONENT_NAME
|
|
16
|
-
ahn create component COMPONENT_NAME
|
|
17
|
-
USAGE
|
|
18
|
-
class << self
|
|
19
|
-
|
|
20
|
-
def execute!
|
|
21
|
-
if ARGV.first == 'start' && !(ScriptAhnLoader.in_ahn_application? || ScriptAhnLoader.in_ahn_application_subdirectory?)
|
|
22
|
-
args = parse_arguments
|
|
23
|
-
Dir.chdir args[1] do
|
|
24
|
-
args = args.compact.map(&:to_s)
|
|
25
|
-
args[1], args[2] = args[2], '.'
|
|
26
|
-
ScriptAhnLoader.exec_script_ahn! args
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
CommandHandler.send(*parse_arguments)
|
|
30
|
-
rescue CommandHandler::CLIException => error
|
|
31
|
-
fail_and_print_usage error
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
##
|
|
35
|
-
# Provides a small abstraction of Kernel::abort().
|
|
36
|
-
#
|
|
37
|
-
def fail_and_print_usage(error)
|
|
38
|
-
Kernel.abort "#{error.message}\n\n#{USAGE}"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def parse_arguments(args=ARGV.clone)
|
|
42
|
-
action = args.shift
|
|
43
|
-
case action
|
|
44
|
-
when /^-?-?h(elp)?$/, nil then [:help]
|
|
45
|
-
when /^-?-?v(ersion)?$/ then [:version]
|
|
46
|
-
when "create"
|
|
47
|
-
[:create, *args]
|
|
48
|
-
when 'start'
|
|
49
|
-
pid_file_regexp = /^--pid-file=(.+)$/
|
|
50
|
-
if args.size > 3
|
|
51
|
-
raise CommandHandler::CLIException, "Too many arguments supplied!" if args.size > 3
|
|
52
|
-
else
|
|
53
|
-
pid_file = nil
|
|
54
|
-
pid_file = args.pop[pid_file_regexp, 1] if args.last =~ pid_file_regexp
|
|
55
|
-
raise CommandHandler::CLIException, "Unrecognized final argument #{args.last}" unless args.size <= 2
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
if args.size == 2
|
|
59
|
-
path = args.last
|
|
60
|
-
if args.first =~ /foreground|daemon|console/
|
|
61
|
-
mode = args.first.to_sym
|
|
62
|
-
else
|
|
63
|
-
raise CommandHandler::CLIException, "Invalid start mode requested: #{args.first}"
|
|
64
|
-
end
|
|
65
|
-
elsif args.size == 1
|
|
66
|
-
path, mode = args.first, :foreground
|
|
67
|
-
else
|
|
68
|
-
raise CommandHandler::CLIException, "Invalid format for the start CLI command!"
|
|
69
|
-
end
|
|
70
|
-
[:start, path, mode, pid_file]
|
|
71
|
-
when '-'
|
|
72
|
-
[:start, Dir.pwd]
|
|
73
|
-
when "enable", "disable"
|
|
74
|
-
if args.size == 1
|
|
75
|
-
raise CommandHandler::UnknownCommand, "Must supply an argument for what you wish to #{action}"
|
|
76
|
-
elsif args.size == 2
|
|
77
|
-
[action, *args]
|
|
78
|
-
else
|
|
79
|
-
raise CommandHandler::UnknownCommand, "Too many arguments supplied!"
|
|
80
|
-
end
|
|
81
|
-
else
|
|
82
|
-
[action, *args]
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
module CommandHandler
|
|
88
|
-
class << self
|
|
89
|
-
|
|
90
|
-
def create(*args)
|
|
91
|
-
if args.size.zero?
|
|
92
|
-
raise CommandHandler::UnknownCommand.new("Must specify something to create!")
|
|
93
|
-
elsif args.size == 1
|
|
94
|
-
require 'adhearsion/generators'
|
|
95
|
-
require 'adhearsion/generators/app/app_generator'
|
|
96
|
-
Adhearsion::Generators::AppGenerator.start
|
|
97
|
-
elsif args.size == 2
|
|
98
|
-
# We're creating a feature (e.g. a component)
|
|
99
|
-
feature_type, component_name = args
|
|
100
|
-
|
|
101
|
-
if feature_type != "component"
|
|
102
|
-
# At the moment, only components can be created.
|
|
103
|
-
raise CommandHandler::UnknownCommand.new("Don't know how to create '#{feature_type}'")
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
if component_name !~ /^[a-z][\w_]+$/
|
|
107
|
-
raise CommandHandler::ComponentError.new("Component name must be lowercase alphanumeric characters " +
|
|
108
|
-
"and begin with a character")
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
app_path = PathString.from_application_subdirectory Dir.pwd
|
|
112
|
-
|
|
113
|
-
if app_path.nil?
|
|
114
|
-
new_component_dir = File.join Dir.pwd, component_name
|
|
115
|
-
else
|
|
116
|
-
puts "Adhearsion application detected. Creating new component at components/#{component_name}"
|
|
117
|
-
new_component_dir = File.join app_path, "components", component_name
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
raise ComponentError.new("Component #{component_name} already exists!") if File.exists?(new_component_dir)
|
|
121
|
-
|
|
122
|
-
# Everything's good. Let's create the component
|
|
123
|
-
Dir.mkdir new_component_dir
|
|
124
|
-
|
|
125
|
-
# Initial component code file
|
|
126
|
-
Dir.mkdir File.join(new_component_dir, "lib")
|
|
127
|
-
fn = File.join("lib", "#{component_name}.rb")
|
|
128
|
-
puts "- #{fn}: Initial component code file"
|
|
129
|
-
File.open(File.join(new_component_dir, fn),"w") do |file|
|
|
130
|
-
file.puts <<-RUBY
|
|
131
|
-
# See http://docs.adhearsion.com for more information on how to write components or
|
|
132
|
-
# look at the examples in newly-created projects.
|
|
133
|
-
RUBY
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# Component configuration
|
|
137
|
-
Dir.mkdir File.join(new_component_dir, "config")
|
|
138
|
-
fn = File.join("config", "#{component_name}.yml")
|
|
139
|
-
puts "- #{fn}: Example component configuration YAML"
|
|
140
|
-
File.open(File.join(new_component_dir, fn),"w") do |file|
|
|
141
|
-
file.puts '# You can use this file for component-specific configuration.'
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# Component example gemspec
|
|
145
|
-
fn = File.join("#{component_name}.gemspec")
|
|
146
|
-
puts "- #{fn}: Example component gemspec"
|
|
147
|
-
File.open(File.join(new_component_dir, fn), "w") do |file|
|
|
148
|
-
file.puts <<-RUBY
|
|
149
|
-
GEM_FILES = %w{
|
|
150
|
-
#{component_name}.gemspec
|
|
151
|
-
lib/#{component_name}.rb
|
|
152
|
-
config/#{component_name}.yml
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
Gem::Specification.new do |s|
|
|
156
|
-
s.name = "#{component_name}"
|
|
157
|
-
s.version = "0.0.1"
|
|
158
|
-
|
|
159
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
160
|
-
s.authors = ["Your Name Here!"]
|
|
161
|
-
|
|
162
|
-
s.date = Date.today.to_s
|
|
163
|
-
s.description = "This Adhearsion component gem has not yet been described."
|
|
164
|
-
s.email = "noreply@example.com"
|
|
165
|
-
|
|
166
|
-
s.files = GEM_FILES
|
|
167
|
-
|
|
168
|
-
s.has_rdoc = false
|
|
169
|
-
s.homepage = "http://adhearsion.com"
|
|
170
|
-
s.require_paths = ["lib"]
|
|
171
|
-
s.rubygems_version = "1.2.0"
|
|
172
|
-
s.summary = "This Adhearsion component gem has no summary."
|
|
173
|
-
|
|
174
|
-
s.specification_version = 2
|
|
175
|
-
end
|
|
176
|
-
RUBY
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
# Component example spec
|
|
180
|
-
Dir.mkdir File.join(new_component_dir, "spec")
|
|
181
|
-
fn = File.join("spec", "#{component_name}_spec.rb")
|
|
182
|
-
puts "- #{fn}: Example component spec"
|
|
183
|
-
File.open(File.join(new_component_dir, fn), "w") do |file|
|
|
184
|
-
file.puts <<-RUBY
|
|
185
|
-
require 'rubygems'
|
|
186
|
-
require 'bundler'
|
|
187
|
-
Bundler.setup
|
|
188
|
-
Bundler.require
|
|
189
|
-
|
|
190
|
-
require 'adhearsion/component_manager/spec_framework'
|
|
191
|
-
|
|
192
|
-
component_name.upcase = ComponentTester.new("#{component_name}", File.dirname(__FILE__) + "/../..")
|
|
193
|
-
RUBY
|
|
194
|
-
end
|
|
195
|
-
puts "Created blank component '#{component_name}' at #{new_component_dir}"
|
|
196
|
-
else
|
|
197
|
-
raise CommandHandler::UnknownCommand.new("Provided too many arguments to 'create'")
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
def start(path, mode=:foreground, pid_file=nil)
|
|
202
|
-
raise PathInvalid, path unless File.exists? path + "/.ahnrc"
|
|
203
|
-
Adhearsion::Initializer.start path, :mode => mode, :pid_file => pid_file
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
def version
|
|
207
|
-
puts "Adhearsion v#{Adhearsion::VERSION::STRING}"
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
def help
|
|
211
|
-
puts USAGE
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def enable(type, name)
|
|
215
|
-
case type
|
|
216
|
-
when "component"
|
|
217
|
-
app_path = PathString.from_application_subdirectory Dir.pwd
|
|
218
|
-
if app_path
|
|
219
|
-
disabled_component_path = File.join app_path, "components", "disabled", name
|
|
220
|
-
disabled_components_path = File.join app_path, "components", "disabled"
|
|
221
|
-
enabled_component_path = File.join app_path, "components", name
|
|
222
|
-
if File.directory? disabled_component_path
|
|
223
|
-
FileUtils.mv disabled_component_path, enabled_component_path
|
|
224
|
-
puts "Enabled component #{name}"
|
|
225
|
-
elsif File.directory? enabled_component_path
|
|
226
|
-
raise ComponentError.new("This component is already enabled.")
|
|
227
|
-
elsif !File.directory? disabled_components_path
|
|
228
|
-
raise ComponentError.new("There is no components/disabled directory!")
|
|
229
|
-
else
|
|
230
|
-
raise ComponentError.new("The requested component was not found.")
|
|
231
|
-
end
|
|
232
|
-
else
|
|
233
|
-
raise PathInvalid.new(Dir.pwd)
|
|
234
|
-
end
|
|
235
|
-
else
|
|
236
|
-
raise UnknownCommand.new("enable #{type}")
|
|
237
|
-
end
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
def disable(type, name)
|
|
241
|
-
case type
|
|
242
|
-
when "component"
|
|
243
|
-
app_path = PathString.from_application_subdirectory Dir.pwd
|
|
244
|
-
if app_path
|
|
245
|
-
disabled_dir = File.join app_path, "components", "disabled"
|
|
246
|
-
|
|
247
|
-
disabled_component_path = File.join disabled_dir, name
|
|
248
|
-
enabled_component_path = File.join app_path, "components", name
|
|
249
|
-
|
|
250
|
-
Dir.mkdir disabled_dir unless File.directory?(disabled_dir)
|
|
251
|
-
|
|
252
|
-
if File.directory? enabled_component_path
|
|
253
|
-
if File.directory?(disabled_component_path)
|
|
254
|
-
raise ComponentError.new("There is already a disabled component at #{disabled_component_path}")
|
|
255
|
-
else
|
|
256
|
-
FileUtils.mv enabled_component_path, disabled_component_path
|
|
257
|
-
puts "Disabled component #{name}"
|
|
258
|
-
end
|
|
259
|
-
else
|
|
260
|
-
raise ComponentError.new("Could not find component #{name} at #{enabled_component_path} !")
|
|
261
|
-
end
|
|
262
|
-
else
|
|
263
|
-
raise PathInvalid.new(Dir.pwd)
|
|
264
|
-
end
|
|
265
|
-
else
|
|
266
|
-
raise UnknownCommand.new("disable #{type}")
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
def method_missing(action, *args)
|
|
271
|
-
raise UnknownCommand, [action, *args] * " "
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
private
|
|
275
|
-
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
class CLIException < StandardError; end
|
|
279
|
-
|
|
280
|
-
class UnknownCommand < CLIException
|
|
281
|
-
def initialize(cmd)
|
|
282
|
-
super "Unknown command: #{cmd}"
|
|
283
|
-
end
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
class ComponentError < CLIException; end
|
|
287
|
-
|
|
288
|
-
class UnknownProject < CLIException
|
|
289
|
-
def initialize(project)
|
|
290
|
-
super "Application #{project} does not exist! Have you installed it?"
|
|
291
|
-
end
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
class PathInvalid < CLIException
|
|
295
|
-
def initialize(path)
|
|
296
|
-
super "Directory #{path} does not belong to an Adhearsion project!"
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
|
-
end
|