module Adaptation class Base def initialize $environment = "development" $config = YAML::load(File.open("#{ADAPTOR_ROOT}/config/settings.yml"))[$environment] # require all adaptors Dir["#{ADAPTOR_ROOT}/app/adaptors/*.rb"].each do |f| require f end # require all messages Dir["#{ADAPTOR_ROOT}/app/messages/*.rb"].reject{|f| f =~ /\/_/}.each do |f| require f end # require all models Dir["#{ADAPTOR_ROOT}/app/models/*.rb"].each do |f| require f end # connect with database -> this could also be avoided? if File.exists?("#{ADAPTOR_ROOT}/config/database.yml") development_configurations = YAML::load(File.open("#{ADAPTOR_ROOT}/config/database.yml"))[$environment] ActiveRecord::Base.configurations.update("development" => development_configurations) ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[$environment]) end end def process(xml_message) # dirty method to discover the message type message_type = xml_message[1..(xml_message.index(/(>| )/) - 1)] begin message_class = get_class_object(message_type.capitalize) message = message_class.to_object(xml_message) adaptor_class = get_class_object("#{message_type.capitalize}Adaptor") adaptor = adaptor_class.new rescue Exception => e # message no implemented in this adaptor return end unless message.check puts "WARNING:Message doesn't validate!" return end adaptor.process message end def get_class_object(searched_class) class_object = nil ObjectSpace.each_object(Class){|aClass| class_object = aClass if aClass.to_s == searched_class } if class_object.nil? #puts "Unknown class #{searched_class}." raise Exception.new("Unknown class #{searched_class}.") else return class_object end end end end