sinatra-asterisk 0.0.1 → 0.0.2
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/.gitignore +5 -0
- data/Gemfile +3 -0
- data/HISTORY.rdoc +14 -0
- data/Rakefile +5 -0
- data/lib/sinatra/asterisk.rb +27 -23
- data/lib/sinatra/asterisk/asterisk-java-1.0.0.M3.jar +0 -0
- data/lib/sinatra/asterisk/version.rb +5 -0
- data/sinatra-asterisk.gemspec +27 -0
- data/spec/sinatra/asterisk_spec.rb +32 -6
- metadata +67 -46
- data/lib/sinatra/asterisk-java-0.3.1.jar +0 -0
- data/test.rb +0 -8
data/Gemfile
ADDED
data/HISTORY.rdoc
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
=== 0.0.2 / 2011-04-24
|
2
|
+
|
3
|
+
* Moved to Asterisk-Java v1.0.0.M3.
|
4
|
+
|
5
|
+
* AGI handlers now are evaluated in a sinatra application scope
|
6
|
+
like route handlers.
|
7
|
+
|
8
|
+
* Correct ManagerConnectionFactory initialisation
|
9
|
+
|
10
|
+
=== 0.0.1 / 2011-04-21
|
11
|
+
|
12
|
+
* First working version (simple AGI and manager connection but
|
13
|
+
no manager event handling).
|
14
|
+
|
data/Rakefile
ADDED
data/lib/sinatra/asterisk.rb
CHANGED
@@ -1,47 +1,50 @@
|
|
1
1
|
require 'sinatra/base'
|
2
2
|
require 'java'
|
3
|
-
require File.expand_path(
|
3
|
+
require File.expand_path(__FILE__ + '/../asterisk/asterisk-java-1.0.0.M3.jar')
|
4
4
|
|
5
5
|
module Sinatra
|
6
6
|
module Asterisk
|
7
7
|
java_import org.asteriskjava.fastagi.BaseAgiScript
|
8
8
|
java_import org.asteriskjava.fastagi.MappingStrategy
|
9
9
|
java_import org.asteriskjava.fastagi.DefaultAgiServer
|
10
|
-
|
10
|
+
java_import org.asteriskjava.manager.ManagerConnectionFactory
|
11
|
+
|
11
12
|
module Helpers
|
12
13
|
end
|
13
|
-
|
14
|
-
# TODO: implement proxy to Sinatra::Application ?
|
15
|
-
class AgiContext
|
16
|
-
instance_methods.each { |m| undef_method m unless m =~ /^(__|instance_eval)/ }
|
17
|
-
attr_reader :request, :channel
|
18
|
-
|
19
|
-
def initialize(*args)
|
20
|
-
@request, @channel = *args
|
21
|
-
end
|
22
|
-
|
23
|
-
def execute(&block)
|
24
|
-
instance_eval(&block)
|
25
|
-
end
|
26
|
-
end
|
27
14
|
|
28
15
|
class SinatraAgiScript < BaseAgiScript
|
29
|
-
attr_accessor :agi_handlers
|
30
|
-
|
31
16
|
include MappingStrategy
|
17
|
+
attr_accessor :agi_handlers, :sinatra_app
|
32
18
|
|
33
19
|
# Implements MappingStrategy
|
34
20
|
def determineScript(request)
|
35
21
|
self
|
36
22
|
end
|
37
|
-
|
23
|
+
|
24
|
+
def eval_in_sinatra(request, channel, &block)
|
25
|
+
sinatra = sinatra_app::new!
|
26
|
+
sinatra_eigenclass = (class <<sinatra; self; end)
|
27
|
+
sinatra_eigenclass.class_eval do
|
28
|
+
# TODO: do this with a module ?
|
29
|
+
define_method :request do
|
30
|
+
request
|
31
|
+
end
|
32
|
+
|
33
|
+
define_method :channel do
|
34
|
+
channel
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
sinatra.instance_eval(&block)
|
39
|
+
end
|
40
|
+
|
38
41
|
# Implements AgiScript
|
39
42
|
def service(request, channel)
|
40
43
|
catch(:halt) do
|
41
44
|
block = @agi_handlers.each do |script_pattern, conditions, block|
|
42
45
|
catch :pass do
|
43
46
|
throw :pass unless script_pattern.nil? || script_pattern.match(request.script)
|
44
|
-
throw :halt,
|
47
|
+
throw :halt, eval_in_sinatra(request, channel, &block)
|
45
48
|
end
|
46
49
|
end
|
47
50
|
end
|
@@ -49,11 +52,12 @@ module Sinatra
|
|
49
52
|
end
|
50
53
|
|
51
54
|
def start_agi_server
|
52
|
-
agi_script = SinatraAgiScript::new
|
53
|
-
agi_script.agi_handlers = agi_handlers
|
55
|
+
@agi_script = SinatraAgiScript::new
|
56
|
+
@agi_script.agi_handlers = agi_handlers
|
57
|
+
@agi_script.sinatra_app = self
|
54
58
|
|
55
59
|
@agi_server = DefaultAgiServer::new()
|
56
|
-
@agi_server.mappingStrategy = agi_script
|
60
|
+
@agi_server.mappingStrategy = @agi_script
|
57
61
|
Thread.new do
|
58
62
|
begin
|
59
63
|
@agi_server.startup
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "sinatra/asterisk/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "sinatra-asterisk"
|
7
|
+
s.version = Sinatra::Asterisk::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Dominique BROEGLIN"]
|
10
|
+
s.email = ["dominique.broeglin@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/dbroeglin/sinatra-asterisk"
|
12
|
+
s.summary = %q{IPBX applications extension for Sinatra.rb}
|
13
|
+
s.description = %q{Extension to Sinatra.rb to allow managing an Asterisk IPBX from the web application}
|
14
|
+
|
15
|
+
s.rubyforge_project = "sinatra-asterisk"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
s.has_rdoc = 'yard'
|
22
|
+
|
23
|
+
s.add_dependency "sinatra", "~> 1.0"
|
24
|
+
|
25
|
+
s.add_development_dependency "rspec", ">= 2.0.0"
|
26
|
+
s.add_development_dependency "gem-release"
|
27
|
+
end
|
@@ -2,16 +2,42 @@ require File.expand_path(__FILE__ + "/../../spec_helper.rb")
|
|
2
2
|
|
3
3
|
class Sinatra::Asterisk::TestApp < Sinatra::Application
|
4
4
|
include Sinatra::Asterisk
|
5
|
+
|
6
|
+
start_agi_server
|
7
|
+
helpers do
|
8
|
+
def test_helper
|
9
|
+
request.helper_was_called
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
5
13
|
agi /^test/ do
|
6
|
-
|
14
|
+
request.block_was_called
|
15
|
+
test_helper
|
7
16
|
end
|
8
17
|
end
|
9
18
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
19
|
+
def mock_request(script, headers = {})
|
20
|
+
unless @mock_request
|
21
|
+
@mock_request = mock('MockAgiRequest')
|
22
|
+
@mock_request.stub!(
|
23
|
+
:extension => "test",
|
24
|
+
:priority => "1",
|
25
|
+
:context => "default",
|
26
|
+
:uniqueId => "123456789.7",
|
27
|
+
:language => "en",
|
28
|
+
:channel => "SIP/127.0.0.1-00000003",
|
29
|
+
:type => "SIP",
|
30
|
+
:script => script,
|
31
|
+
:requestURL => "agi://fake_test_host:1234/#{script}") #[?param1=value1¶m2=value2]. "
|
15
32
|
end
|
33
|
+
@mock_request
|
34
|
+
end
|
35
|
+
|
36
|
+
describe Sinatra::Asterisk::TestApp do
|
37
|
+
it "should call the block" do
|
38
|
+
mock_request("test").should_receive(:block_was_called)
|
39
|
+
@mock_request.should_receive(:helper_was_called)
|
16
40
|
|
41
|
+
Sinatra::Asterisk::TestApp.instance_variable_get("@agi_script").service(@mock_request, nil)
|
42
|
+
end
|
17
43
|
end
|
metadata
CHANGED
@@ -1,39 +1,54 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-asterisk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.2
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
|
-
- Dominique BROEGLIN
|
8
|
+
- Dominique BROEGLIN
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-24 00:00:00 +02:00
|
13
14
|
default_executable:
|
14
15
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: sinatra
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ~>
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "1.0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 2.0.0
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: gem-release
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
35
49
|
description: Extension to Sinatra.rb to allow managing an Asterisk IPBX from the web application
|
36
|
-
email:
|
50
|
+
email:
|
51
|
+
- dominique.broeglin@gmail.com
|
37
52
|
executables: []
|
38
53
|
|
39
54
|
extensions: []
|
@@ -41,40 +56,46 @@ extensions: []
|
|
41
56
|
extra_rdoc_files: []
|
42
57
|
|
43
58
|
files:
|
44
|
-
-
|
45
|
-
-
|
46
|
-
-
|
47
|
-
-
|
48
|
-
- README.md
|
49
|
-
-
|
50
|
-
-
|
59
|
+
- .gitignore
|
60
|
+
- Gemfile
|
61
|
+
- HISTORY.rdoc
|
62
|
+
- LICENSES
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- lib/sinatra/asterisk.rb
|
66
|
+
- lib/sinatra/asterisk/asterisk-java-1.0.0.M3.jar
|
67
|
+
- lib/sinatra/asterisk/version.rb
|
68
|
+
- sinatra-asterisk.gemspec
|
69
|
+
- spec/sinatra/asterisk_spec.rb
|
70
|
+
- spec/spec_helper.rb
|
51
71
|
has_rdoc: true
|
52
|
-
homepage:
|
72
|
+
homepage: https://github.com/dbroeglin/sinatra-asterisk
|
53
73
|
licenses: []
|
54
74
|
|
55
75
|
post_install_message:
|
56
76
|
rdoc_options: []
|
57
77
|
|
58
78
|
require_paths:
|
59
|
-
- lib
|
79
|
+
- lib
|
60
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
61
82
|
requirements:
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
version:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: "0"
|
66
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
67
88
|
requirements:
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
version:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: "0"
|
72
92
|
requirements: []
|
73
93
|
|
74
|
-
rubyforge_project:
|
75
|
-
rubygems_version: 1.
|
94
|
+
rubyforge_project: sinatra-asterisk
|
95
|
+
rubygems_version: 1.5.1
|
76
96
|
signing_key:
|
77
97
|
specification_version: 3
|
78
|
-
summary:
|
79
|
-
test_files:
|
80
|
-
|
98
|
+
summary: IPBX applications extension for Sinatra.rb
|
99
|
+
test_files:
|
100
|
+
- spec/sinatra/asterisk_spec.rb
|
101
|
+
- spec/spec_helper.rb
|
Binary file
|