adhearsion 1.2.6 → 2.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|