class Padrino::Mounter


Mounter.new(“blog_app”, :app_file => “/path/to/blog/app.rb”).to(“/blog”)
Mounter.new(“blog_app”, :app_class => “Blog”).to(“/blog”)
@example
Stores the name of the application (app folder name) and url mount path
Represents a particular mounted padrino application
#

def ==(other)

Parameters:
  • other (Padrino::Mounter) --
def ==(other)
  other.is_a?(Mounter) && self.app_class == other.app_class && self.uri_root == other.uri_root
end

def app_constant

Returns:
  • (Padrino::Application) -
def app_constant
  klass = Object
  for piece in app_class.split("::")
    piece = piece.to_sym
    if klass.const_defined?(piece)
      klass = klass.const_get(piece)
    else
      return
    end
  end
  klass
end

def ensure_app_file!


Raises an exception unless app_file is located properly
##
def ensure_app_file!
  message = "Unable to locate source file for app '#{app_class}', try with :app_file => '/path/app.rb'"
  raise MounterException, message unless @app_file
end

def ensure_app_object!


Raises an exception unless app_obj is defined properly
##
def ensure_app_object!
  message = "Unable to locate app for '#{app_class}', try with :app_class => 'MyAppClass'"
  raise MounterException, message unless @app_obj
end

def host(mount_host)

Parameters:
  • mount_host (String) --
def host(mount_host)
  @app_host = mount_host
  Padrino.insert_mounted_app(self)
  self
end

def initialize(name, options={})

Options Hash: (**options)
  • :gem (Symbol) -- The gem to load the app from (Detected from name)
  • :app_root (Symbol) --
  • :app_obj (Symbol) --
  • :app_file (Symbol) --
  • :app_class (Symbol) --

Parameters:
  • options (Hash) --
  • name (String, Padrino::Application) --
def initialize(name, options={})
  @name      = name.to_s
  @app_class = options[:app_class] || @name.camelize
  @gem       = options[:gem]       || @app_class.split("::").first.underscore
  @app_file  = options[:app_file]  || locate_app_file
  @app_obj   = options[:app_obj]   || app_constant || locate_app_object
  ensure_app_file! || ensure_app_object!
  @app_root  = options[:app_root]  || File.dirname(@app_file)
  @uri_root  = "/"
  Padrino::Reloader.exclude_constants << @app_class
end

def locate_app_file


Returns the determined location of the mounted application main file
#
def locate_app_file
  candidates  = []
  candidates << app_constant.app_file if app_constant.respond_to?(:app_file) && File.exist?(app_constant.app_file.to_s)
  candidates << Padrino.first_caller if File.identical?(Padrino.first_caller.to_s, Padrino.called_from.to_s)
  candidates << Padrino.mounted_root(name.downcase, "app.rb")
  simple_name = name.split("::").last.downcase
  mod_name = name.split("::")[0..-2].join("::")
  Padrino.modules.each do |mod|
    if mod.name == mod_name
      candidates << mod.root(simple_name, "app.rb")
    end
  end
  candidates << Padrino.root("app", "app.rb")
  candidates.find { |candidate| File.exist?(candidate) }
end

def locate_app_object


Locates and requires the file to load the app constant
#
def locate_app_object
  @_app_object ||= begin
    ensure_app_file!
    Padrino.require_dependencies(app_file)
    app_constant
  end
end

def map_onto(router)

Returns:
  • (Padrino::Router) -

Parameters:
  • (Padrino::Router) --
def map_onto(router)
  app_data, app_obj = self, @app_obj
  app_obj.set :uri_root,       app_data.uri_root
  app_obj.set :app_name,       app_data.name
  app_obj.set :app_file,       app_data.app_file unless ::File.exist?(app_obj.app_file)
  app_obj.set :root,           app_data.app_root unless app_data.app_root.blank?
  app_obj.set :public_folder,  Padrino.root('public', app_data.uri_root) unless File.exists?(app_obj.public_folder)
  app_obj.set :static,         File.exist?(app_obj.public_folder) if app_obj.nil?
  app_obj.setup_application! # Initializes the app here with above settings.
  router.map(:to => app_obj, :path => app_data.uri_root, :host => app_data.app_host)
end

def named_routes

Returns:
  • (Array) -
def named_routes
  app_obj.routes.map { |route|
    name_array     = "(#{route.name.to_s.split("_").map { |piece| %Q[:#{piece}] }.join(", ")})"
    request_method = route.request_methods.first
    next if route.name.blank? || request_method == 'HEAD'
    original_path = route.original_path.is_a?(Regexp) ? route.original_path.inspect : route.original_path
    full_path = File.join(uri_root, original_path)
    OpenStruct.new(:verb => request_method, :identifier => route.name, :name => name_array, :path => full_path)
  }.compact
end

def routes


Returns the route objects for the mounted application
##
def routes
  app_obj.routes
end

def to(mount_url)

Parameters:
  • mount_url (String) --
def to(mount_url)
  @uri_root  = mount_url
  Padrino.insert_mounted_app(self)
  self
end