Skip to content

Instantly share code, notes, and snippets.

@deepthawtz
Created March 17, 2009 06:53
Show Gist options
  • Save deepthawtz/80363 to your computer and use it in GitHub Desktop.
Save deepthawtz/80363 to your computer and use it in GitHub Desktop.
# 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