sinatra-asterisk 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
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
@@ -0,0 +1,5 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "rspec/core/rake_task"
5
+ RSpec::Core::RakeTask.new(:rspec)
@@ -1,47 +1,50 @@
1
1
  require 'sinatra/base'
2
2
  require 'java'
3
- require File.expand_path(File.dirname(__FILE__)) + '/asterisk-java-0.3.1.jar'
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, AgiContext::new(request, channel).execute(&block)
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
@@ -0,0 +1,5 @@
1
+ module Sinatra
2
+ module Asterisk
3
+ VERSION = "0.0.2"
4
+ end
5
+ end
@@ -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
- block_called
14
+ request.block_was_called
15
+ test_helper
7
16
  end
8
17
  end
9
18
 
10
- describe Sinatra::Asterisk::TestApp do
11
- describe "register" do
12
- it "pending" do
13
- puts subject.inspect
14
- end
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&param2=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
- version: 0.0.1
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-22 00:00:00 +02:00
13
+ date: 2011-04-24 00:00:00 +02:00
13
14
  default_executable:
14
15
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: sinatra
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
23
- version: "1.0"
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: rspec
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 2.0.0
34
- version:
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: dominique.broeglin@gmail.com
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
- - lib/sinatra/asterisk.rb
45
- - spec/sinatra/asterisk_spec.rb
46
- - spec/spec_helper.rb
47
- - test.rb
48
- - README.md
49
- - lib/sinatra/asterisk-java-0.3.1.jar
50
- - LICENSES
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: http://github.com/dbroeglin/sinatra-asterisk
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
- - !ruby/object:Gem::Version
64
- version: "0"
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
- - !ruby/object:Gem::Version
70
- version: "0"
71
- version:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: "0"
72
92
  requirements: []
73
93
 
74
- rubyforge_project:
75
- rubygems_version: 1.3.5
94
+ rubyforge_project: sinatra-asterisk
95
+ rubygems_version: 1.5.1
76
96
  signing_key:
77
97
  specification_version: 3
78
- summary: Extension to Sinatra.rb to allow managing an Asterisk IPBX from the web application
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
data/test.rb DELETED
@@ -1,8 +0,0 @@
1
- require 'sinatra'
2
- require 'sinatra/asterisk'
3
-
4
- start_agi_server
5
-
6
- agi do
7
- puts "COUCOU"
8
- end