README.md in valkyrie-1.7.1 vs README.md in valkyrie-2.0.0.RC1

- old
+ new

@@ -2,34 +2,27 @@ Valkyrie is a gem for enabling multiple backends for storage of files and metadata in Samvera. ![Valkyrie Logo](valkyrie_logo.png) -Code: [![Version](https://badge.fury.io/rb/valkyrie.png)](http://badge.fury.io/rb/valkyrie) -[![Build Status](https://circleci.com/gh/samvera/valkyrie.svg?style=svg)](https://circleci.com/gh/samvera/valkyrie) -![Coverage Status](https://img.shields.io/badge/Coverage-100-brightgreen.svg) +[![CircleCI](https://circleci.com/gh/samvera-labs/valkyrie.svg?style=svg)](https://circleci.com/gh/samvera-labs/valkyrie) +[![Coverage Status](https://coveralls.io/repos/github/samvera-labs/valkyrie/badge.svg?branch=master)](https://coveralls.io/github/samvera-labs/valkyrie?branch=master) +[![Stories in Ready](https://badge.waffle.io/samvera-labs/valkyrie.png?label=ready&title=Ready)](https://waffle.io/samvera-labs/valkyrie) +[![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/samvera-labs/valkyrie) -Docs: [![Contribution Guidelines](http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg)](./CONTRIBUTING.md) -[![Apache 2.0 License](http://img.shields.io/badge/APACHE2-license-blue.svg)](./LICENSE) -[![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/gems/valkyrie) - -Jump in: [![Slack Status](http://slack.samvera.org/badge.svg)](http://slack.samvera.org/) - ## Primary Contacts ### Product Owner -[Katherine Lynch](https://github.com/kelynch) +[Carolyn Cole](https://github.com/cam156) + ### Technical Lead + [Trey Pendragon](https://github.com/tpendragon) -## Help +## Installation -The Samvera community is here to help. Please see our [support guide](./SUPPORT.md). - -## Getting Started - Add this line to your application's Gemfile: ``` gem 'valkyrie' ``` @@ -42,10 +35,11 @@ Valkyrie is configured in two places: an initializer that registers the persistence options and a YAML configuration file that sets which options are used by default in which environments. ### Sample initializer: `config/initializers/valkyrie.rb`: + Here is a sample initializer that registers a couple adapters and storage adapters, in each case linking an instance with a short name that can be used to refer to it in your application: ``` @@ -85,30 +79,20 @@ * `:memory` which stores metadata in an in-memory cache (this cache is not persistent, so it is only appropriate for testing) Other adapter options include `Valkyrie::Persistence::BufferedPersister` for buffering in memory before bulk updating another persister, `Valkyrie::Persistence::CompositePersister` for storing in more than one adapter -at once, `Valkyrie::Persistence::Solr` for storing in Solr, and `Valkyrie::Persistence::Fedora` for storing -in Fedora. +at once, `Valkyrie::Persistence::Solr` for storing in Solr, and `Valkyrie::Persistence::Fedora` for storing in Fedora. The initializer also registers three `Valkyrie::StorageAdapter` instances for storing files: * `:disk` which stores files on disk * `:fedora` which stores files in Fedora * `:memory` which stores files in an in-memory cache (again, not persistent, so this is only appropriate for testing) -### Sample configuration with custom `Valkyrie.config.resource_class_resolver`: -``` -require 'valkyrie' -Rails.application.config.to_prepare do - Valkyrie.config.resource_class_resolver = lambda do |resource_klass_name| - # Do complicated lookup based on the string - end -end -``` - ### Sample configuration: `config/valkyrie.yml`: + A sample configuration file that configures your application to use different adapters: ``` development: metadata_adapter: postgres @@ -127,16 +111,30 @@ * `metadata_adapter` is the store where Valkyrie will put the metadata * `storage_adapter` is the store where Valkyrie will put the files The values are the short names used in your initializer. -Further details can be found on the [Persistence Wiki -page](https://github.com/samvera/valkyrie/wiki/Persistence). +Further details can be found on the [the Wiki](https://github.com/samvera-labs/valkyrie/wiki/Persistence). ## Usage +### The Public API + +Valkyrie's public API is defined by the shared specs that are used to test each of its core classes. +This include change sets, resources, persisters, adapters, and queries. When creating your own kinds of +these kinds of classes, you should use these shared specs to test your classes for conformance to +Valkyrie's API. + +When breaking changes are introduced, necessitating a major version change, the shared specs will reflect +this. When new features are added and a minor version is released there will be no change to the existing shared +specs, but there may be new ones. These new shared specs will fail in your +application if you have custom adapters, but your application will still work. + +Using the shared specs in your own models is described in more [detail](https://github.com/samvera-labs/valkyrie/wiki/Shared-Specs). + ### Define a Custom Work + Define a custom work class: ``` # frozen_string_literal: true class MyModel < Valkyrie::Resource @@ -151,12 +149,11 @@ ``` attribute :authors, Valkyrie::Types::Array.meta(ordered: true) ``` -Defining resource attributes is explained in greater detail on the [Using Types Wiki -page](https://github.com/samvera/valkyrie/wiki/Using-Types). +Defining resource attributes is explained in greater detail within the [Wiki](https://github.com/samvera-labs/valkyrie/wiki/Using-Types). #### Work Types Generator To create a custom Valkyrie model in your application, you can use the Rails generator. For example, to generate a model named `FooBar` with an unordered `title` field and an ordered `member_ids` field: @@ -170,10 +167,11 @@ ``` rails generate valkyrie:resource Foo/Bar title member_ids:array ``` ### Read and Write Data + ``` # initialize a metadata adapter adapter = Valkyrie::MetadataAdapter.find(:postgres) # create an object @@ -188,101 +186,81 @@ # load all MyModel objects Valkyrie.config.metadata_adapter.query_service.find_all_of_model(model: MyModel) ``` -The Wiki documents the usage of [Queries](https://github.com/samvera/valkyrie/wiki/Queries), -[Persistence](https://github.com/samvera/valkyrie/wiki/Persistence), and -[ChangeSets and Dirty Tracking](https://github.com/samvera/valkyrie/wiki/ChangeSets-and-Dirty-Tracking). +The usage of `ChangeSets` in writing data are further documented [here](https://github.com/samvera-labs/valkyrie/wiki/ChangeSets-and-Dirty-Tracking). -### Concurrency Support -A Valkyrie repository may have concurrent updates, for example, from a load-balanced Rails application, or -from multiple [Sidekiq](https://github.com/mperham/sidekiq) background workers). In order to prevent multiple -simultaneous updates applied to the same resource from losing or corrupting data, Valkyrie supports optimistic -locking. How to use optimistic locking with Valkyrie is documented on the [Optimistic Locking Wiki -page](https://github.com/samvera/valkyrie/wiki/Optimistic-Locking). +### Concurrency Support (Optimistic Locking) +By default, it is assumed that a Valkyrie repository implementation shall use a solution supporting concurrent updates for resources (multiple resources can be updated simultaneously using a Gem such as [Sidekiq](https://github.com/mperham/sidekiq)). In order to handle the possibility of multiple updates applied to the same resource corrupting data, Valkyrie supports optimistic locking. For further details, please reference the [overview of optimistic locking for Valkyrie resources](https://github.com/samvera-labs/valkyrie/wiki/Optimistic-Locking). -### The Public API -Valkyrie's public API is defined by the shared specs that are used to test each of its core classes. -This include change sets, resources, persisters, adapters, and queries. When creating your own kinds of -these kinds of classes, you should use these shared specs to test your classes for conformance to -Valkyrie's API. +## Installing a Development environment -When breaking changes are introduced, necessitating a major version change, the shared specs will reflect -this. When new features are added and a minor version is released there will be no change to the existing -shared specs, but there may be new ones. These new shared specs will fail in your application if you have -custom adapters, but your application will still work. +### Without Docker -Using the shared specs in your own models is described in more detail on the [Shared Specs Wiki -page](https://github.com/samvera/valkyrie/wiki/Shared-Specs). +#### External Requirements +* PostgreSQL with the uuid-ossp extension. + * Note: Enabling uuid-ossp requires database superuser privileges. + * From `psql`: `alter user [username] with superuser;` -### Fedora 5 Compatibility -When configuring your adapter, include the `fedora_version` parameter in your metadata or storage adapter -config. If Fedora requires auth, you can also include that in the URL, e.g.: +#### To run the test suite +1. Start Solr and Fedora servers for testing with `rake server:test` +1. Run `rake db:create` (First time only) +1. Run `rake db:migrate` - ``` - Valkyrie::Storage::Fedora.new( - connection: Ldp::Client.new("http://fedoraAdmin:fedoraAdmin@localhost:8988/rest"), - fedora_version: 5 - ) - ``` - -## Installing a Development environment - ### With Docker -The development and test stacks use fully contained virtual volumes and bind all services to different ports, -so they can be running at the same time without issue. #### External Requirements * [Docker](https://store.docker.com/search?offering=community&type=edition) version >= 17.09.0 - +* ### Dependency Setup (Mac OSX) + 1. `brew install docker` 1. `brew install docker-machine` 1. `brew install docker-compose` ### Starting Docker (Mac OSX) + 1. `docker-machine create default` 1. `docker-machine start default` 1. `eval "$(docker-machine env)"` #### Starting the development mode dependencies -1. Start Solr, Fedora, and PostgreSQL with `rake docker:dev:daemon` (or `rake docker:dev:up` in a separate - shell to run them in the foreground) +1. Start Solr, Fedora, and PostgreSQL with `rake docker:dev:daemon` (or `rake docker:dev:up` in a separate shell to run them in the foreground) 1. Run `rake db:create db:migrate` to initialize the database 1. Develop! 1. Run `rake docker:dev:down` to stop the server stack * Development servers maintain data between runs. To clean them out, run `rake docker:dev:clean` #### To run the test suite with all dependencies in one go 1. `rake docker:spec` #### To run the test suite manually -1. Start Solr, Fedora, and PostgreSQL with `rake docker:test:daemon` (or `rake docker:test:up` in a separate - shell to run them in the foreground) +1. Start Solr, Fedora, and PostgreSQL with `rake docker:test:daemon` (or `rake docker:test:up` in a separate shell to run them in the foreground) 1. Run `rake db:create db:migrate` to initialize the database 1. Run the gem's RSpec test suite with `rspec spec` or `rake` 1. Run `rake docker:test:down` to stop the server stack * The test stack cleans up after itself on exit. -### Without Docker +## Fedora 5 Compatibility +When configuring your adapter, include the `fedora_version` parameter in your metadata or storage adapter config. If Fedora requires auth, you can also include that in the URL, e.g.: + ``` + Valkyrie::Storage::Fedora.new(connection: Ldp::Client.new("http://fedoraAdmin:fedoraAdmin@localhost:8988/rest"), fedora_version: 5) + ``` -#### External Requirements -* PostgreSQL with the uuid-ossp extension. - * Note: Enabling uuid-ossp requires database superuser privileges. - * From `psql`: `alter user [username] with superuser;` +The development and test stacks use fully contained virtual volumes and bind all services to different ports, so they can be running at the same time without issue. -#### To run the test suite -1. Start Solr and Fedora servers for testing with `rake server:test` -1. Run `rake db:create` (First time only) -1. Run `rake db:migrate` +## Get Help -## Acknowledgments +If you have any questions regarding Valkyrie you can send a message to [the +Samvera community tech list](mailto:samvera-tech@googlegroups.com) or the `#valkyrie` +channel in the [Samvera community Slack +team](https://wiki.duraspace.org/pages/viewpage.action?pageId=87460391#Getintouch!-Slack). -This software has been developed by and is brought to you by the Samvera community. Learn more at the -[Samvera website](http://samvera.org/). +## License -![Samvera Logo](https://wiki.duraspace.org/download/thumbnails/87459292/samvera-fall-font2-200w.png?version=1&modificationDate=1498550535816&api=v2) +Valkyrie is available under [the Apache 2.0 license](../LICENSE). + ## Contributing -Bug reports and pull requests are welcome on GitHub at https://github.com/samvera/valkyrie/. +Bug reports and pull requests are welcome on GitHub at https://github.com/samvera-labs/valkyrie/.