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 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