Class: Merb::BootLoader

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

Defined Under Namespace

Classes: AfterAppLoads, BeforeAppLoads, BuildFramework, ChooseAdapter, Cookies, Defaults, Dependencies, DropPidFile, LoadClasses, Logger, MimeTypes, MixinSession, RackUpApplication, ReloadClasses, Router, SetupSession, SetupStubClasses, Templates

Class Method Summary collapse

Class Method Details

.after(klass) ⇒ Object

Execute this boot loader after the specified boot loader.

Parameters

klass<~to_s>

The boot loader class after which this boot loader should be run.

Returns

nil



39
40
41
42
# File 'lib/merb-core/bootloader.rb', line 39

def after(klass)
  move_klass(klass, 1)
  nil
end

.after_app_loads(&block) ⇒ Object

Execute a block of code after the app loads.

Parameters

&block

A block to be added to the callbacks that will be executed after the app loads.



151
152
153
# File 'lib/merb-core/bootloader.rb', line 151

def after_app_loads(&block)
  after_load_callbacks << block
end

.before(klass) ⇒ Object

Execute this boot loader before the specified boot loader.

Parameters

klass<~to_s>

The boot loader class before which this boot loader should be run.

Returns

nil



54
55
56
57
# File 'lib/merb-core/bootloader.rb', line 54

def before(klass)
  move_klass(klass, 0)
  nil
end

.before_app_loads(&block) ⇒ Object

Execute a block of code before the app loads but after dependencies load.

Parameters

&block

A block to be added to the callbacks that will be executed before the app loads.



163
164
165
# File 'lib/merb-core/bootloader.rb', line 163

def before_app_loads(&block)
  before_load_callbacks << block
end

.default_frameworkObject

Set up the default framework

Returns

nil



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/merb-core/bootloader.rb', line 126

def default_framework
  %w[view model helper controller mailer part].each do |component|
    Merb.push_path(component.to_sym, Merb.root_path("app/#{component}s"))
  end
  Merb.push_path(:application,  Merb.root_path("app" / "controllers" / "application.rb"))
  Merb.push_path(:config,       Merb.root_path("config"), nil)
  Merb.push_path(:router,       Merb.dir_for(:config), (Merb::Config[:router_file] || "router.rb"))
  Merb.push_path(:lib,          Merb.root_path("lib"), nil)
  Merb.push_path(:merb,         Merb.root_path("merb"))
  Merb.push_path(:log,          Merb.log_path, nil)
  Merb.push_path(:public,       Merb.root_path("public"), nil)
  Merb.push_path(:stylesheet,   Merb.dir_for(:public) / "stylesheets", nil)
  Merb.push_path(:javascript,   Merb.dir_for(:public) / "javascripts", nil)
  Merb.push_path(:image,        Merb.dir_for(:public) / "images", nil)
  nil
end

.finished?(bootloader) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Determines whether or not a specific bootloader has finished yet.

Parameters

bootloader<String, Class>

The name of the bootloader to check.

Returns

Boolean

Whether or not the bootloader has finished.

Returns:

  • (Boolean)


115
116
117
# File 'lib/merb-core/bootloader.rb', line 115

def finished?(bootloader)
  self.finished.include?(bootloader.to_s)
end

.inherited(klass) ⇒ Object

Adds the inheriting class to the list of subclasses in a position specified by the before and after methods.

Parameters

klass<Class>

The class inheriting from Merb::BootLoader.

Returns

nil



24
25
26
27
# File 'lib/merb-core/bootloader.rb', line 24

def inherited(klass)
  subclasses << klass.to_s
  super
end

.move_klass(klass, where) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Move a class that is inside the bootloader to some place in the Array, relative to another class.

Parameters

klass<~to_s>

The klass to move the bootloader relative to

where<Integer>

0 means insert it before; 1 means insert it after

Returns

nil



72
73
74
75
76
77
78
79
# File 'lib/merb-core/bootloader.rb', line 72

def move_klass(klass, where)
  index = Merb::BootLoader.subclasses.index(klass.to_s)
  if index
    Merb::BootLoader.subclasses.delete(self.to_s)
    Merb::BootLoader.subclasses.insert(index + where, self.to_s)
  end
  nil
end

.runObject

Runs all boot loader classes by calling their run methods.

Returns

nil



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/merb-core/bootloader.rb', line 87

def run
  Merb.started = true
  subklasses = subclasses.dup
  until subclasses.empty?
    time = Time.now.to_i
    bootloader = subclasses.shift
    if (ENV['DEBUG'] || $DEBUG || Merb::Config[:verbose]) && Merb.logger
      Merb.logger.debug!("Loading: #{bootloader}")
    end
    Object.full_const_get(bootloader).run
    if (ENV['DEBUG'] || $DEBUG || Merb::Config[:verbose]) && Merb.logger
      Merb.logger.debug!("It took: #{Time.now.to_i - time}")
    end
    self.finished << bootloader
  end
  self.subclasses = subklasses
  nil
end