diff --git a/app/models/spree/role_decorator.rb b/app/models/spree/role_decorator.rb index 1012b65..73cf58c 100644 --- a/app/models/spree/role_decorator.rb +++ b/app/models/spree/role_decorator.rb @@ -7,7 +7,13 @@ after_save :assign_permissions def permission_sets_constantized - permission_sets.map(&:set).map(&:constantize) + permission_sets.map(&:set).map { |set_class_name| + begin + set_class_name.constantize + rescue NameError + nil + end + }.compact end def assign_permissions diff --git a/spec/models/spree/role_spec.rb b/spec/models/spree/role_spec.rb index b483493..2f43a0f 100644 --- a/spec/models/spree/role_spec.rb +++ b/spec/models/spree/role_spec.rb @@ -10,6 +10,25 @@ role } + context "#permission_sets_constantized" do + context "when a permission set does not exist" do + let(:role) { + role = create(:role) + role.permission_sets = [permission_set, ghost_permission_set] + role + } + let(:permission_set) { create(:permission_set) } + let(:ghost_permission_set) { + create(:permission_set, name: 'WidgetDisplay', set: 'Spree::PermissionSets::WidgetDisplay') + } + + it 'returns the remaining permission set classes' do + expect(role.permission_sets_constantized.count).to eq(1) + end + end + + end + context "#assign_permissions" do it 'creates new Spree::RoleConfiguration::Role' do if SolidusSupport.solidus_gem_version < Gem::Version.new('2.5.x')