adhearsion 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +35 -3
- data/Gemfile +3 -0
- data/Rakefile +23 -19
- data/adhearsion.gemspec +133 -133
- data/app_generators/ahn/ahn_generator.rb +1 -0
- data/app_generators/ahn/templates/Gemfile +7 -0
- data/app_generators/ahn/templates/Rakefile +4 -2
- data/app_generators/ahn/templates/config/startup.rb +5 -14
- data/bin/ahn +1 -0
- data/bin/jahn +1 -0
- data/lib/adhearsion.rb +1 -0
- data/lib/adhearsion/cli.rb +70 -19
- data/lib/adhearsion/foundation/blank_slate.rb +2 -2
- data/lib/adhearsion/foundation/event_socket.rb +1 -0
- data/lib/adhearsion/initializer/configuration.rb +2 -2
- data/lib/adhearsion/version.rb +1 -1
- data/lib/adhearsion/voip/asterisk/commands.rb +107 -36
- data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +3 -2
- data/lib/adhearsion/voip/asterisk/config_manager.rb +1 -1
- data/lib/adhearsion/voip/asterisk/manager_interface.rb +3 -3
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +13 -12
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +1 -0
- data/lib/adhearsion/voip/call.rb +2 -1
- data/lib/adhearsion/voip/dial_plan.rb +5 -1
- data/lib/adhearsion/voip/dsl/dialplan/parser.rb +2 -2
- data/lib/adhearsion/voip/dsl/numerical_string.rb +16 -3
- data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +1 -1
- data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +0 -1
- data/lib/theatre/callback_definition_loader.rb +2 -2
- metadata +60 -38
@@ -11,8 +11,9 @@ module Adhearsion
|
|
11
11
|
# Converts a config file into a Hash of contexts mapping to two dimensional array of pairs
|
12
12
|
def create_sanitary_hash_from(config_file_content)
|
13
13
|
almost_sanitized = Hash[*config_file_content.
|
14
|
+
split("\n"). # Split the lines into an Array
|
14
15
|
grep(/^\s*[^;\s]/). # Grep lines that aren't commented out
|
15
|
-
join.
|
16
|
+
join("\n"). # Convert them into one String again
|
16
17
|
split(SECTION_TITLE). # Separate them into sections
|
17
18
|
map(&:strip). # Remove all whitespace
|
18
19
|
reject(&:empty?). # Get rid of indices that were only whitespace
|
@@ -98,4 +99,4 @@ module Adhearsion
|
|
98
99
|
end
|
99
100
|
end
|
100
101
|
end
|
101
|
-
end
|
102
|
+
end
|
@@ -40,7 +40,7 @@ module Adhearsion
|
|
40
40
|
|
41
41
|
def read_configuration
|
42
42
|
normalized_file = self.class.normalize_configuration execute(read_command)
|
43
|
-
normalized_file.split(/^\[([-_\w]+)\]$/)[1..-1].
|
43
|
+
normalized_file.split(/^\[([-_\w]+)\]$/)[1..-1].each_slice(2).map do |(name,properties)|
|
44
44
|
[name, hash_from_properties(properties)]
|
45
45
|
end
|
46
46
|
end
|
@@ -31,7 +31,7 @@ module Adhearsion
|
|
31
31
|
|
32
32
|
CAUSAL_EVENT_NAMES = %w[queuestatus sippeers iaxpeers parkedcalls
|
33
33
|
dahdishowchannels coreshowchannels dbget
|
34
|
-
status konferencelist] unless defined? CAUSAL_EVENT_NAMES
|
34
|
+
status agents konferencelist] unless defined? CAUSAL_EVENT_NAMES
|
35
35
|
|
36
36
|
RETRY_SLEEP = 5
|
37
37
|
|
@@ -364,8 +364,8 @@ module Adhearsion
|
|
364
364
|
options = options.clone
|
365
365
|
options[:callerid] = options.delete :caller_id if options.has_key? :caller_id
|
366
366
|
options[:exten] = options.delete :extension if options.has_key? :extension
|
367
|
-
if options
|
368
|
-
options[:variable] = options
|
367
|
+
if options.has_key?(:variables) && options[:variables].kind_of?(Hash)
|
368
|
+
options[:variable] = options.delete(:variables).map {|pair| pair.join('=')}.join(@coreSettings["ArgumentDelimiter"])
|
369
369
|
end
|
370
370
|
send_action "Originate", options
|
371
371
|
end
|
@@ -40,9 +40,10 @@ module Adhearsion
|
|
40
40
|
@data = ""
|
41
41
|
@current_pointer = 0
|
42
42
|
@ragel_stack = []
|
43
|
+
@ami_version = 0.0
|
43
44
|
|
44
45
|
|
45
|
-
# line
|
46
|
+
# line 47 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb"
|
46
47
|
class << self
|
47
48
|
attr_accessor :_ami_protocol_parser_actions
|
48
49
|
private :_ami_protocol_parser_actions, :_ami_protocol_parser_actions=
|
@@ -859,7 +860,7 @@ end
|
|
859
860
|
self.ami_protocol_parser_en_response_follows = 268;
|
860
861
|
|
861
862
|
|
862
|
-
# line
|
863
|
+
# line 864 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb"
|
863
864
|
begin
|
864
865
|
@current_pointer ||= 0
|
865
866
|
@data_ending_pointer ||= @data.length
|
@@ -870,7 +871,7 @@ begin
|
|
870
871
|
@ragel_act = 0
|
871
872
|
end
|
872
873
|
|
873
|
-
# line
|
874
|
+
# line 99 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb"
|
874
875
|
##
|
875
876
|
|
876
877
|
end
|
@@ -882,7 +883,7 @@ end
|
|
882
883
|
|
883
884
|
def resume!
|
884
885
|
|
885
|
-
# line
|
886
|
+
# line 887 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb"
|
886
887
|
begin
|
887
888
|
_klen, _trans, _keys, _acts, _nacts = nil
|
888
889
|
_goto_level = 0
|
@@ -916,7 +917,7 @@ begin
|
|
916
917
|
begin
|
917
918
|
@token_start = @current_pointer
|
918
919
|
end
|
919
|
-
# line
|
920
|
+
# line 921 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb"
|
920
921
|
end # from state action switch
|
921
922
|
end
|
922
923
|
if _trigger_goto
|
@@ -936,9 +937,9 @@ begin
|
|
936
937
|
break if _upper < _lower
|
937
938
|
_mid = _lower + ( (_upper - _lower) >> 1 )
|
938
939
|
|
939
|
-
if @data[ @current_pointer] < _ami_protocol_parser_trans_keys[_mid]
|
940
|
+
if @data[ @current_pointer].ord < _ami_protocol_parser_trans_keys[_mid]
|
940
941
|
_upper = _mid - 1
|
941
|
-
elsif @data[ @current_pointer] > _ami_protocol_parser_trans_keys[_mid]
|
942
|
+
elsif @data[ @current_pointer].ord > _ami_protocol_parser_trans_keys[_mid]
|
942
943
|
_lower = _mid + 1
|
943
944
|
else
|
944
945
|
_trans += (_mid - _keys)
|
@@ -957,9 +958,9 @@ begin
|
|
957
958
|
loop do
|
958
959
|
break if _upper < _lower
|
959
960
|
_mid = _lower + (((_upper-_lower) >> 1) & ~1)
|
960
|
-
if @data[ @current_pointer] < _ami_protocol_parser_trans_keys[_mid]
|
961
|
+
if @data[ @current_pointer].ord < _ami_protocol_parser_trans_keys[_mid]
|
961
962
|
_upper = _mid - 2
|
962
|
-
elsif @data[ @current_pointer] > _ami_protocol_parser_trans_keys[_mid+1]
|
963
|
+
elsif @data[ @current_pointer].ord > _ami_protocol_parser_trans_keys[_mid+1]
|
963
964
|
_lower = _mid + 2
|
964
965
|
else
|
965
966
|
_trans += ((_mid - _keys) >> 1)
|
@@ -1388,7 +1389,7 @@ end
|
|
1388
1389
|
end
|
1389
1390
|
end
|
1390
1391
|
end
|
1391
|
-
# line
|
1392
|
+
# line 1393 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb"
|
1392
1393
|
end # action switch
|
1393
1394
|
end
|
1394
1395
|
end
|
@@ -1413,7 +1414,7 @@ when 29 then
|
|
1413
1414
|
begin
|
1414
1415
|
@ragel_act = 0
|
1415
1416
|
end
|
1416
|
-
# line
|
1417
|
+
# line 1418 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb"
|
1417
1418
|
end # to state action switch
|
1418
1419
|
end
|
1419
1420
|
if _trigger_goto
|
@@ -1444,7 +1445,7 @@ end
|
|
1444
1445
|
end
|
1445
1446
|
end
|
1446
1447
|
|
1447
|
-
# line
|
1448
|
+
# line 109 "lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb"
|
1448
1449
|
##
|
1449
1450
|
end
|
1450
1451
|
|
data/lib/adhearsion/voip/call.rb
CHANGED
@@ -293,6 +293,7 @@ module Adhearsion
|
|
293
293
|
|
294
294
|
def define_singleton_accessor_with_pair(key, value, recipient=self)
|
295
295
|
recipient.metaclass.send :attr_accessor, key unless recipient.class.respond_to?("#{key}=")
|
296
|
+
recipient.metaclass.send :public, key, "#{key}=".to_sym
|
296
297
|
recipient.send "#{key}=", value
|
297
298
|
end
|
298
299
|
|
@@ -456,7 +457,7 @@ module Adhearsion
|
|
456
457
|
end
|
457
458
|
|
458
459
|
def separate_line_into_key_value_pair(line)
|
459
|
-
line.match(/^([^:]+)
|
460
|
+
line.match(/^([^:]+):(?:\s?(.+)|$)/).captures
|
460
461
|
end
|
461
462
|
end
|
462
463
|
|
@@ -15,7 +15,11 @@ begin
|
|
15
15
|
puts "https://adhearsion.lighthouseapp.com/projects/5871/tickets/92-menu-method-under-jruby-does-not-appear-to-work"
|
16
16
|
puts "****************************************************************************"
|
17
17
|
end
|
18
|
-
rescue NameError
|
18
|
+
rescue NameError
|
19
|
+
# In case JRUBY_VERSION is not defined.
|
20
|
+
rescue ArgumentError
|
21
|
+
# Needed to handle ActiveSupport's handling of missing constants
|
22
|
+
# with anonymous modules under Ruby 1.9
|
19
23
|
end
|
20
24
|
|
21
25
|
module Adhearsion
|
@@ -45,8 +45,8 @@ module Adhearsion
|
|
45
45
|
|
46
46
|
class ContextsEnvelope
|
47
47
|
|
48
|
-
keep =
|
49
|
-
(instance_methods - keep).each { |m| undef_method m unless m =~ /^__/ }
|
48
|
+
keep = [:define_method, :instance_eval, :meta_def, :meta_eval, :metaclass, :methods, :object_id]
|
49
|
+
(instance_methods.map{|m| m.to_sym} - keep).each { |m| undef_method m unless m.to_s =~ /^__/ }
|
50
50
|
|
51
51
|
def initialize
|
52
52
|
@parsed_contexts = {}
|
@@ -19,7 +19,7 @@ module Adhearsion
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
(instance_methods -
|
22
|
+
(instance_methods.map{|m| m.to_sym} - [:instance_eval, :object_id, :class]).each { |m| undef_method m unless m.to_s =~ /^__/ }
|
23
23
|
|
24
24
|
attr_reader :__real_num, :__real_string
|
25
25
|
|
@@ -36,6 +36,19 @@ module Adhearsion
|
|
36
36
|
@__real_string.respond_to?(m) || m == :__real_num || m == :__real_string
|
37
37
|
end
|
38
38
|
|
39
|
+
def ==(x)
|
40
|
+
return x.is_a?(Fixnum) ? x == @__real_num : x == @__real_string
|
41
|
+
end
|
42
|
+
alias :=== :==
|
43
|
+
|
44
|
+
def is_a?(obj)
|
45
|
+
case obj.to_s
|
46
|
+
when "Fixnum" then true
|
47
|
+
when "String" then true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
alias :kind_of? :is_a?
|
51
|
+
|
39
52
|
end
|
40
53
|
|
41
54
|
# The PhoneNumber class is used by one object throughout Adhearsion: the AGI
|
@@ -74,7 +87,7 @@ end
|
|
74
87
|
# These monkey patches are necessary for the NumericalString to work, unfortunately.
|
75
88
|
class Class
|
76
89
|
def alias_method_once(new_name, old_name)
|
77
|
-
unless instance_methods.include?(new_name.
|
90
|
+
unless instance_methods.map{|m| m.to_sym}.include?(new_name.to_sym)
|
78
91
|
alias_method(new_name, old_name)
|
79
92
|
end
|
80
93
|
end
|
@@ -112,4 +125,4 @@ class << String
|
|
112
125
|
def ===(arg)
|
113
126
|
arg.respond_to?(:__real_string) || original_threequal(arg)
|
114
127
|
end
|
115
|
-
end
|
128
|
+
end
|
@@ -61,7 +61,7 @@ module Theatre
|
|
61
61
|
|
62
62
|
class BlankSlateMessageRecorder
|
63
63
|
|
64
|
-
(instance_methods -
|
64
|
+
(instance_methods.map{|m| m.to_sym} - [:instance_eval, :object_id]).each { |method| undef_method method unless method.to_s =~ /^__/ }
|
65
65
|
|
66
66
|
def initialize(¬ify_on_completion)
|
67
67
|
@notify_on_completion = notify_on_completion
|
@@ -81,4 +81,4 @@ module Theatre
|
|
81
81
|
end
|
82
82
|
|
83
83
|
end
|
84
|
-
end
|
84
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adhearsion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 23
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
8
|
+
- 1
|
9
|
+
version: 1.0.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jay Phillips
|
@@ -17,115 +16,138 @@ autorequire:
|
|
17
16
|
bindir: bin
|
18
17
|
cert_chain: []
|
19
18
|
|
20
|
-
date:
|
19
|
+
date: 2011-02-22 00:00:00 -05:00
|
21
20
|
default_executable:
|
22
21
|
dependencies:
|
23
22
|
- !ruby/object:Gem::Dependency
|
24
|
-
name:
|
23
|
+
name: bundler
|
25
24
|
prerelease: false
|
26
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
27
26
|
none: false
|
28
27
|
requirements:
|
29
28
|
- - ">="
|
30
29
|
- !ruby/object:Gem::Version
|
31
|
-
hash: 29
|
32
30
|
segments:
|
33
31
|
- 1
|
34
32
|
- 0
|
35
|
-
-
|
36
|
-
version: 1.0.
|
33
|
+
- 10
|
34
|
+
version: 1.0.10
|
37
35
|
type: :runtime
|
38
36
|
version_requirements: *id001
|
39
37
|
- !ruby/object:Gem::Dependency
|
40
|
-
name:
|
38
|
+
name: log4r
|
41
39
|
prerelease: false
|
42
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
43
41
|
none: false
|
44
42
|
requirements:
|
45
43
|
- - ">="
|
46
44
|
- !ruby/object:Gem::Version
|
47
|
-
hash: 11
|
48
45
|
segments:
|
49
|
-
- 2
|
50
46
|
- 1
|
51
47
|
- 0
|
52
|
-
|
48
|
+
- 5
|
49
|
+
version: 1.0.5
|
53
50
|
type: :runtime
|
54
51
|
version_requirements: *id002
|
55
52
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
53
|
+
name: activesupport
|
57
54
|
prerelease: false
|
58
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
59
56
|
none: false
|
60
57
|
requirements:
|
61
58
|
- - ">="
|
62
59
|
- !ruby/object:Gem::Version
|
63
|
-
hash: 27
|
64
60
|
segments:
|
61
|
+
- 2
|
65
62
|
- 1
|
66
63
|
- 0
|
67
|
-
|
68
|
-
|
69
|
-
type: :development
|
64
|
+
version: 2.1.0
|
65
|
+
type: :runtime
|
70
66
|
version_requirements: *id003
|
71
67
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
68
|
+
name: i18n
|
73
69
|
prerelease: false
|
74
70
|
requirement: &id004 !ruby/object:Gem::Requirement
|
75
71
|
none: false
|
76
72
|
requirements:
|
77
|
-
- -
|
73
|
+
- - ">="
|
78
74
|
- !ruby/object:Gem::Version
|
79
|
-
hash: 15
|
80
75
|
segments:
|
81
|
-
- 2
|
82
|
-
- 0
|
83
76
|
- 0
|
84
|
-
version:
|
85
|
-
type: :
|
77
|
+
version: "0"
|
78
|
+
type: :runtime
|
86
79
|
version_requirements: *id004
|
87
80
|
- !ruby/object:Gem::Dependency
|
88
|
-
name:
|
81
|
+
name: rubigen
|
89
82
|
prerelease: false
|
90
83
|
requirement: &id005 !ruby/object:Gem::Requirement
|
91
84
|
none: false
|
92
85
|
requirements:
|
93
86
|
- - ">="
|
94
87
|
- !ruby/object:Gem::Version
|
95
|
-
hash: 3
|
96
88
|
segments:
|
89
|
+
- 1
|
90
|
+
- 5
|
91
|
+
- 6
|
92
|
+
version: 1.5.6
|
93
|
+
type: :runtime
|
94
|
+
version_requirements: *id005
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rubigen
|
97
|
+
prerelease: false
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
segments:
|
104
|
+
- 1
|
105
|
+
- 5
|
106
|
+
- 6
|
107
|
+
version: 1.5.6
|
108
|
+
type: :development
|
109
|
+
version_requirements: *id006
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rspec
|
112
|
+
prerelease: false
|
113
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
segments:
|
119
|
+
- 2
|
120
|
+
- 4
|
97
121
|
- 0
|
98
|
-
version:
|
122
|
+
version: 2.4.0
|
99
123
|
type: :development
|
100
|
-
version_requirements: *
|
124
|
+
version_requirements: *id007
|
101
125
|
- !ruby/object:Gem::Dependency
|
102
126
|
name: flexmock
|
103
127
|
prerelease: false
|
104
|
-
requirement: &
|
128
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
105
129
|
none: false
|
106
130
|
requirements:
|
107
131
|
- - ">="
|
108
132
|
- !ruby/object:Gem::Version
|
109
|
-
hash: 3
|
110
133
|
segments:
|
111
134
|
- 0
|
112
135
|
version: "0"
|
113
136
|
type: :development
|
114
|
-
version_requirements: *
|
137
|
+
version_requirements: *id008
|
115
138
|
- !ruby/object:Gem::Dependency
|
116
|
-
name:
|
139
|
+
name: activerecord
|
117
140
|
prerelease: false
|
118
|
-
requirement: &
|
141
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
119
142
|
none: false
|
120
143
|
requirements:
|
121
144
|
- - ">="
|
122
145
|
- !ruby/object:Gem::Version
|
123
|
-
hash: 3
|
124
146
|
segments:
|
125
147
|
- 0
|
126
148
|
version: "0"
|
127
149
|
type: :development
|
128
|
-
version_requirements: *
|
150
|
+
version_requirements: *id009
|
129
151
|
description: Adhearsion is an open-source telephony development framework
|
130
152
|
email: dev&Adhearsion.com
|
131
153
|
executables:
|
@@ -160,6 +182,7 @@ files:
|
|
160
182
|
- app_generators/ahn/templates/dialplan.rb
|
161
183
|
- app_generators/ahn/templates/events.rb
|
162
184
|
- app_generators/ahn/templates/Rakefile
|
185
|
+
- app_generators/ahn/templates/Gemfile
|
163
186
|
- app_generators/ahn/templates/README
|
164
187
|
- app_generators/ahn/USAGE
|
165
188
|
- bin/ahn
|
@@ -252,11 +275,12 @@ files:
|
|
252
275
|
- lib/theatre/version.rb
|
253
276
|
- LICENSE
|
254
277
|
- Rakefile
|
278
|
+
- Gemfile
|
255
279
|
has_rdoc: true
|
256
280
|
homepage: http://adhearsion.com
|
257
281
|
licenses: []
|
258
282
|
|
259
|
-
post_install_message:
|
283
|
+
post_install_message:
|
260
284
|
rdoc_options: []
|
261
285
|
|
262
286
|
require_paths:
|
@@ -266,7 +290,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
266
290
|
requirements:
|
267
291
|
- - ">="
|
268
292
|
- !ruby/object:Gem::Version
|
269
|
-
hash: 3
|
270
293
|
segments:
|
271
294
|
- 0
|
272
295
|
version: "0"
|
@@ -275,7 +298,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
298
|
requirements:
|
276
299
|
- - ">="
|
277
300
|
- !ruby/object:Gem::Version
|
278
|
-
hash: 3
|
279
301
|
segments:
|
280
302
|
- 0
|
281
303
|
version: "0"
|