call_center 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/call_center.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{call_center}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Henry Hsu"]
@@ -18,9 +18,12 @@ module CallCenter
18
18
 
19
19
  def inject(options)
20
20
  current_stack = @stack.dup
21
- options.merge(:if => lambda { |model|
21
+
22
+ evaluator = Evaluator.new(current_stack) { |model|
22
23
  current_stack.map { |conditional| conditional.evaluate(model) }.all?
23
- })
24
+ }
25
+
26
+ options.merge(:if => evaluator)
24
27
  end
25
28
 
26
29
  class Conditional
@@ -36,6 +39,15 @@ module CallCenter
36
39
  end
37
40
  end
38
41
 
42
+ class Evaluator < Proc
43
+ attr_reader :stack
44
+
45
+ def initialize(stack)
46
+ @stack = stack
47
+ super()
48
+ end
49
+ end
50
+
39
51
  class IfConditional < Conditional
40
52
  def if?
41
53
  true
@@ -104,7 +104,13 @@ module CallCenter
104
104
  stub_methods = (after_transition_methods(s_m) | if_and_unless_conditions(s_m)).uniq - without
105
105
  object.reset_mocha
106
106
  stub_methods.each do |m|
107
- object.stubs(m)
107
+ if m.instance_of?(CallCenter::ConditionalStack::Evaluator)
108
+ m.stack.map(&:name).each do |name|
109
+ object.stubs(name)
110
+ end
111
+ else
112
+ object.stubs(m)
113
+ end
108
114
  end
109
115
  end
110
116
 
@@ -2,19 +2,38 @@ require 'minitest/helper'
2
2
  require 'call_center/test/minitest/dsl'
3
3
 
4
4
  require 'test/examples/call'
5
+ require 'test/examples/dynamic_transition_call'
5
6
 
6
7
  describe CallCenter::Test::MiniTest::DSL do
7
- subject { Call.new }
8
- let(:call_center_state_field) { :state }
9
8
 
10
- it_should_flow { on(:incoming_call).from(:initial).to(:routing).if(:agents_available?) }
11
- it_should_flow { on(:incoming_call).from(:initial).to(:voicemail).unless(:agents_available?) }
12
- it_should_render { is(:initial).expects(:notify).selects("Response>Say", "Hello World") }
9
+ describe Call do
10
+ subject { Call.new }
11
+ let(:call_center_state_field) { :state }
13
12
 
14
- it_should_flow { on(:customer_hangs_up).from(:voicemail).to(:voicemail_completed) }
15
- it_should_render { is(:voicemail).expects(:notify).selects("Response>Say", "Hello World").selects("Response>Record[action=/voice/calls/flow?event=voicemail_complete&amp;actor=customer]") }
13
+ it_should_flow { on(:incoming_call).from(:initial).to(:routing).if(:agents_available?) }
14
+ it_should_flow { on(:incoming_call).from(:initial).to(:voicemail).unless(:agents_available?) }
15
+ it_should_render { is(:initial).expects(:notify).selects("Response>Say", "Hello World") }
16
16
 
17
- it_should_flow { on(:something_crazy_happens).from(:initial).to(:uh_oh) }
17
+ it_should_flow { on(:customer_hangs_up).from(:voicemail).to(:voicemail_completed) }
18
+ it_should_render { is(:voicemail).expects(:notify).selects("Response>Say", "Hello World").selects("Response>Record[action=/voice/calls/flow?event=voicemail_complete&amp;actor=customer]") }
19
+
20
+ it_should_flow { on(:something_crazy_happens).from(:initial).to(:uh_oh) }
21
+
22
+ it_should_flow { on(:customer_hangs_up).from(:cancelled).to(:cancelled).expects(:cancelled) { |e| e.never } }
23
+ end
24
+
25
+ describe DynamicTransitionCall do
26
+ subject { DynamicTransitionCall.new }
27
+ let(:call_center_state_field) { :state }
28
+
29
+ it_should_flow { on(:incoming_call).from(:initial).to(:routing_on_client).if(:agents_available?).unless(:via_phone?) }
30
+ it_should_flow { on(:incoming_call).from(:initial).to(:routing_on_phone).if(:agents_available?).if(:via_phone?) }
31
+
32
+ it_should_flow { on(:incoming_call).from(:initial).to(:voicemail).unless(:agents_available?).unless(:voicemail_full?) }
33
+ it_should_flow { on(:incoming_call).from(:initial).to(:cancelled).unless(:agents_available?).if(:voicemail_full?) }
34
+
35
+ it_should_flow { on(:picks_up).from(:routing_on_client).to(:in_conference).unless(:out_of_area?) }
36
+ it_should_flow { on(:picks_up).from(:routing_on_client).to(:cancelled).if(:out_of_area?) }
37
+ end
18
38
 
19
- it_should_flow { on(:customer_hangs_up).from(:cancelled).to(:cancelled).expects(:cancelled) { |e| e.never } }
20
39
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: call_center
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Henry Hsu