#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.  The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
# License for the specific language governing permissions and limitations
# under the License.

load File.join(File.dirname(__FILE__), 'lib', 'initialize.rb')

def static_dir_for(name)
  Rack::Directory.new( File.join(File.dirname(__FILE__), "public", name))
end

# Mount static assets directories and index entrypoint
#
# The 'IndexApp' is small Sinatra::Base application that
# sits on the '/' route and display list of available frontends.
#
static_files = {
  '/' => Deltacloud::IndexApp,
  '/stylesheets' =>  static_dir_for('stylesheets'),
  '/javascripts' =>  static_dir_for('javascripts'),
  '/images' =>  static_dir_for('images')
}

# The 'generate_routes_for' also require the frontend
# servers and all dependencies.
#
routes = Deltacloud.generate_routes

run Rack::Builder.new {
  use Rack::MatrixParams
  run Rack::URLMap.new(routes.merge(static_files))
}
