From 7268135de1d341d42b1dea80ab6be5f9635a45a2 Mon Sep 17 00:00:00 2001 From: epdejager Date: Wed, 23 Feb 2022 21:23:56 +0200 Subject: [PATCH] Fix the way the external provider class is instantiated for providers with plural names (#305) * Fix the way the external provider class is instantiated * added a spec * Updated changelog * Fixed mistake in changelog * Add changelog additions under HEAD instead of under new version number. --- CHANGELOG.md | 2 ++ lib/sorcery/controller/submodules/external.rb | 2 +- spec/providers/examples_spec.rb | 17 +++++++++++++++++ spec/support/providers/examples.rb | 11 +++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 spec/providers/examples_spec.rb create mode 100644 spec/support/providers/examples.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 51502e52..31681869 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## HEAD +* Fix provider instantiation for plural provider names (eg. okta) [#305](https://github.com/Sorcery/sorcery/pull/305) + ## 0.16.2 * Inline core migration index definition [#281](https://github.com/Sorcery/sorcery/pull/281) diff --git a/lib/sorcery/controller/submodules/external.rb b/lib/sorcery/controller/submodules/external.rb index 07114572..4818344a 100644 --- a/lib/sorcery/controller/submodules/external.rb +++ b/lib/sorcery/controller/submodules/external.rb @@ -40,7 +40,7 @@ def external_providers=(providers) providers.each do |name| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def self.#{name} - @#{name} ||= Sorcery::Providers.const_get('#{name}'.to_s.classify).new + @#{name} ||= Sorcery::Providers.const_get('#{name}'.to_s.camelcase).new end RUBY end diff --git a/spec/providers/examples_spec.rb b/spec/providers/examples_spec.rb new file mode 100644 index 00000000..1f2d5e83 --- /dev/null +++ b/spec/providers/examples_spec.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require 'spec_helper' +require 'sorcery/providers/base' + +describe Sorcery::Providers::Examples do + before(:all) do + sorcery_reload!([:external]) + sorcery_controller_property_set(:external_providers, [:examples]) + end + + context 'fetching a plural custom provider' do + it 'returns the provider' do + expect(Sorcery::Controller::Config.examples).to be_a(Sorcery::Providers::Examples) + end + end +end diff --git a/spec/support/providers/examples.rb b/spec/support/providers/examples.rb new file mode 100644 index 00000000..650f3d26 --- /dev/null +++ b/spec/support/providers/examples.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'sorcery/providers/base' + +module Sorcery + module Providers + class Examples < Base + include Protocols::Oauth2 + end + end +end