app/controllers/application_controller.rb in local_pac-0.3.0 vs app/controllers/application_controller.rb in local_pac-0.4.0
- old
+ new
@@ -1,48 +1,68 @@
# encoding: utf-8
-require 'haml'
-require 'i18n'
-require 'i18n/backend/fallbacks'
-require 'rack/contrib/locale'
-require 'sprockets-helpers'
-require 'sass'
-require 'sinatra'
-
module LocalPac
module App
class ApplicationController < Sinatra::Base
+
+ @local_storage_mutex = Mutex.new
+
+ class << self
+ attr_reader :local_storage_mutex
+ end
+
set :root, ::File.expand_path('../../', __FILE__)
set :haml, :format => :html5
def local_storage
return @local_storage if @local_storage
- if settings.respond_to? :local_storage
- @local_storage = settings.local_storage
- else
- @local_storage = LocalPac::LocalStorage.new
+ ApplicationController.local_storage_mutex.synchronize do
+ if settings.respond_to? :local_storage
+ LocalPac.ui_logger.debug 'Using local storage in production mode: loaded once on startup'
+ @local_storage = settings.local_storage
+ else
+ LocalPac.ui_logger.debug 'Using local storage in development mode: reloaded per request'
+ @local_storage = LocalPac::LocalStorage.new
+ end
end
end
use Rack::Deflater
use Rack::Locale
+ use Rack::NestedParams
+ use Rack::PostBodyContentTypeParser
not_found do
- I18n.t('errors.not_found', name: env['sinatra.error'].message)
+ @error_summary = I18n.t('errors.unknown_proxy_pac.summary')
+ @error_details = I18n.t('errors.unknown_proxy_pac.details', name: env['PATH_INFO'])
+
+ halt 404, haml(:error, layout: :application)
end
error do
- I18n.t('errors.default', message: env['sinatra.error'].message)
+ @error_summary = I18n.t('errors.default.summary')
+ @error_details = I18n.t('errors.default.details')
+
+ halt 500, haml(:error, layout: :application)
end
error Exceptions::GivenUrlInvalid do
- @error_summary = I18n.t('errors.invalid_url.summary')
+ @error_summary = I18n.t('errors.invalid_url.summary')
@error_details = I18n.t('errors.invalid_url.details', url: env['sinatra.error'].message)
- haml :error, layout: :application
+ halt 401, haml(:error, layout: :application)
end
+ set :raise_sinatra_param_exceptions, true
+
+ error Sinatra::Param::InvalidParameterError do
+ @error_summary = I18n.t('errors.invalid_parameter.summary')
+ @error_details = I18n.t('errors.invalid_parameter.details', parameter: env['sinatra.error'].param)
+
+ halt 401, haml(:error, layout: :application)
+ end
+
configure :profile do
require 'ruby-prof'
use Rack::RubyProf, files: '/tmp/profiles'
use Rack::CommonLogger, LocalPac::AccessLogger.new(LocalPac.config.access_log)
@@ -56,10 +76,14 @@
set :local_storage, LocalPac::LocalStorage.new
end
configure :development do
set :raise_errors, true
+
+ before do
+ LocalPac.ui_logger.debug "Parameters: " + params.to_s
+ end
end
configure :test do
use Rack::CommonLogger, LocalPac::NullAccessLogger.new
set :raise_errors, false
@@ -84,9 +108,8 @@
def t(*args)
I18n.t(*args)
end
end
-
end
end
end