Class: Merb::BootLoader::BuildFramework

Inherits:
Merb::BootLoader show all
Defined in:
lib/merb-core/bootloader.rb

Overview

Build the framework paths.

By default, the following paths will be used:

application

Merb.root/app/controller/application.rb

config

Merb.root/config

lib

Merb.root/lib

log

Merb.root/log

view

Merb.root/app/views

model

Merb.root/app/models

controller

Merb.root/app/controllers

helper

Merb.root/app/helpers

mailer

Merb.root/app/mailers

part

Merb.root/app/parts

To override the default, set Merb::Config in your initialization file. Merb::Config takes a Hash whose key is the name of the path, and whose values can be passed into Merb.push_path (see Merb.push_path for full details).

Notes

All paths will default to Merb.root, so you can get a flat-file structure by doing Merb::Config = {}.

Example

Merb::Config[:framework] = {
  :view   => Merb.root / "views",
  :model  => Merb.root / "models",
  :lib    => Merb.root / "lib",
  :public => [Merb.root / "public", nil]
  :router => [Merb.root / "config", "router.rb"]
}

That will set up a flat directory structure with the config files and controller files under Merb.root, but with models, views, and lib with their own folders off of Merb.root.

Class Method Summary collapse

Methods inherited from Merb::BootLoader

after, after_app_loads, before, before_app_loads, before_master_shutdown, before_worker_shutdown, default_framework, finished?, inherited, move_klass

Class Method Details

.build_frameworkObject

Sets up merb paths to support the app's file layout. First, config/framework.rb is checked, next we look for Merb.root/framework.rb, finally we use the default merb layout (Merb::BootLoader.default_framework)

This method can be overriden to support other application layouts.

Returns

nil

:api: plugin


323
324
325
326
327
328
329
330
331
332
333
334
335
336
# File 'lib/merb-core/bootloader.rb', line 323

def build_framework
  if File.exists?(Merb.root / "config" / "framework.rb")
    require Merb.root / "config" / "framework"
  elsif File.exists?(Merb.root / "framework.rb")
    require Merb.root / "framework"
  else
    Merb::BootLoader.default_framework
  end
  (Merb::Config[:framework] || {}).each do |name, path|
    path = Array(path)
    Merb.push_path(name, path.first, path.length == 2 ? path[1] : "**/*.rb")
  end
  nil
end

.runObject

Builds the framework directory structure.

Returns

nil

:api: plugin


306
307
308
309
310
311
# File 'lib/merb-core/bootloader.rb', line 306

def run
  $:.push Merb.root unless Merb.root == File.expand_path(Dir.pwd)
  STDOUT.puts "Merb root at: #{Merb.root}" unless Merb.testing?
  build_framework
  nil
end