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