adaptation 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/bin/console +9 -0
- data/dispatches/publish.rb +9 -2
- data/lib/adaptation/base.rb +12 -11
- data/lib/adaptation/console/environment.rb +42 -0
- data/lib/adaptation/druby_subscriber.rb +2 -2
- data/lib/adaptation/message.rb +10 -9
- data/lib/adaptation/test/fake_fixtures.rb +4 -0
- data/lib/adaptation/test/test_help.rb +16 -9
- data/lib/commands/adaptor_path.rb +1 -0
- data/lib/commands/console.rb +34 -0
- data/lib/rails_generator/generators/applications/app/app_generator.rb +1 -1
- data/lib/rails_generator/generators/components/adaptor/templates/adaptor.rb +1 -1
- metadata +57 -58
- data/bin/mom~ +0 -46
- data/lib/adaptation/druby_subscriber.rb~ +0 -79
- data/lib/adaptation/mom.rb~ +0 -74
- data/lib/adaptation/oapdaemon.rb~ +0 -42
- data/lib/commands/mom.rb.descartat +0 -8
- data/lib/commands/subscribe.rb~ +0 -25
- data/lib/rails_generator/generators/applications/app/app_generator.rb~ +0 -136
data/CHANGELOG
CHANGED
data/bin/console
ADDED
data/dispatches/publish.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
unless defined? ADAPTOR_ROOT
|
2
2
|
ADAPTOR_ROOT = File.expand_path(File.dirname(__FILE__) + '/..')
|
3
3
|
end
|
4
|
-
require 'yaml'
|
5
4
|
|
6
|
-
|
5
|
+
environment = "development"
|
6
|
+
ARGV.each do |arg|
|
7
|
+
if arg[0..14] == "ADAPTATION_ENV="
|
8
|
+
environment = arg[15..arg.length]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'yaml'
|
13
|
+
config = YAML::load(File.open("#{ADAPTOR_ROOT}/config/mom.yml"))[environment.to_s]
|
7
14
|
|
8
15
|
case config["mom"]["type"]
|
9
16
|
when "druby"
|
data/lib/adaptation/base.rb
CHANGED
@@ -31,7 +31,7 @@ module Adaptation
|
|
31
31
|
|
32
32
|
def process(xml_message)
|
33
33
|
# dirty method to discover the message type
|
34
|
-
message_type = xml_message[1..(xml_message.index(/(>| )/) - 1)]
|
34
|
+
message_type = xml_message[1..(xml_message.index(/(>| |\/)/) - 1)]
|
35
35
|
|
36
36
|
begin
|
37
37
|
message_class = get_class_object(message_type.capitalize)
|
@@ -53,16 +53,17 @@ module Adaptation
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def get_class_object(searched_class)
|
56
|
-
class_object = nil
|
57
|
-
ObjectSpace.each_object(Class){|aClass|
|
58
|
-
|
59
|
-
}
|
60
|
-
if class_object.nil?
|
61
|
-
|
62
|
-
|
63
|
-
else
|
64
|
-
|
65
|
-
end
|
56
|
+
#class_object = nil
|
57
|
+
#ObjectSpace.each_object(Class){|aClass|
|
58
|
+
# class_object = aClass if aClass.to_s == searched_class
|
59
|
+
#}
|
60
|
+
#if class_object.nil?
|
61
|
+
# #puts "Unknown class #{searched_class}."
|
62
|
+
# raise Exception.new("Unknown class #{searched_class}.")
|
63
|
+
#else
|
64
|
+
# return class_object
|
65
|
+
#end
|
66
|
+
Object.const_get searched_class
|
66
67
|
end
|
67
68
|
|
68
69
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
$environment = "development"
|
3
|
+
$config = YAML::load(File.open("#{ADAPTOR_ROOT}/config/settings.yml"))[$environment]
|
4
|
+
Adaptation::Base.new
|
5
|
+
# connect to test database
|
6
|
+
require 'active_record'
|
7
|
+
|
8
|
+
if File.exists?("#{ADAPTOR_ROOT}/config/database.yml")
|
9
|
+
configurations = YAML::load(File.open("#{ADAPTOR_ROOT}/config/database.yml"))[$environment]
|
10
|
+
ActiveRecord::Base.configurations.update($environment => configurations)
|
11
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[$environment])
|
12
|
+
end
|
13
|
+
|
14
|
+
if File.exists?("log")
|
15
|
+
ActiveRecord::Base.logger = Logger.new("#{ADAPTOR_ROOT}/log/"+$environment+".log")
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_xml_from_file xml_file
|
19
|
+
contents = new Array
|
20
|
+
File.open(xml_file).each { |line|
|
21
|
+
unless line =~ /^ {0,}#/
|
22
|
+
contents << line.strip.chomp
|
23
|
+
end
|
24
|
+
}
|
25
|
+
"#{contents.chomp}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def xml_to_object xml_message
|
29
|
+
class_name = xml_message[1..(xml_message.index(/(>| )/) - 1)]
|
30
|
+
message_class = Object.const_get(class_name.capitalize)
|
31
|
+
message_object = message_class.to_object(xml_message)
|
32
|
+
message_object
|
33
|
+
end
|
34
|
+
|
35
|
+
def xmlfile_to_object xml_file
|
36
|
+
xml_message = get_xml_from_file(xml_file.to_s)
|
37
|
+
message_object = xml_to_object xml_message
|
38
|
+
message_object
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
|
@@ -15,8 +15,8 @@ module Adaptation
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def process message, topic
|
18
|
-
if ( (@topics.include?(topic)) or (@topics
|
19
|
-
system("ruby public/dispatch.rb #{message}")
|
18
|
+
if ( (@topics.include?(topic)) or (@topics.include?("all")) )
|
19
|
+
system("ruby public/dispatch.rb '#{message}'")
|
20
20
|
end
|
21
21
|
puts "#{topic} => #{message}"
|
22
22
|
end
|
data/lib/adaptation/message.rb
CHANGED
@@ -288,15 +288,16 @@ module Adaptation
|
|
288
288
|
end
|
289
289
|
|
290
290
|
def self.get_class_object(searched_class)
|
291
|
-
class_object = nil
|
292
|
-
ObjectSpace.each_object(Class){|aClass|
|
293
|
-
|
294
|
-
}
|
295
|
-
if class_object.nil?
|
296
|
-
|
297
|
-
else
|
298
|
-
|
299
|
-
end
|
291
|
+
#class_object = nil
|
292
|
+
#ObjectSpace.each_object(Class){|aClass|
|
293
|
+
# class_object = aClass if aClass.to_s == searched_class
|
294
|
+
#}
|
295
|
+
#if class_object.nil?
|
296
|
+
# raise Exception.new("Unknown class #{searched_class}.")
|
297
|
+
#else
|
298
|
+
# return class_object
|
299
|
+
#end
|
300
|
+
Object.const_get searched_class
|
300
301
|
end
|
301
302
|
|
302
303
|
def self.get_validations_array
|
@@ -4,6 +4,11 @@ if File.exists?("config/settings.yml")
|
|
4
4
|
$config = YAML::load(File.open("config/settings.yml"))[$environment]
|
5
5
|
end
|
6
6
|
|
7
|
+
# for adaptations that require models from a rails application, sometimes
|
8
|
+
# rails needs to load the environment.rb from the rails app. When this happens
|
9
|
+
# the following variable must be set.
|
10
|
+
ENV['RAILS_ENV'] = "test"
|
11
|
+
|
7
12
|
# connect to test database
|
8
13
|
require 'active_record'
|
9
14
|
|
@@ -273,16 +278,18 @@ class Test::Unit::TestCase
|
|
273
278
|
[data, message_object]
|
274
279
|
end
|
275
280
|
|
281
|
+
# this method is repeated many times all over the code!
|
276
282
|
def get_class_object(searched_class) #:nodoc:
|
277
|
-
class_object = nil
|
278
|
-
ObjectSpace.each_object(Class){|aClass|
|
279
|
-
|
280
|
-
}
|
281
|
-
if class_object.nil?
|
282
|
-
|
283
|
-
else
|
284
|
-
|
285
|
-
end
|
283
|
+
#class_object = nil
|
284
|
+
#ObjectSpace.each_object(Class){|aClass|
|
285
|
+
# class_object = aClass if aClass.to_s == searched_class
|
286
|
+
#}
|
287
|
+
#if class_object.nil?
|
288
|
+
# raise Exception.new("Unknown class #{searched_class}.")
|
289
|
+
#else
|
290
|
+
# return class_object
|
291
|
+
#end
|
292
|
+
Object.const_get searched_class
|
286
293
|
end
|
287
294
|
|
288
295
|
def compare_xml_elements element1, element2 #:nodoc:
|
@@ -0,0 +1 @@
|
|
1
|
+
ADAPTOR_ROOT = "/usr/share/oademand/sugarcrm4.5/installer"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
2
|
+
|
3
|
+
libs = " -r irb/completion"
|
4
|
+
libs << " -r readline"
|
5
|
+
libs << " -r rubygems"
|
6
|
+
require 'rubygems'
|
7
|
+
|
8
|
+
begin
|
9
|
+
exists_debug_lib = require 'ruby-debug'
|
10
|
+
if !exists_debug_lib.nil? && exists_debug_lib == true
|
11
|
+
libs << " -r ruby-debug"
|
12
|
+
end
|
13
|
+
puts "Console have installed \"ruby-debug\" library."
|
14
|
+
rescue Exception => e
|
15
|
+
puts "Console haven't installed \"ruby-debug\" library."
|
16
|
+
end
|
17
|
+
|
18
|
+
libs << " -r adaptation"
|
19
|
+
|
20
|
+
if RUBY_PLATFORM =~ /(:?mswin|mingw)/
|
21
|
+
ENV_PATH = "/windows/temp"
|
22
|
+
else
|
23
|
+
ENV_PATH = "/tmp"
|
24
|
+
end
|
25
|
+
|
26
|
+
f = File.new("#{ENV_PATH}/adaptor_path.rb", "w")
|
27
|
+
path="ADAPTOR_ROOT = \"" + "#{ADAPTOR_ROOT}\""
|
28
|
+
f.write("#{path}")
|
29
|
+
f.close
|
30
|
+
|
31
|
+
libs << " -r #{ENV_PATH}/adaptor_path.rb"
|
32
|
+
libs << " -r adaptation/console/environment"
|
33
|
+
exec "#{irb} #{libs} --simple-prompt"
|
34
|
+
|
@@ -57,7 +57,7 @@ class AppGenerator < Rails::Generator::Base
|
|
57
57
|
#m.file "environments/test.rb", "config/environments/test.rb"
|
58
58
|
|
59
59
|
# Scripts
|
60
|
-
%w( generate destroy about subscribe breakpointer ).each do |file|
|
60
|
+
%w( generate destroy about subscribe breakpointer console ).each do |file|
|
61
61
|
m.file "bin/#{file}", "script/#{file}", script_options
|
62
62
|
end
|
63
63
|
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: adaptation
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date:
|
6
|
+
version: 0.0.4
|
7
|
+
date: 2008-06-11 00:00:00 +02:00
|
8
8
|
summary: Framework to facilitate web-application interaction.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,92 +29,91 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Xavi Vila Morell
|
31
31
|
files:
|
32
|
-
- bin/
|
32
|
+
- bin/subscribe
|
33
33
|
- bin/destroy
|
34
|
-
- bin/adaptation
|
35
|
-
- bin/about
|
36
34
|
- bin/breakpointer
|
37
|
-
- bin/
|
35
|
+
- bin/about
|
36
|
+
- bin/adaptation
|
37
|
+
- bin/generate
|
38
|
+
- bin/console
|
38
39
|
- bin/mom
|
39
|
-
- bin/subscribe
|
40
|
-
- lib/rails_generator.rb
|
41
|
-
- lib/adaptation
|
42
|
-
- lib/binding_of_caller.rb
|
43
|
-
- lib/breakpoint_client.rb
|
44
|
-
- lib/adaptation.rb
|
45
|
-
- lib/commands.rb
|
46
40
|
- lib/breakpoint.rb
|
47
|
-
- lib/
|
48
|
-
- lib/
|
49
|
-
- lib/
|
41
|
+
- lib/adaptation
|
42
|
+
- lib/adaptation/base.rb
|
43
|
+
- lib/adaptation/console
|
44
|
+
- lib/adaptation/console/environment.rb
|
50
45
|
- lib/adaptation/version.rb
|
51
|
-
- lib/adaptation/mom.rb
|
46
|
+
- lib/adaptation/mom.rb
|
52
47
|
- lib/adaptation/message.rb
|
53
48
|
- lib/adaptation/adaptor.rb
|
54
49
|
- lib/adaptation/druby_subscriber.rb
|
55
|
-
- lib/adaptation/druby_subscriber.rb~
|
56
|
-
- lib/adaptation/mom.rb
|
57
50
|
- lib/adaptation/test
|
58
|
-
- lib/adaptation/
|
59
|
-
- lib/adaptation/base.rb
|
51
|
+
- lib/adaptation/test/fake_fixtures.rb
|
60
52
|
- lib/adaptation/test/test_help.rb
|
61
|
-
- lib/commands
|
62
|
-
- lib/
|
63
|
-
- lib/commands/destroy.rb
|
64
|
-
- lib/commands/subscribe.rb
|
65
|
-
- lib/commands/about.rb
|
66
|
-
- lib/commands/breakpointer.rb
|
67
|
-
- lib/commands/generate.rb
|
68
|
-
- lib/rails_generator/lookup.rb
|
69
|
-
- lib/rails_generator/generators
|
70
|
-
- lib/rails_generator/commands.rb
|
71
|
-
- lib/rails_generator/scripts.rb
|
72
|
-
- lib/rails_generator/simple_logger.rb
|
53
|
+
- lib/commands.rb
|
54
|
+
- lib/rails_generator
|
73
55
|
- lib/rails_generator/options.rb
|
74
|
-
- lib/rails_generator/
|
56
|
+
- lib/rails_generator/simple_logger.rb
|
57
|
+
- lib/rails_generator/base.rb
|
58
|
+
- lib/rails_generator/commands.rb
|
59
|
+
- lib/rails_generator/lookup.rb
|
75
60
|
- lib/rails_generator/manifest.rb
|
76
|
-
- lib/rails_generator/scripts
|
77
61
|
- lib/rails_generator/generated_attribute.rb
|
78
|
-
- lib/rails_generator/
|
79
|
-
- lib/rails_generator/
|
62
|
+
- lib/rails_generator/scripts.rb
|
63
|
+
- lib/rails_generator/scripts
|
64
|
+
- lib/rails_generator/scripts/update.rb
|
65
|
+
- lib/rails_generator/scripts/destroy.rb
|
66
|
+
- lib/rails_generator/scripts/generate.rb
|
67
|
+
- lib/rails_generator/spec.rb
|
68
|
+
- lib/rails_generator/generators
|
80
69
|
- lib/rails_generator/generators/applications
|
70
|
+
- lib/rails_generator/generators/applications/app
|
71
|
+
- lib/rails_generator/generators/applications/app/USAGE
|
72
|
+
- lib/rails_generator/generators/applications/app/app_generator.rb
|
73
|
+
- lib/rails_generator/generators/components
|
81
74
|
- lib/rails_generator/generators/components/model
|
82
|
-
- lib/rails_generator/generators/components/adaptor
|
83
|
-
- lib/rails_generator/generators/components/message
|
84
75
|
- lib/rails_generator/generators/components/model/USAGE
|
85
|
-
- lib/rails_generator/generators/components/model/model_generator.rb
|
86
76
|
- lib/rails_generator/generators/components/model/templates
|
87
77
|
- lib/rails_generator/generators/components/model/templates/unit_test.rb
|
88
78
|
- lib/rails_generator/generators/components/model/templates/fixtures.yml
|
89
|
-
- lib/rails_generator/generators/components/model/templates/model.rb
|
90
79
|
- lib/rails_generator/generators/components/model/templates/migration.rb
|
91
|
-
- lib/rails_generator/generators/components/
|
92
|
-
- lib/rails_generator/generators/components/
|
93
|
-
- lib/rails_generator/generators/components/
|
94
|
-
- lib/rails_generator/generators/components/adaptor/templates/adaptor.rb
|
95
|
-
- lib/rails_generator/generators/components/adaptor/templates/functional_test.rb
|
80
|
+
- lib/rails_generator/generators/components/model/templates/model.rb
|
81
|
+
- lib/rails_generator/generators/components/model/model_generator.rb
|
82
|
+
- lib/rails_generator/generators/components/message
|
96
83
|
- lib/rails_generator/generators/components/message/USAGE
|
97
|
-
- lib/rails_generator/generators/components/message/message_generator.rb
|
98
84
|
- lib/rails_generator/generators/components/message/templates
|
99
|
-
- lib/rails_generator/generators/components/message/templates/message.rb
|
100
85
|
- lib/rails_generator/generators/components/message/templates/unit_test.rb
|
86
|
+
- lib/rails_generator/generators/components/message/templates/message.rb
|
101
87
|
- lib/rails_generator/generators/components/message/templates/fixtures.xml
|
102
|
-
- lib/rails_generator/generators/
|
103
|
-
- lib/rails_generator/generators/
|
104
|
-
- lib/rails_generator/generators/
|
105
|
-
- lib/rails_generator/generators/
|
106
|
-
- lib/rails_generator/
|
107
|
-
- lib/rails_generator/
|
108
|
-
- lib/rails_generator/
|
88
|
+
- lib/rails_generator/generators/components/message/message_generator.rb
|
89
|
+
- lib/rails_generator/generators/components/adaptor
|
90
|
+
- lib/rails_generator/generators/components/adaptor/USAGE
|
91
|
+
- lib/rails_generator/generators/components/adaptor/templates
|
92
|
+
- lib/rails_generator/generators/components/adaptor/templates/adaptor.rb
|
93
|
+
- lib/rails_generator/generators/components/adaptor/templates/functional_test.rb
|
94
|
+
- lib/rails_generator/generators/components/adaptor/adaptor_generator.rb
|
95
|
+
- lib/binding_of_caller.rb
|
96
|
+
- lib/rails_generator.rb
|
97
|
+
- lib/ruby_version_check.rb
|
98
|
+
- lib/adaptation.rb
|
99
|
+
- lib/commands
|
100
|
+
- lib/commands/breakpointer.rb
|
101
|
+
- lib/commands/console.rb
|
102
|
+
- lib/commands/about.rb
|
103
|
+
- lib/commands/adaptor_path.rb
|
104
|
+
- lib/commands/subscribe.rb
|
105
|
+
- lib/commands/destroy.rb
|
106
|
+
- lib/commands/generate.rb
|
107
|
+
- lib/breakpoint_client.rb
|
109
108
|
- helpers/publish.rb
|
110
109
|
- helpers/test_helper.rb
|
111
110
|
- doc/README_FOR_APP
|
112
111
|
- configs/databases
|
112
|
+
- configs/databases/mysql.yml
|
113
|
+
- configs/mom.yml
|
113
114
|
- configs/settings.yml
|
114
115
|
- configs/empty.log
|
115
116
|
- configs/boot.rb
|
116
|
-
- configs/mom.yml
|
117
|
-
- configs/databases/mysql.yml
|
118
117
|
- dispatches/dispatch.rb
|
119
118
|
- dispatches/publish.rb
|
120
119
|
- README
|
data/bin/mom~
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'adaptation'
|
3
|
-
require 'adaptation/mom'
|
4
|
-
|
5
|
-
DEFAULT_HOST = "127.0.0.1"
|
6
|
-
DEFAULT_PORT = "8080"
|
7
|
-
|
8
|
-
# search mom configuration file.
|
9
|
-
# - first by specified parameter
|
10
|
-
# - second in /etc/adaptation (*nix systems)
|
11
|
-
# - third in the gem itself
|
12
|
-
|
13
|
-
if File.exists?(File.dirname(__FILE__) + '/../configs/mom.yml')
|
14
|
-
file = File.dirname(__FILE__) + '/../configs/mom.yml'
|
15
|
-
end
|
16
|
-
|
17
|
-
if File.exists?('/etc/adaptation/mom.yml')
|
18
|
-
file = '/etc/adaptation/mom.yml'
|
19
|
-
end
|
20
|
-
|
21
|
-
if %w(--file -f).include? ARGV.first
|
22
|
-
file = ARGV[1]
|
23
|
-
end
|
24
|
-
|
25
|
-
#if %w(--environment -e).include? ARGV.first
|
26
|
-
# environment = ARGV[1]
|
27
|
-
#end
|
28
|
-
environment = "development"
|
29
|
-
|
30
|
-
if file.nil?
|
31
|
-
config = {"mom" => {"type" => "druby", "host" => DEFAULT_HOST, "port" => DEFAULT_PORT}}
|
32
|
-
else
|
33
|
-
config = YAML::load(File.open(file))[environment]
|
34
|
-
end
|
35
|
-
|
36
|
-
Signal.trap("INT") { puts "Shutting down MOM server (#{config["mom"]["type"]})"; exit }
|
37
|
-
|
38
|
-
case config["mom"]["type"]
|
39
|
-
when "druby"
|
40
|
-
mom_uri = "druby://#{config["mom"]["host"]}:#{config["mom"]["port"]}"
|
41
|
-
mom = Adaptation::Mom::Mom.new mom_uri
|
42
|
-
mom.start
|
43
|
-
#when "xmlblaster"
|
44
|
-
else
|
45
|
-
puts "Unknown MOM server type: #{config["mom"]["type"]}"
|
46
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'drb'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module Adaptation
|
5
|
-
|
6
|
-
module Mom
|
7
|
-
|
8
|
-
class DrubySubscriber
|
9
|
-
|
10
|
-
def initialize subscriber_uri, mom_uri, topics
|
11
|
-
@subscriber_uri = subscriber_uri
|
12
|
-
@mom_uri = mom_uri
|
13
|
-
@topics = topics
|
14
|
-
@adaptors_list = Array.new
|
15
|
-
end
|
16
|
-
|
17
|
-
def process message, topic
|
18
|
-
if ( (@topics.include?(topic)) or (@topics == "all") )
|
19
|
-
system("ruby public/dispatch.rb #{message}")
|
20
|
-
end
|
21
|
-
puts "#{topic} => #{message}"
|
22
|
-
end
|
23
|
-
|
24
|
-
def subscription_result subscribed
|
25
|
-
if subscribed
|
26
|
-
puts "Subscribed to mom (#{@mom_uri}). Listening at #{@subscriber_uri}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# TODO: Think what exactly is this subscriber:
|
31
|
-
# - path to file
|
32
|
-
# - combination of a path and a set of conditions <- looks better...
|
33
|
-
# - ...
|
34
|
-
def note_me_down adaptor
|
35
|
-
unless @adaptors_list.include? adaptor
|
36
|
-
@adaptors_list << adaptor
|
37
|
-
puts "Added adaptor: #{adaptor}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def start
|
42
|
-
begin
|
43
|
-
# try to start the subscriber service,
|
44
|
-
# using the uri specified in config/mom.yml
|
45
|
-
DRb.start_service(@subscriber_uri, self)
|
46
|
-
|
47
|
-
# subscribe that uri to the mom
|
48
|
-
mom = DRbObject.new(nil, @mom_uri)
|
49
|
-
mom.subscribe @subscriber_uri
|
50
|
-
rescue Exception => e
|
51
|
-
# desired uri already in use...
|
52
|
-
# if the process using it is a subscriber, this
|
53
|
-
# shouldn't be a problem
|
54
|
-
end
|
55
|
-
|
56
|
-
# try to tell to the subscriber using the uri
|
57
|
-
# (may be this self instance of DrubySubscriber),
|
58
|
-
# that we want to be executed when the MOM
|
59
|
-
# calls its process method
|
60
|
-
begin
|
61
|
-
subscriber = DRbObject.new(nil, @subscriber_uri)
|
62
|
-
routes_file = File.expand_path(File.dirname(__FILE__) + '/../config/routes.rb')
|
63
|
-
subscriber.note_me_down routes_file
|
64
|
-
rescue Exception => e
|
65
|
-
# the process using @subscriber_uri is not
|
66
|
-
# an instance of DrubySubsciber...
|
67
|
-
puts "Couldn't start or find subscriber at #{@subscriber_uri}:"
|
68
|
-
puts "#{e}"
|
69
|
-
return
|
70
|
-
end
|
71
|
-
|
72
|
-
DRb.thread.join # Don't exit just yet!
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
data/lib/adaptation/mom.rb~
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'drb'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module Adaptation
|
5
|
-
|
6
|
-
module Mom
|
7
|
-
|
8
|
-
class Mom
|
9
|
-
|
10
|
-
def initialize mom_uri
|
11
|
-
@mom_uri = mom_uri
|
12
|
-
end
|
13
|
-
|
14
|
-
def subscribe drb_uri
|
15
|
-
unless get_subscribers.include?(drb_uri)
|
16
|
-
add_subscriber drb_uri
|
17
|
-
puts "Added new subscriber: #{drb_uri}"
|
18
|
-
oapdaemon = DRbObject.new(nil, drb_uri)
|
19
|
-
oapdaemon.subscription_result true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def publish message, topic
|
24
|
-
# Tell subscribed hosts to execute their adaptors
|
25
|
-
puts "-----------------------------------"
|
26
|
-
puts "Received message in topic: #{topic}"
|
27
|
-
puts "#{message}"
|
28
|
-
puts "-----------------------------------"
|
29
|
-
get_subscribers.each do |uri|
|
30
|
-
puts "Calling #{uri}"
|
31
|
-
DRb.start_service
|
32
|
-
oapdaemon = DRbObject.new(nil, uri)
|
33
|
-
oapdaemon.call_adaptor message, topic
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def start
|
38
|
-
DRb.start_service(@mom_uri, self)
|
39
|
-
puts "MOM started. Listening at #{@mom_uri}"
|
40
|
-
DRb.thread.join # Don't exit just yet
|
41
|
-
end
|
42
|
-
|
43
|
-
def list
|
44
|
-
puts "MOM subscriptions:"
|
45
|
-
get_subscribers.each do |s|
|
46
|
-
puts " #{s}"
|
47
|
-
end
|
48
|
-
return
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def add_subscriber drb_uri
|
54
|
-
subscribers = get_subscribers
|
55
|
-
subscribers << drb_uri unless subscribers.include?(drb_uri)
|
56
|
-
sf = File.new('subscribers.yml', 'w')
|
57
|
-
sf.write(YAML::dump(subscribers))
|
58
|
-
sf.close
|
59
|
-
end
|
60
|
-
|
61
|
-
def get_subscribers
|
62
|
-
if File.exists?('subscribers.yml')
|
63
|
-
subscribers = YAML::load(File.open('subscribers.yml'))
|
64
|
-
else
|
65
|
-
subscribers = Array.new
|
66
|
-
end
|
67
|
-
subscribers
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'drb'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module Adaptation
|
5
|
-
|
6
|
-
module Mom
|
7
|
-
|
8
|
-
class druby_subscriber
|
9
|
-
|
10
|
-
def initialize subscriber_uri, mom_uri, topics
|
11
|
-
@subscriber_uri = subscriber_uri
|
12
|
-
@mom_uri = mom_uri
|
13
|
-
@topics = topics
|
14
|
-
end
|
15
|
-
|
16
|
-
def call_adaptor message, topic
|
17
|
-
if ( (@topics.include?(topic)) or (@topics == "all") )
|
18
|
-
system("ruby public/dispatch.rb #{message}")
|
19
|
-
end
|
20
|
-
puts "#{topic} => #{message}"
|
21
|
-
end
|
22
|
-
|
23
|
-
def subscription_result subscribed
|
24
|
-
if subscribed
|
25
|
-
puts "Subscribed to mom (#{@mom_uri}). Listening at #{@subscriber_uri}"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def start
|
30
|
-
DRb.start_service(@subscriber_uri, self)
|
31
|
-
|
32
|
-
mom = DRbObject.new(nil, @mom_uri)
|
33
|
-
mom.subscribe @subscriber_uri
|
34
|
-
|
35
|
-
DRb.thread.join # Don't exit just yet!
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
data/lib/commands/subscribe.rb~
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'adaptation'
|
2
|
-
|
3
|
-
environment = "development" # TODO: "un-hardcode" this
|
4
|
-
config = YAML::load(File.open("config/mom.yml"))["development"]
|
5
|
-
|
6
|
-
case config["mom"]["type"]
|
7
|
-
when "druby"
|
8
|
-
require 'adaptation/druby_subscriber'
|
9
|
-
|
10
|
-
mom_uri = "druby://#{config["mom"]["host"]}:#{config["mom"]["port"]}"
|
11
|
-
subscriber_uri = "druby://#{config["subscriber"]["host"]}:#{config["subscriber"]["port"]}"
|
12
|
-
topics = config["subscriber"]["topics"].split(' ')
|
13
|
-
|
14
|
-
Signal.trap("INT") { puts "Shutting down subscriber (#{config["mom"]["type"]})"; exit }
|
15
|
-
|
16
|
-
oapdaemon = Adaptation::Mom::DrubySubscriber.new subscriber_uri, mom_uri, topics
|
17
|
-
oapdaemon.start
|
18
|
-
|
19
|
-
#when "xmlblaster"
|
20
|
-
#
|
21
|
-
|
22
|
-
else
|
23
|
-
puts "Unknown MOM server type: #{config["mom"]["type"]}"
|
24
|
-
end
|
25
|
-
|
@@ -1,136 +0,0 @@
|
|
1
|
-
require 'rbconfig'
|
2
|
-
|
3
|
-
class AppGenerator < Rails::Generator::Base
|
4
|
-
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
5
|
-
Config::CONFIG['ruby_install_name'])
|
6
|
-
|
7
|
-
DATABASES = %w(mysql oracle postgresql sqlite2 sqlite3 frontbase)
|
8
|
-
|
9
|
-
default_options :db => "mysql", :shebang => DEFAULT_SHEBANG, :freeze => false
|
10
|
-
mandatory_options :source => "#{File.dirname(__FILE__)}/../../../../.."
|
11
|
-
|
12
|
-
def initialize(runtime_args, runtime_options = {})
|
13
|
-
super
|
14
|
-
usage if args.empty?
|
15
|
-
usage("Databases supported for preconfiguration are: #{DATABASES.join(", ")}") if (options[:db] && !DATABASES.include?(options[:db]))
|
16
|
-
@destination_root = args.shift
|
17
|
-
@app_name = File.basename(File.expand_path(@destination_root))
|
18
|
-
end
|
19
|
-
|
20
|
-
def manifest
|
21
|
-
# Use /usr/bin/env if no special shebang was specified
|
22
|
-
script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
|
23
|
-
dispatcher_options = { :chmod => 0755, :shebang => options[:shebang] }
|
24
|
-
|
25
|
-
record do |m|
|
26
|
-
# Root directory and all subdirectories.
|
27
|
-
m.directory ''
|
28
|
-
BASEDIRS.each { |path| m.directory path }
|
29
|
-
|
30
|
-
# Root
|
31
|
-
m.file "README", "README"
|
32
|
-
|
33
|
-
# Application
|
34
|
-
m.file "helpers/test_helper.rb", "test/test_helper.rb"
|
35
|
-
m.file "helpers/publish.rb", "test/mocks/test/publish.rb"
|
36
|
-
|
37
|
-
# database.yml
|
38
|
-
m.template "configs/databases/#{options[:db]}.yml", "config/database.yml", :assigns => {
|
39
|
-
:app_name => @app_name,
|
40
|
-
:socket => options[:db] == "mysql" ? mysql_socket_location : nil
|
41
|
-
}
|
42
|
-
|
43
|
-
# mom.yml
|
44
|
-
m.template "configs/mom.yml", "config/mom.yml"
|
45
|
-
|
46
|
-
# settings.yml
|
47
|
-
m.template "configs/settings.yml", "config/settings.yml"
|
48
|
-
|
49
|
-
# boot.rb, needed by some scripts
|
50
|
-
m.file "configs/boot.rb", "config/boot.rb"
|
51
|
-
|
52
|
-
# Environments
|
53
|
-
#m.file "environments/boot.rb", "config/boot.rb"
|
54
|
-
#m.template "environments/environment.rb", "config/environment.rb", :assigns => { :freeze => options[:freeze] }
|
55
|
-
#m.file "environments/production.rb", "config/environments/production.rb"
|
56
|
-
#m.file "environments/development.rb", "config/environments/development.rb"
|
57
|
-
#m.file "environments/test.rb", "config/environments/test.rb"
|
58
|
-
|
59
|
-
# Scripts
|
60
|
-
%w( generate destroy about subscribe ).each do |file|
|
61
|
-
m.file "bin/#{file}", "script/#{file}", script_options
|
62
|
-
end
|
63
|
-
|
64
|
-
# Dispatches
|
65
|
-
m.file "dispatches/dispatch.rb", "public/dispatch.rb", script_options
|
66
|
-
m.file "dispatches/publish.rb", "public/publish.rb", script_options
|
67
|
-
|
68
|
-
# Docs
|
69
|
-
m.file "doc/README_FOR_APP", "doc/README_FOR_APP"
|
70
|
-
|
71
|
-
# Logs
|
72
|
-
%w(server production development test).each { |file|
|
73
|
-
m.file "configs/empty.log", "log/#{file}.log", :chmod => 0666
|
74
|
-
}
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
protected
|
79
|
-
def banner
|
80
|
-
"Usage: #{$0} /path/to/your/app [options]"
|
81
|
-
end
|
82
|
-
|
83
|
-
def add_options!(opt)
|
84
|
-
opt.separator ''
|
85
|
-
opt.separator 'Options:'
|
86
|
-
opt.on("-r", "--ruby=path", String,
|
87
|
-
"Path to the Ruby binary of your choice (otherwise scripts use env, dispatchers current path).",
|
88
|
-
"Default: #{DEFAULT_SHEBANG}") { |v| options[:shebang] = v }
|
89
|
-
|
90
|
-
opt.on("-d", "--database=name", String,
|
91
|
-
"Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite2/sqlite3).",
|
92
|
-
"Default: mysql") { |v| options[:db] = v }
|
93
|
-
|
94
|
-
#opt.on("-f", "--freeze",
|
95
|
-
# "Freeze Rails in vendor/rails from the gems generating the skeleton",
|
96
|
-
# "Default: false") { |v| options[:freeze] = v }
|
97
|
-
end
|
98
|
-
|
99
|
-
def mysql_socket_location
|
100
|
-
MYSQL_SOCKET_LOCATIONS.find { |f| File.exists?(f) } unless RUBY_PLATFORM =~ /(:?mswin|mingw)/
|
101
|
-
end
|
102
|
-
|
103
|
-
|
104
|
-
# Installation skeleton. Intermediate directories are automatically
|
105
|
-
# created so don't sweat their absence here.
|
106
|
-
BASEDIRS = %w(
|
107
|
-
app/adaptors
|
108
|
-
app/messages
|
109
|
-
app/models
|
110
|
-
config/environments
|
111
|
-
db
|
112
|
-
doc
|
113
|
-
lib
|
114
|
-
lib/tasks
|
115
|
-
log
|
116
|
-
public
|
117
|
-
script
|
118
|
-
test/fixtures
|
119
|
-
test/functional
|
120
|
-
test/mocks/development
|
121
|
-
test/mocks/test
|
122
|
-
test/unit
|
123
|
-
)
|
124
|
-
|
125
|
-
MYSQL_SOCKET_LOCATIONS = [
|
126
|
-
"/tmp/mysql.sock", # default
|
127
|
-
"/var/run/mysqld/mysqld.sock", # debian/gentoo
|
128
|
-
"/var/tmp/mysql.sock", # freebsd
|
129
|
-
"/var/lib/mysql/mysql.sock", # fedora
|
130
|
-
"/opt/local/lib/mysql/mysql.sock", # fedora
|
131
|
-
"/opt/local/var/run/mysqld/mysqld.sock", # mac + darwinports + mysql
|
132
|
-
"/opt/local/var/run/mysql4/mysqld.sock", # mac + darwinports + mysql4
|
133
|
-
"/opt/local/var/run/mysql5/mysqld.sock", # mac + darwinports + mysql5
|
134
|
-
"/opt/lampp/var/mysql/mysql.sock" # xampp for linux
|
135
|
-
]
|
136
|
-
end
|