Sha256: 10255f2a46c92f3ea5cc281f02d8597502ce91b06f995786daaed5579cafd11d

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

module Adaptation

  class Base

    def initialize
      $environment = "development"
      $config = YAML::load(File.open("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?("config/database.yml")
        development_configurations = YAML::load(File.open("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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
adaptation-0.0.1 lib/adaptation/base.rb
adaptation-0.0.2 lib/adaptation/base.rb