module Biovision::Base::BaseMethods
Useful methods and helpers for ApplicationController
Public Instance Methods
@return [Agent]
# File lib/biovision/base/base_methods.rb, line 51 def agent @agent ||= Agent.named(request.user_agent || 'n/a') end
Get current language from locale
@return [Language]
# File lib/biovision/base/base_methods.rb, line 46 def current_language @current_language ||= Language.find_by(code: locale) end
Get current page number from request
@return [Integer]
# File lib/biovision/base/base_methods.rb, line 21 def current_page @current_page ||= (params[:page] || 1).to_s.to_i.abs end
Get current user from token cookie
@return [User|nil]
# File lib/biovision/base/base_methods.rb, line 39 def current_user @current_user ||= Token.user_by_token(cookies['token'], true) end
Get parameter from request and normalize it
Casts request parameter to UTF-8 string and removes invalid characters
@param [Symbol] param @return [String]
# File lib/biovision/base/base_methods.rb, line 31 def param_from_request(*param) value = params.dig(*param) value.to_s.encode('UTF-8', 'UTF-8', invalid: :replace, replace: '') end
# File lib/biovision/base/base_methods.rb, line 64 def set_locale I18n.locale = params[:locale] || I18n.default_locale end
@return [String]
# File lib/biovision/base/base_methods.rb, line 56 def visitor_slug if current_user.nil? "#{request.env['HTTP_X_REAL_IP'] || request.remote_ip}:#{agent.id}" else current_user.id.to_s end end
Protected Instance Methods
# File lib/biovision/base/base_methods.rb, line 178 def component_handler @component_handler ||= Biovision::Components::BaseComponent.handler(component_slug, current_user) end
@param [Class] klass @param [String] privilege_name
# File lib/biovision/base/base_methods.rb, line 166 def component_restriction(klass, privilege_name) return if klass.allow?(current_user, privilege_name) error = "User #{current_user&.id} has no privileges in #{klass}" handle_http_401(error) end
# File lib/biovision/base/base_methods.rb, line 174 def component_slug nil end
@param [String] next_page
# File lib/biovision/base/base_methods.rb, line 149 def form_processed_ok(next_page) respond_to do |format| format.js { render(js: "document.location.href = '#{next_page}'") } format.html { redirect_to(next_page) } end end
@param [Symbol|String] view_to_render
# File lib/biovision/base/base_methods.rb, line 157 def form_processed_with_error(view_to_render) respond_to do |format| format.js { render('shared/forms/errors', status: :bad_request) } format.html { render(view_to_render, status: :bad_request) } end end
Handle HTTP error with status 401 without raising exception
@param [String] message @param [String] metric @param [Symbol|String] view
# File lib/biovision/base/base_methods.rb, line 86 def handle_http_401(message, metric = nil, view = :unauthorized) status = :unauthorized default_metric = Metric::METRIC_HTTP_401 handle_http_error(message, metric || default_metric, view, status) end
Handle HTTP error with status 403 without raising exception
@param [String] message @param [String] metric @param [Symbol|String] view
# File lib/biovision/base/base_methods.rb, line 97 def handle_http_403(message, metric = nil, view = :forbidden) status = :forbidden default_metric = Metric::METRIC_HTTP_403 handle_http_error(message, metric || default_metric, view, status) end
Handle HTTP error with status 404 without raising exception
@param [String] message @param [String] metric @param [Symbol|String] view
# File lib/biovision/base/base_methods.rb, line 75 def handle_http_404(message, metric = nil, view = :not_found) status = :not_found default_metric = Metric::METRIC_HTTP_404 handle_http_error(message, metric || default_metric, view, status) end
Handle HTTP error with status 503 without raising exception
@param [String] message @param [String] metric @param [Symbol|String] view
# File lib/biovision/base/base_methods.rb, line 108 def handle_http_503(message, metric = nil, view = :service_unavailable) status = :service_unavailable default_metric = Metric::METRIC_HTTP_503 handle_http_error(message, metric || default_metric, view, status) end
Handle generic HTTP error without raising exception
@param [String] message @param [String] metric @param [String|Symbol] view @param [Symbol] status
# File lib/biovision/base/base_methods.rb, line 120 def handle_http_error(message, metric, view = :error, status = 500) logger.warn "#{message}\n\t#{request.method} #{request.original_url}" Metric.register(metric) render view, status: status end
Owner information for entity
@param [Boolean] track
# File lib/biovision/base/base_methods.rb, line 134 def owner_for_entity(track = false) result = { user: current_user } result.merge!(tracking_for_entity) if track result end
Restrict access for anonymous users
# File lib/biovision/base/base_methods.rb, line 127 def restrict_anonymous_access handle_http_401('Restricted anonymous access') if current_user.nil? end
@return [Hash]
# File lib/biovision/base/base_methods.rb, line 141 def tracking_for_entity { agent: agent, ip: request.env['HTTP_X_REAL_IP'] || request.remote_ip } end