Class: Qa::TermsController

Inherits:
ApplicationController
  • Object
show all
Defined in:
app/controllers/qa/terms_controller.rb

Overview

This controller is used for all requests to all authorities. It will verify params and figure out which class to instantiate based on the “vocab” param. All the authority classes inherit from a super class so they implement the same methods.

Instance Method Summary collapse

Instance Method Details

#check_query_paramObject



75
76
77
78
79
80
# File 'app/controllers/qa/terms_controller.rb', line 75

def check_query_param
  return if params[:q].present?
  msg = "Required param 'q' is missing or empty"
  logger.warn msg
  render json: { errors: msg }, status: :bad_request
end

#check_vocab_paramObject



45
46
47
48
49
50
# File 'app/controllers/qa/terms_controller.rb', line 45

def check_vocab_param
  return if params[:vocab].present?
  msg = "Required param 'vocab' is missing or empty"
  logger.warn msg
  render json: { errors: msg }, status: :bad_request
end

#fetchObject

If the subauthority supports it, return all the information for a given term Expects uri to be a request parameter (e.g. my.app/qa/show/auth/subauth?uri=:uri)



39
40
41
42
43
# File 'app/controllers/qa/terms_controller.rb', line 39

def fetch
  term = @authority.method(:find).arity == 2 ? @authority.find(params[:uri], self) : @authority.find(params[:uri])
  cors_allow_origin_header(response)
  render json: term, content_type: content_type_for_format
end

#indexObject

If the subauthority supports it, return a list of all terms in the authority



13
14
15
16
17
18
19
20
# File 'app/controllers/qa/terms_controller.rb', line 13

def index
  cors_allow_origin_header(response)
  render json: begin
    @authority.all
  rescue NotImplementedError
    nil
  end
end

#init_authorityObject

rubocop:disable Metrics/MethodLength



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/controllers/qa/terms_controller.rb', line 52

def init_authority # rubocop:disable Metrics/MethodLength
  begin
    mod = authority_class.camelize.constantize
  rescue NameError
    msg = "Unable to initialize authority #{authority_class}"
    logger.warn msg
    render json: { errors: msg }, status: :bad_request
    return
  end
  begin
    @authority = if mod.is_a? Class
                   mod.new
                 else
                   raise Qa::MissingSubAuthority, "No sub-authority provided" if params[:subauthority].blank?
                   mod.subauthority_for(params[:subauthority])
                 end
  rescue Qa::InvalidSubAuthority, Qa::MissingSubAuthority => e
    msg = e.message
    logger.warn msg
    render json: { errors: msg }, status: :bad_request
  end
end

#searchObject

Return a list of terms based on a query



23
24
25
26
27
# File 'app/controllers/qa/terms_controller.rb', line 23

def search
  terms = @authority.method(:search).arity == 2 ? @authority.search(url_search, self) : @authority.search(url_search)
  cors_allow_origin_header(response)
  render json: terms
end

#showObject

If the subauthority supports it, return all the information for a given term Expects id to be part of the request path (e.g. my.app/qa/show/auth/subauth/:id)



31
32
33
34
35
# File 'app/controllers/qa/terms_controller.rb', line 31

def show
  term = @authority.method(:find).arity == 2 ? @authority.find(params[:id], self) : @authority.find(params[:id])
  cors_allow_origin_header(response)
  render json: term, content_type: content_type_for_format
end