module Biovision::Base::BaseMethods

Useful methods and helpers for ApplicationController

Public Instance Methods

agent() click to toggle source

@return [Agent]

# File lib/biovision/base/base_methods.rb, line 51
def agent
  @agent ||= Agent.named(request.user_agent || 'n/a')
end
current_language() click to toggle source

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
current_page() click to toggle source

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
current_user() click to toggle source

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
param_from_request(*param) click to toggle source

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
set_locale() click to toggle source
# File lib/biovision/base/base_methods.rb, line 64
def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end
visitor_slug() click to toggle source

@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

component_handler() click to toggle source
# File lib/biovision/base/base_methods.rb, line 178
def component_handler
  @component_handler ||= Biovision::Components::BaseComponent.handler(component_slug, current_user)
end
component_restriction(klass, privilege_name) click to toggle source

@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
component_slug() click to toggle source
# File lib/biovision/base/base_methods.rb, line 174
def component_slug
  nil
end
form_processed_ok(next_page) click to toggle source

@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
form_processed_with_error(view_to_render) click to toggle source

@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_401(message, metric = nil, view = :unauthorized) click to toggle source

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_403(message, metric = nil, view = :forbidden) click to toggle source

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_404(message, metric = nil, view = :not_found) click to toggle source

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_503(message, metric = nil, view = :service_unavailable) click to toggle source

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_http_error(message, metric, view = :error, status = 500) click to toggle source

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_for_entity(track = false) click to toggle source

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_anonymous_access() click to toggle source

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
tracking_for_entity() click to toggle source

@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