class JSONAPI::Railtie

def include_jsonapi_concerns(base_controller_class)

def include_jsonapi_concerns(base_controller_class)
  base_controller_class.include(JSONAPI::ControllerHelpers)
  base_controller_class.include(JSONAPI::ResourceActions)
end

def rebuild_controllers_if_needed(base_controller_class)

def rebuild_controllers_if_needed(base_controller_class)
  return if JSONAPI::BaseController.superclass == base_controller_class
  JSONAPI.send(:remove_const, :BaseController)
  load "json_api/controllers/base_controller.rb"
  JSONAPI.send(:remove_const, :RelationshipsController)
  load "json_api/controllers/relationships_controller.rb"
  JSONAPI.send(:remove_const, :ResourcesController)
  load "json_api/controllers/resources_controller.rb"
end

def resolve_base_controller_class

def resolve_base_controller_class
  class_name = JSONAPI.configuration.instance_variable_get(:@base_controller_class)
  class_name.constantize
rescue NameError
  # Controller not yet loaded - this can happen in test environments
  # where eager_load is false and autoloading hasn't run yet.
  nil
end

def setup_base_controllers

def setup_base_controllers
  return unless JSONAPI.configuration.base_controller_overridden?
  base_controller_class = resolve_base_controller_class
  return unless base_controller_class
  rebuild_controllers_if_needed(base_controller_class)
  include_jsonapi_concerns(base_controller_class)
end