adhearsion 0.7.5 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
data/lib/constants.rb CHANGED
@@ -1,20 +1,23 @@
1
1
  # Adhearsion, open source technology integrator
2
- # Copyright 2006 Jay Phillips
2
+ # Copyright (C) 2006,2007 Jay Phillips
3
3
  #
4
- # This program is free software; you can redistribute it and/or
5
- # modify it under the terms of the GNU General Public License
6
- # as published by the Free Software Foundation; either version 2
7
- # of the License, or (at your option) any later version.
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
8
  #
9
- # This program is distributed in the hope that it will be useful,
9
+ # This library is distributed in the hope that it will be useful,
10
10
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
13
  #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; if not, write to the Free Software
16
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 
18
18
  # Please help adjust these if they may be inaccurate!
19
19
  LOCAL_NUMBER = /^[1-9]\d{6}$/
20
- US_NUMBER = /^1?[1-9]\d{2}[1-9]\d{6}$/
20
+ US_NUMBER = /^1?[1-9]\d{2}[1-9]\d{6}$/
21
+ ISN = /^\d+\*\d+$/ # See http://freenum.org
22
+
23
+ Infinity = 1.0/0.0
@@ -1,19 +1,19 @@
1
1
  # Adhearsion, open source technology integrator
2
- # Copyright 2006 Jay Phillips
2
+ # Copyright (C) 2006,2007 Jay Phillips
3
3
  #
4
- # This program is free software; you can redistribute it and/or
5
- # modify it under the terms of the GNU General Public License
6
- # as published by the Free Software Foundation; either version 2
7
- # of the License, or (at your option) any later version.
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
8
  #
9
- # This program is distributed in the hope that it will be useful,
9
+ # This library is distributed in the hope that it will be useful,
10
10
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
13
  #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; if not, write to the Free Software
16
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 
18
18
  require 'active_support'
19
19
 
data/lib/drb_server.rb ADDED
@@ -0,0 +1,101 @@
1
+ # Adhearsion, open source technology integrator
2
+ # Copyright (C) 2006,2007 Jay Phillips
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require 'drb'
19
+ require 'drb/acl'
20
+ require 'thread'
21
+
22
+ module DRbServerManager
23
+
24
+ def self.start
25
+ config = CONFIG['drb'] || {}
26
+
27
+ permissions = []
28
+ # For greater control over the ACL
29
+ if config['raw_acl']
30
+ permissions = config['raw_acl'].flatten
31
+ else
32
+ [config['deny']].flatten.each { |ip| permissions << "deny" << ip }
33
+ [config['allow']].flatten.each { |ip| permissions << "allow" << ip }
34
+ end
35
+
36
+ # Load the Access Control List
37
+ DRb.install_acl ACL.new(permissions)
38
+
39
+ host = config['host'] || 'localhost'
40
+ port = config['port'] || 9050
41
+ DRb.start_service "druby://#{host}:#{port}", DRbDoor.new
42
+
43
+
44
+ info "Started DRb server on #{DRb.uri}."
45
+ info "DRb Server Access Control List:"
46
+ 0.step permissions.length-1, 2 do |i|
47
+ info " #{permissions[i].upcase} #{permissions[i+1]}"
48
+ end
49
+
50
+ $HUTDOWN.hook { DRbServerManager.stop }
51
+ end
52
+
53
+ def self.stop
54
+ DRb.stop_service
55
+ end
56
+ end
57
+
58
+
59
+ # == Using Distributed Ruby (DRb) in Adhearsion
60
+ #
61
+ # A DRb server works by offering a single object to other Ruby instances
62
+ # who wish to use it over TCP. The DRbDoor class is designed to provide
63
+ # remote access to the Adhearsion's internals, such as the +PBX+ object,
64
+ # helpers' methods, etc.
65
+ #
66
+ # == Usage example
67
+ #
68
+ # Below is an example DRb client which accesses Adhearsion's internals.
69
+ #
70
+ # require 'drb'
71
+ # DRb.start_service
72
+ # Adhearsion = DRbObject.new nil, 'druby://localhost:9050'
73
+ # p Adhearsion.PBX.sip_users
74
+ # p Adhearsion.weather 'Dallas, Texas'
75
+ #
76
+ # Notice the subtle differences above in the two remote DRb procedure calls.
77
+ # When calling a method on the DRbDoor (called Adhearsion in the example), the
78
+ # target method is inspected to see whether the name meets the Ruby's constant
79
+ # syntax: capitalized first letter. The example PBX method actually returns
80
+ # the equivalent of Module.const_get(:PBX). When calling a traditionally-formatted
81
+ # method (no first capital letter), the return value of that method is evaluated.
82
+ class DRbDoor
83
+
84
+ instance_methods.each { |m| undef_method m unless m =~ /^(__|((private|protected)_methods|to_s|class)$)/ }
85
+
86
+
87
+ @@door = Object.new
88
+ class << @@door
89
+ def metaclass() class << self; self; end; end
90
+ def meta_eval(&block) metaclass.instance_eval(&block) end
91
+ end
92
+
93
+ def method_missing name, *args, &block
94
+ # Check whether it's a constant
95
+ if (?A..?Z).include? name.to_s[0] then Module.const_get name
96
+ else @@door.meta_eval { __send__ name, *args, &block }
97
+ end
98
+ end
99
+
100
+ def cli(&block) self.instance_eval(&block) end
101
+ end
data/lib/logging.rb CHANGED
@@ -1,3 +1,20 @@
1
+ # Adhearsion, open source technology integrator
2
+ # Copyright (C) 2006,2007 Jay Phillips
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+
1
18
  require 'logger'
2
19
 
3
20
  LOGGERS = []
@@ -62,7 +79,7 @@ end
62
79
 
63
80
  class StandardLogger < Logger
64
81
  def initialize *args
65
- super *args
82
+ super(*args)
66
83
  formatter = lambda {}
67
84
  end
68
85
  end
@@ -1,19 +1,19 @@
1
1
  # Adhearsion, open source technology integrator
2
- # Copyright 2006 Jay Phillips
2
+ # Copyright (C) 2006,2007 Jay Phillips
3
3
  #
4
- # This program is free software; you can redistribute it and/or
5
- # modify it under the terms of the GNU General Public License
6
- # as published by the Free Software Foundation; either version 2
7
- # of the License, or (at your option) any later version.
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
8
  #
9
- # This program is distributed in the hope that it will be useful,
9
+ # This library is distributed in the hope that it will be useful,
10
10
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
13
  #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; if not, write to the Free Software
16
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 
18
18
  class ServletContainer
19
19
 
@@ -30,19 +30,21 @@ class ServletContainer
30
30
  end
31
31
 
32
32
  def read_variables io
33
- # When debugging, this method could actually not do any IO operations and just
34
- # return a development Hash of call variables
35
33
  call_variables = {}
36
34
  while(line = io.gets.chomp)
37
35
  break if line.empty? # Empty lines signify no more variables
38
36
  variable = line.split(/:\s*/)
39
37
  new_name, new_value = variable.first[4..-1].downcase, variable.last
38
+ if new_name == 'extension'
39
+ new_value.gsub! '-', '_'
40
+ call_variables['str_extension'] = new_value
41
+ end
40
42
  call_variables["#{new_name}"] = new_value =~ /^\d+$/ ? Integer(new_value) : new_value
41
43
  end
42
44
  call_variables
43
45
  end
44
46
 
45
- # GServer allows all functionality to be packed into
47
+ # GServer allows all functionality to be packed into this one serve() method.
46
48
  def serve io
47
49
  io.sync = true
48
50
  Thread.current[:io] = io
@@ -69,16 +71,14 @@ class ServletContainer
69
71
 
70
72
  log "Executing call with variables: " + call_variables.inspect
71
73
 
72
- # TODO Will perform cache checking here.
73
-
74
74
  call_variables.each do |k,v|
75
75
  Thread.current[:container].run_inside do
76
- meta_def k do v end
76
+ meta_def(k) { v }
77
77
  end
78
78
  end
79
79
 
80
80
  # Execute all before_call hooks
81
- [$BEFORE_CALl_HIGH, $BEFORE_CALL, $BEFORE_CALL_LOW].flatten.compact.each &:call
81
+ [$BEFORE_CALl_HIGH, $BEFORE_CALL, $BEFORE_CALL_LOW].flatten.compact.each(&:call)
82
82
  +lambda { answer if CONFIG.answer_before_call }
83
83
 
84
84
  # A call hook may decree that the call shouldn't be processed further (e.g. if
@@ -93,7 +93,7 @@ class ServletContainer
93
93
  rescue => detail
94
94
  log "Exception raised in extensions.rb! " << detail.message
95
95
  # TODO: Make error reports more intutive. Use notifications DSL?
96
- detail.backtrace.each do |msg| log " "*8 << msg end
96
+ detail.backtrace.each do |msg| log " " * 8 << msg end
97
97
  end
98
98
 
99
99
  log "Parsing of extensions.rb complete"
@@ -109,7 +109,7 @@ class ServletContainer
109
109
  begin
110
110
  +send(target_context.to_s.to_sym)
111
111
  rescue => e
112
- error e.inspect
112
+ error e.inspect + "\n " + e.backtrace * "\n "
113
113
  +lambda {
114
114
  play 'were-sorry'
115
115
  hangup
@@ -132,13 +132,13 @@ class ServletContainer
132
132
  detail.backtrace.each do |msg| log " "*8 << msg end
133
133
  end
134
134
 
135
- [$AFTER_CALL_HIGH, $AFTER_CALL, $AFTER_CALL_LOW].flatten.compact.each &:call
135
+ [$AFTER_CALL_HIGH, $AFTER_CALL, $AFTER_CALL_LOW].flatten.compact.each(&:call)
136
136
  +lambda { hangup if CONFIG['hangup_after_call'] }
137
137
  end
138
138
  end
139
139
 
140
- def initialize(port=4573, native=false)
141
- @server = (native ? NativeServer : RubyServer).new port, '0.0.0.0'
140
+ def initialize(port=4573, host='0.0.0.0', native=false)
141
+ @server = (native ? NativeServer : RubyServer).new port, host, Infinity
142
142
  @server.start
143
143
  end
144
144
 
@@ -1,4 +1,4 @@
1
- context "The Asterisk module"
1
+ context "The Asterisk module" do
2
2
  specify "should properize properly" do
3
3
  properize("123").should == 'SIP/123'
4
4
  properize(1_555_444_1234).should == 'SIP/15554441234'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: adhearsion
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.7.5
7
- date: 2007-02-10 00:00:00 -06:00
8
- summary: Adhearsion is a professional integration system for integrating anything and everything.
6
+ version: 0.7.6
7
+ date: 2007-03-27 00:00:00 -05:00
8
+ summary: Adhearsion is metaprogramming framework for developing collaboration software.
9
9
  require_paths:
10
10
  - lib
11
- email: admin -at- jicksta dot com
11
+ email: jay -at- codemecca dot com
12
12
  homepage: http://adhearsion.com
13
13
  rubyforge_project: adhearsion
14
14
  description:
@@ -31,39 +31,24 @@ authors:
31
31
  files:
32
32
  - ahn
33
33
  - apps
34
- - CHANGELOG
35
- - docs
36
- - lib
37
- - LICENSE
38
- - Rakefile
39
- - test
40
34
  - apps/codemeccollab
41
35
  - apps/default
42
36
  - apps/default/config
43
- - apps/default/extensions.rb
44
- - apps/default/helpers
45
- - apps/default/logs
46
- - apps/default/Rakefile
47
37
  - apps/default/config/adhearsion.sqlite3
48
38
  - apps/default/config/adhearsion.yml
49
39
  - apps/default/config/database.rb
50
40
  - apps/default/config/database.yml
51
41
  - apps/default/config/helpers
52
- - apps/default/config/migration.rb
53
42
  - apps/default/config/helpers/drb_server.yml
54
43
  - apps/default/config/helpers/factorial.alien.c.yml
44
+ - apps/default/config/helpers/growler.yml
55
45
  - apps/default/config/helpers/lookup.yml
56
46
  - apps/default/config/helpers/manager_proxy.yml
57
47
  - apps/default/config/helpers/micromenus
58
- - apps/default/config/helpers/micromenus.yml
59
- - apps/default/config/helpers/multi_messenger.yml
60
- - apps/default/config/helpers/weather.yml
61
- - apps/default/config/helpers/xbmc.yml
62
48
  - apps/default/config/helpers/micromenus/collab.rb
63
49
  - apps/default/config/helpers/micromenus/images
64
- - apps/default/config/helpers/micromenus/javascripts
65
- - apps/default/config/helpers/micromenus/stylesheets
66
50
  - apps/default/config/helpers/micromenus/images/tux.bmp
51
+ - apps/default/config/helpers/micromenus/javascripts
67
52
  - apps/default/config/helpers/micromenus/javascripts/builder.js
68
53
  - apps/default/config/helpers/micromenus/javascripts/controls.js
69
54
  - apps/default/config/helpers/micromenus/javascripts/dragdrop.js
@@ -72,10 +57,18 @@ files:
72
57
  - apps/default/config/helpers/micromenus/javascripts/scriptaculous.js
73
58
  - apps/default/config/helpers/micromenus/javascripts/slider.js
74
59
  - apps/default/config/helpers/micromenus/javascripts/unittest.js
60
+ - apps/default/config/helpers/micromenus/stylesheets
75
61
  - apps/default/config/helpers/micromenus/stylesheets/firefox.css
76
62
  - apps/default/config/helpers/micromenus/stylesheets/firefox.xul.css
77
- - apps/default/helpers/drb_server.rb
63
+ - apps/default/config/helpers/micromenus.yml
64
+ - apps/default/config/helpers/multi_messenger.yml
65
+ - apps/default/config/helpers/weather.yml
66
+ - apps/default/config/helpers/xbmc.yml
67
+ - apps/default/config/migration.rb
68
+ - apps/default/extensions.rb
69
+ - apps/default/helpers
78
70
  - apps/default/helpers/factorial.alien.c
71
+ - apps/default/helpers/growler.rb
79
72
  - apps/default/helpers/lookup.rb
80
73
  - apps/default/helpers/manager_proxy.rb
81
74
  - apps/default/helpers/micromenus.rb
@@ -83,18 +76,28 @@ files:
83
76
  - apps/default/helpers/oscar_wilde_quotes.rb
84
77
  - apps/default/helpers/weather.rb
85
78
  - apps/default/helpers/xbmc.rb
79
+ - apps/default/logs
86
80
  - apps/default/logs/adhearsion.log
87
81
  - apps/default/logs/database.log
82
+ - apps/default/Rakefile
83
+ - CHANGELOG
84
+ - docs
85
+ - lib
88
86
  - lib/adhearsion.rb
89
87
  - lib/constants.rb
90
88
  - lib/core_extensions.rb
89
+ - lib/drb_server.rb
91
90
  - lib/logging.rb
92
91
  - lib/rami.rb
93
92
  - lib/servlet_container.rb
93
+ - LICENSE
94
+ - Rakefile
95
+ - test
94
96
  - test/asterisk_module_test.rb
95
97
  - test/core_extensions_test.rb
96
98
  - test/dial_test.rb
97
99
  - test/test_micromenus.rb
100
+ - TODO
98
101
  - .version
99
102
  test_files: []
100
103
 
@@ -127,3 +130,12 @@ dependencies:
127
130
  - !ruby/object:Gem::Version
128
131
  version: 0.7.1
129
132
  version:
133
+ - !ruby/object:Gem::Dependency
134
+ name: daemons
135
+ version_requirement:
136
+ version_requirements: !ruby/object:Gem::Version::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 1.0.5
141
+ version:
@@ -1,32 +0,0 @@
1
-
2
- require 'drb'
3
- require 'drb/acl'
4
- require 'thread'
5
-
6
- # Load the access control list
7
- config = $HELPERS['drb_server']
8
-
9
- permissions = []
10
- # For greater control over the ACL
11
- if config['raw_acl']
12
- permissions = config['raw_acl'].flatten
13
- else
14
- [config['deny']].flatten.each { |ip| permissions << "deny" << ip }
15
- [config['allow']].flatten.each { |ip| permissions << "allow" << ip }
16
- end
17
-
18
- DRb.install_acl ACL.new(permissions)
19
-
20
- host = config['host'] || 'localhost'
21
- port = config['port'] || 9050
22
- DRb.start_service "druby://#{host}:#{port}", PBX
23
-
24
- log "Started DRb server on #{DRb.uri}."
25
- log "DRb Server Access Control List:"
26
- 0.step permissions.length-1, 2 do |i|
27
- log " #{permissions[i].upcase} #{permissions[i+1]}"
28
- end
29
-
30
- $HUTDOWN.hook do
31
- DRb.stop_service
32
- end