openSUSE/open-build-service

View on GitHub
src/api/app/models/event/relationship.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
90%
module Event
  class Relationship < Base
    self.abstract_class = true
    payload_keys :description, :who, :user, :group, :project, :package, :role, :notifiable_id
    shortenable_key :description

    def subject
      raise AbstractMethodCalled
    end

    def parameters_for_notification
      super.merge({ notifiable_type: notifiable_type, notifiable_id: notifiable_id })
    end

    def any_roles
      [User.find_by(login: payload['user']) || Group.find_by(title: payload['group'])]
    end

    def notifiable_type
      return 'Package' if payload['package']

      'Project'
    end

    def notifiable_id
      # FIXME: Inherited package coming from a project link via attribute link resolves to the upstream package. This is confusing at least. We need to think about this behaviour later.
      return Package.get_by_project_and_name(payload['project'], payload['package']).id if payload['package']
      return Project.get_by_name(payload['project']).id if Project.exists_by_name(payload['project'])

      nil
    rescue Project::Errors::UnknownObjectError # This happens for access-protected projects
      nil
    end

    def originator
      payload_address('who')
    end
  end
end