ruby_ami 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # develop
2
2
 
3
+ # 0.1.5 - 2011-12-22
4
+ * Bugfix: Work consistently all all versions of Asterisk
5
+ * Both 1.8 and 10
6
+ * Login actions connection with events turned on (in order to get FullyBooted event)
7
+ * Turn events off immediately after fully-booted
8
+ * Pass FullyBooted events from the actions connection up to the event handler
9
+
3
10
  # 0.1.4 - 2011-12-1
4
11
  * Bugfix: Actions connection should login with Events: System. This ensures that the FullyBooted event will come through on both connections.
5
12
 
@@ -63,17 +63,24 @@ module RubyAMI
63
63
  logger.trace "[RECV-ACTIONS]: #{message.inspect}" if logger
64
64
  case message
65
65
  when Stream::Connected
66
- start_writing_actions
67
66
  login_actions
68
67
  when Stream::Disconnected
69
68
  stop_writing_actions
70
69
  unbind
71
70
  when Event
72
71
  action = @current_action_with_causal_events
73
- raise StandardError, "Got an unexpected event on actions socket! This AMI command may have a multi-message response. Try making Adhearsion treat it as causal action #{message.inspect}" unless action
74
- message.action = action
75
- action << message
76
- @current_action_with_causal_events = nil if action.complete?
72
+ if action
73
+ message.action = action
74
+ action << message
75
+ @current_action_with_causal_events = nil if action.complete?
76
+ else
77
+ if message.name == 'FullyBooted'
78
+ pass_event message
79
+ start_writing_actions
80
+ else
81
+ raise StandardError, "Got an unexpected event on actions socket! This AMI command may have a multi-message response. Try making Adhearsion treat it as causal action #{message.inspect}"
82
+ end
83
+ end
77
84
  when Response, Error
78
85
  action = sent_action_with_id message.action_id
79
86
  raise StandardError, "Received an AMI response with an unrecognized ActionID!! This may be an bug! #{message.inspect}" unless action
@@ -105,6 +112,7 @@ module RubyAMI
105
112
  transition_action_to_sent action
106
113
  actions_stream.send_action action
107
114
  action.state = :sent
115
+ action
108
116
  end
109
117
 
110
118
  def unbind
@@ -145,22 +153,26 @@ module RubyAMI
145
153
  end
146
154
 
147
155
  def login_actions
148
- login_action do |response|
156
+ action = login_action do |response|
149
157
  pass_event response if response.is_a? Error
150
- end.tap { |action| send_action action }
158
+ send_action 'Events', 'EventMask' => 'Off'
159
+ end
160
+
161
+ register_pending_action action
162
+ Thread.new { _send_action action }
151
163
  end
152
164
 
153
165
  def login_events
154
- login_action('On').tap do |action|
166
+ login_action.tap do |action|
155
167
  events_stream.send_action action
156
168
  end
157
169
  end
158
170
 
159
- def login_action(events = 'System', &block)
171
+ def login_action(&block)
160
172
  Action.new 'Login',
161
173
  'Username' => options[:username],
162
174
  'Secret' => options[:password],
163
- 'Events' => events,
175
+ 'Events' => 'On',
164
176
  &block
165
177
  end
166
178
 
@@ -1,3 +1,3 @@
1
1
  module RubyAMI
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -47,7 +47,7 @@ module RubyAMI
47
47
  Action.new 'Login',
48
48
  'Username' => 'username',
49
49
  'Secret' => 'password',
50
- 'Events' => 'System'
50
+ 'Events' => 'On'
51
51
  end
52
52
 
53
53
  before do
@@ -60,9 +60,7 @@ module RubyAMI
60
60
  action.to_s.should == expected_login_action.to_s
61
61
  end
62
62
 
63
- GirlFriday::WorkQueue.immediate!
64
- subject.handle_message Stream::Connected.new
65
- GirlFriday::WorkQueue.queue!
63
+ subject.handle_message(Stream::Connected.new).join
66
64
  end
67
65
  end
68
66
 
@@ -81,9 +79,7 @@ module RubyAMI
81
79
  end
82
80
 
83
81
  it 'should log in' do
84
- mock_events_stream.expects(:send_action).with do |action|
85
- action.to_s.should == expected_login_action.to_s
86
- end
82
+ mock_events_stream.expects(:send_action).with expected_login_action
87
83
 
88
84
  subject.handle_event Stream::Connected.new
89
85
 
@@ -136,6 +132,47 @@ module RubyAMI
136
132
  end
137
133
  end
138
134
 
135
+ describe 'when a FullyBooted event is received on the actions connection' do
136
+ let(:event) { Event.new 'FullyBooted' }
137
+
138
+ let(:mock_actions_stream) { mock 'Actions Stream' }
139
+
140
+ let :expected_login_action do
141
+ Action.new 'Login',
142
+ 'Username' => 'username',
143
+ 'Secret' => 'password',
144
+ 'Events' => 'On'
145
+ end
146
+
147
+ let :expected_events_off_action do
148
+ Action.new 'Events', 'EventMask' => 'Off'
149
+ end
150
+
151
+ it 'should call the event handler' do
152
+ subject.handle_message event
153
+ event_handler.should == [event]
154
+ end
155
+
156
+ it 'should begin writing actions' do
157
+ subject.expects(:start_writing_actions).once
158
+ subject.handle_message event
159
+ end
160
+
161
+ it 'should turn off events' do
162
+ Action.any_instance.stubs(:response).returns true
163
+ subject.stubs(:actions_stream).returns mock_actions_stream
164
+
165
+ mock_actions_stream.expects(:send_action).once.with expected_login_action
166
+ mock_actions_stream.expects(:send_action).once.with expected_events_off_action
167
+
168
+ login_action = subject.handle_message(Stream::Connected.new).join
169
+ login_action.value.response = true
170
+
171
+ subject.handle_message event
172
+ sleep 0.5
173
+ end
174
+ end
175
+
139
176
  describe 'sending actions' do
140
177
  let(:action_name) { 'Login' }
141
178
  let :headers do
@@ -257,7 +294,7 @@ module RubyAMI
257
294
  describe 'from the queue' do
258
295
  it 'should send actions to the stream and set their responses' do
259
296
  subject.actions_stream.expects(:send_action).with expected_action
260
- subject.handle_message Stream::Connected.new
297
+ subject.handle_message Event.new('FullyBooted')
261
298
 
262
299
  Thread.new do
263
300
  GirlFriday::WorkQueue.immediate!
@@ -273,7 +310,7 @@ module RubyAMI
273
310
 
274
311
  it 'should not send another action if the first action has not yet received a response' do
275
312
  subject.actions_stream.expects(:send_action).once.with expected_action
276
- subject.handle_message Stream::Connected.new
313
+ subject.handle_message Event.new('FullyBooted')
277
314
  actions = []
278
315
 
279
316
  2.times do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_ami
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-01 00:00:00.000000000 Z
12
+ date: 2011-12-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &2160615240 !ruby/object:Gem::Requirement
16
+ requirement: &2156102080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.9
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2160615240
24
+ version_requirements: *2156102080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: uuidtools
27
- requirement: &2160614520 !ruby/object:Gem::Requirement
27
+ requirement: &2156101320 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2160614520
35
+ version_requirements: *2156101320
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: eventmachine
38
- requirement: &2160613800 !ruby/object:Gem::Requirement
38
+ requirement: &2156100660 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2160613800
46
+ version_requirements: *2156100660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: future-resource
49
- requirement: &2160689380 !ruby/object:Gem::Requirement
49
+ requirement: &2156099960 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2160689380
57
+ version_requirements: *2156099960
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: girl_friday
60
- requirement: &2160688680 !ruby/object:Gem::Requirement
60
+ requirement: &2156176300 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2160688680
68
+ version_requirements: *2156176300
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: countdownlatch
71
- requirement: &2160688100 !ruby/object:Gem::Requirement
71
+ requirement: &2156175620 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.0.0
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *2160688100
79
+ version_requirements: *2156175620
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: i18n
82
- requirement: &2160687420 !ruby/object:Gem::Requirement
82
+ requirement: &2156175020 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *2160687420
90
+ version_requirements: *2156175020
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: bundler
93
- requirement: &2160686720 !ruby/object:Gem::Requirement
93
+ requirement: &2156174340 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.0.0
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2160686720
101
+ version_requirements: *2156174340
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rspec
104
- requirement: &2160686100 !ruby/object:Gem::Requirement
104
+ requirement: &2156173700 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 2.5.0
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *2160686100
112
+ version_requirements: *2156173700
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: cucumber
115
- requirement: &2160685580 !ruby/object:Gem::Requirement
115
+ requirement: &2156173120 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *2160685580
123
+ version_requirements: *2156173120
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: ci_reporter
126
- requirement: &2160685040 !ruby/object:Gem::Requirement
126
+ requirement: &2156172600 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 1.6.3
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *2160685040
134
+ version_requirements: *2156172600
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: yard
137
- requirement: &2160684500 !ruby/object:Gem::Requirement
137
+ requirement: &2156172040 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: 0.6.0
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *2160684500
145
+ version_requirements: *2156172040
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: rcov
148
- requirement: &2160683900 !ruby/object:Gem::Requirement
148
+ requirement: &2156171500 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *2160683900
156
+ version_requirements: *2156171500
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: rake
159
- requirement: &2160683320 !ruby/object:Gem::Requirement
159
+ requirement: &2156170860 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: '0'
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *2160683320
167
+ version_requirements: *2156170860
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: mocha
170
- requirement: &2160682740 !ruby/object:Gem::Requirement
170
+ requirement: &2156170320 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ! '>='
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *2160682740
178
+ version_requirements: *2156170320
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: simplecov
181
- requirement: &2160682140 !ruby/object:Gem::Requirement
181
+ requirement: &2156169760 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ! '>='
@@ -186,10 +186,10 @@ dependencies:
186
186
  version: '0'
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *2160682140
189
+ version_requirements: *2156169760
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: simplecov-rcov
192
- requirement: &2160697900 !ruby/object:Gem::Requirement
192
+ requirement: &2156169160 !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
195
195
  - - ! '>='
@@ -197,10 +197,10 @@ dependencies:
197
197
  version: '0'
198
198
  type: :development
199
199
  prerelease: false
200
- version_requirements: *2160697900
200
+ version_requirements: *2156169160
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: guard-rspec
203
- requirement: &2160697380 !ruby/object:Gem::Requirement
203
+ requirement: &2156168720 !ruby/object:Gem::Requirement
204
204
  none: false
205
205
  requirements:
206
206
  - - ! '>='
@@ -208,7 +208,7 @@ dependencies:
208
208
  version: '0'
209
209
  type: :development
210
210
  prerelease: false
211
- version_requirements: *2160697380
211
+ version_requirements: *2156168720
212
212
  description: A Ruby client library for the Asterisk Management Interface build on
213
213
  eventmachine.
214
214
  email:
@@ -268,7 +268,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
268
268
  version: '0'
269
269
  segments:
270
270
  - 0
271
- hash: -2303886243845472938
271
+ hash: -3356605808277851002
272
272
  required_rubygems_version: !ruby/object:Gem::Requirement
273
273
  none: false
274
274
  requirements:
@@ -277,7 +277,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
277
  version: '0'
278
278
  segments:
279
279
  - 0
280
- hash: -2303886243845472938
280
+ hash: -3356605808277851002
281
281
  requirements: []
282
282
  rubyforge_project: ruby_ami
283
283
  rubygems_version: 1.8.10