electric_slide 0.3.0 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 018120f529e0824da4b7fb13d5ce713b53c16ec7
4
- data.tar.gz: 7172bc885ad750962da497dd0d1afa560f5d5729
3
+ metadata.gz: 7a85c9a483bad9fb21fb302c8914f74323d5f41b
4
+ data.tar.gz: 596262ea3479ca13f5031a46fe84210732b1c558
5
5
  SHA512:
6
- metadata.gz: 8b3f3a9fd91292a2582f60c53f1d27a924b9ecb43d66013140f9c41ade3708fc2f6793a06cb3300bff0a4641116b1a9cef8afdcca84a120e3eff9fdf52043b1f
7
- data.tar.gz: 8d9a3b56211a774348a0f7b953308415a69ae662e40355a63782786d9ce525350d9662ab4bec9be55edefb33bdab4fda8ff5d8248ba467125d6161ac2ba3dda6
6
+ metadata.gz: 606297daca9e364dd4ddfa7daa47578183ff6d359fcb1d4b66daacbba7786d36e4cbd36aa180c6c80fbd75645c390b55ecbb5dcf862df6f98ccb3c7cab844f8e
7
+ data.tar.gz: 1771312a5bbda69e0b2fe802cb3510ee66cc34c158d36b69ec11efc5a0f960c4a955c3869269c333ec81ec2300ceb325d66b0b40e7750d13c76a32476e622b67
data/.lgtm ADDED
@@ -0,0 +1,2 @@
1
+ approvals = 1
2
+ pattern = "(?i):shipit:|:\\+1:|LGTM"
@@ -1,4 +1,10 @@
1
1
  # [develop](https://github.com/adhearsion/electric_slide)
2
+
3
+ # [0.4.0](https://github.com/adhearsion/electric_slide/compare/v0.3.0...v0.4.0) - [2015-12-17](https://rubygems.org/gems/adhearsion/versions/0.4.0)
4
+ * Change `ElectricSlide::Agent` `#presence=` method name to `#update_presence`. It will also accept one more parameter called `extra_params`, a hash that holds application specific parameters that are passed to the presence change callback.
5
+ * `ElectricSlide::CallQueue#add_agent` will no longer wait for a connection attempt to complete before returning
6
+
7
+ # [0.3.0](https://github.com/adhearsion/electric_slide/compare/v0.2.0...v0.3.0) - [2015-12-01](https://rubygems.org/gems/adhearsion/versions/0.3.0)
2
8
  * Trigger an agent "presence change" callback when the agent is removed from the queue
3
9
  * Bugfix: Fix `NameError` exception when referencing namespaced constant `Adhearsion::Call::ExpiredError` in injected `Adhearsion::Call#active?` method
4
10
  * Provide Electric Slide with a way to check if a queue with a given set of attributes is valid/can be instantiated before Electric Slide adds it to the supervision group. The supervisor will crash if its attempt to create the queue raises an exception.
@@ -0,0 +1,2 @@
1
+ Ben Langfeld <ben@langfeld.me> (@benlangfeld)
2
+ Ben Klang <bklang@mojolingo.com> (@bklang)
@@ -2,7 +2,8 @@
2
2
 
3
3
  class ElectricSlide
4
4
  class Agent
5
- attr_accessor :id, :address, :presence, :call, :queue
5
+ attr_accessor :id, :address, :call, :queue
6
+ attr_reader :presence
6
7
 
7
8
  # @param [Hash] opts Agent parameters
8
9
  # @option opts [String] :id The Agent's ID
@@ -14,10 +15,10 @@ class ElectricSlide
14
15
  @presence = opts[:presence] || :available
15
16
  end
16
17
 
17
- def presence=(new_presence)
18
+ def update_presence(new_presence, extra_params = {})
18
19
  old_presence = @presence
19
20
  @presence = new_presence
20
- callback :presence_change, queue, @call, new_presence, old_presence
21
+ callback :presence_change, queue, @call, new_presence, old_presence, extra_params
21
22
  end
22
23
 
23
24
  def callback(type, *args)
@@ -131,7 +131,7 @@ class ElectricSlide
131
131
  def checkout_agent
132
132
  agent = @strategy.checkout_agent
133
133
  if agent
134
- agent.presence = :on_call
134
+ agent.update_presence(:on_call)
135
135
  end
136
136
  agent
137
137
  end
@@ -179,7 +179,7 @@ class ElectricSlide
179
179
  # Fake the presence callback since this is a new agent
180
180
  agent.callback :presence_change, self, agent.call, agent.presence, :unavailable
181
181
 
182
- check_for_connections
182
+ async.check_for_connections
183
183
  end
184
184
 
185
185
  # Marks an agent as available to take a call. To be called after an agent completes a call
@@ -192,7 +192,7 @@ class ElectricSlide
192
192
 
193
193
  return false unless get_agent(agent.id)
194
194
 
195
- agent.presence = new_presence
195
+ agent.update_presence(new_presence)
196
196
  agent.address = address if address
197
197
 
198
198
  case agent.presence
@@ -216,9 +216,10 @@ class ElectricSlide
216
216
 
217
217
  # Removes an agent from the queue entirely
218
218
  # @param [Agent] agent The {Agent} to be removed from the queue
219
+ # @param [Hash] extra_params Application specific extra params
219
220
  # @return [Agent, Nil] The Agent object if removed, Nil otherwise
220
- def remove_agent(agent)
221
- agent.presence = :unavailable
221
+ def remove_agent(agent, extra_params = {})
222
+ agent.update_presence(:unavailable, extra_params)
222
223
  @strategy.delete agent
223
224
  @agents.delete agent
224
225
  logger.info "Removing agent #{agent} from the queue"
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  class ElectricSlide
3
- VERSION = '0.3.0'
3
+ VERSION = '0.4.0'
4
4
  end
@@ -44,6 +44,23 @@ describe ElectricSlide::Agent do
44
44
  called = false
45
45
  ElectricSlide::Agent.on_presence_change { |queue, agent_call, presence| called = true }
46
46
  agent = ElectricSlide::Agent.new presence: :unavailable
47
- agent.presence = :busy
47
+ agent.update_presence(:busy)
48
+
49
+ expect(called).to be_truthy
50
+ end
51
+
52
+ it 'sends `extra_params` and `old_presence` to the presence change callback' do
53
+ presence_change_attributes = []
54
+ ElectricSlide::Agent.on_presence_change do |*attrs|
55
+ presence_change_attributes = attrs
56
+ end
57
+
58
+ agent = ElectricSlide::Agent.new presence: :unavailable
59
+ agent.update_presence(:busy, triggered_by: 'auto')
60
+
61
+ queue, agent_call, presence, old_presence, extra_params = presence_change_attributes
62
+
63
+ expect(old_presence).to eq :unavailable
64
+ expect(extra_params[:triggered_by]).to eq 'auto'
48
65
  end
49
66
  end
@@ -137,7 +137,7 @@ describe ElectricSlide::CallQueue do
137
137
  # prevent the agent from being returned to the queue so the queued
138
138
  # call isn't grabbed by the agent again, changing queued call state
139
139
  # before the example can check it
140
- agent.presence = :unavailable
140
+ agent.update_presence(:unavailable)
141
141
  end
142
142
 
143
143
  it 'unsets the `:agent` call variable on the queued call' do
@@ -264,7 +264,15 @@ describe ElectricSlide::CallQueue do
264
264
  }.to change(queue, :checkout_agent).from(nil).to(agent)
265
265
  end
266
266
 
267
- it "connects the agent to waiting queued calls"
267
+ it "connects the agent to waiting queued calls" do
268
+ call = Adhearsion::OutboundCall.new
269
+ queue.enqueue call
270
+
271
+ queue.add_agent agent
272
+ sleep 0.5
273
+ expect(agent.presence).to eq(:on_call)
274
+ expect(call[:agent]).to eq(agent)
275
+ end
268
276
 
269
277
  context 'when given an agent already in the queue' do
270
278
  before do
@@ -352,7 +360,7 @@ describe ElectricSlide::CallQueue do
352
360
  called = false
353
361
  ElectricSlide::Agent.on_presence_change { |queue, agent_call, presence| called = true }
354
362
  queue.remove_agent agent
355
- expect(called).to be
363
+ expect(called).to be_truthy
356
364
  end
357
365
 
358
366
  it 'takes the agent out of the call rotation' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: electric_slide
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Klang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2015-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: adhearsion
@@ -158,12 +158,14 @@ extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
160
  - ".gitignore"
161
+ - ".lgtm"
161
162
  - ".rspec"
162
163
  - ".travis.yml"
163
164
  - CHANGELOG.md
164
165
  - Gemfile
165
166
  - Guardfile
166
167
  - LICENSE
168
+ - MAINTAINERS
167
169
  - README.markdown
168
170
  - Rakefile
169
171
  - config/ahn_acd.yml
@@ -200,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
202
  version: '0'
201
203
  requirements: []
202
204
  rubyforge_project:
203
- rubygems_version: 2.2.2
205
+ rubygems_version: 2.4.5
204
206
  signing_key:
205
207
  specification_version: 2
206
208
  summary: Automatic Call Distributor for Adhearsion