ResearchObject / ro-crate-ruby

A Ruby gem for creating, manipulating and reading RO-Crates.
MIT License
1 stars 2 forks source link

Adding an author - correct method? #18

Open paulwalk opened 3 years ago

paulwalk commented 3 years ago

Having played around with the API, I am able to add an author to an RO-Crate like this:

crate = ROCrate::Crate.new
crate.add_person('https://orcid.org/0000-0002-1825-0097', { name: 'Josiah Carberry' })
crate.metadata.properties['author'] = {'@id'=>'https://orcid.org/0000-0002-1825-0097'}

The README implies that there are shortcuts for common properties - it has an example using file.author where file is a data entity - but I don't think this method exists in the API.

I tried to logically reproduce this kind of approach by creating a variable for my person and then adding that:

crate = ROCrate::Crate.new
author = crate.add_person('https://orcid.org/0000-0002-1825-0097', { name: 'Josiah Carberry' })
crate.metadata.properties['author'] = author

but this does not work.

Is my first example the best approach to this? And is the README just a little out of date?

fbacall commented 3 years ago

You're right, that example in the README doesn't work. I think it's actually the code that is wrong though (there should be a convenience method for adding an author). I can't remember how I originally decided on which shortcut methods to include for each class, but I think it needs revisiting.

The equivalent "manual" way of doing what the author= method would do is this:

crate = ROCrate::Crate.new
author = crate.add_person('https://orcid.org/0000-0002-1825-0097', { name: 'Josiah Carberry' })
crate.metadata.properties['author'] = author.reference

and if you wanted to resolve it back to the Person object, you would do this:

author = crate.metadata.properties['author'].dereference
paulwalk commented 3 years ago

Ah - I had missed the reference method - now the dereference method makes more sense to me!

Thanks :-)