CircleCI Test Coverage Maintainability Gem Version OpenAPI Validator

Cocina::Models

This is a Ruby implementation of the SDR data model (named "COCINA"). The data being modeled includes digital repository objects.

Validation is performed by openapi (using OpenAPIParser). Modeling is provided by dry-struct and dry-types. Together, these provide a way for consumers to validate objects against models and to manipulate thos objects.

This is a work in progress that will ultimately implement the full COCINA data model. See also architecture documentation.

Generate models from openapi.yml

Note that only a small subset of openapi is supported. If you are using a new openapi feature or pattern, verify that the model will be generated as expected.

All

exe/generator generate

Single model

exe/generator generate_schema DRO

Testing

The generator is tested via its output when run against openapi.yml, viz., the Cocina model classes. Thus, generate should be run after any changes to openapi.yml.

Beyond what is necessary to test the generator, the Cocina model classes are not tested, i.e., they are assumed to be as specified in openapi.yml.

Releasing

The release process is much like any other gem. First bump the version in lib/cocina/models/version.rb, and commit the result. Then run:

bundle exec rake release

which pushes the gem to rubygems.org. Next write up the release notes: https://github.com/sul-dlss/cocina-models/releases .

Finally, you must release versions of sdr-client and dor-services-client pinned to this version because Argo depends on both of those. When dor-services-app is updated to use the new models (via the auto-update script), the clients must be updated at the same time or there is risk of models produced by dor-services-app not being acceptable to the clients.

Dependent Services

Once the above listed gems are updated all the following services that use cocina-models should be updated and released at the same time:

  • sul-dlss/sdr-api
  • sul-dlss/dor-services-app
  • sul-dlss/google-books
  • sul-dlss/common-accessioning
  • sul-dlss/argo
  • sul-dlss/pre-assembly
  • sul-dlss/hydrus
  • sul-dlss/happy-heron
  • sul-dlss/infrastructure-integration-test

Using this gem

If you are using this gem in an application that has an API that accepts Cocina models (e.g., SDR API, Dor-Services-App), make sure that the openapi.yml for the application includes the schemas that match the schemas in this openapi.yml.

This can be accomplished by cutting and pasting these schemas. By convention, these schemas are listed first in the openapi.yml of the associated projects, followed by the application-specific schemas.