Sha256: 19ebe1957946aff8f4338f929aab930bdd70fc05a325c79ad4d67ae9e56fc19a

Contents?: true

Size: 1.29 KB

Versions: 6

Compression:

Stored size: 1.29 KB

Contents

require 'rack/builder'
require 'active_support/configurable'

module Soybean
  class Application

    attr_reader :services

    def initialize(services, &block)
      load!(services)
      configure(&block)

      logger.info "SOAP Services: START"
      at_exit{ logger.info "SOAP Services: STOP" }

      @app = Rack::Builder.new do
        Soybean.engines.each do |engine|
          engine.logger.info "Service found: #{engine.service.endpoint} route to /#{engine.service.class.name}" if engine.logger
          map "/#{engine.service.endpoint}" do
            run engine.new
          end
        end

        Soybean.engines.last.logger.info ""
      end.to_app
    end

    def call(env)
      @app.call(env)
    end

    def logger(new_logger=nil)
      @logger = new_logger unless new_logger.nil?
      @logger || Soybean.logger
    end

    protected

    def configure(&block)
      instance_eval &block

      logger.datetime_format = "%Y-%m-%d %H:%M:%S"
      logger.formatter = proc { |severity, datetime, progname, msg|
        "#{msg}\n"
      }

      Soybean.engines.each do |engine|
        engine.logger = logger
      end
    end

    def load!(path)
      $:.unshift path
      ActiveSupport::Dependencies.autoload_paths << path
      Dir["#{path}/engines/*"].each { |f| require f }
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
soybean-2.5.5 lib/soybean/application.rb
soybean-2.5.4 lib/soybean/application.rb
soybean-2.5.3 lib/soybean/application.rb
soybean-2.5.2 lib/soybean/application.rb
soybean-2.5.1 lib/soybean/application.rb
soybean-2.5.0 lib/soybean/application.rb