mepatterson/grape_ape_rails

View on GitHub
lib/grape_ape_rails/handlers/header_versioning.rb

Summary

Maintainability
A
25 mins
Test Coverage
module GrapeApeRails
  module Handlers
    module HeaderVersioning
      extend ActiveSupport::Concern

      included do
        gar_resource = self.name.split('::').last.underscore
        gar_version = self.name.split('::')[-2].underscore.gsub('_','.')
        cascades = GrapeApeRails::API.api_version_cascades_map
        gar_version = cascades[gar_version] if cascades[gar_version].present?
        gar_appname = GrapeApeRails.configuration.app_name
        gar_organization = GrapeApeRails.configuration.organization_name
        version gar_version, using: :header, vendor: "#{gar_organization}.#{gar_appname}", strict: true

        before do
          req = Rack::Request.new(env)
          api_key = version ? GrapeApeRails::API.api_keys_map[version] : nil
          if api_key.nil?
            msg = "Cannot determine API version from header info."
            error!({ code: "UNAUTHORIZED", message: msg}, 401)
          end
        end
      end

    end
  end
end