class Ramaze::Files

Class that makes it possible to easily use multiple public directories in your Ramaze application.

@author Michael Fellinger @since 14-03-2009

Public Class Methods

new(*roots) click to toggle source

Creates a new instance of the class, stores the given root directories and syncs the changes with Rack::Cascade.

@author Michael Fellinger @since 14-03-2009 @param [Array] roots A set of root directories that contain a number of

public directories.
# File lib/ramaze/files.rb, line 19
def initialize(*roots)
  @roots = roots.flatten.map{|root| File.expand_path(root.to_s) }
  sync
end

Public Instance Methods

<<(path) click to toggle source

Adds a new path to the list of root directories.

@author Michael Fellinger @since 14-03-2009 @param [String] path The path to add to the existing root directories.

# File lib/ramaze/files.rb, line 42
def <<(path)
  @roots << File.expand_path(path.to_s)
  @roots.uniq!
  sync
end
call(env) click to toggle source

Allows this class to be called as a Rack middleware.

@author Michael Fellinger @since 14-03-2009 @param [Hash] env Hash containing all the environment details.

# File lib/ramaze/files.rb, line 31
def call(env)
  @cascade.call(env)
end
sync() click to toggle source

Syncs the class with Rack::Cascade.

@author Michael Fellinger @since 14-03-2009

# File lib/ramaze/files.rb, line 54
def sync
  file_apps = @roots.map { |root| Rack::File.new(root) }
  @cascade  = Rack::Cascade.new(file_apps)
end