freeswitcher 0.6.6 → 0.6.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/fsr/cmd/conference.rb +63 -0
- data/lib/fsr/listener/inbound.rb +1 -0
- data/lib/fsr/version.rb +1 -1
- data/spec/fsr/cmd/conference.rb +55 -0
- data/spec/fsr/loading.rb +1 -1
- metadata +6 -3
@@ -0,0 +1,63 @@
|
|
1
|
+
require "fsr/cmd"
|
2
|
+
module FSR
|
3
|
+
module Cmd
|
4
|
+
class Conference < Command
|
5
|
+
attr_reader :fs_socket, :conference_name, :profile, :pin, :flags, :action, :target, :target_options, :digits
|
6
|
+
def initialize(fs_socket = nil, args = {})
|
7
|
+
raise(ArgumentError, "args (Passed: <<<#{args}>>>) must be a hash") unless args.kind_of?(Hash)
|
8
|
+
@conference_name, @pin, @profile, @flags = args.values_at(:conference_name, :pin, :profile, :flags)
|
9
|
+
@action, @target, @target_options = args.values_at(:action, :target, :target_options)
|
10
|
+
@digits = args[:digits]
|
11
|
+
@fs_socket = fs_socket
|
12
|
+
raise(ArgumentError, "Cannot use conference without :conference_name") unless @conference_name
|
13
|
+
case @action
|
14
|
+
when :dial
|
15
|
+
raise(ArgumentError, "Cannot dial without :target") unless @target
|
16
|
+
if @target_options
|
17
|
+
raise(ArgumentError, ":target_options must be a hash if :target_options is set") unless @orginate_options.kind_of?(Hash)
|
18
|
+
end
|
19
|
+
when :dtmf
|
20
|
+
raise(ArgumentError, "Cannot send dtmf without :target") unless @target
|
21
|
+
raise(ArgumentError, "Cannot send dtmf without :digits") unless @digits
|
22
|
+
when :kick
|
23
|
+
raise(ArgumentError, "Cannot kick without :target") unless @target
|
24
|
+
else
|
25
|
+
# go with flow, mate
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Send the command to the event socket, using bgapi by default.
|
30
|
+
def run(api_method = :bgapi)
|
31
|
+
conf_command = "%s %s" % [api_method, raw]
|
32
|
+
Log.debug "saying #{conf_command}"
|
33
|
+
@fs_socket.say(conf_command)
|
34
|
+
end
|
35
|
+
|
36
|
+
def arguments
|
37
|
+
target_options = target_options.keys.sort { |a,b| a.to_s <=> b.to_s }.map { |k| "%s=%s" % [k, orginate_options[k]] }.join(",") if target_options
|
38
|
+
conference_name << "@#{profile}" if profile
|
39
|
+
if pin
|
40
|
+
conference_name << "+#{pin}"
|
41
|
+
conference_name << "+#{flags}" if flags
|
42
|
+
end
|
43
|
+
args = [conference_name]
|
44
|
+
args << action if action
|
45
|
+
|
46
|
+
if target
|
47
|
+
@target = "{#{target_options}}#{target}" if target_options
|
48
|
+
args << target
|
49
|
+
end
|
50
|
+
|
51
|
+
args << digits if action == :dtmf
|
52
|
+
args.compact
|
53
|
+
end
|
54
|
+
|
55
|
+
def raw
|
56
|
+
["conference", *arguments].join(" ")
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
register(:conference, Conference)
|
62
|
+
end
|
63
|
+
end
|
data/lib/fsr/listener/inbound.rb
CHANGED
data/lib/fsr/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec/helper'
|
2
|
+
require "fsr/cmd"
|
3
|
+
FSR::Cmd.load_command("conference")
|
4
|
+
|
5
|
+
describe "Testing FSR::Cmd::Conference" do
|
6
|
+
it "Cannot use conference without :conference_name" do
|
7
|
+
lambda { FSR::Cmd::Conference.new(nil) }.should.raise(ArgumentError).
|
8
|
+
message.should.match(/Cannot use conference without :conference_name/)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "Cannot dial without :target" do
|
12
|
+
lambda { FSR::Cmd::Conference.new(nil, :conference_name => 1001, :action => :dial) }.should.raise(ArgumentError).
|
13
|
+
message.should.match(/Cannot dial without :target/)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "Cannot send dtmf without :target" do
|
17
|
+
lambda { FSR::Cmd::Conference.new(nil, :conference_name => 1001, :action => :dtmf) }.should.raise(ArgumentError).
|
18
|
+
message.should.match(/Cannot send dtmf without :target/)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "Cannot send dtmf without :digits" do
|
22
|
+
lambda { FSR::Cmd::Conference.new(nil, :conference_name => 1001, :action => :dtmf, :target => 1) }.should.raise(ArgumentError).
|
23
|
+
message.should.match(/Cannot send dtmf without :digits/)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "Cannot send kick without :target" do
|
27
|
+
lambda { FSR::Cmd::Conference.new(nil, :conference_name => 1001, :action => :kick) }.should.raise(ArgumentError).
|
28
|
+
message.should.match(/Cannot kick without :target/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "Puts callee into conference" do
|
32
|
+
conference = FSR::Cmd::Conference.new(nil, :conference_name => 1001, :action => :dial, :target => "user/1000")
|
33
|
+
conference.raw.should == "conference 1001 dial user/1000"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Kicks member out of conference" do
|
37
|
+
conference = FSR::Cmd::Conference.new(nil, :conference_name => "1001", :action => :kick, :target => 1)
|
38
|
+
conference.raw.should == "conference 1001 kick 1"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "Sends dtmf digits to a member" do
|
42
|
+
conference = FSR::Cmd::Conference.new(nil, :conference_name => "1001", :action => :dtmf, :target => 1, :digits => 134)
|
43
|
+
conference.raw.should == "conference 1001 dtmf 1 134"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "Sends dtmf digits to all members" do
|
47
|
+
conference = FSR::Cmd::Conference.new(nil, :conference_name => "1001", :action => :dtmf, :target => "all", :digits => 134)
|
48
|
+
conference.raw.should == "conference 1001 dtmf all 134"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "Sends dtmf digits to last member" do
|
52
|
+
conference = FSR::Cmd::Conference.new(nil, :conference_name => "1001", :action => :dtmf, :target => "last", :digits => 134)
|
53
|
+
conference.raw.should == "conference 1001 dtmf last 134"
|
54
|
+
end
|
55
|
+
end
|
data/spec/fsr/loading.rb
CHANGED
@@ -16,7 +16,7 @@ describe "Testing FSR module loading methods" do
|
|
16
16
|
|
17
17
|
# When you add commands you must modify the expected cmds_loaded behavior
|
18
18
|
it "Loads all commands" do
|
19
|
-
all_commands = [:uuid_dump, :originate, :sofia, :fsctl, :sofia_contact, :status, :calls, :call_center, :channels, :enum, :sched_hangup, :sched_transfer, :uuid_transfer, :uuid_send_dtmf] # If you add a command add it to this set
|
19
|
+
all_commands = [:uuid_dump, :originate, :sofia, :fsctl, :sofia_contact, :status, :calls, :call_center, :channels, :enum, :sched_hangup, :sched_transfer, :uuid_transfer, :uuid_send_dtmf, :conference] # If you add a command add it to this set
|
20
20
|
cmds_loaded = FSR.load_all_commands
|
21
21
|
cmds_loaded.kind_of?(Array).should == true
|
22
22
|
all_commands.each do |cmd|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 7
|
9
|
+
version: 0.6.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jayson Vaughn
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-03-
|
20
|
+
date: 2011-03-09 00:00:00 -06:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- lib/fsr/cmd/call_center.rb
|
86
86
|
- lib/fsr/cmd/calls.rb
|
87
87
|
- lib/fsr/cmd/channels.rb
|
88
|
+
- lib/fsr/cmd/conference.rb
|
88
89
|
- lib/fsr/cmd/enum.rb
|
89
90
|
- lib/fsr/cmd/fsctl.rb
|
90
91
|
- lib/fsr/cmd/originate.rb
|
@@ -162,6 +163,7 @@ files:
|
|
162
163
|
- spec/fsr/cmd/call_center.rb
|
163
164
|
- spec/fsr/cmd/calls.rb
|
164
165
|
- spec/fsr/cmd/channels.rb
|
166
|
+
- spec/fsr/cmd/conference.rb
|
165
167
|
- spec/fsr/cmd/enum.rb
|
166
168
|
- spec/fsr/cmd/originate.rb
|
167
169
|
- spec/fsr/cmd/sched_hangup.rb
|
@@ -415,6 +417,7 @@ test_files:
|
|
415
417
|
- spec/fsr/cmd/call_center.rb
|
416
418
|
- spec/fsr/cmd/calls.rb
|
417
419
|
- spec/fsr/cmd/channels.rb
|
420
|
+
- spec/fsr/cmd/conference.rb
|
418
421
|
- spec/fsr/cmd/enum.rb
|
419
422
|
- spec/fsr/cmd/originate.rb
|
420
423
|
- spec/fsr/cmd/sched_hangup.rb
|