padrino-core/lib/padrino-core/mounter/application_extension.rb
module Padrino
class Mounter
module ApplicationExtension
attr_accessor :uri_root, :mounter_options, :cascade
attr_writer :public_folder
def dependencies
@__dependencies ||= Dir.glob("#{root}/**/*.rb").delete_if { |path| path == app_file }
end
def prerequisites
@__prerequisites ||= []
end
def app_file
@__app_file ||= trace_method(:app_file) { mounter_options[:app_file] }
end
def root
@__root ||= trace_method(:root) { File.expand_path("#{app_file}/../") }
end
def public_folder
@public_folder ||= trace_method(:public_folder) { "" }
end
def app_name
@__app_name ||= mounter_options[:app_name] || self.to_s.underscore.to_sym
end
def setup_application!
@configured ||= trace_method(:setup_application!) do
$LOAD_PATH.concat(prerequisites)
require_dependencies if root.start_with?(Padrino.root)
true
end
end
private
def require_dependencies
Padrino.require_dependencies(dependencies, :force => true)
end
def trace_method(method_name)
value = baseclass.send(method_name) if baseclass != self && baseclass.respond_to?(method_name)
value || yield
end
def baseclass
@__baseclass ||= respond_to?(:superclass) ? superclass : self
end
end
end
end