Created
March 17, 2009 06:53
-
-
Save deepthawtz/80363 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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[:framework] in your initialization | |
# file. Merb::Config[:framework] 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[:framework] = {}. | |
# | |
# ==== 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 Merb::BootLoader::BuildFramework < Merb::BootLoader | |
class << self | |
# Builds the framework directory structure. | |
# | |
# ==== Returns | |
# nil | |
# | |
# :api: plugin | |
def run | |
$:.push Merb.root unless Merb.root == File.expand_path(Dir.pwd) | |
build_framework | |
nil | |
end | |
# 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 | |
# @overridable | |
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 | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment