module Biovision::BaseMethods

Base additional methods for application controller

Public Instance Methods

agent() click to toggle source

@return [Agent]

# File lib/biovision/base_methods.rb, line 64
def agent
  @agent ||= Agent[request.user_agent || 'n/a']
end
content_component() click to toggle source

Get content component handler

@return [Biovision::Components::ContentComponent]

# File lib/biovision/base_methods.rb, line 52
def content_component
  @content_component ||= Biovision::Components::ContentComponent[current_user]
end
current_language() click to toggle source

Get current language from locale

@return [Language]

# File lib/biovision/base_methods.rb, line 45
def current_language
  @current_language ||= Language[locale]
end
current_page() click to toggle source

Get current page number from request

@return [Integer]

# File lib/biovision/base_methods.rb, line 20
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_methods.rb, line 38
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_methods.rb, line 30
def param_from_request(*param)
  value = params.dig(*param)
  value.to_s.encode('UTF-8', 'UTF-8', invalid: :replace, replace: '')
end
users_component() click to toggle source

Get users component handler

@return [Biovision::Components::UsersComponent]

# File lib/biovision/base_methods.rb, line 59
def users_component
  @users_component ||= Biovision::Components::UsersComponent[current_user]
end
visitor_slug() click to toggle source

@return [String]

# File lib/biovision/base_methods.rb, line 69
def visitor_slug
  if current_user.nil?
    "#{remote_ip}:#{agent.id}"
  else
    current_user.id.to_s
  end
end

Private Instance Methods

component_class() click to toggle source
# File lib/biovision/base_methods.rb, line 174
def component_class
  Biovision::Components::BaseComponent
end
component_handler() click to toggle source
# File lib/biovision/base_methods.rb, line 178
def component_handler
  @component_handler ||= component_class[current_user]
end
form_processed_ok(next_page) click to toggle source

@param [String] next_page

# File lib/biovision/base_methods.rb, line 155
def form_processed_ok(next_page)
  respond_to do |format|
    format.js { render(js: "document.location.href = '#{next_page}'") }
    format.json { render(json: { links: { next: next_page } }) }
    format.html { redirect_to(next_page) }
  end
end
form_processed_with_error(view_to_render, errors = []) click to toggle source

@param [Symbol|String] view_to_render @param [Array] errors

# File lib/biovision/base_methods.rb, line 165
def form_processed_with_error(view_to_render, errors = [])
  @errors = errors
  respond_to do |format|
    format.js { render('shared/forms/errors', status: :bad_request) }
    format.json { render('shared/forms/errors', status: :bad_request) }
    format.html { render(view_to_render, status: :bad_request) }
  end
end
handle_http_401(message = nil, view = :unauthorized) click to toggle source

Handle HTTP error with status 401 without raising exception

@param [String] message @param [Symbol|String] view

# File lib/biovision/base_methods.rb, line 94
def handle_http_401(message = nil, view = :unauthorized)
  message ||= t('application.errors.unauthorized')
  handle_http_error(:unauthorized, message, view)
end
handle_http_403(message = nil, view = :forbidden) click to toggle source

Handle HTTP error with status 403 without raising exception

@param [String] message @param [Symbol|String] view

# File lib/biovision/base_methods.rb, line 103
def handle_http_403(message = nil, view = :forbidden)
  message ||= t('application.errors.forbidden')
  handle_http_error(:forbidden, message, view)
end
handle_http_404(message = nil, view = :not_found) click to toggle source

Handle HTTP error with status 404 without raising exception

@param [String] message @param [Symbol|String] view

# File lib/biovision/base_methods.rb, line 112
def handle_http_404(message = nil, view = :not_found)
  message ||= t('application.errors.not_found')
  handle_http_error(:not_found, message, view)
end
handle_http_503(message = nil, view = :service_unavailable) click to toggle source

Handle HTTP error with status 503 without raising exception

@param [String] message @param [Symbol|String] view

# File lib/biovision/base_methods.rb, line 121
def handle_http_503(message = nil, view = :service_unavailable)
  message ||= t('application.errors.service_unavailable')
  handle_http_error(:service_unavailable, message, view)
end
handle_http_error(status = 500, message = nil, view = :error) click to toggle source

Handle generic HTTP error without raising exception

@param [Symbol] status @param [String] message @param [String|Symbol] view

# File lib/biovision/base_methods.rb, line 84
def handle_http_error(status = 500, message = nil, view = :error)
  @message = message || '500: Internal server error'
  logger.warn "#{message}\n\t#{request.method} #{request.original_url}"
  render view, status: status
end
owner_for_entity(track = false) click to toggle source

Owner information for entity

@param [TrueClass|FalseClass] track

# File lib/biovision/base_methods.rb, line 136
def owner_for_entity(track = false)
  result = { user: current_user }
  result.merge!(tracking_for_entity) if track
  result
end
remote_ip() click to toggle source
# File lib/biovision/base_methods.rb, line 150
def remote_ip
  @remote_ip ||= (request.env['HTTP_X_REAL_IP'] || request.remote_ip)
end
restrict_anonymous_access() click to toggle source

Restrict access for anonymous users

# File lib/biovision/base_methods.rb, line 127
def restrict_anonymous_access
  return unless current_user.nil?

  handle_http_401(t('application.errors.restricted_access'))
end
tracking_for_entity() click to toggle source

@return [Hash]

# File lib/biovision/base_methods.rb, line 143
def tracking_for_entity
  {
    agent: agent,
    ip_address: IpAddress[remote_ip]
  }
end