{"id":40773048,"url":"https://github.com/performant-software/core-data-connector","last_synced_at":"2026-05-06T17:00:54.266Z","repository":{"id":191616583,"uuid":"679777693","full_name":"performant-software/core-data-connector","owner":"performant-software","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-30T14:37:51.000Z","size":650,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-04-30T16:23:40.532Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/performant-software.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-17T15:39:35.000Z","updated_at":"2026-04-30T13:51:46.000Z","dependencies_parsed_at":"2026-04-29T21:01:18.957Z","dependency_job_id":null,"html_url":"https://github.com/performant-software/core-data-connector","commit_stats":null,"previous_names":["performant-software/core-data-connector"],"tags_count":124,"template":false,"template_full_name":null,"purl":"pkg:github/performant-software/core-data-connector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/performant-software%2Fcore-data-connector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/performant-software%2Fcore-data-connector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/performant-software%2Fcore-data-connector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/performant-software%2Fcore-data-connector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/performant-software","download_url":"https://codeload.github.com/performant-software/core-data-connector/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/performant-software%2Fcore-data-connector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32703532,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-21T18:56:19.449Z","updated_at":"2026-05-06T17:00:54.230Z","avatar_url":"https://github.com/performant-software.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CoreDataConnector\nShort description and motivation.\n\n## Usage\nHow to use my plugin.\n\n## Installation\nAdd this line to your application's Gemfile:\n\n```ruby\ngem \"core_data_connector\"\n```\n\nAnd then execute:\n```bash\n$ bundle install\n```\n\nOr install it yourself as:\n```bash\n$ gem install core_data_connector\n```\n\n## Migrations\nThis gem can be used in one of two ways:\n1. As the basis for an application designed to _store_ core data\n2. As a utility for an application looking to _integrate_ core data\n\nIf your application will have local tables to represent core data (#1 above), use the following command to install the necessary migrations.\n\n```bash\n$ bundle exec rails g core_data_connector:install\n```\n\n## Overlay\nThere will be situations where you'll want to extend the models provided by this gem, to add validations, relate to other models, etc. In order to accomplish this, you can provide extensions in the form on concerns and apply them inside the `core_data_connector` initializer.\n\n```ruby\n# /lib/extensions/core_data_connector/place_validations.rb\n\nmodule Extensions\n  module CoreDataConnector\n    module PlaceValidations\n      extend ActiveSupport::Concern\n      \n      included do\n        validates :validate_something\n        \n        def validate_something\n          # Do validation here\n        end\n      end\n    end\n  end\nend\n```\n\nIn the `core_data_connector` initializer, include the extension in the place model.\n\n```ruby\n# /initializers/core_data_connector.rb\n\nRails.application.config.to_prepare do\n  CoreDataConnector::Place.include(Extensions::CoreDataConnector::PlaceValidations)\nend\n```\n\n## Search\n\nData can be indexed into a Typesense search index using the following commands:\n\n#### Create a new collection\n```bash\nbundle exec rake typesense:search:create -- -h host -p port -r protocol -a api_key -c collection_name\n```\n\n#### Delete a collection\n```bash\nbundle exec rake typesense:search:delete -- -h host -p port -r protocol -a api_key -c collection_name\n```\n\n#### Index documents into a collection\n```bash\nbundle exec rake typesense:search:index -- -h host -p port -r protocol -a api_key -c collection_name -m model_ids --polygons\n```\n\n**Note:** This task expects the entire collection to be indexed. Any records not included in the batch will be removed from the index.\n\n#### Update a collection\n```bash\nbundle exec rake typesense:search:update -- -h host -p port -r protocol -a api_key -c collection_name\n```\n\n**Note:** This task was added as a workaround for an issue in Typesense indexing nested facetable fields using auto-detection schema. This task should be run _after_ the indexing process to update the \"facet\" attribute on any fields that should be facetable.\n\n## Reconciliation API\n\n### Indexing Data\n\nData can be indexed into a Typesense search index using the following commands. The search index is used as the data store for results returned from the Reconciliation API.\n\n#### Create a new collection\n```bash\nbundle exec rake typesense:reconcile:create -- -h host -p port -r protocol -a api_key -c collection_name\n```\n\n#### Delete a collection\n```bash\nbundle exec rake typesense:reconcile:delete -- -h host -p port -r protocol -a api_key -c collection_name\n```\n\n#### Index documents into a collection\n```bash\nbundle exec rake typesense:reconcile:index -- -h host -p port -r protocol -a api_key -c collection_name -m model_ids --polygons\n```\n\n**Note:** This task expects the entire collection to be indexed. Any records not included in the batch will be removed from the index.\n\n#### Update a collection\n```bash\nbundle exec rake typesense:reconcile:update -- -h host -p port -r protocol -a api_key -c collection_name\n```\n\n### Update Project\n\nIn order to make requests to the Reconciliation API, the project record must be updated with Typesense credentials.\n\n### Requests\n\nRequests can be made to the Reconciliation API via the following URLs. Follow the [spec](https://www.w3.org/community/reports/reconciliation/CG-FINAL-specs-0.2-20230410/#structure-of-a-reconciliation-query) to see how queries and responses should be structured.\n\n```\nGET /core_data/reconcile/projects/:id\n```\n\n```\nPOST /core_data/reconcile/projects/:id\n```\n\n## Public API\n\nIn addition to the authenticated API, the `core_data_connector` gem also provides a public API for the following endpoints:\n\n### Events\n```\nGET /core_data/public/v1/events/:uuid\nGET /core_data/public/v1/events/:uuid/events\nGET /core_data/public/v1/events/:uuid/instances\nGET /core_data/public/v1/events/:uuid/items\nGET /core_data/public/v1/events/:uuid/manifests\nGET /core_data/public/v1/events/:uuid/manifests/:uuid\nGET /core_data/public/v1/events/:uuid/media_contents\nGET /core_data/public/v1/events/:uuid/organizations\nGET /core_data/public/v1/events/:uuid/people\nGET /core_data/public/v1/events/:uuid/places\nGET /core_data/public/v1/events/:uuid/taxonomies\nGET /core_data/public/v1/events/:uuid/works\n```\n\n### Instances\n```\nGET /core_data/public/v1/instances/:uuid\nGET /core_data/public/v1/instances/:uuid/events\nGET /core_data/public/v1/instances/:uuid/instances\nGET /core_data/public/v1/instances/:uuid/items\nGET /core_data/public/v1/instances/:uuid/manifests\nGET /core_data/public/v1/instances/:uuid/manifests/:uuid\nGET /core_data/public/v1/instances/:uuid/media_contents\nGET /core_data/public/v1/instances/:uuid/organizations\nGET /core_data/public/v1/instances/:uuid/people\nGET /core_data/public/v1/instances/:uuid/places\nGET /core_data/public/v1/instances/:uuid/taxonomies\nGET /core_data/public/v1/instances/:uuid/works\n```\n\n### Items\n```\nGET /core_data/public/v1/items/:uuid\nGET /core_data/public/v1/items/:uuid/events\nGET /core_data/public/v1/items/:uuid/instances\nGET /core_data/public/v1/items/:uuid/items\nGET /core_data/public/v1/items/:uuid/manifests\nGET /core_data/public/v1/items/:uuid/manifests/:uuid\nGET /core_data/public/v1/items/:uuid/media_contents\nGET /core_data/public/v1/items/:uuid/organizations\nGET /core_data/public/v1/items/:uuid/people\nGET /core_data/public/v1/items/:uuid/places\nGET /core_data/public/v1/items/:uuid/taxonomies\nGET /core_data/public/v1/items/:uuid/works\n```\n\n### People\n```\nGET /core_data/public/v1/people/:uuid\nGET /core_data/public/v1/people/:uuid/events\nGET /core_data/public/v1/people/:uuid/instances\nGET /core_data/public/v1/people/:uuid/items\nGET /core_data/public/v1/people/:uuid/manifests\nGET /core_data/public/v1/people/:uuid/manifests/:uuid\nGET /core_data/public/v1/people/:uuid/media_contents\nGET /core_data/public/v1/people/:uuid/organizations\nGET /core_data/public/v1/people/:uuid/people\nGET /core_data/public/v1/people/:uuid/places\nGET /core_data/public/v1/people/:uuid/taxonomies\nGET /core_data/public/v1/people/:uuid/works\n```\n\n### Places\n```\nGET /core_data/public/v1/places/:uuid\nGET /core_data/public/v1/places/:uuid/events\nGET /core_data/public/v1/places/:uuid/instances\nGET /core_data/public/v1/places/:uuid/items\nGET /core_data/public/v1/places/:uuid/manifests\nGET /core_data/public/v1/places/:uuid/manifests/:uuid\nGET /core_data/public/v1/places/:uuid/media_contents\nGET /core_data/public/v1/places/:uuid/organizations\nGET /core_data/public/v1/places/:uuid/people\nGET /core_data/public/v1/places/:uuid/places\nGET /core_data/public/v1/places/:uuid/taxonomies\nGET /core_data/public/v1/places/:uuid/works\n```\n\n### Works\n```\nGET /core_data/public/v1/works/:uuid\nGET /core_data/public/v1/works/:uuid/events\nGET /core_data/public/v1/works/:uuid/instances\nGET /core_data/public/v1/works/:uuid/items\nGET /core_data/public/v1/works/:uuid/manifests\nGET /core_data/public/v1/works/:uuid/manifests/:uuid\nGET /core_data/public/v1/works/:uuid/media_contents\nGET /core_data/public/v1/works/:uuid/organizations\nGET /core_data/public/v1/works/:uuid/people\nGET /core_data/public/v1/works/:uuid/places\nGET /core_data/public/v1/works/:uuid/taxonomies\nGET /core_data/public/v1/works/:uuid/works\n```\n\nThe following query parameters can be used to further modify the results:\n\n| Parameter   | Description                                      | Required |\n|-------------|--------------------------------------------------|----------|\n| project_ids | An array of project IDs                          | Yes      |\n| search      | Search text used to filter the records           | No       |\n| sort_by     | A database colum name to use for sorting records | No       |\n\n## Release\n\nTo release a new version of the `core_data_connector` gem in GitHub, use the following steps:\n\n1. Create a new release in GitHub. Document any breaking changes, new features, or bug fixes (see existing releases for examples). Tag the release with a new version (see below).\n2. Update the \"next release\" label to the new version number. Any PRs included in the release should have been tagged with the \"next release\" label.\n3. Create a new \"next release\" label.\n\n#### Versioning\nVersion numbers are based on the [Semantic Versioning](https://semver.org/) spec: [Major].[Minor].[Patch] (i.e. 3.4.118). The following guidelines should be used to determine which number to increment:\n\n- **Patch:** Small bug fixes, minimal new features \n- **Minor:** Larger features, some breaking changes with backwards compatibility\n- **Major:** Large features, breaking changes with no backwards compatibility\n\n\n## License\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperformant-software%2Fcore-data-connector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fperformant-software%2Fcore-data-connector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperformant-software%2Fcore-data-connector/lists"}