-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add ROR Support for Institutions #2135
base: main
Are you sure you want to change the base?
Conversation
…uggestion list. Automatically extract and populate metadata fields (e.g., ROR ID, city, country, webpage) based on the selected institution.
…itution search - Modify the UI to allow users to select an existing institution or add a new one when creating a project. - Integrate local institution search from SEEK system. - Implement remote institution search via ROR API. - Use typeahead for enhanced user experience with suggestions from both local and remote datasets.
…ed ones or remotely ROR
…r input from local institutions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think when creating an institution with a ROR ID, SEEK should fetch the metadata from the ROR API on the backend (in a before_validation
or something), instead of everything being passed by the client (similar to what we do for publications with pubmed IDs/DOI).
This would do several things:
- Validates that the ROR ID is real and resolvable.
- Ensures the metadata has not been modified.
- Makes it easier to create institutions with ROR IDs via the API.
@@ -114,6 +117,24 @@ def request_all | |||
end | |||
end | |||
|
|||
|
|||
def ror_search |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
needs tests, for both successfully requests and those that error. You can use the vcr_cassettes to mock out the interaction with the ror endpoint
@@ -0,0 +1,32 @@ | |||
module Ror | |||
class Client |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
needs some unit tests. You can use the same vcr_cassettes used for the functional test
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I still think you should fetch all the metadata from ROR on the backend if a ror_id
is present (especially since you are calling out to it to validate anyway).
for example:
before_validation :fetch_from_ror, if: -> { ror_id.present? && ror_id_changed? }
def fetch_from_ror
response = Ror::Client.new.fetch_by_id(ror_id)
if response[:error]
errors.add(:ror_id, response[:error])
else
# ... assign attributes based on ROR response
end
end
This would allow easy creation of institutions by just passing Institution.new(ror_id: "123abc")
ROR (Research Organization Registry) is an open, community-driven registry of research organizations worldwide. It provides a unique, persistent identifier (ROR ID) for institutions, making it easier to disambiguate organizations in research data. ROR IDs are openly available, interoperable with other identifier systems (like ORCID and CrossRef), and designed for integration into research workflows.
This PR introduces ROR support in the institutions module. Users can enter institution data in three ways:
The metadata for options 1 and 2 is fetched directly from ROR's API.
Additionally, ROR integration has been extended to project creation, enabling users to associate projects with institutions—either from locally stored data or dynamically fetched from ROR.
Improvements in Details
Database
Added a new column
ror_id
to the institutions table.Ensured
ror_id
is unique for institutions.UI
Added the new input field of ROR ID
The ROR ID is displayed as a clickable link in the institution details.
Added a "clear fields" button when creating institutions.
Disabled input fields when
metadata is loaded either from locally stored data
or dynamically fetched from ROR.
or editing an institution with an existing ROR ID.
Improved CSS and JavaScript for better responsiveness.
Functionality
Users can type an institution name and see a suggested list with ROR data.
ROR ID validation implemented to prevent incorrect entries.
Improved error messages when an invalid ROR ID is entered.
Users can fetch institution metadata via ROR ID.
When creating an institution along with a project, the ROR ID is now saved properly.
Converted country codes to full country names for better readability.
Added
ror_id
to the Institution API (Read/Write).Updated API examples to include the new
ror_id
attribute.