sant0sk1-adhearsion 0.7.999
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +456 -0
- data/README.txt +5 -0
- data/Rakefile +75 -0
- data/adhearsion.gemspec +136 -0
- data/app_generators/ahn/USAGE +5 -0
- data/app_generators/ahn/ahn_generator.rb +77 -0
- data/app_generators/ahn/templates/.ahnrc +36 -0
- data/app_generators/ahn/templates/README +8 -0
- data/app_generators/ahn/templates/Rakefile +18 -0
- data/app_generators/ahn/templates/components/simon_game/configuration.rb +0 -0
- data/app_generators/ahn/templates/components/simon_game/lib/simon_game.rb +61 -0
- data/app_generators/ahn/templates/components/simon_game/test/test_helper.rb +14 -0
- data/app_generators/ahn/templates/components/simon_game/test/test_simon_game.rb +31 -0
- data/app_generators/ahn/templates/config/startup.rb +53 -0
- data/app_generators/ahn/templates/dialplan.rb +4 -0
- data/bin/ahn +28 -0
- data/bin/ahnctl +68 -0
- data/bin/jahn +32 -0
- data/lib/adhearsion.rb +32 -0
- data/lib/adhearsion/blank_slate.rb +5 -0
- data/lib/adhearsion/cli.rb +106 -0
- data/lib/adhearsion/component_manager.rb +277 -0
- data/lib/adhearsion/core_extensions/all.rb +9 -0
- data/lib/adhearsion/core_extensions/array.rb +0 -0
- data/lib/adhearsion/core_extensions/custom_daemonizer.rb +45 -0
- data/lib/adhearsion/core_extensions/global.rb +1 -0
- data/lib/adhearsion/core_extensions/hash.rb +0 -0
- data/lib/adhearsion/core_extensions/metaprogramming.rb +17 -0
- data/lib/adhearsion/core_extensions/numeric.rb +4 -0
- data/lib/adhearsion/core_extensions/proc.rb +0 -0
- data/lib/adhearsion/core_extensions/publishable.rb +73 -0
- data/lib/adhearsion/core_extensions/relationship_properties.rb +40 -0
- data/lib/adhearsion/core_extensions/string.rb +26 -0
- data/lib/adhearsion/core_extensions/thread.rb +13 -0
- data/lib/adhearsion/core_extensions/thread_safety.rb +7 -0
- data/lib/adhearsion/core_extensions/time.rb +0 -0
- data/lib/adhearsion/distributed/gateways/dbus_gateway.rb +0 -0
- data/lib/adhearsion/distributed/gateways/osa_gateway.rb +0 -0
- data/lib/adhearsion/distributed/gateways/rest_gateway.rb +9 -0
- data/lib/adhearsion/distributed/gateways/soap_gateway.rb +9 -0
- data/lib/adhearsion/distributed/gateways/xmlrpc_gateway.rb +9 -0
- data/lib/adhearsion/distributed/peer_finder.rb +0 -0
- data/lib/adhearsion/distributed/remote_cli.rb +0 -0
- data/lib/adhearsion/events_support.rb +26 -0
- data/lib/adhearsion/hooks.rb +57 -0
- data/lib/adhearsion/host_definitions.rb +63 -0
- data/lib/adhearsion/initializer.rb +246 -0
- data/lib/adhearsion/initializer/asterisk.rb +59 -0
- data/lib/adhearsion/initializer/configuration.rb +236 -0
- data/lib/adhearsion/initializer/database.rb +49 -0
- data/lib/adhearsion/initializer/drb.rb +25 -0
- data/lib/adhearsion/initializer/freeswitch.rb +22 -0
- data/lib/adhearsion/initializer/rails.rb +40 -0
- data/lib/adhearsion/logging.rb +92 -0
- data/lib/adhearsion/tasks.rb +15 -0
- data/lib/adhearsion/tasks/database.rb +5 -0
- data/lib/adhearsion/tasks/generating.rb +20 -0
- data/lib/adhearsion/tasks/lint.rb +4 -0
- data/lib/adhearsion/tasks/testing.rb +37 -0
- data/lib/adhearsion/version.rb +9 -0
- data/lib/adhearsion/voip/asterisk.rb +10 -0
- data/lib/adhearsion/voip/asterisk/agi_server.rb +81 -0
- data/lib/adhearsion/voip/asterisk/ami.rb +147 -0
- data/lib/adhearsion/voip/asterisk/ami/actions.rb +238 -0
- data/lib/adhearsion/voip/asterisk/ami/machine.rb +871 -0
- data/lib/adhearsion/voip/asterisk/ami/machine.rl +109 -0
- data/lib/adhearsion/voip/asterisk/ami/parser.rb +262 -0
- data/lib/adhearsion/voip/asterisk/commands.rb +1284 -0
- data/lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb +140 -0
- data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +101 -0
- data/lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb +250 -0
- data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +240 -0
- data/lib/adhearsion/voip/asterisk/config_manager.rb +71 -0
- data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +80 -0
- data/lib/adhearsion/voip/call.rb +436 -0
- data/lib/adhearsion/voip/call_routing.rb +64 -0
- data/lib/adhearsion/voip/commands.rb +9 -0
- data/lib/adhearsion/voip/constants.rb +39 -0
- data/lib/adhearsion/voip/conveniences.rb +18 -0
- data/lib/adhearsion/voip/dial_plan.rb +207 -0
- data/lib/adhearsion/voip/dsl/dialing_dsl.rb +151 -0
- data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +37 -0
- data/lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb +27 -0
- data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +124 -0
- data/lib/adhearsion/voip/dsl/dialplan/parser.rb +71 -0
- data/lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb +16 -0
- data/lib/adhearsion/voip/dsl/numerical_string.rb +117 -0
- data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +48 -0
- data/lib/adhearsion/voip/freeswitch/event_handler.rb +58 -0
- data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +129 -0
- data/lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb +38 -0
- data/lib/adhearsion/voip/freeswitch/oes_server.rb +195 -0
- data/lib/adhearsion/voip/menu_state_machine/calculated_match.rb +80 -0
- data/lib/adhearsion/voip/menu_state_machine/matchers.rb +123 -0
- data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +58 -0
- data/lib/adhearsion/voip/menu_state_machine/menu_class.rb +149 -0
- metadata +167 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'calculated_match')
|
2
|
+
|
3
|
+
module Adhearsion
|
4
|
+
module VoIP
|
5
|
+
class MatchCalculator
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def build_with_pattern(pattern, match_payload, &block)
|
10
|
+
class_for_pattern_type(pattern.class.name).new(pattern, match_payload, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def inherited(klass)
|
14
|
+
subclasses << klass
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def class_for_pattern_type(pattern_type)
|
20
|
+
sought_class_name = "Adhearsion::VoIP::#{pattern_type.camelize}MatchCalculator"
|
21
|
+
subclasses.find { |klass| klass.name == sought_class_name }
|
22
|
+
end
|
23
|
+
|
24
|
+
def subclasses
|
25
|
+
@@subclasses ||= []
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :pattern, :match_payload
|
31
|
+
def initialize(pattern, match_payload)
|
32
|
+
@pattern, @match_payload = pattern, match_payload
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def new_calculated_match(options)
|
38
|
+
CalculatedMatch.new({:pattern => pattern, :match_payload => match_payload}.merge(options))
|
39
|
+
end
|
40
|
+
|
41
|
+
def coerce_to_numeric(victim)
|
42
|
+
victim.kind_of?(Numeric) ? victim : (victim.to_s =~ /^\d+$/ ? victim.to_s.to_i : nil )
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class RangeMatchCalculator < MatchCalculator
|
47
|
+
|
48
|
+
def initialize(pattern, match_payload)
|
49
|
+
raise unless pattern.first.kind_of?(Numeric) && pattern.last.kind_of?(Numeric)
|
50
|
+
super
|
51
|
+
end
|
52
|
+
|
53
|
+
def match(query)
|
54
|
+
numerical_query = coerce_to_numeric query
|
55
|
+
if numerical_query
|
56
|
+
exact_match = pattern.include?(numerical_query) ? query : nil
|
57
|
+
potential_matches = numbers_in_range_like numerical_query
|
58
|
+
potential_matches.reject! { |m| m.to_s == exact_match.to_s } if exact_match
|
59
|
+
|
60
|
+
new_calculated_match :query => query, :exact_matches => exact_match,
|
61
|
+
:potential_matches => potential_matches
|
62
|
+
else
|
63
|
+
CalculatedMatch.failed_match!(pattern, query, match_payload)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# Returns all numbers in the range (@pattern) that +begin with+ the number given
|
70
|
+
# as the first argument.
|
71
|
+
#
|
72
|
+
# NOTE! If you're having trouble reading what this method is actually doing, it's
|
73
|
+
# effectively a much more efficient version of this:
|
74
|
+
#
|
75
|
+
# pattern.to_a.select { |x| x.to_s.starts_with? num.to_s }.flatten
|
76
|
+
#
|
77
|
+
# Huge thanks to Dave Troy (http://davetroy.blogspot.com) for this awesomely
|
78
|
+
# efficient code!
|
79
|
+
def numbers_in_range_like(num)
|
80
|
+
return (pattern === 0 ? [0] : nil) if num == 0
|
81
|
+
raise ArgumentError unless num.kind_of?(Numeric)
|
82
|
+
returning Array.new do |matches|
|
83
|
+
first, last = pattern.first, pattern.last
|
84
|
+
power = 0
|
85
|
+
while num < last
|
86
|
+
ones_count = 10**power - 1
|
87
|
+
matches.concat((([num, first].max)..[(num+ones_count), last].min).to_a)
|
88
|
+
num *= 10
|
89
|
+
power += 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class FixnumMatchCalculator < MatchCalculator
|
96
|
+
def match(query)
|
97
|
+
numeric_query = coerce_to_numeric query
|
98
|
+
exact_match, potential_match = nil
|
99
|
+
if pattern == numeric_query
|
100
|
+
exact_match = pattern
|
101
|
+
elsif pattern.to_s.starts_with? query.to_s
|
102
|
+
potential_match = pattern
|
103
|
+
end
|
104
|
+
new_calculated_match :query => query, :exact_matches => exact_match, :potential_matches => potential_match
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class StringMatchCalculator < MatchCalculator
|
109
|
+
def match(query)
|
110
|
+
args = { :query => query, :exact_matches => nil,
|
111
|
+
:potential_matches => nil }
|
112
|
+
|
113
|
+
if pattern == query.to_s
|
114
|
+
args[:exact_matches] = [pattern]
|
115
|
+
elsif pattern.starts_with? query.to_s
|
116
|
+
args[:potential_matches] = [pattern]
|
117
|
+
end
|
118
|
+
|
119
|
+
new_calculated_match args
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'matchers.rb')
|
2
|
+
|
3
|
+
module Adhearsion
|
4
|
+
module VoIP
|
5
|
+
class MenuBuilder
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@patterns = []
|
9
|
+
@menu_callbacks = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(match_payload, *patterns, &block)
|
13
|
+
name_string = match_payload.to_s
|
14
|
+
if patterns.any?
|
15
|
+
patterns.each do |pattern|
|
16
|
+
@patterns << MatchCalculator.build_with_pattern(pattern, match_payload)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
raise ArgumentError, "You cannot call this method without patterns!"
|
20
|
+
end
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def weighted_match_calculators
|
25
|
+
@patterns
|
26
|
+
end
|
27
|
+
|
28
|
+
def execute_hook_for(symbol, input)
|
29
|
+
callback = @menu_callbacks[symbol]
|
30
|
+
callback.call input if callback
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_invalid(&block)
|
34
|
+
raise LocalJumpError, "Must supply a block!" unless block_given?
|
35
|
+
@menu_callbacks[:invalid] = block
|
36
|
+
end
|
37
|
+
|
38
|
+
def on_premature_timeout(&block)
|
39
|
+
raise LocalJumpError, "Must supply a block!" unless block_given?
|
40
|
+
@menu_callbacks[:premature_timeout] = block
|
41
|
+
end
|
42
|
+
|
43
|
+
def on_failure(&block)
|
44
|
+
raise LocalJumpError, "Must supply a block!" unless block_given?
|
45
|
+
@menu_callbacks[:failure] = block
|
46
|
+
end
|
47
|
+
|
48
|
+
def calculate_matches_for(result)
|
49
|
+
returning CalculatedMatchCollection.new do |collection|
|
50
|
+
weighted_match_calculators.each do |pattern|
|
51
|
+
collection << pattern.match(result)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'adhearsion/voip/menu_state_machine/menu_builder'
|
2
|
+
module Adhearsion
|
3
|
+
module VoIP
|
4
|
+
class Menu
|
5
|
+
|
6
|
+
DEFAULT_MAX_NUMBER_OF_TRIES = 1
|
7
|
+
DEFAULT_TIMEOUT = 5 # seconds
|
8
|
+
|
9
|
+
relationships :menu_builder => MenuBuilder
|
10
|
+
|
11
|
+
attr_reader :builder, :timeout, :tries_count, :max_number_of_tries
|
12
|
+
def initialize(options={}, &block)
|
13
|
+
@tries_count = 0 # Counts the number of tries the menu's been executed
|
14
|
+
|
15
|
+
@timeout = options[:timeout] || DEFAULT_TIMEOUT
|
16
|
+
@max_number_of_tries = options[:tries] || DEFAULT_MAX_NUMBER_OF_TRIES
|
17
|
+
|
18
|
+
@builder = menu_builder.new
|
19
|
+
yield @builder
|
20
|
+
|
21
|
+
initialize_digit_buffer
|
22
|
+
end
|
23
|
+
|
24
|
+
def <<(other)
|
25
|
+
digit_buffer << other
|
26
|
+
end
|
27
|
+
|
28
|
+
def digit_buffer
|
29
|
+
@digit_buffer
|
30
|
+
end
|
31
|
+
|
32
|
+
def digit_buffer_string
|
33
|
+
digit_buffer.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def digit_buffer_empty?
|
37
|
+
digit_buffer.empty?
|
38
|
+
end
|
39
|
+
|
40
|
+
def continue
|
41
|
+
raise MenuGetAnotherDigitOrTimeout if digit_buffer_empty?
|
42
|
+
|
43
|
+
calculated_matches = builder.calculate_matches_for digit_buffer_string
|
44
|
+
|
45
|
+
if calculated_matches.exact_match_count >= 1
|
46
|
+
first_exact_match = calculated_matches.exact_matches.first
|
47
|
+
if calculated_matches.potential_match_count.zero?
|
48
|
+
# Match found with no extenuating ambiguities! Go with the first exact match
|
49
|
+
menu_result_found! first_exact_match.match_payload, digit_buffer_string
|
50
|
+
else
|
51
|
+
get_another_digit_or_finish!(first_exact_match.match_payload, first_exact_match.query)
|
52
|
+
end
|
53
|
+
elsif calculated_matches.potential_match_count >= 1
|
54
|
+
get_another_digit_or_timeout!
|
55
|
+
else
|
56
|
+
invalid!
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def should_continue?
|
61
|
+
tries_count < max_number_of_tries
|
62
|
+
end
|
63
|
+
|
64
|
+
def restart!
|
65
|
+
@tries_count += 1
|
66
|
+
digit_buffer.clear!
|
67
|
+
end
|
68
|
+
|
69
|
+
def execute_invalid_hook
|
70
|
+
builder.execute_hook_for(:invalid, digit_buffer_string)
|
71
|
+
end
|
72
|
+
|
73
|
+
def execute_timeout_hook
|
74
|
+
builder.execute_hook_for(:premature_timeout, digit_buffer_string)
|
75
|
+
end
|
76
|
+
|
77
|
+
def execute_failure_hook
|
78
|
+
builder.execute_hook_for(:failure, digit_buffer_string)
|
79
|
+
end
|
80
|
+
|
81
|
+
protected
|
82
|
+
|
83
|
+
# If you're using a more complex class in subclasses, you may want to override this method in addition to the
|
84
|
+
# digit_buffer, digit_buffer_empty, and digit_buffer_string methods
|
85
|
+
def initialize_digit_buffer
|
86
|
+
@digit_buffer = ClearableStringBuffer.new
|
87
|
+
end
|
88
|
+
|
89
|
+
def invalid!
|
90
|
+
raise MenuResultInvalid
|
91
|
+
end
|
92
|
+
|
93
|
+
def menu_result_found!(match_payload, new_extension)
|
94
|
+
raise MenuResultFound.new(match_payload, new_extension)
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_another_digit_or_finish!(match_payload, new_extension)
|
98
|
+
raise MenuGetAnotherDigitOrFinish.new(match_payload, new_extension)
|
99
|
+
end
|
100
|
+
|
101
|
+
def get_another_digit_or_timeout!
|
102
|
+
raise MenuGetAnotherDigitOrTimeout
|
103
|
+
end
|
104
|
+
|
105
|
+
# The superclass from which all message-like exceptions decend. It should never
|
106
|
+
# be instantiated directly.
|
107
|
+
class MenuResult < Exception; end
|
108
|
+
|
109
|
+
# Raised when the user's input matches
|
110
|
+
class MenuResultFound < MenuResult
|
111
|
+
attr_reader :match_payload, :new_extension
|
112
|
+
def initialize(match_payload, new_extension)
|
113
|
+
super()
|
114
|
+
@match_payload = match_payload
|
115
|
+
@new_extension = new_extension
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
module MenuGetAnotherDigit; end
|
120
|
+
|
121
|
+
class MenuGetAnotherDigitOrFinish < MenuResultFound
|
122
|
+
include MenuGetAnotherDigit
|
123
|
+
end
|
124
|
+
|
125
|
+
class MenuGetAnotherDigitOrTimeout < MenuResult
|
126
|
+
include MenuGetAnotherDigit
|
127
|
+
end
|
128
|
+
|
129
|
+
class MenuResultFound < MenuResult; end
|
130
|
+
|
131
|
+
# Raised when the user's input matches no patterns
|
132
|
+
class MenuResultInvalid < MenuResult; end
|
133
|
+
|
134
|
+
# For our default purposes, we need the digit_buffer to behave much like a normal String except that it should
|
135
|
+
# handle its own resetting (clearing).
|
136
|
+
class ClearableStringBuffer < String
|
137
|
+
def clear!
|
138
|
+
replace ""
|
139
|
+
end
|
140
|
+
|
141
|
+
def <<(other)
|
142
|
+
super other.to_s
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sant0sk1-adhearsion
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.999
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jay Phillips
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-08-21 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rubigen
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.6
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: log4r
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 1.0.5
|
32
|
+
version:
|
33
|
+
description: Adhearsion is an open-source telephony development framework
|
34
|
+
email: Jay -at- Codemecca.com
|
35
|
+
executables:
|
36
|
+
- ahn
|
37
|
+
- ahnctl
|
38
|
+
- jahn
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- adhearsion.gemspec
|
45
|
+
- LICENSE
|
46
|
+
- README.txt
|
47
|
+
- Rakefile
|
48
|
+
- app_generators/ahn/USAGE
|
49
|
+
- app_generators/ahn/ahn_generator.rb
|
50
|
+
- app_generators/ahn/templates/.ahnrc
|
51
|
+
- app_generators/ahn/templates/README
|
52
|
+
- app_generators/ahn/templates/Rakefile
|
53
|
+
- app_generators/ahn/templates/components/simon_game/configuration.rb
|
54
|
+
- app_generators/ahn/templates/components/simon_game/lib/simon_game.rb
|
55
|
+
- app_generators/ahn/templates/components/simon_game/test/test_helper.rb
|
56
|
+
- app_generators/ahn/templates/components/simon_game/test/test_simon_game.rb
|
57
|
+
- app_generators/ahn/templates/config/startup.rb
|
58
|
+
- app_generators/ahn/templates/dialplan.rb
|
59
|
+
- bin/ahn
|
60
|
+
- bin/ahnctl
|
61
|
+
- bin/jahn
|
62
|
+
- lib/adhearsion.rb
|
63
|
+
- lib/adhearsion/blank_slate.rb
|
64
|
+
- lib/adhearsion/cli.rb
|
65
|
+
- lib/adhearsion/events_support.rb
|
66
|
+
- lib/adhearsion/component_manager.rb
|
67
|
+
- lib/adhearsion/core_extensions/all.rb
|
68
|
+
- lib/adhearsion/core_extensions/array.rb
|
69
|
+
- lib/adhearsion/core_extensions/custom_daemonizer.rb
|
70
|
+
- lib/adhearsion/core_extensions/global.rb
|
71
|
+
- lib/adhearsion/core_extensions/hash.rb
|
72
|
+
- lib/adhearsion/core_extensions/metaprogramming.rb
|
73
|
+
- lib/adhearsion/core_extensions/numeric.rb
|
74
|
+
- lib/adhearsion/core_extensions/proc.rb
|
75
|
+
- lib/adhearsion/core_extensions/publishable.rb
|
76
|
+
- lib/adhearsion/core_extensions/relationship_properties.rb
|
77
|
+
- lib/adhearsion/core_extensions/string.rb
|
78
|
+
- lib/adhearsion/core_extensions/thread.rb
|
79
|
+
- lib/adhearsion/core_extensions/thread_safety.rb
|
80
|
+
- lib/adhearsion/core_extensions/time.rb
|
81
|
+
- lib/adhearsion/distributed/gateways/dbus_gateway.rb
|
82
|
+
- lib/adhearsion/distributed/gateways/osa_gateway.rb
|
83
|
+
- lib/adhearsion/distributed/gateways/rest_gateway.rb
|
84
|
+
- lib/adhearsion/distributed/gateways/soap_gateway.rb
|
85
|
+
- lib/adhearsion/distributed/gateways/xmlrpc_gateway.rb
|
86
|
+
- lib/adhearsion/distributed/peer_finder.rb
|
87
|
+
- lib/adhearsion/distributed/remote_cli.rb
|
88
|
+
- lib/adhearsion/hooks.rb
|
89
|
+
- lib/adhearsion/host_definitions.rb
|
90
|
+
- lib/adhearsion/initializer.rb
|
91
|
+
- lib/adhearsion/initializer/asterisk.rb
|
92
|
+
- lib/adhearsion/initializer/configuration.rb
|
93
|
+
- lib/adhearsion/initializer/database.rb
|
94
|
+
- lib/adhearsion/initializer/drb.rb
|
95
|
+
- lib/adhearsion/initializer/freeswitch.rb
|
96
|
+
- lib/adhearsion/initializer/rails.rb
|
97
|
+
- lib/adhearsion/logging.rb
|
98
|
+
- lib/adhearsion/tasks.rb
|
99
|
+
- lib/adhearsion/tasks/database.rb
|
100
|
+
- lib/adhearsion/tasks/generating.rb
|
101
|
+
- lib/adhearsion/tasks/lint.rb
|
102
|
+
- lib/adhearsion/tasks/testing.rb
|
103
|
+
- lib/adhearsion/version.rb
|
104
|
+
- lib/adhearsion/voip/asterisk.rb
|
105
|
+
- lib/adhearsion/voip/asterisk/agi_server.rb
|
106
|
+
- lib/adhearsion/voip/asterisk/ami.rb
|
107
|
+
- lib/adhearsion/voip/asterisk/ami/actions.rb
|
108
|
+
- lib/adhearsion/voip/asterisk/ami/machine.rb
|
109
|
+
- lib/adhearsion/voip/asterisk/ami/machine.rl
|
110
|
+
- lib/adhearsion/voip/asterisk/ami/parser.rb
|
111
|
+
- lib/adhearsion/voip/asterisk/commands.rb
|
112
|
+
- lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb
|
113
|
+
- lib/adhearsion/voip/asterisk/config_generators/config_generator.rb
|
114
|
+
- lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb
|
115
|
+
- lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb
|
116
|
+
- lib/adhearsion/voip/asterisk/config_manager.rb
|
117
|
+
- lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb
|
118
|
+
- lib/adhearsion/voip/call.rb
|
119
|
+
- lib/adhearsion/voip/call_routing.rb
|
120
|
+
- lib/adhearsion/voip/commands.rb
|
121
|
+
- lib/adhearsion/voip/constants.rb
|
122
|
+
- lib/adhearsion/voip/conveniences.rb
|
123
|
+
- lib/adhearsion/voip/dial_plan.rb
|
124
|
+
- lib/adhearsion/voip/dsl/dialing_dsl.rb
|
125
|
+
- lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb
|
126
|
+
- lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb
|
127
|
+
- lib/adhearsion/voip/dsl/dialplan/dispatcher.rb
|
128
|
+
- lib/adhearsion/voip/dsl/dialplan/parser.rb
|
129
|
+
- lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb
|
130
|
+
- lib/adhearsion/voip/dsl/numerical_string.rb
|
131
|
+
- lib/adhearsion/voip/freeswitch/basic_connection_manager.rb
|
132
|
+
- lib/adhearsion/voip/freeswitch/event_handler.rb
|
133
|
+
- lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb
|
134
|
+
- lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb
|
135
|
+
- lib/adhearsion/voip/freeswitch/oes_server.rb
|
136
|
+
- lib/adhearsion/voip/menu_state_machine/calculated_match.rb
|
137
|
+
- lib/adhearsion/voip/menu_state_machine/matchers.rb
|
138
|
+
- lib/adhearsion/voip/menu_state_machine/menu_builder.rb
|
139
|
+
- lib/adhearsion/voip/menu_state_machine/menu_class.rb
|
140
|
+
has_rdoc: false
|
141
|
+
homepage: http://adhearsion.com
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
|
145
|
+
require_paths:
|
146
|
+
- lib
|
147
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: "0"
|
152
|
+
version:
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: "0"
|
158
|
+
version:
|
159
|
+
requirements: []
|
160
|
+
|
161
|
+
rubyforge_project: adhearsion
|
162
|
+
rubygems_version: 1.2.0
|
163
|
+
signing_key:
|
164
|
+
specification_version: 2
|
165
|
+
summary: Adhearsion, open-source telephony development framework
|
166
|
+
test_files: []
|
167
|
+
|