Permalink
Browse files

Merge pull request #1448 from padrino/cleanup-application

More code cleanup
  • Loading branch information...
ujifgc committed Oct 13, 2013
2 parents 97e21d8 + 1848410 commit 66a66c79843a5e49085e52af1987c7400d6bf217
@@ -62,18 +62,10 @@ def env
# No applications were mounted.
#
def application
- raise ApplicationLoadError, "At least one app must be mounted!" unless Padrino.mounted_apps && Padrino.mounted_apps.any?
+ raise ApplicationLoadError, "At least one app must be mounted!" unless Padrino.mounted_apps.present?
router = Padrino::Router.new
Padrino.mounted_apps.each { |app| app.map_onto(router) }
-
- if middleware.present?
- builder = Rack::Builder.new
- middleware.each { |c,a,b| builder.use(c, *a, &b) }
- builder.run(router)
- builder.to_app
- else
- router
- end
+ middleware.present? ? add_middleware(router) : router
end
##
@@ -91,21 +83,14 @@ def application
#
def configure_apps(&block)
return unless block_given?
- @@_global_configurations ||= []
- @@_global_configurations << block
- @_global_configuration = lambda do |app|
- @@_global_configurations.each do |configuration|
- app.class_eval(&configuration)
- end
- end
+ global_configurations << block
end
##
- # Returns project-wide configuration settings defined in
- # {configure_apps} block.
+ # Stores global configuration blocks.
#
- def apps_configuration
- @_global_configuration
+ def global_configurations
+ @_global_configurations ||= []
end
##
@@ -129,6 +114,16 @@ def set_encoding
nil
end
+ ##
+ # Creates Rack stack with the router added to the middleware chain.
+ #
+ def add_middleware(router)
+ builder = Rack::Builder.new
+ middleware.each{ |mw,args,block| builder.use(mw, *args, &block) }
+ builder.run(router)
+ builder.to_app
+ end
+
##
# A Rack::Builder object that allows to add middlewares in front of all
# Padrino applications.
@@ -162,8 +157,8 @@ def clear_middleware!
# @yield []
# The given block will be passed to the initialized middleware.
#
- def use(m, *args, &block)
- middleware << [m, args, block]
+ def use(mw, *args, &block)
+ middleware << [mw, args, block]
end
##
@@ -4,9 +4,6 @@
require 'padrino-core/application/showexceptions'
module Padrino
- class ApplicationSetupError < RuntimeError
- end
-
##
# Subclasses of this become independent Padrino applications
# (stemming from Sinatra::Application).
@@ -31,15 +28,8 @@ def inherited(base)
begun_at = Time.now
CALLERS_TO_IGNORE.concat(PADRINO_IGNORE_CALLERS)
base.default_configuration!
- base.prerequisites.concat([
- File.join(base.root, '/models.rb'),
- File.join(base.root, '/models/**/*.rb'),
- File.join(base.root, '/lib.rb'),
- File.join(base.root, '/lib/**/*.rb')
- ]).uniq!
- Padrino.require_dependencies(base.prerequisites)
logger.devel :setup, begun_at, base
- super(base) # Loading the subclass inherited method
+ super(base)
end
##
@@ -57,7 +47,7 @@ def reload!
logger.devel "Reloading application #{settings}"
reset!
reset_router!
- Padrino.require_dependencies(settings.app_file, :force => true) # Reload the app file
+ Padrino.require_dependencies(settings.app_file, :force => true)
require_dependencies
default_filters!
default_routes!
@@ -108,7 +98,6 @@ def setup_application!
I18n.reload!
end
@_configured = true
- @_configured
end
##
@@ -128,7 +117,13 @@ def run!(options={})
# directory that need to be added to +$LOAD_PATHS+ from this application
#
def load_paths
- @_load_paths ||= %w[models lib mailers controllers helpers].map { |path| File.join(settings.root, path) }
+ @_load_paths ||= [
+ 'models',
+ 'lib',
+ 'mailers',
+ 'controllers',
+ 'helpers',
+ ].map { |path| File.join(settings.root, path) }
end
##
@@ -144,8 +139,14 @@ def load_paths
#
def dependencies
[
- 'urls.rb', 'config/urls.rb', 'mailers/*.rb', 'mailers.rb',
- 'controllers/**/*.rb', 'controllers.rb', 'helpers/**/*.rb', 'helpers.rb'
+ 'urls.rb',
+ 'config/urls.rb',
+ 'mailers/*.rb',
+ 'mailers.rb',
+ 'controllers/**/*.rb',
+ 'controllers.rb',
+ 'helpers/**/*.rb',
+ 'helpers.rb',
].map { |file| Dir[File.join(settings.root, file)] }.flatten
end
@@ -169,37 +170,56 @@ def prerequisites
end
protected
+
##
# Defines default settings for Padrino application.
#
def default_configuration!
- # Overwriting Sinatra defaults
- set :app_file, File.expand_path(caller_files.first || $0) # Assume app file is first caller
+ set :app_file, File.expand_path(caller_files.first || $0)
+ set :app_name, settings.to_s.underscore.to_sym
+
set :environment, Padrino.env
set :reload, Proc.new { development? }
set :logging, Proc.new { development? }
+
set :method_override, true
- set :sessions, false
- set :public_folder, Proc.new { Padrino.root('public', uri_root) }
- set :views, Proc.new { File.join(root, 'views') }
- set :images_path, Proc.new { File.join(public_folder, 'images') }
- set :protection, true
+ set :default_builder, 'StandardFormBuilder'
- set :haml, { :ugly => (Padrino.env == :production) } if defined?(Haml)
+ default_paths!
+ default_security!
+ global_configuration!
+ setup_prerequisites!
+ end
- # Padrino specific
- set :uri_root, '/'
- set :app_name, settings.to_s.underscore.to_sym
- set :default_builder, 'StandardFormBuilder'
- set :authentication, false
+ def setup_prerequisites!
+ prerequisites.concat(default_prerequisites).uniq!
+ Padrino.require_dependencies(prerequisites)
+ end
- set :locale_path, Proc.new { Dir[File.join(settings.root, '/locale/**/*.{rb,yml}')] }
+ def default_paths!
+ set :locale_path, Proc.new { Dir.glob File.join(root, 'locale/**/*.{rb,yml}') }
+ set :views, Proc.new { File.join(root, 'views') }
- # Authenticity token
+ set :uri_root, '/'
+ set :public_folder, Proc.new { Padrino.root('public', uri_root) }
+ set :images_path, Proc.new { File.join(public_folder, 'images') }
+ end
+
+ def default_security!
+ set :protection, true
+ set :authentication, false
+ set :sessions, false
set :protect_from_csrf, false
set :allow_disabled_csrf, false
- # Load the Global Configurations
- class_eval(&Padrino.apps_configuration) if Padrino.apps_configuration
+ end
+
+ ##
+ # Applies global padrino configuration blocks to current application.
+ #
+ def global_configuration!
+ Padrino.global_configurations.each do |configuration|
+ class_eval(&configuration)
+ end
end
##
@@ -221,9 +241,7 @@ def default_routes!
#
def default_filters!
before do
- unless @_content_type
- response['Content-Type'] = 'text/html;charset=utf-8'
- end
+ response['Content-Type'] = 'text/html;charset=utf-8' unless @_content_type
end
end
@@ -250,7 +268,20 @@ def require_dependencies
Padrino.require_dependencies(dependencies, :force => true)
end
+ ##
+ # Returns globs of default paths of application prerequisites.
+ #
+ def default_prerequisites
+ [
+ '/models.rb',
+ '/models/**/*.rb',
+ '/lib.rb',
+ '/lib/**/*.rb',
+ ].map{ |glob| File.join(settings.root, glob) }
+ end
+
private
+
# Overrides the default middleware for Sinatra based on Padrino conventions.
# Also initializes the application after setting up the middleware.
def setup_default_middleware(builder)
@@ -40,15 +40,18 @@ class Template < Tilt::ErubisTemplate
def render(*args)
app = args.first
app_class = app.class
- @padrino_app = app.kind_of?(Padrino::Application) ||
- (app_class.respond_to?(:erb) && app_class.erb[:engine_class] == Padrino::Erubis::SafeBufferTemplate)
+ @is_padrino_app = app.kind_of?(Padrino::Application) ||
+ (app_class.respond_to?(:erb) && app_class.erb[:engine_class] == Padrino::Erubis::SafeBufferTemplate)
super
end
+ ##
+ # In preamble we need a flag `__in_erb_template` and SafeBuffer for padrino apps.
+ #
def precompiled_preamble(locals)
- buf = @padrino_app ? "ActiveSupport::SafeBuffer.new" : "''"
- old_postamble = super.split("\n")[0..-2]
- [old_postamble, "__in_erb_template = true;#{@outvar} = _buf = (#{@outvar} || #{buf})"].join("\n")
+ original = super
+ return original unless @is_padrino_app
+ "__in_erb_template = true\n" << original.rpartition("\n").first << "#{@outvar} = _buf = ActiveSupport::SafeBuffer.new\n"
end
end
end
@@ -57,8 +60,9 @@ def precompiled_preamble(locals)
Tilt.prefer(Padrino::Erubis::Template, :erb)
if defined? Padrino::Rendering
- Padrino::Rendering.engine_configurations[:erb] =
- {:engine_class => Padrino::Erubis::SafeBufferTemplate}
+ Padrino::Rendering.engine_configurations[:erb] = {
+ :engine_class => Padrino::Erubis::SafeBufferTemplate,
+ }
end
rescue LoadError
end
@@ -17,8 +17,9 @@ def self.rails_xss_safe?
end
if defined? Padrino::Rendering
- Padrino::Rendering.engine_configurations[:haml] =
- {:escape_html => true}
+ Padrino::Rendering.engine_configurations[:haml] = {
+ :escape_html => true,
+ }
class Tilt::HamlTemplate
include Padrino::Rendering::SafeTemplate
@@ -2,15 +2,18 @@
require 'slim'
if defined? Padrino::Rendering
- Padrino::Rendering.engine_configurations[:slim] =
- {:generator => Temple::Generators::RailsOutputBuffer,
- :buffer => "@_out_buf", :use_html_safe => true, :disable_capture => true}
+ Padrino::Rendering.engine_configurations[:slim] = {
+ :generator => Temple::Generators::RailsOutputBuffer,
+ :buffer => "@_out_buf",
+ :use_html_safe => true,
+ :disable_capture => true,
+ }
class Slim::Template
include Padrino::Rendering::SafeTemplate
def precompiled_preamble(locals)
- "__in_slim_template = true;#{super}"
+ "__in_slim_template = true\n" << super
end
end
end
@@ -25,19 +25,6 @@ class PadrinoTestApp2 < Padrino::Application; end
assert !Padrino.configure_apps
end
- should 'check haml options on production' do
- assert defined?(Haml), 'Haml not defined'
- assert_equal :test, PadrinoPristine.environment
- assert !PadrinoPristine.haml[:ugly]
- Padrino.stub :env, :production do
- PadrinoPristine.send :default_configuration!
- assert_equal :production, Padrino.env
- assert_equal :production, PadrinoPristine.environment
- assert PadrinoPristine.haml[:ugly]
- PadrinoPristine.environment = :test
- end
- end
-
should 'check padrino specific options' do
assert !PadrinoPristine.instance_variable_get(:@_configured)
PadrinoPristine.send(:setup_application!)

0 comments on commit 66a66c7

Please sign in to comment.