adhearsion 0.8.6 → 1.0.0
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/CHANGELOG +24 -0
- data/Rakefile +3 -1
- data/adhearsion.gemspec +21 -4
- data/app_generators/ahn/templates/components/disabled/restful_rpc/restful_rpc.rb +6 -2
- data/app_generators/ahn/templates/config/startup.rb +11 -2
- data/lib/adhearsion.rb +7 -1
- data/lib/adhearsion/component_manager.rb +67 -2
- data/lib/adhearsion/foundation/all.rb +7 -1
- data/lib/adhearsion/foundation/blank_slate.rb +1 -3
- data/lib/adhearsion/initializer.rb +1 -2
- data/lib/adhearsion/initializer/asterisk.rb +2 -2
- data/lib/adhearsion/initializer/configuration.rb +16 -5
- data/lib/adhearsion/tasks.rb +1 -0
- data/lib/adhearsion/tasks/components.rb +32 -0
- data/lib/adhearsion/version.rb +3 -3
- data/lib/adhearsion/voip/asterisk/commands.rb +44 -16
- data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +2 -2
- data/lib/adhearsion/voip/asterisk/manager_interface.rb +14 -13
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +134 -134
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +63 -10
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb +1 -1
- data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +2 -2
- data/lib/adhearsion/voip/call.rb +11 -11
- data/lib/adhearsion/voip/call_routing.rb +1 -1
- data/lib/adhearsion/voip/dial_plan.rb +15 -6
- data/lib/adhearsion/voip/dsl/dialing_dsl.rb +1 -1
- data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +1 -1
- data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +1 -1
- data/lib/adhearsion/voip/dsl/dialplan/parser.rb +4 -6
- data/lib/adhearsion/voip/dsl/numerical_string.rb +1 -3
- data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +2 -2
- data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +2 -2
- data/lib/adhearsion/voip/freeswitch/oes_server.rb +1 -1
- data/lib/adhearsion/voip/menu_state_machine/matchers.rb +1 -1
- data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +1 -1
- data/lib/theatre/callback_definition_loader.rb +1 -1
- metadata +78 -19
@@ -6,14 +6,34 @@ module Adhearsion
|
|
6
6
|
module Manager
|
7
7
|
class AbstractAsteriskManagerInterfaceStreamLexer
|
8
8
|
|
9
|
-
BUFFER_SIZE =
|
9
|
+
BUFFER_SIZE = 128.kilobytes unless defined? BUFFER_SIZE
|
10
|
+
|
11
|
+
##
|
12
|
+
# IMPORTANT! See method documentation for adjust_pointers!
|
13
|
+
#
|
14
|
+
# @see adjust_pointers
|
15
|
+
#
|
16
|
+
POINTERS = [
|
17
|
+
:@current_pointer,
|
18
|
+
:@token_start,
|
19
|
+
:@token_end,
|
20
|
+
:@version_start,
|
21
|
+
:@event_name_start,
|
22
|
+
:@current_key_position,
|
23
|
+
:@current_value_position,
|
24
|
+
:@last_seen_value_end,
|
25
|
+
:@error_reason_start,
|
26
|
+
:@follows_text_start,
|
27
|
+
:@current_syntax_error_start,
|
28
|
+
:@immediate_response_start
|
29
|
+
]
|
10
30
|
|
11
31
|
%%{
|
12
32
|
machine ami_protocol_parser;
|
13
33
|
|
14
34
|
# All required Ragel actions are implemented as Ruby methods.
|
15
35
|
|
16
|
-
# Executed after a "
|
36
|
+
# Executed after a "Response: Success" or "Response: Pong"
|
17
37
|
action init_success { init_success }
|
18
38
|
|
19
39
|
action init_response_follows { init_response_follows }
|
@@ -68,7 +88,6 @@ module Adhearsion
|
|
68
88
|
variable cs @current_state;
|
69
89
|
variable ts @token_start;
|
70
90
|
variable te @token_end;
|
71
|
-
variable stack @stack;
|
72
91
|
variable act @ragel_act;
|
73
92
|
variable eof @eof;
|
74
93
|
variable stack @ragel_stack;
|
@@ -90,10 +109,23 @@ module Adhearsion
|
|
90
109
|
end
|
91
110
|
|
92
111
|
def extend_buffer_with(new_data)
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
112
|
+
length = new_data.size
|
113
|
+
|
114
|
+
if length > BUFFER_SIZE
|
115
|
+
raise Exception, "ERROR: Buffer overrun! Input size (#{new_data.size}) larger than buffer (#{BUFFER_SIZE})"
|
116
|
+
end
|
117
|
+
|
118
|
+
if length + @data.size > BUFFER_SIZE
|
119
|
+
if @data.size != @current_pointer
|
120
|
+
if @current_pointer < length
|
121
|
+
# We are about to shift more bytes off the array than we have
|
122
|
+
# parsed. This will cause the parser to lose state so
|
123
|
+
# integrity cannot be guaranteed.
|
124
|
+
raise Exception, "ERROR: Buffer overrun! AMI parser cannot guarantee sanity. New data size: #{new_data.size}; Current pointer at #{@current_pointer}; Data size: #{@data.size}"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
@data.slice! 0...length
|
128
|
+
adjust_pointers -length
|
97
129
|
end
|
98
130
|
@data << new_data
|
99
131
|
@data_ending_pointer = @data.size
|
@@ -101,6 +133,27 @@ module Adhearsion
|
|
101
133
|
|
102
134
|
protected
|
103
135
|
|
136
|
+
##
|
137
|
+
# This method will adjust all pointers into the buffer according
|
138
|
+
# to the supplied offset. This is necessary any time the buffer
|
139
|
+
# changes, for example when the sliding window is incremented forward
|
140
|
+
# after new data is received.
|
141
|
+
#
|
142
|
+
# It is VERY IMPORTANT that when any additional pointers are defined
|
143
|
+
# that they are added to this method. Unpredictable results may
|
144
|
+
# otherwise occur!
|
145
|
+
#
|
146
|
+
# @see https://adhearsion.lighthouseapp.com/projects/5871-adhearsion/tickets/72-ami-lexer-buffer-offset#ticket-72-26
|
147
|
+
#
|
148
|
+
# @param offset Adjust pointers by offset. May be negative.
|
149
|
+
#
|
150
|
+
def adjust_pointers(offset)
|
151
|
+
POINTERS.each do |ptr|
|
152
|
+
value = instance_variable_get(ptr)
|
153
|
+
instance_variable_set(ptr, value + offset) if !value.nil?
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
104
157
|
##
|
105
158
|
# Called after a response or event has been successfully parsed.
|
106
159
|
#
|
@@ -144,12 +197,12 @@ module Adhearsion
|
|
144
197
|
end
|
145
198
|
|
146
199
|
def version_starts
|
147
|
-
@
|
200
|
+
@version_start = @current_pointer
|
148
201
|
end
|
149
202
|
|
150
203
|
def version_stops
|
151
|
-
self.ami_version = @data[@
|
152
|
-
@
|
204
|
+
self.ami_version = @data[@version_start...@current_pointer].to_f
|
205
|
+
@version_start = nil
|
153
206
|
end
|
154
207
|
|
155
208
|
def event_name_starts
|
@@ -9,7 +9,7 @@ module Adhearsion
|
|
9
9
|
macro_name = options.delete :macro
|
10
10
|
options[:play] &&= options[:play].kind_of?(Array) ? options[:play].join('++') : options[:play]
|
11
11
|
encoded_options = URI.escape options.map { |key,value| "#{key}:#{value}" }.join('!')
|
12
|
-
|
12
|
+
"M(#{macro_name}^#{encoded_options})".tap do |str|
|
13
13
|
if str.rindex('^') != str.index('^')
|
14
14
|
raise ArgumentError, "You seem to have supplied a :confirm option with a caret (^) in it!" +
|
15
15
|
" Please remove it. This will blow Asterisk up."
|
@@ -31,7 +31,7 @@ module Adhearsion
|
|
31
31
|
unencoded = URI.unescape(encoded_hash).split('!')
|
32
32
|
unencoded.shift unless unencoded.first.include?(':')
|
33
33
|
unencoded = unencoded.map { |pair| key, value = pair.split(':'); [key.to_sym ,value] }.flatten
|
34
|
-
|
34
|
+
Hash[*unencoded].tap do |hash|
|
35
35
|
hash[:timeout] &&= hash[:timeout].to_i
|
36
36
|
hash[:play] &&= hash[:play].split('++')
|
37
37
|
end
|
data/lib/adhearsion/voip/call.rb
CHANGED
@@ -174,7 +174,7 @@ module Adhearsion
|
|
174
174
|
# Given an IO (probably a socket accepted from an Asterisk service),
|
175
175
|
# creates a Call instance which encapsulates everything we know about that call.
|
176
176
|
def receive_from(io, &block)
|
177
|
-
|
177
|
+
new(io, variable_parser_for(io).variables).tap do |call|
|
178
178
|
block.call(call) if block
|
179
179
|
end
|
180
180
|
end
|
@@ -332,7 +332,7 @@ module Adhearsion
|
|
332
332
|
|
333
333
|
def remove_agi_prefixes_from_keys_and_strip_whitespace(variables)
|
334
334
|
variables.inject({}) do |new_variables,(key,value)|
|
335
|
-
|
335
|
+
new_variables.tap do
|
336
336
|
stripped_name = key.kind_of?(String) ? key[/^(agi_)?(.+)$/,2] : key
|
337
337
|
new_variables[stripped_name] = value.kind_of?(String) ? value.strip : value
|
338
338
|
end
|
@@ -341,21 +341,21 @@ module Adhearsion
|
|
341
341
|
|
342
342
|
def coerce_keys_into_symbols(variables)
|
343
343
|
variables.inject({}) do |new_variables,(key,value)|
|
344
|
-
|
344
|
+
new_variables.tap do
|
345
345
|
new_variables[key.to_sym] = value
|
346
346
|
end
|
347
347
|
end
|
348
348
|
end
|
349
349
|
|
350
350
|
def coerce_extension_into_phone_number_object(variables)
|
351
|
-
|
351
|
+
variables.tap do
|
352
352
|
variables[:extension] = Adhearsion::VoIP::DSL::PhoneNumber.new(variables[:extension])
|
353
353
|
end
|
354
354
|
end
|
355
355
|
|
356
356
|
def coerce_numerical_values_to_numerics(variables)
|
357
357
|
variables.inject({}) do |vars,(key,value)|
|
358
|
-
|
358
|
+
vars.tap do
|
359
359
|
is_numeric = value =~ /^-?\d+(?:(\.)\d+)?$/
|
360
360
|
is_float = $1
|
361
361
|
vars[key] = if is_numeric
|
@@ -402,13 +402,13 @@ module Adhearsion
|
|
402
402
|
end
|
403
403
|
|
404
404
|
def coerce_type_of_number_into_symbol(variables)
|
405
|
-
|
405
|
+
variables.tap do
|
406
406
|
variables[:type_of_calling_number] = Adhearsion::VoIP::Constants::Q931_TYPE_OF_NUMBER[variables.delete(:callington).to_i]
|
407
407
|
end
|
408
408
|
end
|
409
409
|
|
410
410
|
def decompose_uri_query_into_hash(variables)
|
411
|
-
|
411
|
+
variables.tap do
|
412
412
|
if variables[:request] && variables[:request].query
|
413
413
|
variables[:query] = variables[:request].query.split('&').inject({}) do |query_string_parameters, key_value_pair|
|
414
414
|
parameter_name, parameter_value = *key_value_pair.match(/(.+)=(.*)/).captures
|
@@ -422,7 +422,7 @@ module Adhearsion
|
|
422
422
|
end
|
423
423
|
|
424
424
|
def override_variables_with_query_params(variables)
|
425
|
-
|
425
|
+
variables.tap do
|
426
426
|
if variables[:query]
|
427
427
|
variables[:query].each do |key, value|
|
428
428
|
variables[key.to_sym] = value
|
@@ -432,7 +432,7 @@ module Adhearsion
|
|
432
432
|
end
|
433
433
|
|
434
434
|
def remove_dashes_from_context_name(variables)
|
435
|
-
|
435
|
+
variables.tap do
|
436
436
|
variables[:context].gsub!('-', '_')
|
437
437
|
end
|
438
438
|
end
|
@@ -444,7 +444,7 @@ module Adhearsion
|
|
444
444
|
|
445
445
|
class << self
|
446
446
|
def parse(*args, &block)
|
447
|
-
|
447
|
+
new(*args, &block).tap do |parser|
|
448
448
|
parser.parse
|
449
449
|
end
|
450
450
|
end
|
@@ -476,7 +476,7 @@ module Adhearsion
|
|
476
476
|
|
477
477
|
def initialize_variables_as_hash_from_lines
|
478
478
|
@variables = lines.inject({}) do |new_variables,line|
|
479
|
-
|
479
|
+
new_variables.tap do
|
480
480
|
key, value = self.class.separate_line_into_key_value_pair line
|
481
481
|
new_variables[key] = value
|
482
482
|
end
|
@@ -9,7 +9,7 @@ begin
|
|
9
9
|
minver = Adhearsion::PkgVersion.new("1.6.0")
|
10
10
|
if curver < minver
|
11
11
|
puts "****************************************************************************"
|
12
|
-
puts "Versions of JRuby prior to 1.6.0 contain a bug that
|
12
|
+
puts "Versions of JRuby prior to 1.6.0 contain a bug that impacts"
|
13
13
|
puts "using the \"+\" operator to jump from one context to another."
|
14
14
|
puts "Adhearsion has detected JRuby version #{JRUBY_VERSION}. For more information see:"
|
15
15
|
puts "https://adhearsion.lighthouseapp.com/projects/5871/tickets/92-menu-method-under-jruby-does-not-appear-to-work"
|
@@ -40,7 +40,7 @@ module Adhearsion
|
|
40
40
|
|
41
41
|
class << self
|
42
42
|
def create(*args)
|
43
|
-
|
43
|
+
new(*args).tap { |instance| instance.stage! }
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -127,10 +127,19 @@ module Adhearsion
|
|
127
127
|
# Find the dialplan by the context name from the call or from the
|
128
128
|
# first path entry in the AGI URL
|
129
129
|
def entry_point_for(call)
|
130
|
+
|
131
|
+
# Try the request URI for an entry point first
|
130
132
|
if call.respond_to?(:request) && m = call.request.path.match(%r{/([^/]+)})
|
131
|
-
dial_plan.lookup(m[1].to_sym)
|
132
|
-
|
133
|
-
|
133
|
+
if entry_point = dial_plan.lookup(m[1].to_sym)
|
134
|
+
return entry_point
|
135
|
+
else
|
136
|
+
ahn_log.warn "AGI URI requested context \"#{m[1]}\" but matching Adhearsion context not found! Falling back to Asterisk context."
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# Fall back to the matching Asterisk context name
|
141
|
+
if entry_point = dial_plan.lookup(call.context.to_sym)
|
142
|
+
return entry_point
|
134
143
|
end
|
135
144
|
end
|
136
145
|
|
@@ -170,7 +179,7 @@ module Adhearsion
|
|
170
179
|
raise ArgumentError, "Unrecognized type of file #{file.inspect}"
|
171
180
|
end
|
172
181
|
end
|
173
|
-
|
182
|
+
new.tap do |loader|
|
174
183
|
files.each do |file|
|
175
184
|
loader.load file
|
176
185
|
end
|
@@ -22,7 +22,7 @@ module Adhearsion
|
|
22
22
|
when ProviderDefinition
|
23
23
|
RouteRule.new :patterns => self, :providers => other
|
24
24
|
when RouteRule
|
25
|
-
|
25
|
+
other.tap do |route|
|
26
26
|
route.unshift_pattern self
|
27
27
|
end
|
28
28
|
else raise ArgumentError, "Unsupported route definition #{other.inspect}"
|
@@ -19,7 +19,7 @@ module Adhearsion
|
|
19
19
|
dialplans = AHN_CONFIG.files_from_setting "paths", "dialplan"
|
20
20
|
ahn_log.dialplan.warn "No dialplan files were found!" if dialplans.empty?
|
21
21
|
|
22
|
-
|
22
|
+
{}.tap do |contexts|
|
23
23
|
dialplans.each do |file|
|
24
24
|
raise "Dialplan file #{file} does not exist!" unless File.exists? file
|
25
25
|
envelope.instance_eval do
|
@@ -31,7 +31,7 @@ module Adhearsion
|
|
31
31
|
warn %'Dialplan context "#{name}" exists in both #{contexts[name].file} and #{file}.' +
|
32
32
|
%' Using the "#{name}" context from #{contexts[name].file}.'
|
33
33
|
else
|
34
|
-
contexts[name] =
|
34
|
+
contexts[name] = OpenStruct.new.tap do |metadata|
|
35
35
|
metadata.file = file
|
36
36
|
metadata.name = name
|
37
37
|
metadata.block = block
|
@@ -45,10 +45,8 @@ module Adhearsion
|
|
45
45
|
|
46
46
|
class ContextsEnvelope
|
47
47
|
|
48
|
-
keep = %w"
|
49
|
-
(instance_methods - keep).each
|
50
|
-
undef_method m
|
51
|
-
end
|
48
|
+
keep = %w"define_method instance_eval meta_def meta_eval metaclass"
|
49
|
+
(instance_methods - keep).each { |m| undef_method m unless m =~ /^__/ }
|
52
50
|
|
53
51
|
def initialize
|
54
52
|
@parsed_contexts = {}
|
@@ -19,9 +19,7 @@ module Adhearsion
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
(instance_methods - %w
|
23
|
-
undef_method m
|
24
|
-
end
|
22
|
+
(instance_methods - %w{instance_eval object_id}).each { |m| undef_method m unless m =~ /^__/ }
|
25
23
|
|
26
24
|
attr_reader :__real_num, :__real_string
|
27
25
|
|
@@ -18,7 +18,7 @@ module Adhearsion
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def get_raw_header
|
21
|
-
(
|
21
|
+
([].tap do |lines|
|
22
22
|
until line = @io.gets and line.chomp.empty?
|
23
23
|
lines << line.chomp
|
24
24
|
end
|
@@ -34,7 +34,7 @@ module Adhearsion
|
|
34
34
|
|
35
35
|
def separate_pairs(lines)
|
36
36
|
lines.inject({}) do |h,line|
|
37
|
-
|
37
|
+
h.tap do |hash|
|
38
38
|
k,v = line.split(/\s*:\s*/)
|
39
39
|
hash[k] = URI.unescape(v).strip if k && v
|
40
40
|
end
|
@@ -84,7 +84,7 @@ module Adhearsion
|
|
84
84
|
end
|
85
85
|
|
86
86
|
rec_cmd = cmd "record", file, :on_keypress => dtmf_breaker
|
87
|
-
|
87
|
+
[].tap do |cmds|
|
88
88
|
cmds << play('beep') if hash[:beep]
|
89
89
|
cmds << rec_cmd
|
90
90
|
if hash[:timeout]
|
@@ -112,7 +112,7 @@ module Adhearsion
|
|
112
112
|
digits << digit
|
113
113
|
return! digits.to_s if number && digits.size >= number
|
114
114
|
end
|
115
|
-
|
115
|
+
DSL::Dialplan::NoOpEventCommand.new.tap do |command|
|
116
116
|
command.on_keypress &dtmf_hook
|
117
117
|
end
|
118
118
|
end
|
@@ -79,7 +79,7 @@ module Adhearsion
|
|
79
79
|
def numbers_in_range_like(num)
|
80
80
|
return (pattern === 0 ? [0] : nil) if num == 0
|
81
81
|
raise ArgumentError unless num.kind_of?(Numeric)
|
82
|
-
|
82
|
+
Array.new.tap do |matches|
|
83
83
|
first, last = pattern.first, pattern.last
|
84
84
|
power = 0
|
85
85
|
while num < last
|
@@ -46,7 +46,7 @@ module Adhearsion
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def calculate_matches_for(result)
|
49
|
-
|
49
|
+
CalculatedMatchCollection.new.tap do |collection|
|
50
50
|
weighted_match_calculators.each do |pattern|
|
51
51
|
collection << pattern.match(result)
|
52
52
|
end
|
@@ -61,7 +61,7 @@ module Theatre
|
|
61
61
|
|
62
62
|
class BlankSlateMessageRecorder
|
63
63
|
|
64
|
-
(instance_methods - %w
|
64
|
+
(instance_methods - %w{instance_eval object_id}).each { |method| undef_method method unless method =~ /^__/ }
|
65
65
|
|
66
66
|
def initialize(¬ify_on_completion)
|
67
67
|
@notify_on_completion = notify_on_completion
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adhearsion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.8.6
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jay Phillips
|
@@ -17,57 +17,115 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-
|
20
|
+
date: 2010-10-28 00:00:00 -04:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
24
|
-
name:
|
24
|
+
name: log4r
|
25
25
|
prerelease: false
|
26
26
|
requirement: &id001 !ruby/object:Gem::Requirement
|
27
27
|
none: false
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
hash:
|
31
|
+
hash: 29
|
32
32
|
segments:
|
33
33
|
- 1
|
34
34
|
- 0
|
35
|
-
-
|
36
|
-
version: 1.0.
|
35
|
+
- 5
|
36
|
+
version: 1.0.5
|
37
37
|
type: :runtime
|
38
38
|
version_requirements: *id001
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
|
-
name:
|
40
|
+
name: activesupport
|
41
41
|
prerelease: false
|
42
42
|
requirement: &id002 !ruby/object:Gem::Requirement
|
43
43
|
none: false
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
hash:
|
47
|
+
hash: 11
|
48
48
|
segments:
|
49
|
+
- 2
|
49
50
|
- 1
|
50
51
|
- 0
|
51
|
-
|
52
|
-
version: 1.0.5
|
52
|
+
version: 2.1.0
|
53
53
|
type: :runtime
|
54
54
|
version_requirements: *id002
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rubigen
|
57
57
|
prerelease: false
|
58
58
|
requirement: &id003 !ruby/object:Gem::Requirement
|
59
59
|
none: false
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
hash:
|
63
|
+
hash: 27
|
64
64
|
segments:
|
65
|
-
- 2
|
66
65
|
- 1
|
67
66
|
- 0
|
68
|
-
|
69
|
-
|
67
|
+
- 6
|
68
|
+
version: 1.0.6
|
69
|
+
type: :development
|
70
70
|
version_requirements: *id003
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: rspec
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - <
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
hash: 15
|
80
|
+
segments:
|
81
|
+
- 2
|
82
|
+
- 0
|
83
|
+
- 0
|
84
|
+
version: 2.0.0
|
85
|
+
type: :development
|
86
|
+
version_requirements: *id004
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: test-unit
|
89
|
+
prerelease: false
|
90
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
hash: 3
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
version: "0"
|
99
|
+
type: :development
|
100
|
+
version_requirements: *id005
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: flexmock
|
103
|
+
prerelease: false
|
104
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
type: :development
|
114
|
+
version_requirements: *id006
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: active_record
|
117
|
+
prerelease: false
|
118
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 3
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
version: "0"
|
127
|
+
type: :development
|
128
|
+
version_requirements: *id007
|
71
129
|
description: Adhearsion is an open-source telephony development framework
|
72
130
|
email: dev&Adhearsion.com
|
73
131
|
executables:
|
@@ -140,6 +198,7 @@ files:
|
|
140
198
|
- lib/adhearsion/initializer/xmpp.rb
|
141
199
|
- lib/adhearsion/logging.rb
|
142
200
|
- lib/adhearsion/tasks.rb
|
201
|
+
- lib/adhearsion/tasks/components.rb
|
143
202
|
- lib/adhearsion/tasks/database.rb
|
144
203
|
- lib/adhearsion/tasks/deprecations.rb
|
145
204
|
- lib/adhearsion/tasks/generating.rb
|
@@ -197,7 +256,7 @@ has_rdoc: true
|
|
197
256
|
homepage: http://adhearsion.com
|
198
257
|
licenses: []
|
199
258
|
|
200
|
-
post_install_message:
|
259
|
+
post_install_message: " *******************************************************************\n * NOTE: You must manually install the \"rubigen\" gem to create *\n * new Adhearsion applications. *\n * *\n * The Rubigen package is no longer automatically installed due to *\n * dependency conflicts with ActiveSupport 3.0. *\n * Users of existing Adhearsion applications can safely ignore *\n * this message. *\n *******************************************************************\n"
|
201
260
|
rdoc_options: []
|
202
261
|
|
203
262
|
require_paths:
|