Sha256: 817873e4aee6884a9223669e280e2a32c350d07348918cea5ccaeef554e0d1aa

Contents?: true

Size: 1.94 KB

Versions: 6

Compression:

Stored size: 1.94 KB

Contents

# 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.

class Qa::TermsController < ApplicationController
  before_action :check_vocab_param, :init_authority
  before_action :check_query_param, only: :search

  # If the subauthority supports it, return a list of all terms in the authority
  def index
    render json: begin
      @authority.all
    rescue NotImplementedError
      nil
    end
  end

  # Return a list of terms based on a query
  def search
    terms = @authority.method(:search).arity == 2 ? @authority.search(url_search, self) : @authority.search(url_search)
    render json: terms
  end

  # If the subauthority supports it, return all the information for a given term
  def show
    term = @authority.find(params[:id])
    render json: term
  end

  def check_vocab_param
    head :not_found unless params[:vocab].present?
  end

  def init_authority
    begin
      mod = authority_class.camelize.constantize
    rescue NameError
      logger.warn "Unable to initialize authority #{authority_class}"
      head :not_found
      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
      logger.warn e.message
      head :not_found
    end
  end

  def check_query_param
    head :not_found unless params[:q].present?
  end

  private

    def authority_class
      "Qa::Authorities::" + params[:vocab].capitalize
    end

    # converts wildcards into URL-encoded characters
    def url_search
      params[:q].gsub("*", "%2A")
    end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
qa-2.0.1 app/controllers/qa/terms_controller.rb
qa-2.0.0 app/controllers/qa/terms_controller.rb
qa-1.2.0 app/controllers/qa/terms_controller.rb
qa-1.1.0 app/controllers/qa/terms_controller.rb
qa-1.0.0 app/controllers/qa/terms_controller.rb
qa-0.11.1 app/controllers/qa/terms_controller.rb