diff --git a/app/models/concerns/external_user.rb b/app/models/concerns/external_user.rb index 2745443..4efec9d 100644 --- a/app/models/concerns/external_user.rb +++ b/app/models/concerns/external_user.rb @@ -11,6 +11,10 @@ module ExternalUser ExternalPerson.where(id: self.external_person_id).first end + def person_with_external + self.external_person || self.person_without_external + end + module ClassMethods def webfinger_lookup(login, domain, environment) if login && domain && environment.has_federated_network?(domain) diff --git a/app/models/user.rb b/app/models/user.rb index 8d7ab7e..3a6c3c5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -108,6 +108,8 @@ class User < ApplicationRecord has_one :person, dependent: :destroy, autosave: false belongs_to :environment + alias_method_chain :person, :external + has_many :sessions, dependent: :destroy # holds the current session, see lib/authenticated_system.rb attr_accessor :session diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 4cfb176..1811b07 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -759,6 +759,14 @@ class UserTest < ActiveSupport::TestCase end end + should 'get person or external person' do + user = create_user('new_user') + assert_kind_of Person, user.person + user.external_person_id = ExternalPerson.create!(identifier: 'new_user', name: 'New User').id + assert_kind_of ExternalPerson, user.person + assert_kind_of Person, user.person_without_external + end + protected def new_user(options = {}) user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) -- libgit2 0.21.2