Commit de99506d by liyijie

Add load_available_adapters method

parent 38a6dda4
......@@ -24,6 +24,41 @@ module RailsApiAuthentication
end
end
# Private: Load the available adapters.
#
# adapters_short_names - Array of names of the adapters to load if available
#
# Example
#
# load_available_adapters ['unavailable_adapter', 'available_adapter']
# # => [RailsApiAuthentication::Adapters::AvailableAdapter]
#
# Returns an Array of available adapters
def self.load_available_adapters adapters_short_names
available_adapters = adapters_short_names.collect do |short_name|
next if short_name == 'rails' && (ActiveSupport.respond_to?(:version) && ActiveSupport.version >= Gem::Version.new('4.1.0'))
next if short_name == 'rails_api' && (ActiveSupport.respond_to?(:version) && ActiveSupport.version >= Gem::Version.new('5.0.0'))
adapter_name = "rails_api_authentication/adapters/#{short_name}_adapter"
if adapter_dependency_fulfilled?(short_name) && require(adapter_name)
adapter_name.camelize.constantize
end
end
available_adapters.compact!
available_adapters
end
def self.adapter_dependency_fulfilled? adapter_short_name
dependency = RailsApiAuthentication.adapters_dependencies[adapter_short_name]
if !respond_to?(:qualified_const_defined?) || (ActiveSupport.respond_to?(:version) && ActiveSupport.version.to_s =~ /^5\.0/)
# See https://github.com/gonzalo-bulnes/simple_token_authentication/pull/229/commits/74eda6c28cd0b45636c466de56f2dbaca5c5b629#r57507423
const_defined?(dependency)
else
qualified_const_defined?(dependency)
end
end
available_model_adapters = load_available_adapters RailsApiAuthentication.model_adapters
ensure_models_can_act_as_token_authenticatables available_model_adapters
......
......@@ -2,7 +2,9 @@ module RailsApiAuthentication
module Configuration
mattr_accessor :controller_adapters
mattr_accessor :model_adapters
mattr_accessor :adapters_dependencies
@@controller_adapters = ['rails', 'rails_api', 'rails_metal']
@@model_adapters = ['active_record', 'mongoid']
@@adapters_dependencies = { 'active_record' => 'ActiveRecord::Base',
'mongoid' => 'Mongoid::Document',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment