briard 2.4.2 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +72 -0
  3. data/.github/workflows/rubocop.yml +50 -0
  4. data/.rubocop.yml +144 -620
  5. data/.rubocop_todo.yml +76 -0
  6. data/CHANGELOG.md +18 -0
  7. data/Gemfile +2 -0
  8. data/Gemfile.lock +40 -6
  9. data/Rakefile +1 -1
  10. data/{bolognese.gemspec → briard.gemspec} +46 -39
  11. data/lib/briard/array.rb +2 -2
  12. data/lib/briard/author_utils.rb +79 -71
  13. data/lib/briard/cli.rb +12 -13
  14. data/lib/briard/crossref_utils.rb +73 -61
  15. data/lib/briard/datacite_utils.rb +132 -106
  16. data/lib/briard/doi_utils.rb +10 -10
  17. data/lib/briard/metadata.rb +96 -106
  18. data/lib/briard/metadata_utils.rb +87 -78
  19. data/lib/briard/readers/bibtex_reader.rb +65 -65
  20. data/lib/briard/readers/cff_reader.rb +88 -70
  21. data/lib/briard/readers/citeproc_reader.rb +90 -84
  22. data/lib/briard/readers/codemeta_reader.rb +68 -50
  23. data/lib/briard/readers/crosscite_reader.rb +2 -2
  24. data/lib/briard/readers/crossref_reader.rb +249 -210
  25. data/lib/briard/readers/datacite_json_reader.rb +3 -3
  26. data/lib/briard/readers/datacite_reader.rb +225 -189
  27. data/lib/briard/readers/npm_reader.rb +49 -42
  28. data/lib/briard/readers/ris_reader.rb +82 -80
  29. data/lib/briard/readers/schema_org_reader.rb +182 -159
  30. data/lib/briard/string.rb +1 -1
  31. data/lib/briard/utils.rb +4 -4
  32. data/lib/briard/version.rb +3 -1
  33. data/lib/briard/whitelist_scrubber.rb +11 -4
  34. data/lib/briard/writers/bibtex_writer.rb +14 -8
  35. data/lib/briard/writers/cff_writer.rb +33 -26
  36. data/lib/briard/writers/codemeta_writer.rb +19 -15
  37. data/lib/briard/writers/csv_writer.rb +6 -4
  38. data/lib/briard/writers/datacite_json_writer.rb +8 -2
  39. data/lib/briard/writers/jats_writer.rb +33 -28
  40. data/lib/briard/writers/rdf_xml_writer.rb +1 -1
  41. data/lib/briard/writers/ris_writer.rb +30 -18
  42. data/lib/briard/writers/turtle_writer.rb +1 -1
  43. data/lib/briard.rb +6 -6
  44. data/rubocop.sarif +0 -0
  45. data/spec/array_spec.rb +5 -5
  46. data/spec/author_utils_spec.rb +151 -132
  47. data/spec/datacite_utils_spec.rb +135 -83
  48. data/spec/doi_utils_spec.rb +168 -164
  49. data/spec/find_from_format_spec.rb +69 -69
  50. data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/onlies_keep_specific_tags.yml +65 -0
  51. data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/removes_a_tags.yml +65 -0
  52. data/spec/metadata_spec.rb +91 -90
  53. data/spec/readers/bibtex_reader_spec.rb +43 -38
  54. data/spec/readers/cff_reader_spec.rb +165 -153
  55. data/spec/readers/citeproc_reader_spec.rb +45 -40
  56. data/spec/readers/codemeta_reader_spec.rb +128 -115
  57. data/spec/readers/crosscite_reader_spec.rb +34 -24
  58. data/spec/readers/crossref_reader_spec.rb +1098 -939
  59. data/spec/readers/datacite_json_reader_spec.rb +53 -40
  60. data/spec/readers/datacite_reader_spec.rb +1541 -1337
  61. data/spec/readers/npm_reader_spec.rb +48 -43
  62. data/spec/readers/ris_reader_spec.rb +53 -47
  63. data/spec/readers/schema_org_reader_spec.rb +329 -267
  64. data/spec/spec_helper.rb +6 -5
  65. data/spec/utils_spec.rb +371 -347
  66. data/spec/writers/bibtex_writer_spec.rb +143 -143
  67. data/spec/writers/cff_writer_spec.rb +96 -90
  68. data/spec/writers/citation_writer_spec.rb +34 -33
  69. data/spec/writers/citeproc_writer_spec.rb +226 -224
  70. data/spec/writers/codemeta_writer_spec.rb +18 -16
  71. data/spec/writers/crosscite_writer_spec.rb +91 -73
  72. data/spec/writers/crossref_writer_spec.rb +99 -91
  73. data/spec/writers/csv_writer_spec.rb +70 -70
  74. data/spec/writers/datacite_json_writer_spec.rb +78 -68
  75. data/spec/writers/datacite_writer_spec.rb +417 -322
  76. data/spec/writers/jats_writer_spec.rb +177 -161
  77. data/spec/writers/rdf_xml_writer_spec.rb +68 -63
  78. data/spec/writers/ris_writer_spec.rb +162 -162
  79. data/spec/writers/turtle_writer_spec.rb +47 -47
  80. metadata +242 -166
  81. data/.github/workflows/release.yml +0 -47
@@ -3,1115 +3,1274 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Briard::Metadata, vcr: true do
6
- let(:input) { "10.7554/eLife.01567" }
6
+ subject { described_class.new(input: input) }
7
7
 
8
- subject { Briard::Metadata.new(input: input) }
8
+ let(:input) { '10.7554/eLife.01567' }
9
9
 
10
- context "get crossref raw" do
11
- it "journal article" do
12
- input = fixture_path + 'crossref.xml'
13
- subject = Briard::Metadata.new(input: input)
14
- expect(subject.raw).to eq(IO.read(input).strip)
10
+ context 'get crossref raw' do
11
+ it 'journal article' do
12
+ input = "#{fixture_path}crossref.xml"
13
+ subject = described_class.new(input: input)
14
+ expect(subject.raw).to eq(File.read(input).strip)
15
15
  end
16
16
  end
17
17
 
18
- context "get crossref metadata" do
19
- it "DOI with data citation" do
18
+ context 'get crossref metadata' do
19
+ it 'DOI with data citation' do
20
20
  expect(subject.valid?).to be true
21
- expect(subject.id).to eq("https://doi.org/10.7554/elife.01567")
22
- expect(subject.identifiers).to eq([{"identifier"=>"e01567", "identifierType"=>"article_number"}])
23
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
24
- expect(subject.url).to eq("https://elifesciences.org/articles/01567")
21
+ expect(subject.id).to eq('https://doi.org/10.7554/elife.01567')
22
+ expect(subject.identifiers).to eq([{ 'identifier' => 'e01567',
23
+ 'identifierType' => 'article_number' }])
24
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
25
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
26
+ expect(subject.url).to eq('https://elifesciences.org/articles/01567')
25
27
  expect(subject.creators.length).to eq(5)
26
- expect(subject.creators.first).to eq("nameType"=>"Personal", "name"=>"Sankar, Martial", "givenName"=>"Martial", "familyName"=>"Sankar", "affiliation" => [{"name"=>"Department of Plant Molecular Biology, University of Lausanne, Lausanne, Switzerland"}])
27
- expect(subject.rights_list).to eq([{"rights"=>"Creative Commons Attribution 3.0 Unported",
28
- "rightsIdentifier"=>"cc-by-3.0",
29
- "rightsIdentifierScheme"=>"SPDX",
30
- "rightsUri"=>"https://creativecommons.org/licenses/by/3.0/legalcode",
31
- "schemeUri"=>"https://spdx.org/licenses/"}])
32
- expect(subject.titles).to eq([{"title"=>"Automated quantitative histology reveals vascular morphodynamics during Arabidopsis hypocotyl secondary growth"}])
33
- expect(subject.dates).to eq([{"date"=>"2014-02-11", "dateType"=>"Issued"}, {"date"=>"2022-03-26T09:21:50Z", "dateType"=>"Updated"}])
34
- expect(subject.publication_year).to eq("2014")
35
- expect(subject.publisher).to eq("eLife Sciences Publications, Ltd")
36
- expect(subject.container).to eq("firstPage" => "e01567", "identifier"=>"2050-084X", "identifierType"=>"ISSN", "title"=>"eLife", "type"=>"Journal", "volume"=>"3")
28
+ expect(subject.creators.first).to eq('nameType' => 'Personal', 'name' => 'Sankar, Martial',
29
+ 'givenName' => 'Martial', 'familyName' => 'Sankar', 'affiliation' => [{ 'name' => 'Department of Plant Molecular Biology, University of Lausanne, Lausanne, Switzerland' }])
30
+ expect(subject.rights_list).to eq([{ 'rights' => 'Creative Commons Attribution 3.0 Unported',
31
+ 'rightsIdentifier' => 'cc-by-3.0',
32
+ 'rightsIdentifierScheme' => 'SPDX',
33
+ 'rightsUri' => 'https://creativecommons.org/licenses/by/3.0/legalcode',
34
+ 'schemeUri' => 'https://spdx.org/licenses/' }])
35
+ expect(subject.titles).to eq([{ 'title' => 'Automated quantitative histology reveals vascular morphodynamics during Arabidopsis hypocotyl secondary growth' }])
36
+ expect(subject.dates).to eq([{ 'date' => '2014-02-11', 'dateType' => 'Issued' },
37
+ { 'date' => '2022-03-26T09:21:50Z', 'dateType' => 'Updated' }])
38
+ expect(subject.publication_year).to eq('2014')
39
+ expect(subject.publisher).to eq('eLife Sciences Publications, Ltd')
40
+ expect(subject.container).to eq('firstPage' => 'e01567', 'identifier' => '2050-084X',
41
+ 'identifierType' => 'ISSN', 'title' => 'eLife', 'type' => 'Journal', 'volume' => '3')
37
42
  expect(subject.related_identifiers.length).to eq(28)
38
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"2050-084X", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
39
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.1038/ncb2764", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
40
- expect(subject.funding_references).to eq([{"funderName"=>"SystemsX"},
41
- {"funderIdentifier"=>"https://doi.org/10.13039/501100003043",
42
- "funderIdentifierType"=>"Crossref Funder ID",
43
- "funderName"=>"EMBO"},
44
- {"funderIdentifier"=>"https://doi.org/10.13039/501100001711",
45
- "funderIdentifierType"=>"Crossref Funder ID",
46
- "funderName"=>"Swiss National Science Foundation"},
47
- {"funderIdentifier"=>"https://doi.org/10.13039/501100006390",
48
- "funderIdentifierType"=>"Crossref Funder ID",
49
- "funderName"=>"University of Lausanne"}])
50
- expect(subject.agency).to eq("crossref")
43
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '2050-084X',
44
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
45
+ expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.1038/ncb2764',
46
+ 'relatedIdentifierType' => 'DOI', 'relationType' => 'References')
47
+ expect(subject.funding_references).to eq([{ 'funderName' => 'SystemsX' },
48
+ { 'funderIdentifier' => 'https://doi.org/10.13039/501100003043',
49
+ 'funderIdentifierType' => 'Crossref Funder ID',
50
+ 'funderName' => 'EMBO' },
51
+ { 'funderIdentifier' => 'https://doi.org/10.13039/501100001711',
52
+ 'funderIdentifierType' => 'Crossref Funder ID',
53
+ 'funderName' => 'Swiss National Science Foundation' },
54
+ { 'funderIdentifier' => 'https://doi.org/10.13039/501100006390',
55
+ 'funderIdentifierType' => 'Crossref Funder ID',
56
+ 'funderName' => 'University of Lausanne' }])
57
+ expect(subject.agency).to eq('crossref')
51
58
  end
52
59
 
53
- it "journal article" do
54
- input = "https://doi.org/10.1371/journal.pone.0000030"
55
- subject = Briard::Metadata.new(input: input)
60
+ it 'journal article' do
61
+ input = 'https://doi.org/10.1371/journal.pone.0000030'
62
+ subject = described_class.new(input: input)
56
63
  expect(subject.valid?).to be true
57
- expect(subject.id).to eq("https://doi.org/10.1371/journal.pone.0000030")
58
- expect(subject.identifiers).to eq([{"identifier"=>"10.1371/journal.pone.0000030", "identifierType"=>"Publisher ID"}])
59
- expect(subject.url).to eq("https://dx.plos.org/10.1371/journal.pone.0000030")
60
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
64
+ expect(subject.id).to eq('https://doi.org/10.1371/journal.pone.0000030')
65
+ expect(subject.identifiers).to eq([{ 'identifier' => '10.1371/journal.pone.0000030',
66
+ 'identifierType' => 'Publisher ID' }])
67
+ expect(subject.url).to eq('https://dx.plos.org/10.1371/journal.pone.0000030')
68
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
69
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
61
70
  expect(subject.creators.length).to eq(5)
62
- expect(subject.creators.first).to eq("nameType"=>"Personal", "name"=>"Ralser, Markus", "givenName"=>"Markus", "familyName"=>"Ralser")
63
- expect(subject.contributors).to eq([{"contributorType"=>"Editor", "familyName"=>"Janbon", "givenName"=>"Guilhem", "name"=>"Janbon, Guilhem", "nameType"=>"Personal"}])
64
- expect(subject.titles).to eq([{"title"=>"Triose Phosphate Isomerase Deficiency Is Caused by Altered Dimerization???Not Catalytic Inactivity???of the Mutant Enzymes"}])
65
- expect(subject.rights_list).to eq([{"rights"=>"Creative Commons Attribution 4.0 International",
66
- "rightsIdentifier"=>"cc-by-4.0",
67
- "rightsIdentifierScheme"=>"SPDX",
68
- "rightsUri"=>"https://creativecommons.org/licenses/by/4.0/legalcode",
69
- "schemeUri"=>"https://spdx.org/licenses/"}])
70
- expect(subject.dates).to eq([{"date"=>"2006-12-20", "dateType"=>"Issued"}, {"date"=>"2021-08-06T23:49:55Z", "dateType"=>"Updated"}])
71
- expect(subject.publication_year).to eq("2006")
72
- expect(subject.publisher).to eq("Public Library of Science (PLoS)")
71
+ expect(subject.creators.first).to eq('nameType' => 'Personal', 'name' => 'Ralser, Markus',
72
+ 'givenName' => 'Markus', 'familyName' => 'Ralser')
73
+ expect(subject.contributors).to eq([{ 'contributorType' => 'Editor', 'familyName' => 'Janbon',
74
+ 'givenName' => 'Guilhem', 'name' => 'Janbon, Guilhem', 'nameType' => 'Personal' }])
75
+ expect(subject.titles).to eq([{ 'title' => 'Triose Phosphate Isomerase Deficiency Is Caused by Altered Dimerization???Not Catalytic Inactivity???of the Mutant Enzymes' }])
76
+ expect(subject.rights_list).to eq([{ 'rights' => 'Creative Commons Attribution 4.0 International',
77
+ 'rightsIdentifier' => 'cc-by-4.0',
78
+ 'rightsIdentifierScheme' => 'SPDX',
79
+ 'rightsUri' => 'https://creativecommons.org/licenses/by/4.0/legalcode',
80
+ 'schemeUri' => 'https://spdx.org/licenses/' }])
81
+ expect(subject.dates).to eq([{ 'date' => '2006-12-20', 'dateType' => 'Issued' },
82
+ { 'date' => '2021-08-06T23:49:55Z', 'dateType' => 'Updated' }])
83
+ expect(subject.publication_year).to eq('2006')
84
+ expect(subject.publisher).to eq('Public Library of Science (PLoS)')
73
85
  expect(subject.related_identifiers.length).to eq(68)
74
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"1932-6203", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
75
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.1056/nejm199109123251104", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
76
- expect(subject.container).to eq("firstPage"=>"e30", "identifier"=>"1932-6203", "identifierType"=>"ISSN", "issue"=>"1", "title"=>"PLoS ONE", "type"=>"Journal", "volume"=>"1")
77
- expect(subject.agency).to eq("crossref")
86
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '1932-6203',
87
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
88
+ expect(subject.related_identifiers.last).to eq(
89
+ 'relatedIdentifier' => '10.1056/nejm199109123251104', 'relatedIdentifierType' => 'DOI', 'relationType' => 'References'
90
+ )
91
+ expect(subject.container).to eq('firstPage' => 'e30', 'identifier' => '1932-6203',
92
+ 'identifierType' => 'ISSN', 'issue' => '1', 'title' => 'PLoS ONE', 'type' => 'Journal', 'volume' => '1')
93
+ expect(subject.agency).to eq('crossref')
78
94
  end
79
95
 
80
- it "journal article with funding" do
81
- input = "https://doi.org/10.3389/fpls.2019.00816"
82
- subject = Briard::Metadata.new(input: input)
96
+ it 'journal article with funding' do
97
+ input = 'https://doi.org/10.3389/fpls.2019.00816'
98
+ subject = described_class.new(input: input)
83
99
  expect(subject.valid?).to be true
84
- expect(subject.id).to eq("https://doi.org/10.3389/fpls.2019.00816")
85
- expect(subject.identifiers).to eq([{"identifier"=>"816", "identifierType"=>"article_number"}])
86
- expect(subject.url).to eq("https://www.frontiersin.org/article/10.3389/fpls.2019.00816/full")
87
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
100
+ expect(subject.id).to eq('https://doi.org/10.3389/fpls.2019.00816')
101
+ expect(subject.identifiers).to eq([{ 'identifier' => '816',
102
+ 'identifierType' => 'article_number' }])
103
+ expect(subject.url).to eq('https://www.frontiersin.org/article/10.3389/fpls.2019.00816/full')
104
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
105
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
88
106
  expect(subject.creators.length).to eq(4)
89
- expect(subject.creators.first).to eq("familyName"=>"Fortes", "givenName"=>"Ana Margarida", "name"=>"Fortes, Ana Margarida", "nameType"=>"Personal")
90
- expect(subject.titles).to eq([{"title"=>"Transcriptional Modulation of Polyamine Metabolism in Fruit Species Under Abiotic and Biotic Stress"}])
91
- expect(subject.rights_list).to eq([{"rights"=>"Creative Commons Attribution 4.0 International",
92
- "rightsIdentifier"=>"cc-by-4.0",
93
- "rightsIdentifierScheme"=>"SPDX",
94
- "rightsUri"=>"https://creativecommons.org/licenses/by/4.0/legalcode",
95
- "schemeUri"=>"https://spdx.org/licenses/"}])
96
- expect(subject.dates).to eq([{"date"=>"2019-07-02", "dateType"=>"Issued"}, {"date"=>"2019-09-22T02:40:23Z", "dateType"=>"Updated"}])
97
- expect(subject.publication_year).to eq("2019")
98
- expect(subject.publisher).to eq("Frontiers Media SA")
99
- expect(subject.funding_references).to eq([{"awardNumber"=>"CA17111", "funderIdentifier"=>"https://doi.org/10.13039/501100000921", "funderIdentifierType"=>"Crossref Funder ID", "funderName"=>"COST (European Cooperation in Science and Technology)"}])
107
+ expect(subject.creators.first).to eq('familyName' => 'Fortes', 'givenName' => 'Ana Margarida',
108
+ 'name' => 'Fortes, Ana Margarida', 'nameType' => 'Personal')
109
+ expect(subject.titles).to eq([{ 'title' => 'Transcriptional Modulation of Polyamine Metabolism in Fruit Species Under Abiotic and Biotic Stress' }])
110
+ expect(subject.rights_list).to eq([{ 'rights' => 'Creative Commons Attribution 4.0 International',
111
+ 'rightsIdentifier' => 'cc-by-4.0',
112
+ 'rightsIdentifierScheme' => 'SPDX',
113
+ 'rightsUri' => 'https://creativecommons.org/licenses/by/4.0/legalcode',
114
+ 'schemeUri' => 'https://spdx.org/licenses/' }])
115
+ expect(subject.dates).to eq([{ 'date' => '2019-07-02', 'dateType' => 'Issued' },
116
+ { 'date' => '2019-09-22T02:40:23Z', 'dateType' => 'Updated' }])
117
+ expect(subject.publication_year).to eq('2019')
118
+ expect(subject.publisher).to eq('Frontiers Media SA')
119
+ expect(subject.funding_references).to eq([{ 'awardNumber' => 'CA17111',
120
+ 'funderIdentifier' => 'https://doi.org/10.13039/501100000921', 'funderIdentifierType' => 'Crossref Funder ID', 'funderName' => 'COST (European Cooperation in Science and Technology)' }])
100
121
  expect(subject.related_identifiers.length).to eq(70)
101
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"1664-462X", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
102
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.17660/actahortic.2004.632.41", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
103
- expect(subject.container).to eq("firstPage" => "816", "identifier"=>"1664-462X", "identifierType"=>"ISSN", "title"=>"Frontiers in Plant Science", "type"=>"Journal", "volume"=>"10")
104
- expect(subject.agency).to eq("crossref")
122
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '1664-462X',
123
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
124
+ expect(subject.related_identifiers.last).to eq(
125
+ 'relatedIdentifier' => '10.17660/actahortic.2004.632.41', 'relatedIdentifierType' => 'DOI', 'relationType' => 'References'
126
+ )
127
+ expect(subject.container).to eq('firstPage' => '816', 'identifier' => '1664-462X',
128
+ 'identifierType' => 'ISSN', 'title' => 'Frontiers in Plant Science', 'type' => 'Journal', 'volume' => '10')
129
+ expect(subject.agency).to eq('crossref')
105
130
  end
106
131
 
107
- it "journal article original language title" do
108
- input = "https://doi.org/10.7600/jspfsm.56.60"
109
- subject = Briard::Metadata.new(input: input)
132
+ it 'journal article original language title' do
133
+ input = 'https://doi.org/10.7600/jspfsm.56.60'
134
+ subject = described_class.new(input: input)
110
135
  expect(subject.valid?).to be true
111
- expect(subject.id).to eq("https://doi.org/10.7600/jspfsm.56.60")
112
- expect(subject.url).to eq("https://www.jstage.jst.go.jp/article/jspfsm/56/1/56_1_60/_article/-char/ja/")
113
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
114
- expect(subject.creators).to eq([{"name"=>":(unav)", "nameType"=>"Organizational"}])
115
- expect(subject.titles).to eq([{"lang"=>"ja", "title"=>"??????????????????????????????"}])
116
- expect(subject.dates).to include({"date"=>"2007", "dateType"=>"Issued"})
117
- expect(subject.publication_year).to eq("2007")
118
- expect(subject.publisher).to eq("The Japanese Society of Physical Fitness and Sports Medicine")
136
+ expect(subject.id).to eq('https://doi.org/10.7600/jspfsm.56.60')
137
+ expect(subject.url).to eq('https://www.jstage.jst.go.jp/article/jspfsm/56/1/56_1_60/_article/-char/ja/')
138
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
139
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
140
+ expect(subject.creators).to eq([{ 'name' => ':(unav)', 'nameType' => 'Organizational' }])
141
+ expect(subject.titles).to eq([{ 'lang' => 'ja',
142
+ 'title' => '??????????????????????????????' }])
143
+ expect(subject.dates).to include({ 'date' => '2007', 'dateType' => 'Issued' })
144
+ expect(subject.publication_year).to eq('2007')
145
+ expect(subject.publisher).to eq('The Japanese Society of Physical Fitness and Sports Medicine')
119
146
  expect(subject.related_identifiers.length).to eq(8)
120
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"1881-4751", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
121
- expect(subject.container).to eq("firstPage"=>"60", "identifier"=>"1881-4751", "identifierType"=>"ISSN", "issue"=>"1", "lastPage"=>"60", "title"=>"Japanese Journal of Physical Fitness and Sports Medicine", "type"=>"Journal", "volume"=>"56")
122
- expect(subject.agency).to eq("crossref")
147
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '1881-4751',
148
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
149
+ expect(subject.container).to eq('firstPage' => '60', 'identifier' => '1881-4751',
150
+ 'identifierType' => 'ISSN', 'issue' => '1', 'lastPage' => '60', 'title' => 'Japanese Journal of Physical Fitness and Sports Medicine', 'type' => 'Journal', 'volume' => '56')
151
+ expect(subject.agency).to eq('crossref')
123
152
  end
124
153
 
125
- it "journal article with RDF for container" do
126
- input = "https://doi.org/10.1163/1937240X-00002096"
127
- subject = Briard::Metadata.new(input: input)
154
+ it 'journal article with RDF for container' do
155
+ input = 'https://doi.org/10.1163/1937240X-00002096'
156
+ subject = described_class.new(input: input)
128
157
  expect(subject.valid?).to be true
129
- expect(subject.id).to eq("https://doi.org/10.1163/1937240x-00002096")
130
- expect(subject.url).to eq("https://academic.oup.com/jcb/article-lookup/doi/10.1163/1937240X-00002096")
131
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
158
+ expect(subject.id).to eq('https://doi.org/10.1163/1937240x-00002096')
159
+ expect(subject.url).to eq('https://academic.oup.com/jcb/article-lookup/doi/10.1163/1937240X-00002096')
160
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
161
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
132
162
  expect(subject.creators.length).to eq(8)
133
- expect(subject.creators.first).to eq("familyName"=>"Mesquita-Joanes", "givenName"=>"Francesc", "name"=>"Mesquita-Joanes, Francesc", "nameType"=>"Personal")
134
- expect(subject.titles).to eq([{"title"=>"Global distribution of Fabaeformiscandona subacuta: an??exotic??invasive Ostracoda on the Iberian Peninsula?"}])
135
- expect(subject.dates).to include({"date"=>"2012-01-01", "dateType"=>"Issued"})
136
- expect(subject.publication_year).to eq("2012")
137
- expect(subject.publisher).to eq("Oxford University Press (OUP)")
163
+ expect(subject.creators.first).to eq('familyName' => 'Mesquita-Joanes',
164
+ 'givenName' => 'Francesc', 'name' => 'Mesquita-Joanes, Francesc', 'nameType' => 'Personal')
165
+ expect(subject.titles).to eq([{ 'title' => 'Global distribution of Fabaeformiscandona subacuta: an??exotic??invasive Ostracoda on the Iberian Peninsula?' }])
166
+ expect(subject.dates).to include({ 'date' => '2012-01-01', 'dateType' => 'Issued' })
167
+ expect(subject.publication_year).to eq('2012')
168
+ expect(subject.publisher).to eq('Oxford University Press (OUP)')
138
169
  expect(subject.related_identifiers.length).to eq(44)
139
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"1937-240X", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
140
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.1002/aqc.1122", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
141
- expect(subject.container).to eq("firstPage"=>"949", "identifier"=>"1937-240X", "identifierType"=>"ISSN", "issue"=>"6", "lastPage"=>"961", "title"=>"Journal of Crustacean Biology", "type"=>"Journal", "volume"=>"32")
142
- expect(subject.agency).to eq("crossref")
170
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '1937-240X',
171
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
172
+ expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.1002/aqc.1122',
173
+ 'relatedIdentifierType' => 'DOI', 'relationType' => 'References')
174
+ expect(subject.container).to eq('firstPage' => '949', 'identifier' => '1937-240X',
175
+ 'identifierType' => 'ISSN', 'issue' => '6', 'lastPage' => '961', 'title' => 'Journal of Crustacean Biology', 'type' => 'Journal', 'volume' => '32')
176
+ expect(subject.agency).to eq('crossref')
143
177
  end
144
178
 
145
- it "book chapter with RDF for container" do
146
- input = "10.1007/978-3-642-33191-6_49"
147
- subject = Briard::Metadata.new(input: input)
179
+ it 'book chapter with RDF for container' do
180
+ input = '10.1007/978-3-642-33191-6_49'
181
+ subject = described_class.new(input: input)
148
182
  expect(subject.valid?).to be true
149
- expect(subject.id).to eq("https://doi.org/10.1007/978-3-642-33191-6_49")
150
- expect(subject.url).to eq("http://link.springer.com/10.1007/978-3-642-33191-6_49")
151
- expect(subject.types).to eq("bibtex"=>"inbook", "citeproc"=>"chapter", "resourceType"=>"BookChapter", "resourceTypeGeneral"=>"BookChapter", "ris"=>"CHAP", "schemaOrg"=>"Chapter")
183
+ expect(subject.id).to eq('https://doi.org/10.1007/978-3-642-33191-6_49')
184
+ expect(subject.url).to eq('http://link.springer.com/10.1007/978-3-642-33191-6_49')
185
+ expect(subject.types).to eq('bibtex' => 'inbook', 'citeproc' => 'chapter',
186
+ 'resourceType' => 'BookChapter', 'resourceTypeGeneral' => 'BookChapter', 'ris' => 'CHAP', 'schemaOrg' => 'Chapter')
152
187
  expect(subject.creators.length).to eq(3)
153
- expect(subject.creators.first).to eq("familyName"=>"Chen", "givenName"=>"Lili", "name"=>"Chen, Lili", "nameType"=>"Personal")
154
- expect(subject.titles).to eq([{"title"=>"Human Body Orientation Estimation in Multiview Scenarios"}])
155
- expect(subject.dates).to eq([{"date"=>"2012", "dateType"=>"Issued"}, {"date"=>"2020-11-24T03:11:32Z", "dateType"=>"Updated"}])
156
- expect(subject.publication_year).to eq("2012")
157
- expect(subject.publisher).to eq("Springer Science and Business Media LLC")
188
+ expect(subject.creators.first).to eq('familyName' => 'Chen', 'givenName' => 'Lili',
189
+ 'name' => 'Chen, Lili', 'nameType' => 'Personal')
190
+ expect(subject.titles).to eq([{ 'title' => 'Human Body Orientation Estimation in Multiview Scenarios' }])
191
+ expect(subject.dates).to eq([{ 'date' => '2012', 'dateType' => 'Issued' },
192
+ { 'date' => '2020-11-24T03:11:32Z', 'dateType' => 'Updated' }])
193
+ expect(subject.publication_year).to eq('2012')
194
+ expect(subject.publisher).to eq('Springer Science and Business Media LLC')
158
195
  expect(subject.related_identifiers.length).to eq(7)
159
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"10.1007/978-3-540-24670-1_3", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
160
- expect(subject.container).to eq("identifier"=>"1611-3349", "identifierType"=>"ISSN", "title"=>"Lecture Notes in Computer Science", "type"=>"Book Series")
161
- expect(subject.agency).to eq("crossref")
196
+ expect(subject.related_identifiers.first).to eq(
197
+ 'relatedIdentifier' => '10.1007/978-3-540-24670-1_3', 'relatedIdentifierType' => 'DOI', 'relationType' => 'References'
198
+ )
199
+ expect(subject.container).to eq('identifier' => '1611-3349', 'identifierType' => 'ISSN',
200
+ 'title' => 'Lecture Notes in Computer Science', 'type' => 'Book Series')
201
+ expect(subject.agency).to eq('crossref')
162
202
  end
163
203
 
164
- it "posted_content" do
165
- input = "https://doi.org/10.1101/097196"
166
- subject = Briard::Metadata.new(input: input)
204
+ it 'posted_content' do
205
+ input = 'https://doi.org/10.1101/097196'
206
+ subject = described_class.new(input: input)
167
207
  expect(subject.valid?).to be true
168
- expect(subject.url).to eq("http://biorxiv.org/lookup/doi/10.1101/097196")
169
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"PostedContent", "resourceTypeGeneral"=>"Preprint", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
208
+ expect(subject.url).to eq('http://biorxiv.org/lookup/doi/10.1101/097196')
209
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
210
+ 'resourceType' => 'PostedContent', 'resourceTypeGeneral' => 'Preprint', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
170
211
  expect(subject.creators.count).to eq(11)
171
- expect(subject.creators.last).to eq("nameType"=>"Personal", "nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0003-4060-7360", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}], "name"=>"Clark, Timothy", "givenName"=>"Timothy", "familyName"=>"Clark")
172
- expect(subject.titles).to eq([{"title"=>"A Data Citation Roadmap for Scholarly Data Repositories"}])
173
- expect(subject.id).to eq("https://doi.org/10.1101/097196")
174
- expect(subject.identifiers).to eq([{"identifier"=>"biorxiv;097196v2", "identifierType"=>"pisa"}])
175
- expect(subject.descriptions.first["description"]).to start_with("This article presents a practical roadmap")
176
- expect(subject.dates).to include({"date"=>"2017-10-09", "dateType"=>"Issued"})
177
- expect(subject.publication_year).to eq("2017")
178
- expect(subject.publisher).to eq("Cold Spring Harbor Laboratory")
179
- expect(subject.agency).to eq("crossref")
212
+ expect(subject.creators.last).to eq('nameType' => 'Personal',
213
+ 'nameIdentifiers' => [{ 'nameIdentifier' => 'https://orcid.org/0000-0003-4060-7360', 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org' }], 'name' => 'Clark, Timothy', 'givenName' => 'Timothy', 'familyName' => 'Clark')
214
+ expect(subject.titles).to eq([{ 'title' => 'A Data Citation Roadmap for Scholarly Data Repositories' }])
215
+ expect(subject.id).to eq('https://doi.org/10.1101/097196')
216
+ expect(subject.identifiers).to eq([{ 'identifier' => 'biorxiv;097196v2',
217
+ 'identifierType' => 'pisa' }])
218
+ expect(subject.descriptions.first['description']).to start_with('This article presents a practical roadmap')
219
+ expect(subject.dates).to include({ 'date' => '2017-10-09', 'dateType' => 'Issued' })
220
+ expect(subject.publication_year).to eq('2017')
221
+ expect(subject.publisher).to eq('Cold Spring Harbor Laboratory')
222
+ expect(subject.agency).to eq('crossref')
180
223
  end
181
224
 
182
- it "peer review" do
183
- input = "https://doi.org/10.7554/elife.55167.sa2"
184
- subject = Briard::Metadata.new(input: input)
225
+ it 'peer review' do
226
+ input = 'https://doi.org/10.7554/elife.55167.sa2'
227
+ subject = described_class.new(input: input)
185
228
  expect(subject.valid?).to be true
186
- expect(subject.url).to eq("https://elifesciences.org/articles/55167#sa2")
187
- expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceType"=>"PeerReview", "resourceTypeGeneral"=>"PeerReview", "ris"=>"JOUR", "schemaOrg"=>"Review")
229
+ expect(subject.url).to eq('https://elifesciences.org/articles/55167#sa2')
230
+ expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article-journal',
231
+ 'resourceType' => 'PeerReview', 'resourceTypeGeneral' => 'PeerReview', 'ris' => 'JOUR', 'schemaOrg' => 'Review')
188
232
  expect(subject.creators.count).to eq(8)
189
- expect(subject.creators.last).to eq("affiliation" => [{"name"=>"Center for Computational Mathematics, Flatiron Institute, New York, United States"}],
190
- "familyName" => "Barnett",
191
- "givenName" => "Alex H",
192
- "name" => "Barnett, Alex H",
193
- "nameType" => "Personal")
194
- expect(subject.titles).to eq([{"title"=>"Author response: SpikeForest, reproducible web-facing ground-truth validation of automated neural spike sorters"}])
195
- expect(subject.id).to eq("https://doi.org/10.7554/elife.55167.sa2")
196
- expect(subject.identifiers).to be_empty
197
- expect(subject.descriptions).to be_empty
198
- expect(subject.dates).to include({"date"=>"2020-05-19", "dateType"=>"Issued"})
199
- expect(subject.publication_year).to eq("2020")
200
- expect(subject.publisher).to eq("eLife Sciences Publications, Ltd")
201
- expect(subject.agency).to eq("crossref")
233
+ expect(subject.creators.last).to eq('affiliation' => [{ 'name' => 'Center for Computational Mathematics, Flatiron Institute, New York, United States' }],
234
+ 'familyName' => 'Barnett',
235
+ 'givenName' => 'Alex H',
236
+ 'name' => 'Barnett, Alex H',
237
+ 'nameType' => 'Personal')
238
+ expect(subject.titles).to eq([{ 'title' => 'Author response: SpikeForest, reproducible web-facing ground-truth validation of automated neural spike sorters' }])
239
+ expect(subject.id).to eq('https://doi.org/10.7554/elife.55167.sa2')
240
+ expect(subject.identifiers.empty?).to be(true)
241
+ expect(subject.descriptions.empty?).to be(true)
242
+ expect(subject.dates).to include({ 'date' => '2020-05-19', 'dateType' => 'Issued' })
243
+ expect(subject.publication_year).to eq('2020')
244
+ expect(subject.publisher).to eq('eLife Sciences Publications, Ltd')
245
+ expect(subject.agency).to eq('crossref')
202
246
  end
203
247
 
204
- it "dissertation" do
205
- input = "https://doi.org/10.14264/uql.2020.791"
206
- subject = Briard::Metadata.new(input: input)
248
+ it 'dissertation' do
249
+ input = 'https://doi.org/10.14264/uql.2020.791'
250
+ subject = described_class.new(input: input)
207
251
  expect(subject.valid?).to be true
208
- expect(subject.url).to eq("http://espace.library.uq.edu.au/view/UQ:23a1e74")
209
- expect(subject.types).to eq("bibtex"=>"phdthesis", "citeproc"=>"thesis", "resourceType"=>"Dissertation", "resourceTypeGeneral"=>"Dissertation", "ris"=>"THES", "schemaOrg"=>"Thesis")
210
- expect(subject.creators).to eq([{"familyName"=>"Collingwood",
211
- "givenName"=>"Patricia Maree",
212
- "name"=>"Collingwood, Patricia Maree",
213
- "nameIdentifiers"=>
214
- [{"nameIdentifier"=>"https://orcid.org/0000-0003-3086-4443",
215
- "nameIdentifierScheme"=>"ORCID",
216
- "schemeUri"=>"https://orcid.org"}],
217
- "nameType"=>"Personal"}])
218
- expect(subject.titles).to eq([{"title"=>"School truancy and financial independence during emerging adulthood: a longitudinal analysis of receipt of and reliance on cash transfers"}])
219
- expect(subject.id).to eq("https://doi.org/10.14264/uql.2020.791")
220
- expect(subject.identifiers).to be_empty
221
- expect(subject.descriptions).to be_empty
222
- expect(subject.dates).to include({"date"=>"2020-06-08", "dateType"=>"Issued"})
223
- expect(subject.publication_year).to eq("2020")
224
- expect(subject.publisher).to eq("University of Queensland Library")
225
- expect(subject.agency).to eq("crossref")
252
+ expect(subject.url).to eq('http://espace.library.uq.edu.au/view/UQ:23a1e74')
253
+ expect(subject.types).to eq('bibtex' => 'phdthesis', 'citeproc' => 'thesis',
254
+ 'resourceType' => 'Dissertation', 'resourceTypeGeneral' => 'Dissertation', 'ris' => 'THES', 'schemaOrg' => 'Thesis')
255
+ expect(subject.creators).to eq([{ 'familyName' => 'Collingwood',
256
+ 'givenName' => 'Patricia Maree',
257
+ 'name' => 'Collingwood, Patricia Maree',
258
+ 'nameIdentifiers' =>
259
+ [{ 'nameIdentifier' => 'https://orcid.org/0000-0003-3086-4443',
260
+ 'nameIdentifierScheme' => 'ORCID',
261
+ 'schemeUri' => 'https://orcid.org' }],
262
+ 'nameType' => 'Personal' }])
263
+ expect(subject.titles).to eq([{ 'title' => 'School truancy and financial independence during emerging adulthood: a longitudinal analysis of receipt of and reliance on cash transfers' }])
264
+ expect(subject.id).to eq('https://doi.org/10.14264/uql.2020.791')
265
+ expect(subject.identifiers.empty?).to be(true)
266
+ expect(subject.descriptions.empty?).to be(true)
267
+ expect(subject.dates).to include({ 'date' => '2020-06-08', 'dateType' => 'Issued' })
268
+ expect(subject.publication_year).to eq('2020')
269
+ expect(subject.publisher).to eq('University of Queensland Library')
270
+ expect(subject.agency).to eq('crossref')
226
271
  end
227
272
 
228
- it "DOI with SICI DOI" do
229
- input = "https://doi.org/10.1890/0012-9658(2006)87[2832:tiopma]2.0.co;2"
230
- subject = Briard::Metadata.new(input: input)
273
+ it 'DOI with SICI DOI' do
274
+ input = 'https://doi.org/10.1890/0012-9658(2006)87[2832:tiopma]2.0.co;2'
275
+ subject = described_class.new(input: input)
231
276
  expect(subject.valid?).to be true
232
- expect(subject.id).to eq("https://doi.org/10.1890/0012-9658(2006)87%255b2832:tiopma%255d2.0.co;2")
233
- expect(subject.url).to eq("http://doi.wiley.com/10.1890/0012-9658(2006)87[2832:TIOPMA]2.0.CO;2")
234
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
235
- expect(subject.creators).to eq([{"nameType"=>"Personal", "name"=>"Fenton, A.", "givenName"=>"A.", "familyName"=>"Fenton"}, {"nameType"=>"Personal", "name"=>"Rands, S. A.", "givenName"=>"S. A.", "familyName"=>"Rands"}])
236
- expect(subject.rights_list).to eq([{"rightsUri"=>"http://doi.wiley.com/10.1002/tdm_license_1.1"}])
237
- expect(subject.titles).to eq([{"title"=>"THE IMPACT OF PARASITE MANIPULATION AND PREDATOR FORAGING BEHAVIOR ON PREDATOR???PREY COMMUNITIES"}])
238
- expect(subject.dates).to eq([{"date"=>"2006-11", "dateType"=>"Issued"}, {"date"=>"2019-04-28T13:51:50Z", "dateType"=>"Updated"}])
239
- expect(subject.publication_year).to eq("2006")
240
- expect(subject.publisher).to eq("Wiley")
277
+ expect(subject.id).to eq('https://doi.org/10.1890/0012-9658(2006)87%255b2832:tiopma%255d2.0.co;2')
278
+ expect(subject.url).to eq('http://doi.wiley.com/10.1890/0012-9658(2006)87[2832:TIOPMA]2.0.CO;2')
279
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
280
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
281
+ expect(subject.creators).to eq([
282
+ { 'nameType' => 'Personal', 'name' => 'Fenton, A.', 'givenName' => 'A.',
283
+ 'familyName' => 'Fenton' }, { 'nameType' => 'Personal', 'name' => 'Rands, S. A.', 'givenName' => 'S. A.', 'familyName' => 'Rands' }
284
+ ])
285
+ expect(subject.rights_list).to eq([{ 'rightsUri' => 'http://doi.wiley.com/10.1002/tdm_license_1.1' }])
286
+ expect(subject.titles).to eq([{ 'title' => 'THE IMPACT OF PARASITE MANIPULATION AND PREDATOR FORAGING BEHAVIOR ON PREDATOR???PREY COMMUNITIES' }])
287
+ expect(subject.dates).to eq([{ 'date' => '2006-11', 'dateType' => 'Issued' },
288
+ { 'date' => '2019-04-28T13:51:50Z', 'dateType' => 'Updated' }])
289
+ expect(subject.publication_year).to eq('2006')
290
+ expect(subject.publisher).to eq('Wiley')
241
291
  expect(subject.related_identifiers.length).to eq(35)
242
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"0012-9658", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
243
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.1098/rspb.2002.2213", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
244
- expect(subject.container).to eq("firstPage"=>"2832", "identifier"=>"0012-9658", "identifierType"=>"ISSN", "issue"=>"11", "lastPage"=>"2841", "title"=>"Ecology", "type"=>"Journal", "volume"=>"87")
245
- expect(subject.agency).to eq("crossref")
292
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '0012-9658',
293
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
294
+ expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.1098/rspb.2002.2213',
295
+ 'relatedIdentifierType' => 'DOI', 'relationType' => 'References')
296
+ expect(subject.container).to eq('firstPage' => '2832', 'identifier' => '0012-9658',
297
+ 'identifierType' => 'ISSN', 'issue' => '11', 'lastPage' => '2841', 'title' => 'Ecology', 'type' => 'Journal', 'volume' => '87')
298
+ expect(subject.agency).to eq('crossref')
246
299
  end
247
300
 
248
- it "DOI with ORCID ID" do
249
- input = "https://doi.org/10.1155/2012/291294"
250
- subject = Briard::Metadata.new(input: input)
301
+ it 'DOI with ORCID ID' do
302
+ input = 'https://doi.org/10.1155/2012/291294'
303
+ subject = described_class.new(input: input)
251
304
  expect(subject.valid?).to be true
252
- expect(subject.id).to eq("https://doi.org/10.1155/2012/291294")
253
- expect(subject.url).to eq("http://www.hindawi.com/journals/pm/2012/291294/")
254
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
305
+ expect(subject.id).to eq('https://doi.org/10.1155/2012/291294')
306
+ expect(subject.url).to eq('http://www.hindawi.com/journals/pm/2012/291294/')
307
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
308
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
255
309
  expect(subject.creators.length).to eq(7)
256
- expect(subject.creators[2]).to eq("nameType"=>"Personal", "nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0003-2043-4925", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}], "name"=>"Hernandez, Beatriz", "givenName"=>"Beatriz", "familyName"=>"Hernandez", "affiliation" => [{"name"=>"War Related Illness and Injury Study Center (WRIISC) and Mental Illness Research Education and Clinical Center (MIRECC), Department of Veterans Affairs, Palo Alto, CA 94304, USA"}, {"name"=>"Department of Psychiatry and Behavioral Sciences, Stanford University School of Medicine, Stanford, CA 94304, USA"}])
257
- expect(subject.rights_list).to eq([{"rights"=>"Creative Commons Attribution 3.0 Unported",
258
- "rightsIdentifier"=>"cc-by-3.0",
259
- "rightsIdentifierScheme"=>"SPDX",
260
- "rightsUri"=>"https://creativecommons.org/licenses/by/3.0/legalcode",
261
- "schemeUri"=>"https://spdx.org/licenses/"}])
262
- expect(subject.titles).to eq([{"title"=>"Delineating a Retesting Zone Using Receiver Operating Characteristic Analysis on Serial QuantiFERON Tuberculosis Test Results in US Healthcare Workers"}])
263
- expect(subject.dates).to include({"date"=>"2012", "dateType"=>"Issued"})
264
- expect(subject.publication_year).to eq("2012")
265
- expect(subject.publisher).to eq("Hindawi Limited")
310
+ expect(subject.creators[2]).to eq('nameType' => 'Personal',
311
+ 'nameIdentifiers' => [{ 'nameIdentifier' => 'https://orcid.org/0000-0003-2043-4925', 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org' }], 'name' => 'Hernandez, Beatriz', 'givenName' => 'Beatriz', 'familyName' => 'Hernandez', 'affiliation' => [{ 'name' => 'War Related Illness and Injury Study Center (WRIISC) and Mental Illness Research Education and Clinical Center (MIRECC), Department of Veterans Affairs, Palo Alto, CA 94304, USA' }, { 'name' => 'Department of Psychiatry and Behavioral Sciences, Stanford University School of Medicine, Stanford, CA 94304, USA' }])
312
+ expect(subject.rights_list).to eq([{ 'rights' => 'Creative Commons Attribution 3.0 Unported',
313
+ 'rightsIdentifier' => 'cc-by-3.0',
314
+ 'rightsIdentifierScheme' => 'SPDX',
315
+ 'rightsUri' => 'https://creativecommons.org/licenses/by/3.0/legalcode',
316
+ 'schemeUri' => 'https://spdx.org/licenses/' }])
317
+ expect(subject.titles).to eq([{ 'title' => 'Delineating a Retesting Zone Using Receiver Operating Characteristic Analysis on Serial QuantiFERON Tuberculosis Test Results in US Healthcare Workers' }])
318
+ expect(subject.dates).to include({ 'date' => '2012', 'dateType' => 'Issued' })
319
+ expect(subject.publication_year).to eq('2012')
320
+ expect(subject.publisher).to eq('Hindawi Limited')
266
321
  expect(subject.related_identifiers.length).to eq(18)
267
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"2090-1844", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
268
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.1378/chest.12-0045", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
269
- expect(subject.container).to eq("firstPage"=>"1", "identifier"=>"2090-1844", "identifierType"=>"ISSN", "lastPage"=>"7", "title"=>"Pulmonary Medicine", "type"=>"Journal", "volume"=>"2012")
270
- expect(subject.agency).to eq("crossref")
322
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '2090-1844',
323
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
324
+ expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.1378/chest.12-0045',
325
+ 'relatedIdentifierType' => 'DOI', 'relationType' => 'References')
326
+ expect(subject.container).to eq('firstPage' => '1', 'identifier' => '2090-1844',
327
+ 'identifierType' => 'ISSN', 'lastPage' => '7', 'title' => 'Pulmonary Medicine', 'type' => 'Journal', 'volume' => '2012')
328
+ expect(subject.agency).to eq('crossref')
271
329
  end
272
330
 
273
- it "date in future" do
274
- input = "https://doi.org/10.1016/j.ejphar.2015.03.018"
275
- subject = Briard::Metadata.new(input: input)
331
+ it 'date in future' do
332
+ input = 'https://doi.org/10.1016/j.ejphar.2015.03.018'
333
+ subject = described_class.new(input: input)
276
334
  expect(subject.valid?).to be true
277
- expect(subject.id).to eq("https://doi.org/10.1016/j.ejphar.2015.03.018")
278
- expect(subject.identifiers).to eq([{"identifier"=>"S0014299915002332", "identifierType"=>"sequence-number"}])
279
- expect(subject.url).to eq("https://linkinghub.elsevier.com/retrieve/pii/S0014299915002332")
280
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
335
+ expect(subject.id).to eq('https://doi.org/10.1016/j.ejphar.2015.03.018')
336
+ expect(subject.identifiers).to eq([{ 'identifier' => 'S0014299915002332',
337
+ 'identifierType' => 'sequence-number' }])
338
+ expect(subject.url).to eq('https://linkinghub.elsevier.com/retrieve/pii/S0014299915002332')
339
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
340
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
281
341
  expect(subject.creators.length).to eq(10)
282
- expect(subject.creators.first).to eq("nameType"=>"Personal", "name"=>"Beck, Sarah E.", "givenName"=>"Sarah E.", "familyName"=>"Beck")
283
- expect(subject.titles).to eq([{"title"=>"Paving the path to HIV neurotherapy: Predicting SIV CNS disease"}])
284
- expect(subject.dates).to include({"date"=>"2015-07", "dateType"=>"Issued"})
285
- expect(subject.publication_year).to eq("2015")
286
- expect(subject.publisher).to eq("Elsevier BV")
287
- expect(subject.related_identifiers).to eq([{"relatedIdentifier"=>"0014-2999", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection"},
288
- {"relatedIdentifier"=>"10.1212/01.wnl.0000287431.88658.8b",
289
- "relatedIdentifierType"=>"DOI",
290
- "relationType"=>"References"},
291
- {"relatedIdentifier"=>"10.1182/blood-2010-09-308684",
292
- "relatedIdentifierType"=>"DOI",
293
- "relationType"=>"References"},
294
- {"relatedIdentifier"=>"10.1007/s13365-015-0313-7",
295
- "relatedIdentifierType"=>"DOI",
296
- "relationType"=>"References"},
297
- {"relatedIdentifier"=>"10.1016/j.jneuroim.2006.04.017",
298
- "relatedIdentifierType"=>"DOI",
299
- "relationType"=>"References"},
300
- {"relatedIdentifier"=>"10.1086/514001",
301
- "relatedIdentifierType"=>"DOI",
302
- "relationType"=>"References"},
303
- {"relatedIdentifier"=>"10.1002/ana.410310403",
304
- "relatedIdentifierType"=>"DOI",
305
- "relationType"=>"References"},
306
- {"relatedIdentifier"=>"10.1093/infdis/jir214",
307
- "relatedIdentifierType"=>"DOI",
308
- "relationType"=>"References"},
309
- {"relatedIdentifier"=>"10.1097/qad.0b013e32836010bd",
310
- "relatedIdentifierType"=>"DOI",
311
- "relationType"=>"References"},
312
- {"relatedIdentifier"=>"10.1261/rna.036863.112",
313
- "relatedIdentifierType"=>"DOI",
314
- "relationType"=>"References"},
315
- {"relatedIdentifier"=>"10.4103/0019-5359.107389",
316
- "relatedIdentifierType"=>"DOI",
317
- "relationType"=>"References"},
318
- {"relatedIdentifier"=>"10.3233/jad-2008-14103",
319
- "relatedIdentifierType"=>"DOI",
320
- "relationType"=>"References"},
321
- {"relatedIdentifier"=>"10.1126/science.287.5455.959",
322
- "relatedIdentifierType"=>"DOI",
323
- "relationType"=>"References"},
324
- {"relatedIdentifier"=>"10.1097/01.qai.0000165799.59322.f5",
325
- "relatedIdentifierType"=>"DOI",
326
- "relationType"=>"References"},
327
- {"relatedIdentifier"=>"10.1002/ana.410420503",
328
- "relatedIdentifierType"=>"DOI",
329
- "relationType"=>"References"},
330
- {"relatedIdentifier"=>"10.1089/ars.2012.4834",
331
- "relatedIdentifierType"=>"DOI",
332
- "relationType"=>"References"},
333
- {"relatedIdentifier"=>"10.1111/j.1600-0404.1987.tb05458.x",
334
- "relatedIdentifierType"=>"DOI",
335
- "relationType"=>"References"},
336
- {"relatedIdentifier"=>"10.1097/00002030-198905000-00006",
337
- "relatedIdentifierType"=>"DOI",
338
- "relationType"=>"References"},
339
- {"relatedIdentifier"=>"10.1002/ana.410200304",
340
- "relatedIdentifierType"=>"DOI",
341
- "relationType"=>"References"},
342
- {"relatedIdentifier"=>"10.1186/1742-6405-2-6",
343
- "relatedIdentifierType"=>"DOI",
344
- "relationType"=>"References"},
345
- {"relatedIdentifier"=>"10.1111/j.1600-0684.1993.tb00649.x",
346
- "relatedIdentifierType"=>"DOI",
347
- "relationType"=>"References"},
348
- {"relatedIdentifier"=>"10.1186/1742-6405-7-15",
349
- "relatedIdentifierType"=>"DOI",
350
- "relationType"=>"References"},
351
- {"relatedIdentifier"=>"10.1212/wnl.0b013e318200d727",
352
- "relatedIdentifierType"=>"DOI",
353
- "relationType"=>"References"},
354
- {"relatedIdentifier"=>"10.1089/aid.2006.0292",
355
- "relatedIdentifierType"=>"DOI",
356
- "relationType"=>"References"},
357
- {"relatedIdentifier"=>"10.1126/science.3646751",
358
- "relatedIdentifierType"=>"DOI",
359
- "relationType"=>"References"},
360
- {"relatedIdentifier"=>"10.1002/ajmg.b.32071",
361
- "relatedIdentifierType"=>"DOI",
362
- "relationType"=>"References"},
363
- {"relatedIdentifier"=>"10.1186/1756-6606-6-40",
364
- "relatedIdentifierType"=>"DOI",
365
- "relationType"=>"References"},
366
- {"relatedIdentifier"=>"10.1086/344938",
367
- "relatedIdentifierType"=>"DOI",
368
- "relationType"=>"References"},
369
- {"relatedIdentifier"=>"10.1128/jvi.71.8.6055-6060.1997",
370
- "relatedIdentifierType"=>"DOI",
371
- "relationType"=>"References"},
372
- {"relatedIdentifier"=>"10.1016/j.jneuroim.2004.08.031",
373
- "relatedIdentifierType"=>"DOI",
374
- "relationType"=>"References"},
375
- {"relatedIdentifier"=>"10.1371/journal.pone.0003603",
376
- "relatedIdentifierType"=>"DOI",
377
- "relationType"=>"References"},
378
- {"relatedIdentifier"=>"10.1093/jnen/61.1.85",
379
- "relatedIdentifierType"=>"DOI",
380
- "relationType"=>"References"},
381
- {"relatedIdentifier"=>"10.1097/qad.0b013e32832c4af0",
382
- "relatedIdentifierType"=>"DOI",
383
- "relationType"=>"References"},
384
- {"relatedIdentifier"=>"10.3389/fgene.2013.00083",
385
- "relatedIdentifierType"=>"DOI",
386
- "relationType"=>"References"},
387
- {"relatedIdentifier"=>"10.1080/13550280390194109",
388
- "relatedIdentifierType"=>"DOI",
389
- "relationType"=>"References"},
390
- {"relatedIdentifier"=>"10.1002/ana.410420504",
391
- "relatedIdentifierType"=>"DOI",
392
- "relationType"=>"References"},
393
- {"relatedIdentifier"=>"10.1001/archneur.61.11.1687",
394
- "relatedIdentifierType"=>"DOI",
395
- "relationType"=>"References"},
396
- {"relatedIdentifier"=>"10.1212/01.wnl.0000277635.05973.55",
397
- "relatedIdentifierType"=>"DOI",
398
- "relationType"=>"References"},
399
- {"relatedIdentifier"=>"10.1038/nmeth.3014",
400
- "relatedIdentifierType"=>"DOI",
401
- "relationType"=>"References"},
402
- {"relatedIdentifier"=>"10.1097/qai.0000000000000048",
403
- "relatedIdentifierType"=>"DOI",
404
- "relationType"=>"References"},
405
- {"relatedIdentifier"=>"10.1093/infdis/jit278",
406
- "relatedIdentifierType"=>"DOI",
407
- "relationType"=>"References"},
408
- {"relatedIdentifier"=>"10.1007/s13365-014-0283-1",
409
- "relatedIdentifierType"=>"DOI",
410
- "relationType"=>"References"},
411
- {"relatedIdentifier"=>"10.1097/00002030-199905280-00010",
412
- "relatedIdentifierType"=>"DOI",
413
- "relationType"=>"References"},
414
- {"relatedIdentifier"=>"10.1097/qco.0b013e32834ef586",
415
- "relatedIdentifierType"=>"DOI",
416
- "relationType"=>"References"},
417
- {"relatedIdentifier"=>"10.4049/jimmunol.169.6.3438",
418
- "relatedIdentifierType"=>"DOI",
419
- "relationType"=>"References"},
420
- {"relatedIdentifier"=>"10.2174/1389200024605082",
421
- "relatedIdentifierType"=>"DOI",
422
- "relationType"=>"References"},
423
- {"relatedIdentifier"=>"10.1126/science.1546323",
424
- "relatedIdentifierType"=>"DOI",
425
- "relationType"=>"References"},
426
- {"relatedIdentifier"=>"10.1016/s1474-4422(14)70137-1",
427
- "relatedIdentifierType"=>"DOI",
428
- "relationType"=>"References"},
429
- {"relatedIdentifier"=>"10.1016/j.jns.2009.06.043",
430
- "relatedIdentifierType"=>"DOI",
431
- "relationType"=>"References"},
432
- {"relatedIdentifier"=>"10.1128/jvi.77.16.9029-9040.2003",
433
- "relatedIdentifierType"=>"DOI",
434
- "relationType"=>"References"},
435
- {"relatedIdentifier"=>"10.1002/jcp.24254",
436
- "relatedIdentifierType"=>"DOI",
437
- "relationType"=>"References"},
438
- {"relatedIdentifier"=>"10.1128/jvi.76.1.292-302.2002",
439
- "relatedIdentifierType"=>"DOI",
440
- "relationType"=>"References"},
441
- {"relatedIdentifier"=>"10.1182/blood-2012-03-414706",
442
- "relatedIdentifierType"=>"DOI",
443
- "relationType"=>"References"},
444
- {"relatedIdentifier"=>"10.1016/j.jneuroim.2013.11.004",
445
- "relatedIdentifierType"=>"DOI",
446
- "relationType"=>"References"},
447
- {"relatedIdentifier"=>"10.1038/nrg3198",
448
- "relatedIdentifierType"=>"DOI",
449
- "relationType"=>"References"},
450
- {"relatedIdentifier"=>"10.1016/s0140-6736(96)10178-1",
451
- "relatedIdentifierType"=>"DOI",
452
- "relationType"=>"References"},
453
- {"relatedIdentifier"=>"10.1128/jvi.00366-11",
454
- "relatedIdentifierType"=>"DOI",
455
- "relationType"=>"References"},
456
- {"relatedIdentifier"=>"10.1007/s13365-011-0053-2",
457
- "relatedIdentifierType"=>"DOI",
458
- "relationType"=>"References"},
459
- {"relatedIdentifier"=>"10.1083/jcb.201211138",
460
- "relatedIdentifierType"=>"DOI",
461
- "relationType"=>"References"},
462
- {"relatedIdentifier"=>"10.1111/j.1600-0684.2011.00475.x",
463
- "relatedIdentifierType"=>"DOI",
464
- "relationType"=>"References"},
465
- {"relatedIdentifier"=>"10.1038/srep05915",
466
- "relatedIdentifierType"=>"DOI",
467
- "relationType"=>"References"},
468
- {"relatedIdentifier"=>"10.1096/fj.09-143503",
469
- "relatedIdentifierType"=>"DOI",
470
- "relationType"=>"References"},
471
- {"relatedIdentifier"=>"10.1542/peds.111.2.e168",
472
- "relatedIdentifierType"=>"DOI",
473
- "relationType"=>"References"},
474
- {"relatedIdentifier"=>"10.2174/1566524013363555",
475
- "relatedIdentifierType"=>"DOI",
476
- "relationType"=>"References"},
477
- {"relatedIdentifier"=>"10.1126/science.283.5403.857",
478
- "relatedIdentifierType"=>"DOI",
479
- "relationType"=>"References"},
480
- {"relatedIdentifier"=>"10.1212/01.wnl.0000145763.68284.15",
481
- "relatedIdentifierType"=>"DOI",
482
- "relationType"=>"References"},
483
- {"relatedIdentifier"=>"10.1002/ana.410230727",
484
- "relatedIdentifierType"=>"DOI",
485
- "relationType"=>"References"},
486
- {"relatedIdentifier"=>"10.1186/1742-4690-10-95",
487
- "relatedIdentifierType"=>"DOI",
488
- "relationType"=>"References"},
489
- {"relatedIdentifier"=>"10.1128/jvi.79.2.684-695.2005",
490
- "relatedIdentifierType"=>"DOI",
491
- "relationType"=>"References"},
492
- {"relatedIdentifier"=>"10.1111/j.1600-0684.2005.00126.x",
493
- "relatedIdentifierType"=>"DOI",
494
- "relationType"=>"References"},
495
- {"relatedIdentifier"=>"10.1186/1756-8722-6-6",
496
- "relatedIdentifierType"=>"DOI",
497
- "relationType"=>"References"},
498
- {"relatedIdentifier"=>"10.1016/j.jmb.2013.12.017",
499
- "relatedIdentifierType"=>"DOI",
500
- "relationType"=>"References"},
501
- {"relatedIdentifier"=>"10.1590/s0037-86822012000600002",
502
- "relatedIdentifierType"=>"DOI",
503
- "relationType"=>"References"},
504
- {"relatedIdentifier"=>"10.1080/13550280390218715",
505
- "relatedIdentifierType"=>"DOI",
506
- "relationType"=>"References"},
507
- {"relatedIdentifier"=>"10.1111/j.1468-1331.2012.03777.x",
508
- "relatedIdentifierType"=>"DOI",
509
- "relationType"=>"References"},
510
- {"relatedIdentifier"=>"10.3233/jad-2010-090649",
511
- "relatedIdentifierType"=>"DOI",
512
- "relationType"=>"References"},
513
- {"relatedIdentifier"=>"10.1080/13550280500516484",
514
- "relatedIdentifierType"=>"DOI",
515
- "relationType"=>"References"},
516
- {"relatedIdentifier"=>"10.1080/13550280390218751",
517
- "relatedIdentifierType"=>"DOI",
518
- "relationType"=>"References"},
519
- {"relatedIdentifier"=>"10.1189/jlb.0811394",
520
- "relatedIdentifierType"=>"DOI",
521
- "relationType"=>"References"},
522
- {"relatedIdentifier"=>"10.1007/s11481-011-9330-3",
523
- "relatedIdentifierType"=>"DOI",
524
- "relationType"=>"References"},
525
- {"relatedIdentifier"=>"10.1080/13550280802074539",
526
- "relatedIdentifierType"=>"DOI",
527
- "relationType"=>"References"},
528
- {"relatedIdentifier"=>"10.1086/650743",
529
- "relatedIdentifierType"=>"DOI",
530
- "relationType"=>"References"},
531
- {"relatedIdentifier"=>"10.1371/journal.pone.0008129",
532
- "relatedIdentifierType"=>"DOI",
533
- "relationType"=>"References"},
534
- {"relatedIdentifier"=>"10.1128/jvi.80.10.5074-5077.2006",
535
- "relatedIdentifierType"=>"DOI",
536
- "relationType"=>"References"},
537
- {"relatedIdentifier"=>"10.1186/1742-2094-10-62",
538
- "relatedIdentifierType"=>"DOI",
539
- "relationType"=>"References"},
540
- {"relatedIdentifier"=>"10.1086/323478",
541
- "relatedIdentifierType"=>"DOI",
542
- "relationType"=>"References"},
543
- {"relatedIdentifier"=>"10.1128/jvi.73.12.10480-10488.1999",
544
- "relatedIdentifierType"=>"DOI",
545
- "relationType"=>"References"},
546
- {"relatedIdentifier"=>"10.1111/hiv.12134",
547
- "relatedIdentifierType"=>"DOI",
548
- "relationType"=>"References"}])
549
- expect(subject.container).to eq("firstPage"=>"303", "identifier"=>"0014-2999", "identifierType"=>"ISSN", "lastPage"=>"312", "title"=>"European Journal of Pharmacology", "type"=>"Journal", "volume"=>"759")
550
- expect(subject.agency).to eq("crossref")
342
+ expect(subject.creators.first).to eq('nameType' => 'Personal', 'name' => 'Beck, Sarah E.',
343
+ 'givenName' => 'Sarah E.', 'familyName' => 'Beck')
344
+ expect(subject.titles).to eq([{ 'title' => 'Paving the path to HIV neurotherapy: Predicting SIV CNS disease' }])
345
+ expect(subject.dates).to include({ 'date' => '2015-07', 'dateType' => 'Issued' })
346
+ expect(subject.publication_year).to eq('2015')
347
+ expect(subject.publisher).to eq('Elsevier BV')
348
+ expect(subject.related_identifiers).to eq([{ 'relatedIdentifier' => '0014-2999', 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection' },
349
+ { 'relatedIdentifier' => '10.1212/01.wnl.0000287431.88658.8b',
350
+ 'relatedIdentifierType' => 'DOI',
351
+ 'relationType' => 'References' },
352
+ { 'relatedIdentifier' => '10.1182/blood-2010-09-308684',
353
+ 'relatedIdentifierType' => 'DOI',
354
+ 'relationType' => 'References' },
355
+ { 'relatedIdentifier' => '10.1007/s13365-015-0313-7',
356
+ 'relatedIdentifierType' => 'DOI',
357
+ 'relationType' => 'References' },
358
+ { 'relatedIdentifier' => '10.1016/j.jneuroim.2006.04.017',
359
+ 'relatedIdentifierType' => 'DOI',
360
+ 'relationType' => 'References' },
361
+ { 'relatedIdentifier' => '10.1086/514001',
362
+ 'relatedIdentifierType' => 'DOI',
363
+ 'relationType' => 'References' },
364
+ { 'relatedIdentifier' => '10.1002/ana.410310403',
365
+ 'relatedIdentifierType' => 'DOI',
366
+ 'relationType' => 'References' },
367
+ { 'relatedIdentifier' => '10.1093/infdis/jir214',
368
+ 'relatedIdentifierType' => 'DOI',
369
+ 'relationType' => 'References' },
370
+ { 'relatedIdentifier' => '10.1097/qad.0b013e32836010bd',
371
+ 'relatedIdentifierType' => 'DOI',
372
+ 'relationType' => 'References' },
373
+ { 'relatedIdentifier' => '10.1261/rna.036863.112',
374
+ 'relatedIdentifierType' => 'DOI',
375
+ 'relationType' => 'References' },
376
+ { 'relatedIdentifier' => '10.4103/0019-5359.107389',
377
+ 'relatedIdentifierType' => 'DOI',
378
+ 'relationType' => 'References' },
379
+ { 'relatedIdentifier' => '10.3233/jad-2008-14103',
380
+ 'relatedIdentifierType' => 'DOI',
381
+ 'relationType' => 'References' },
382
+ { 'relatedIdentifier' => '10.1126/science.287.5455.959',
383
+ 'relatedIdentifierType' => 'DOI',
384
+ 'relationType' => 'References' },
385
+ { 'relatedIdentifier' => '10.1097/01.qai.0000165799.59322.f5',
386
+ 'relatedIdentifierType' => 'DOI',
387
+ 'relationType' => 'References' },
388
+ { 'relatedIdentifier' => '10.1002/ana.410420503',
389
+ 'relatedIdentifierType' => 'DOI',
390
+ 'relationType' => 'References' },
391
+ { 'relatedIdentifier' => '10.1089/ars.2012.4834',
392
+ 'relatedIdentifierType' => 'DOI',
393
+ 'relationType' => 'References' },
394
+ { 'relatedIdentifier' => '10.1111/j.1600-0404.1987.tb05458.x',
395
+ 'relatedIdentifierType' => 'DOI',
396
+ 'relationType' => 'References' },
397
+ { 'relatedIdentifier' => '10.1097/00002030-198905000-00006',
398
+ 'relatedIdentifierType' => 'DOI',
399
+ 'relationType' => 'References' },
400
+ { 'relatedIdentifier' => '10.1002/ana.410200304',
401
+ 'relatedIdentifierType' => 'DOI',
402
+ 'relationType' => 'References' },
403
+ { 'relatedIdentifier' => '10.1186/1742-6405-2-6',
404
+ 'relatedIdentifierType' => 'DOI',
405
+ 'relationType' => 'References' },
406
+ { 'relatedIdentifier' => '10.1111/j.1600-0684.1993.tb00649.x',
407
+ 'relatedIdentifierType' => 'DOI',
408
+ 'relationType' => 'References' },
409
+ { 'relatedIdentifier' => '10.1186/1742-6405-7-15',
410
+ 'relatedIdentifierType' => 'DOI',
411
+ 'relationType' => 'References' },
412
+ { 'relatedIdentifier' => '10.1212/wnl.0b013e318200d727',
413
+ 'relatedIdentifierType' => 'DOI',
414
+ 'relationType' => 'References' },
415
+ { 'relatedIdentifier' => '10.1089/aid.2006.0292',
416
+ 'relatedIdentifierType' => 'DOI',
417
+ 'relationType' => 'References' },
418
+ { 'relatedIdentifier' => '10.1126/science.3646751',
419
+ 'relatedIdentifierType' => 'DOI',
420
+ 'relationType' => 'References' },
421
+ { 'relatedIdentifier' => '10.1002/ajmg.b.32071',
422
+ 'relatedIdentifierType' => 'DOI',
423
+ 'relationType' => 'References' },
424
+ { 'relatedIdentifier' => '10.1186/1756-6606-6-40',
425
+ 'relatedIdentifierType' => 'DOI',
426
+ 'relationType' => 'References' },
427
+ { 'relatedIdentifier' => '10.1086/344938',
428
+ 'relatedIdentifierType' => 'DOI',
429
+ 'relationType' => 'References' },
430
+ { 'relatedIdentifier' => '10.1128/jvi.71.8.6055-6060.1997',
431
+ 'relatedIdentifierType' => 'DOI',
432
+ 'relationType' => 'References' },
433
+ { 'relatedIdentifier' => '10.1016/j.jneuroim.2004.08.031',
434
+ 'relatedIdentifierType' => 'DOI',
435
+ 'relationType' => 'References' },
436
+ { 'relatedIdentifier' => '10.1371/journal.pone.0003603',
437
+ 'relatedIdentifierType' => 'DOI',
438
+ 'relationType' => 'References' },
439
+ { 'relatedIdentifier' => '10.1093/jnen/61.1.85',
440
+ 'relatedIdentifierType' => 'DOI',
441
+ 'relationType' => 'References' },
442
+ { 'relatedIdentifier' => '10.1097/qad.0b013e32832c4af0',
443
+ 'relatedIdentifierType' => 'DOI',
444
+ 'relationType' => 'References' },
445
+ { 'relatedIdentifier' => '10.3389/fgene.2013.00083',
446
+ 'relatedIdentifierType' => 'DOI',
447
+ 'relationType' => 'References' },
448
+ { 'relatedIdentifier' => '10.1080/13550280390194109',
449
+ 'relatedIdentifierType' => 'DOI',
450
+ 'relationType' => 'References' },
451
+ { 'relatedIdentifier' => '10.1002/ana.410420504',
452
+ 'relatedIdentifierType' => 'DOI',
453
+ 'relationType' => 'References' },
454
+ { 'relatedIdentifier' => '10.1001/archneur.61.11.1687',
455
+ 'relatedIdentifierType' => 'DOI',
456
+ 'relationType' => 'References' },
457
+ { 'relatedIdentifier' => '10.1212/01.wnl.0000277635.05973.55',
458
+ 'relatedIdentifierType' => 'DOI',
459
+ 'relationType' => 'References' },
460
+ { 'relatedIdentifier' => '10.1038/nmeth.3014',
461
+ 'relatedIdentifierType' => 'DOI',
462
+ 'relationType' => 'References' },
463
+ { 'relatedIdentifier' => '10.1097/qai.0000000000000048',
464
+ 'relatedIdentifierType' => 'DOI',
465
+ 'relationType' => 'References' },
466
+ { 'relatedIdentifier' => '10.1093/infdis/jit278',
467
+ 'relatedIdentifierType' => 'DOI',
468
+ 'relationType' => 'References' },
469
+ { 'relatedIdentifier' => '10.1007/s13365-014-0283-1',
470
+ 'relatedIdentifierType' => 'DOI',
471
+ 'relationType' => 'References' },
472
+ { 'relatedIdentifier' => '10.1097/00002030-199905280-00010',
473
+ 'relatedIdentifierType' => 'DOI',
474
+ 'relationType' => 'References' },
475
+ { 'relatedIdentifier' => '10.1097/qco.0b013e32834ef586',
476
+ 'relatedIdentifierType' => 'DOI',
477
+ 'relationType' => 'References' },
478
+ { 'relatedIdentifier' => '10.4049/jimmunol.169.6.3438',
479
+ 'relatedIdentifierType' => 'DOI',
480
+ 'relationType' => 'References' },
481
+ { 'relatedIdentifier' => '10.2174/1389200024605082',
482
+ 'relatedIdentifierType' => 'DOI',
483
+ 'relationType' => 'References' },
484
+ { 'relatedIdentifier' => '10.1126/science.1546323',
485
+ 'relatedIdentifierType' => 'DOI',
486
+ 'relationType' => 'References' },
487
+ { 'relatedIdentifier' => '10.1016/s1474-4422(14)70137-1',
488
+ 'relatedIdentifierType' => 'DOI',
489
+ 'relationType' => 'References' },
490
+ { 'relatedIdentifier' => '10.1016/j.jns.2009.06.043',
491
+ 'relatedIdentifierType' => 'DOI',
492
+ 'relationType' => 'References' },
493
+ { 'relatedIdentifier' => '10.1128/jvi.77.16.9029-9040.2003',
494
+ 'relatedIdentifierType' => 'DOI',
495
+ 'relationType' => 'References' },
496
+ { 'relatedIdentifier' => '10.1002/jcp.24254',
497
+ 'relatedIdentifierType' => 'DOI',
498
+ 'relationType' => 'References' },
499
+ { 'relatedIdentifier' => '10.1128/jvi.76.1.292-302.2002',
500
+ 'relatedIdentifierType' => 'DOI',
501
+ 'relationType' => 'References' },
502
+ { 'relatedIdentifier' => '10.1182/blood-2012-03-414706',
503
+ 'relatedIdentifierType' => 'DOI',
504
+ 'relationType' => 'References' },
505
+ { 'relatedIdentifier' => '10.1016/j.jneuroim.2013.11.004',
506
+ 'relatedIdentifierType' => 'DOI',
507
+ 'relationType' => 'References' },
508
+ { 'relatedIdentifier' => '10.1038/nrg3198',
509
+ 'relatedIdentifierType' => 'DOI',
510
+ 'relationType' => 'References' },
511
+ { 'relatedIdentifier' => '10.1016/s0140-6736(96)10178-1',
512
+ 'relatedIdentifierType' => 'DOI',
513
+ 'relationType' => 'References' },
514
+ { 'relatedIdentifier' => '10.1128/jvi.00366-11',
515
+ 'relatedIdentifierType' => 'DOI',
516
+ 'relationType' => 'References' },
517
+ { 'relatedIdentifier' => '10.1007/s13365-011-0053-2',
518
+ 'relatedIdentifierType' => 'DOI',
519
+ 'relationType' => 'References' },
520
+ { 'relatedIdentifier' => '10.1083/jcb.201211138',
521
+ 'relatedIdentifierType' => 'DOI',
522
+ 'relationType' => 'References' },
523
+ { 'relatedIdentifier' => '10.1111/j.1600-0684.2011.00475.x',
524
+ 'relatedIdentifierType' => 'DOI',
525
+ 'relationType' => 'References' },
526
+ { 'relatedIdentifier' => '10.1038/srep05915',
527
+ 'relatedIdentifierType' => 'DOI',
528
+ 'relationType' => 'References' },
529
+ { 'relatedIdentifier' => '10.1096/fj.09-143503',
530
+ 'relatedIdentifierType' => 'DOI',
531
+ 'relationType' => 'References' },
532
+ { 'relatedIdentifier' => '10.1542/peds.111.2.e168',
533
+ 'relatedIdentifierType' => 'DOI',
534
+ 'relationType' => 'References' },
535
+ { 'relatedIdentifier' => '10.2174/1566524013363555',
536
+ 'relatedIdentifierType' => 'DOI',
537
+ 'relationType' => 'References' },
538
+ { 'relatedIdentifier' => '10.1126/science.283.5403.857',
539
+ 'relatedIdentifierType' => 'DOI',
540
+ 'relationType' => 'References' },
541
+ { 'relatedIdentifier' => '10.1212/01.wnl.0000145763.68284.15',
542
+ 'relatedIdentifierType' => 'DOI',
543
+ 'relationType' => 'References' },
544
+ { 'relatedIdentifier' => '10.1002/ana.410230727',
545
+ 'relatedIdentifierType' => 'DOI',
546
+ 'relationType' => 'References' },
547
+ { 'relatedIdentifier' => '10.1186/1742-4690-10-95',
548
+ 'relatedIdentifierType' => 'DOI',
549
+ 'relationType' => 'References' },
550
+ { 'relatedIdentifier' => '10.1128/jvi.79.2.684-695.2005',
551
+ 'relatedIdentifierType' => 'DOI',
552
+ 'relationType' => 'References' },
553
+ { 'relatedIdentifier' => '10.1111/j.1600-0684.2005.00126.x',
554
+ 'relatedIdentifierType' => 'DOI',
555
+ 'relationType' => 'References' },
556
+ { 'relatedIdentifier' => '10.1186/1756-8722-6-6',
557
+ 'relatedIdentifierType' => 'DOI',
558
+ 'relationType' => 'References' },
559
+ { 'relatedIdentifier' => '10.1016/j.jmb.2013.12.017',
560
+ 'relatedIdentifierType' => 'DOI',
561
+ 'relationType' => 'References' },
562
+ { 'relatedIdentifier' => '10.1590/s0037-86822012000600002',
563
+ 'relatedIdentifierType' => 'DOI',
564
+ 'relationType' => 'References' },
565
+ { 'relatedIdentifier' => '10.1080/13550280390218715',
566
+ 'relatedIdentifierType' => 'DOI',
567
+ 'relationType' => 'References' },
568
+ { 'relatedIdentifier' => '10.1111/j.1468-1331.2012.03777.x',
569
+ 'relatedIdentifierType' => 'DOI',
570
+ 'relationType' => 'References' },
571
+ { 'relatedIdentifier' => '10.3233/jad-2010-090649',
572
+ 'relatedIdentifierType' => 'DOI',
573
+ 'relationType' => 'References' },
574
+ { 'relatedIdentifier' => '10.1080/13550280500516484',
575
+ 'relatedIdentifierType' => 'DOI',
576
+ 'relationType' => 'References' },
577
+ { 'relatedIdentifier' => '10.1080/13550280390218751',
578
+ 'relatedIdentifierType' => 'DOI',
579
+ 'relationType' => 'References' },
580
+ { 'relatedIdentifier' => '10.1189/jlb.0811394',
581
+ 'relatedIdentifierType' => 'DOI',
582
+ 'relationType' => 'References' },
583
+ { 'relatedIdentifier' => '10.1007/s11481-011-9330-3',
584
+ 'relatedIdentifierType' => 'DOI',
585
+ 'relationType' => 'References' },
586
+ { 'relatedIdentifier' => '10.1080/13550280802074539',
587
+ 'relatedIdentifierType' => 'DOI',
588
+ 'relationType' => 'References' },
589
+ { 'relatedIdentifier' => '10.1086/650743',
590
+ 'relatedIdentifierType' => 'DOI',
591
+ 'relationType' => 'References' },
592
+ { 'relatedIdentifier' => '10.1371/journal.pone.0008129',
593
+ 'relatedIdentifierType' => 'DOI',
594
+ 'relationType' => 'References' },
595
+ { 'relatedIdentifier' => '10.1128/jvi.80.10.5074-5077.2006',
596
+ 'relatedIdentifierType' => 'DOI',
597
+ 'relationType' => 'References' },
598
+ { 'relatedIdentifier' => '10.1186/1742-2094-10-62',
599
+ 'relatedIdentifierType' => 'DOI',
600
+ 'relationType' => 'References' },
601
+ { 'relatedIdentifier' => '10.1086/323478',
602
+ 'relatedIdentifierType' => 'DOI',
603
+ 'relationType' => 'References' },
604
+ { 'relatedIdentifier' => '10.1128/jvi.73.12.10480-10488.1999',
605
+ 'relatedIdentifierType' => 'DOI',
606
+ 'relationType' => 'References' },
607
+ { 'relatedIdentifier' => '10.1111/hiv.12134',
608
+ 'relatedIdentifierType' => 'DOI',
609
+ 'relationType' => 'References' }])
610
+ expect(subject.container).to eq('firstPage' => '303', 'identifier' => '0014-2999',
611
+ 'identifierType' => 'ISSN', 'lastPage' => '312', 'title' => 'European Journal of Pharmacology', 'type' => 'Journal', 'volume' => '759')
612
+ expect(subject.agency).to eq('crossref')
551
613
  end
552
614
 
553
- it "vor with url" do
554
- input = "https://doi.org/10.1038/hdy.2013.26"
555
- subject = Briard::Metadata.new(input: input)
615
+ it 'vor with url' do
616
+ input = 'https://doi.org/10.1038/hdy.2013.26'
617
+ subject = described_class.new(input: input)
556
618
  expect(subject.valid?).to be true
557
- expect(subject.id).to eq("https://doi.org/10.1038/hdy.2013.26")
558
- expect(subject.url).to eq("http://www.nature.com/articles/hdy201326")
559
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
619
+ expect(subject.id).to eq('https://doi.org/10.1038/hdy.2013.26')
620
+ expect(subject.url).to eq('http://www.nature.com/articles/hdy201326')
621
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
622
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
560
623
  expect(subject.creators.length).to eq(2)
561
- expect(subject.creators.first).to eq("familyName"=>"Gross", "givenName"=>"J B", "name"=>"Gross, J B", "nameType"=>"Personal")
562
- expect(subject.titles).to eq([{"title"=>"Albinism in phylogenetically and geographically distinct populations of Astyanax cavefish arises through the same loss-of-function Oca2 allele"}])
563
- expect(subject.dates).to include({"date"=>"2013-04-10", "dateType"=>"Issued"})
564
- expect(subject.publication_year).to eq("2013")
565
- expect(subject.publisher).to eq("Springer Science and Business Media LLC")
624
+ expect(subject.creators.first).to eq('familyName' => 'Gross', 'givenName' => 'J B',
625
+ 'name' => 'Gross, J B', 'nameType' => 'Personal')
626
+ expect(subject.titles).to eq([{ 'title' => 'Albinism in phylogenetically and geographically distinct populations of Astyanax cavefish arises through the same loss-of-function Oca2 allele' }])
627
+ expect(subject.dates).to include({ 'date' => '2013-04-10', 'dateType' => 'Issued' })
628
+ expect(subject.publication_year).to eq('2013')
629
+ expect(subject.publisher).to eq('Springer Science and Business Media LLC')
566
630
  expect(subject.related_identifiers.size).to eq(35)
567
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"1365-2540", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
568
- expect(subject.container).to eq("firstPage"=>"122", "identifier"=>"1365-2540", "identifierType"=>"ISSN", "issue"=>"2", "lastPage"=>"130", "title"=>"Heredity", "type"=>"Journal", "volume"=>"111")
569
- expect(subject.agency).to eq("crossref")
631
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '1365-2540',
632
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
633
+ expect(subject.container).to eq('firstPage' => '122', 'identifier' => '1365-2540',
634
+ 'identifierType' => 'ISSN', 'issue' => '2', 'lastPage' => '130', 'title' => 'Heredity', 'type' => 'Journal', 'volume' => '111')
635
+ expect(subject.agency).to eq('crossref')
570
636
  end
571
637
 
572
- it "dataset" do
573
- input = "10.2210/pdb4hhb/pdb"
574
- subject = Briard::Metadata.new(input: input)
638
+ it 'dataset' do
639
+ input = '10.2210/pdb4hhb/pdb'
640
+ subject = described_class.new(input: input)
575
641
  expect(subject.valid?).to be true
576
- expect(subject.id).to eq("https://doi.org/10.2210/pdb4hhb/pdb")
577
- expect(subject.url).to eq("https://www.wwpdb.org/pdb?id=pdb_00004hhb")
578
- expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceType"=>"SaComponent", "resourceTypeGeneral"=>"Text", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
642
+ expect(subject.id).to eq('https://doi.org/10.2210/pdb4hhb/pdb')
643
+ expect(subject.url).to eq('https://www.wwpdb.org/pdb?id=pdb_00004hhb')
644
+ expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article-journal',
645
+ 'resourceType' => 'SaComponent', 'resourceTypeGeneral' => 'Text', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
579
646
  expect(subject.creators.length).to eq(2)
580
- expect(subject.creators.first).to eq("nameType"=>"Personal", "name"=>"Fermi, G.", "givenName"=>"G.", "familyName"=>"Fermi")
581
- expect(subject.titles).to eq([{"title"=>"THE CRYSTAL STRUCTURE OF HUMAN DEOXYHAEMOGLOBIN AT 1.74 ANGSTROMS RESOLUTION"}])
582
- expect(subject.descriptions).to eq([{"description"=>"x-ray diffraction structure", "descriptionType"=>"Other"}])
583
- expect(subject.dates).to include({"date"=>"1984-07-17", "dateType"=>"Issued"})
584
- expect(subject.publication_year).to eq("1984")
585
- expect(subject.publisher).to eq("Worldwide Protein Data Bank")
586
- expect(subject.agency).to eq("crossref")
647
+ expect(subject.creators.first).to eq('nameType' => 'Personal', 'name' => 'Fermi, G.',
648
+ 'givenName' => 'G.', 'familyName' => 'Fermi')
649
+ expect(subject.titles).to eq([{ 'title' => 'THE CRYSTAL STRUCTURE OF HUMAN DEOXYHAEMOGLOBIN AT 1.74 ANGSTROMS RESOLUTION' }])
650
+ expect(subject.descriptions).to eq([{ 'description' => 'x-ray diffraction structure',
651
+ 'descriptionType' => 'Other' }])
652
+ expect(subject.dates).to include({ 'date' => '1984-07-17', 'dateType' => 'Issued' })
653
+ expect(subject.publication_year).to eq('1984')
654
+ expect(subject.publisher).to eq('Worldwide Protein Data Bank')
655
+ expect(subject.agency).to eq('crossref')
587
656
  end
588
657
 
589
- it "component" do
590
- input = "10.1371/journal.pmed.0030277.g001"
591
- subject = Briard::Metadata.new(input: input)
658
+ it 'component' do
659
+ input = '10.1371/journal.pmed.0030277.g001'
660
+ subject = described_class.new(input: input)
592
661
  expect(subject.valid?).to be true
593
- expect(subject.id).to eq("https://doi.org/10.1371/journal.pmed.0030277.g001")
594
- expect(subject.url).to eq("https://dx.plos.org/10.1371/journal.pmed.0030277.g001")
595
- expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceType"=>"SaComponent", "resourceTypeGeneral"=>"Text", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
596
- expect(subject.creators).to eq([{"name"=>":(unav)", "nameType"=>"Organizational"}])
597
- expect(subject.titles).to eq([{"title"=>":(unav)"}])
598
- expect(subject.descriptions).to be_empty
599
- expect(subject.dates).to eq([{"date"=>"2015-10-20", "dateType"=>"Issued"}, {"date"=>"2018-10-19T21:13:42Z", "dateType"=>"Updated"}])
600
- expect(subject.publication_year).to eq("2015")
601
- expect(subject.publisher).to eq("Public Library of Science (PLoS)")
602
- expect(subject.agency).to eq("crossref")
662
+ expect(subject.id).to eq('https://doi.org/10.1371/journal.pmed.0030277.g001')
663
+ expect(subject.url).to eq('https://dx.plos.org/10.1371/journal.pmed.0030277.g001')
664
+ expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article-journal',
665
+ 'resourceType' => 'SaComponent', 'resourceTypeGeneral' => 'Text', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
666
+ expect(subject.creators).to eq([{ 'name' => ':(unav)', 'nameType' => 'Organizational' }])
667
+ expect(subject.titles).to eq([{ 'title' => ':(unav)' }])
668
+ expect(subject.descriptions.empty?).to be(true)
669
+ expect(subject.dates).to eq([{ 'date' => '2015-10-20', 'dateType' => 'Issued' },
670
+ { 'date' => '2018-10-19T21:13:42Z', 'dateType' => 'Updated' }])
671
+ expect(subject.publication_year).to eq('2015')
672
+ expect(subject.publisher).to eq('Public Library of Science (PLoS)')
673
+ expect(subject.agency).to eq('crossref')
603
674
  end
604
675
 
605
- it "dataset usda" do
606
- input = "https://doi.org/10.2737/RDS-2018-0001"
607
- subject = Briard::Metadata.new(input: input)
608
- #expect(subject.valid?).to be true
609
- expect(subject.id).to eq("https://doi.org/10.2737/rds-2018-0001")
610
- expect(subject.url).to eq("https://www.fs.usda.gov/rds/archive/Catalog/RDS-2018-0001")
611
- expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"dataset", "resourceType"=>"Dataset", "resourceTypeGeneral"=>"Dataset", "ris"=>"DATA", "schemaOrg"=>"Dataset")
676
+ it 'dataset usda' do
677
+ input = 'https://doi.org/10.2737/RDS-2018-0001'
678
+ subject = described_class.new(input: input)
679
+ # expect(subject.valid?).to be true
680
+ expect(subject.id).to eq('https://doi.org/10.2737/rds-2018-0001')
681
+ expect(subject.url).to eq('https://www.fs.usda.gov/rds/archive/Catalog/RDS-2018-0001')
682
+ expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'dataset',
683
+ 'resourceType' => 'Dataset', 'resourceTypeGeneral' => 'Dataset', 'ris' => 'DATA', 'schemaOrg' => 'Dataset')
612
684
  expect(subject.creators.length).to eq(4)
613
- expect(subject.creators.first).to eq("familyName" => "Ribic","givenName" => "Christine A.","name" => "Ribic, Christine A.","affiliation" => [{"name"=>"U.S. Geological Survey"}],"nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0003-2583-1778", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}],"nameType" => "Personal")
614
- expect(subject.titles).to eq([{"title"=>"Fledging times of grassland birds"}])
615
- expect(subject.descriptions).to be_empty
616
- expect(subject.dates).to eq([{"date"=>"2017-08-09", "dateType"=>"Issued"}, {"date"=>"2021-07-01T22:10:21Z", "dateType"=>"Updated"}])
617
- expect(subject.publication_year).to eq("2017")
618
- expect(subject.publisher).to eq("USDA Forest Service")
619
- expect(subject.agency).to eq("crossref")
685
+ expect(subject.creators.first).to eq('familyName' => 'Ribic', 'givenName' => 'Christine A.',
686
+ 'name' => 'Ribic, Christine A.', 'affiliation' => [{ 'name' => 'U.S. Geological Survey' }], 'nameIdentifiers' => [{ 'nameIdentifier' => 'https://orcid.org/0000-0003-2583-1778', 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org' }], 'nameType' => 'Personal')
687
+ expect(subject.titles).to eq([{ 'title' => 'Fledging times of grassland birds' }])
688
+ expect(subject.descriptions.empty?).to be(true)
689
+ expect(subject.dates).to eq([{ 'date' => '2017-08-09', 'dateType' => 'Issued' },
690
+ { 'date' => '2021-07-01T22:10:21Z', 'dateType' => 'Updated' }])
691
+ expect(subject.publication_year).to eq('2017')
692
+ expect(subject.publisher).to eq('USDA Forest Service')
693
+ expect(subject.agency).to eq('crossref')
620
694
  end
621
695
 
622
- it "book chapter" do
623
- input = "https://doi.org/10.1007/978-3-662-46370-3_13"
624
- subject = Briard::Metadata.new(input: input)
696
+ it 'book chapter' do
697
+ input = 'https://doi.org/10.1007/978-3-662-46370-3_13'
698
+ subject = described_class.new(input: input)
625
699
  expect(subject.valid?).to be true
626
- expect(subject.id).to eq("https://doi.org/10.1007/978-3-662-46370-3_13")
627
- expect(subject.url).to eq("http://link.springer.com/10.1007/978-3-662-46370-3_13")
628
- expect(subject.types).to eq("bibtex"=>"inbook", "citeproc"=>"chapter", "resourceType"=>"BookChapter", "resourceTypeGeneral"=>"BookChapter", "ris"=>"CHAP", "schemaOrg"=>"Chapter")
700
+ expect(subject.id).to eq('https://doi.org/10.1007/978-3-662-46370-3_13')
701
+ expect(subject.url).to eq('http://link.springer.com/10.1007/978-3-662-46370-3_13')
702
+ expect(subject.types).to eq('bibtex' => 'inbook', 'citeproc' => 'chapter',
703
+ 'resourceType' => 'BookChapter', 'resourceTypeGeneral' => 'BookChapter', 'ris' => 'CHAP', 'schemaOrg' => 'Chapter')
629
704
  expect(subject.creators.length).to eq(2)
630
- expect(subject.creators.first).to eq("nameType"=>"Personal", "name"=>"Diercks, Ronald L.", "givenName"=>"Ronald L.", "familyName"=>"Diercks")
631
- expect(subject.titles).to eq([{"title"=>"Clinical Symptoms and Physical Examinations"}])
632
- expect(subject.dates).to eq([{"date"=>"2015", "dateType"=>"Issued"}, {"date"=>"2015-04-14T02:31:13Z", "dateType"=>"Updated"}])
633
- expect(subject.publication_year).to eq("2015")
634
- expect(subject.publisher).to eq("Springer Science and Business Media LLC")
635
- expect(subject.agency).to eq("crossref")
636
- expect(subject.container["type"]).to eq("Book")
637
- expect(subject.container["title"]).to eq("Shoulder Stiffness")
638
- expect(subject.container["firstPage"]).to eq("155")
639
- expect(subject.container["lastPage"]).to eq("158")
640
- expect(subject.container["identifiers"]).to eq([{"identifier"=>"978-3-662-46369-7", "identifierType"=>"ISBN"}])
705
+ expect(subject.creators.first).to eq('nameType' => 'Personal', 'name' => 'Diercks, Ronald L.',
706
+ 'givenName' => 'Ronald L.', 'familyName' => 'Diercks')
707
+ expect(subject.titles).to eq([{ 'title' => 'Clinical Symptoms and Physical Examinations' }])
708
+ expect(subject.dates).to eq([{ 'date' => '2015', 'dateType' => 'Issued' },
709
+ { 'date' => '2015-04-14T02:31:13Z', 'dateType' => 'Updated' }])
710
+ expect(subject.publication_year).to eq('2015')
711
+ expect(subject.publisher).to eq('Springer Science and Business Media LLC')
712
+ expect(subject.agency).to eq('crossref')
713
+ expect(subject.container['type']).to eq('Book')
714
+ expect(subject.container['title']).to eq('Shoulder Stiffness')
715
+ expect(subject.container['firstPage']).to eq('155')
716
+ expect(subject.container['lastPage']).to eq('158')
717
+ expect(subject.container['identifiers']).to eq([{ 'identifier' => '978-3-662-46369-7',
718
+ 'identifierType' => 'ISBN' }])
641
719
  end
642
720
 
643
- it "another book chapter" do
644
- input = "https://doi.org/10.1007/978-3-319-75889-3_1"
645
- subject = Briard::Metadata.new(input: input)
721
+ it 'another book chapter' do
722
+ input = 'https://doi.org/10.1007/978-3-319-75889-3_1'
723
+ subject = described_class.new(input: input)
646
724
  expect(subject.valid?).to be true
647
- expect(subject.id).to eq("https://doi.org/10.1007/978-3-319-75889-3_1")
648
- expect(subject.url).to eq("http://link.springer.com/10.1007/978-3-319-75889-3_1")
649
- expect(subject.types).to eq("bibtex"=>"inbook", "citeproc"=>"chapter", "resourceType"=>"BookChapter", "resourceTypeGeneral"=>"BookChapter", "ris"=>"CHAP", "schemaOrg"=>"Chapter")
650
- expect(subject.creators).to eq([{"familyName"=>"Jones", "givenName"=>"Hunter M.", "name"=>"Jones, Hunter M.", "nameType"=>"Personal"}])
651
- expect(subject.titles).to eq([{"title"=>"Climate Change and Increasing Risk of Extreme Heat"}])
652
- expect(subject.dates).to include({"date"=>"2018", "dateType"=>"Issued"})
653
- expect(subject.publication_year).to eq("2018")
654
- expect(subject.publisher).to eq("Springer Science and Business Media LLC")
655
- expect(subject.agency).to eq("crossref")
656
- expect(subject.container["type"]).to eq("Book Series")
657
- expect(subject.container["title"]).to eq("SpringerBriefs in Medical Earth Sciences")
658
- expect(subject.container["identifier"]).to eq("2523-3629")
659
- expect(subject.container["identifierType"]).to eq("ISSN")
725
+ expect(subject.id).to eq('https://doi.org/10.1007/978-3-319-75889-3_1')
726
+ expect(subject.url).to eq('http://link.springer.com/10.1007/978-3-319-75889-3_1')
727
+ expect(subject.types).to eq('bibtex' => 'inbook', 'citeproc' => 'chapter',
728
+ 'resourceType' => 'BookChapter', 'resourceTypeGeneral' => 'BookChapter', 'ris' => 'CHAP', 'schemaOrg' => 'Chapter')
729
+ expect(subject.creators).to eq([{ 'familyName' => 'Jones', 'givenName' => 'Hunter M.',
730
+ 'name' => 'Jones, Hunter M.', 'nameType' => 'Personal' }])
731
+ expect(subject.titles).to eq([{ 'title' => 'Climate Change and Increasing Risk of Extreme Heat' }])
732
+ expect(subject.dates).to include({ 'date' => '2018', 'dateType' => 'Issued' })
733
+ expect(subject.publication_year).to eq('2018')
734
+ expect(subject.publisher).to eq('Springer Science and Business Media LLC')
735
+ expect(subject.agency).to eq('crossref')
736
+ expect(subject.container['type']).to eq('Book Series')
737
+ expect(subject.container['title']).to eq('SpringerBriefs in Medical Earth Sciences')
738
+ expect(subject.container['identifier']).to eq('2523-3629')
739
+ expect(subject.container['identifierType']).to eq('ISSN')
660
740
  end
661
741
 
662
- it "yet another book chapter" do
663
- input = "https://doi.org/10.4018/978-1-4666-1891-6.ch004"
664
- subject = Briard::Metadata.new(input: input)
742
+ it 'yet another book chapter' do
743
+ input = 'https://doi.org/10.4018/978-1-4666-1891-6.ch004'
744
+ subject = described_class.new(input: input)
665
745
  expect(subject.valid?).to be true
666
- expect(subject.id).to eq("https://doi.org/10.4018/978-1-4666-1891-6.ch004")
667
- expect(subject.url).to eq("http://services.igi-global.com/resolvedoi/resolve.aspx?doi=10.4018/978-1-4666-1891-6.ch004")
668
- expect(subject.types).to eq("bibtex"=>"inbook", "citeproc"=>"chapter", "resourceType"=>"BookChapter", "resourceTypeGeneral"=>"BookChapter", "ris"=>"CHAP", "schemaOrg"=>"Chapter")
669
- expect(subject.creators).to eq([{"affiliation"=>[{"name"=>"Universit?? de Lyon, France"}], "familyName"=>"Bichot", "givenName"=>"Charles-Edmond", "name"=>"Bichot, Charles-Edmond", "nameType"=>"Personal"}])
670
- expect(subject.titles).to eq([{"title"=>"Unsupervised and Supervised Image Segmentation Using Graph Partitioning"}])
671
- expect(subject.dates).to eq([{"date"=>"2012-08-08", "dateType"=>"Issued"}, {"date"=>"2019-07-02T13:17:21Z", "dateType"=>"Updated"}])
672
- expect(subject.publication_year).to eq("2012")
673
- expect(subject.publisher).to eq("IGI Global")
674
- expect(subject.agency).to eq("crossref")
675
- expect(subject.container["type"]).to eq("Book")
676
- expect(subject.container["title"]).to eq("Graph-Based Methods in Computer Vision")
677
- expect(subject.container["firstPage"]).to eq("72")
678
- expect(subject.container["lastPage"]).to eq("94")
679
- expect(subject.container["identifiers"]).to eq([{"identifier"=>"9781466618916", "identifierType"=>"ISBN"}])
746
+ expect(subject.id).to eq('https://doi.org/10.4018/978-1-4666-1891-6.ch004')
747
+ expect(subject.url).to eq('http://services.igi-global.com/resolvedoi/resolve.aspx?doi=10.4018/978-1-4666-1891-6.ch004')
748
+ expect(subject.types).to eq('bibtex' => 'inbook', 'citeproc' => 'chapter',
749
+ 'resourceType' => 'BookChapter', 'resourceTypeGeneral' => 'BookChapter', 'ris' => 'CHAP', 'schemaOrg' => 'Chapter')
750
+ expect(subject.creators).to eq([{ 'affiliation' => [{ 'name' => 'Universit?? de Lyon, France' }],
751
+ 'familyName' => 'Bichot', 'givenName' => 'Charles-Edmond', 'name' => 'Bichot, Charles-Edmond', 'nameType' => 'Personal' }])
752
+ expect(subject.titles).to eq([{ 'title' => 'Unsupervised and Supervised Image Segmentation Using Graph Partitioning' }])
753
+ expect(subject.dates).to eq([{ 'date' => '2012-08-08', 'dateType' => 'Issued' },
754
+ { 'date' => '2019-07-02T13:17:21Z', 'dateType' => 'Updated' }])
755
+ expect(subject.publication_year).to eq('2012')
756
+ expect(subject.publisher).to eq('IGI Global')
757
+ expect(subject.agency).to eq('crossref')
758
+ expect(subject.container['type']).to eq('Book')
759
+ expect(subject.container['title']).to eq('Graph-Based Methods in Computer Vision')
760
+ expect(subject.container['firstPage']).to eq('72')
761
+ expect(subject.container['lastPage']).to eq('94')
762
+ expect(subject.container['identifiers']).to eq([{ 'identifier' => '9781466618916',
763
+ 'identifierType' => 'ISBN' }])
680
764
  end
681
765
 
682
- it "missing creator" do
683
- input = "https://doi.org/10.3390/publications6020015"
684
- subject = Briard::Metadata.new(input: input)
766
+ it 'missing creator' do
767
+ input = 'https://doi.org/10.3390/publications6020015'
768
+ subject = described_class.new(input: input)
685
769
  expect(subject.valid?).to be true
686
- expect(subject.id).to eq("https://doi.org/10.3390/publications6020015")
687
- expect(subject.url).to eq("https://www.mdpi.com/2304-6775/6/2/15")
688
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
689
- expect(subject.creators).to eq([{"familyName"=>"Kohls",
690
- "givenName"=>"Alexander",
691
- "name"=>"Kohls, Alexander",
692
- "nameIdentifiers"=>
693
- [{"nameIdentifier"=>"https://orcid.org/0000-0002-3836-8885",
694
- "nameIdentifierScheme"=>"ORCID",
695
- "schemeUri"=>"https://orcid.org"}],
696
- "nameType"=>"Personal"},
697
- {"familyName"=>"Mele",
698
- "givenName"=>"Salvatore",
699
- "name"=>"Mele, Salvatore",
700
- "nameIdentifiers"=>
701
- [{"nameIdentifier"=>"https://orcid.org/0000-0003-0762-2235",
702
- "nameIdentifierScheme"=>"ORCID",
703
- "schemeUri"=>"https://orcid.org"}],
704
- "nameType"=>"Personal"}])
705
- expect(subject.titles).to eq([{"title"=>"Converting the Literature of a Scientific Field to Open Access through Global Collaboration: The Experience of SCOAP3 in Particle Physics"}])
706
- expect(subject.dates).to eq([{"date"=>"2018-04-09", "dateType"=>"Issued"}, {"date"=>"2021-07-22T10:05:05Z", "dateType"=>"Updated"}])
707
- expect(subject.publication_year).to eq("2018")
708
- expect(subject.publisher).to eq("MDPI AG")
709
- expect(subject.agency).to eq("crossref")
770
+ expect(subject.id).to eq('https://doi.org/10.3390/publications6020015')
771
+ expect(subject.url).to eq('https://www.mdpi.com/2304-6775/6/2/15')
772
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
773
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
774
+ expect(subject.creators).to eq([{ 'familyName' => 'Kohls',
775
+ 'givenName' => 'Alexander',
776
+ 'name' => 'Kohls, Alexander',
777
+ 'nameIdentifiers' =>
778
+ [{ 'nameIdentifier' => 'https://orcid.org/0000-0002-3836-8885',
779
+ 'nameIdentifierScheme' => 'ORCID',
780
+ 'schemeUri' => 'https://orcid.org' }],
781
+ 'nameType' => 'Personal' },
782
+ { 'familyName' => 'Mele',
783
+ 'givenName' => 'Salvatore',
784
+ 'name' => 'Mele, Salvatore',
785
+ 'nameIdentifiers' =>
786
+ [{ 'nameIdentifier' => 'https://orcid.org/0000-0003-0762-2235',
787
+ 'nameIdentifierScheme' => 'ORCID',
788
+ 'schemeUri' => 'https://orcid.org' }],
789
+ 'nameType' => 'Personal' }])
790
+ expect(subject.titles).to eq([{ 'title' => 'Converting the Literature of a Scientific Field to Open Access through Global Collaboration: The Experience of SCOAP3 in Particle Physics' }])
791
+ expect(subject.dates).to eq([{ 'date' => '2018-04-09', 'dateType' => 'Issued' },
792
+ { 'date' => '2021-07-22T10:05:05Z', 'dateType' => 'Updated' }])
793
+ expect(subject.publication_year).to eq('2018')
794
+ expect(subject.publisher).to eq('MDPI AG')
795
+ expect(subject.agency).to eq('crossref')
710
796
  end
711
797
 
712
- it "book" do
713
- input = "https://doi.org/10.1017/9781108348843"
714
- subject = Briard::Metadata.new(input: input)
798
+ it 'book' do
799
+ input = 'https://doi.org/10.1017/9781108348843'
800
+ subject = described_class.new(input: input)
715
801
  expect(subject.valid?).to be true
716
- expect(subject.id).to eq("https://doi.org/10.1017/9781108348843")
717
- expect(subject.identifiers).to eq([{"identifier"=>"9781108348843", "identifierType"=>"ISBN"}])
718
- expect(subject.url).to eq("https://www.cambridge.org/core/product/identifier/9781108348843/type/book")
719
- expect(subject.types).to eq("bibtex"=>"book", "citeproc"=>"book", "resourceType"=>"Book", "resourceTypeGeneral"=>"Book", "ris"=>"BOOK", "schemaOrg"=>"Book")
720
- expect(subject.creators).to eq([{"familyName"=>"Leung", "givenName"=>"Vincent S.", "name"=>"Leung, Vincent S.", "nameType"=>"Personal"}])
721
- expect(subject.titles).to eq([{"title"=>"The Politics of the Past in Early China"}])
722
- expect(subject.dates).to eq([{"date"=>"2019-07-01", "dateType"=>"Issued"}, {"date"=>"2021-01-08T19:18:57Z", "dateType"=>"Updated"}])
723
- expect(subject.publication_year).to eq("2019")
724
- expect(subject.publisher).to eq("Cambridge University Press (CUP)")
725
- expect(subject.agency).to eq("crossref")
726
- expect(subject.date_registered).to eq("2019-07-06T10:19:22Z")
802
+ expect(subject.id).to eq('https://doi.org/10.1017/9781108348843')
803
+ expect(subject.identifiers).to eq([{ 'identifier' => '9781108348843',
804
+ 'identifierType' => 'ISBN' }])
805
+ expect(subject.url).to eq('https://www.cambridge.org/core/product/identifier/9781108348843/type/book')
806
+ expect(subject.types).to eq('bibtex' => 'book', 'citeproc' => 'book', 'resourceType' => 'Book',
807
+ 'resourceTypeGeneral' => 'Book', 'ris' => 'BOOK', 'schemaOrg' => 'Book')
808
+ expect(subject.creators).to eq([{ 'familyName' => 'Leung', 'givenName' => 'Vincent S.',
809
+ 'name' => 'Leung, Vincent S.', 'nameType' => 'Personal' }])
810
+ expect(subject.titles).to eq([{ 'title' => 'The Politics of the Past in Early China' }])
811
+ expect(subject.dates).to eq([{ 'date' => '2019-07-01', 'dateType' => 'Issued' },
812
+ { 'date' => '2021-01-08T19:18:57Z', 'dateType' => 'Updated' }])
813
+ expect(subject.publication_year).to eq('2019')
814
+ expect(subject.publisher).to eq('Cambridge University Press (CUP)')
815
+ expect(subject.agency).to eq('crossref')
816
+ expect(subject.date_registered).to eq('2019-07-06T10:19:22Z')
727
817
  end
728
818
 
729
- it "another book" do
730
- input = "https://doi.org/10.2973/odp.proc.ir.180.2000"
731
- subject = Briard::Metadata.new(input: input)
819
+ it 'another book' do
820
+ input = 'https://doi.org/10.2973/odp.proc.ir.180.2000'
821
+ subject = described_class.new(input: input)
732
822
  expect(subject.valid?).to be true
733
- expect(subject.id).to eq("https://doi.org/10.2973/odp.proc.ir.180.2000")
734
- expect(subject.url).to eq("http://www-odp.tamu.edu/publications/180_IR/180TOC.HTM")
735
- expect(subject.types).to eq("bibtex"=>"book", "citeproc"=>"book", "resourceType"=>"Book", "resourceTypeGeneral"=>"Book", "ris"=>"BOOK", "schemaOrg"=>"Book")
736
- expect(subject.creators).to eq([{"name"=>":(unav)", "nameType"=>"Organizational"}])
823
+ expect(subject.id).to eq('https://doi.org/10.2973/odp.proc.ir.180.2000')
824
+ expect(subject.url).to eq('http://www-odp.tamu.edu/publications/180_IR/180TOC.HTM')
825
+ expect(subject.types).to eq('bibtex' => 'book', 'citeproc' => 'book', 'resourceType' => 'Book',
826
+ 'resourceTypeGeneral' => 'Book', 'ris' => 'BOOK', 'schemaOrg' => 'Book')
827
+ expect(subject.creators).to eq([{ 'name' => ':(unav)', 'nameType' => 'Organizational' }])
737
828
  expect(subject.contributors.size).to eq(4)
738
- expect(subject.contributors.first).to eq("contributorType"=>"Editor", "familyName"=>"Taylor", "givenName"=>"B.", "name"=>"Taylor, B.", "nameType"=>"Personal")
739
- expect(subject.titles).to eq([{"title"=>"Proceedings of the Ocean Drilling Program, 180 Initial Reports"}])
740
- expect(subject.dates).to eq([{"date"=>"2000-02-04", "dateType"=>"Issued"}, {"date"=>"2009-02-02T21:19:43Z", "dateType"=>"Updated"}])
741
- expect(subject.publication_year).to eq("2000")
742
- expect(subject.publisher).to eq("International Ocean Discovery Program (IODP)")
743
- expect(subject.agency).to eq("crossref")
744
- expect(subject.date_registered).to eq("2006-10-17T20:17:44Z")
829
+ expect(subject.contributors.first).to eq('contributorType' => 'Editor', 'familyName' => 'Taylor',
830
+ 'givenName' => 'B.', 'name' => 'Taylor, B.', 'nameType' => 'Personal')
831
+ expect(subject.titles).to eq([{ 'title' => 'Proceedings of the Ocean Drilling Program, 180 Initial Reports' }])
832
+ expect(subject.dates).to eq([{ 'date' => '2000-02-04', 'dateType' => 'Issued' },
833
+ { 'date' => '2009-02-02T21:19:43Z', 'dateType' => 'Updated' }])
834
+ expect(subject.publication_year).to eq('2000')
835
+ expect(subject.publisher).to eq('International Ocean Discovery Program (IODP)')
836
+ expect(subject.agency).to eq('crossref')
837
+ expect(subject.date_registered).to eq('2006-10-17T20:17:44Z')
745
838
  end
746
839
 
747
- it "yet another book" do
748
- input = "https://doi.org/10.1029/ar035"
749
- subject = Briard::Metadata.new(input: input)
840
+ it 'yet another book' do
841
+ input = 'https://doi.org/10.1029/ar035'
842
+ subject = described_class.new(input: input)
750
843
  expect(subject.valid?).to be true
751
- expect(subject.id).to eq("https://doi.org/10.1029/ar035")
752
- expect(subject.identifiers).to eq([{"identifier"=>"0-87590-181-6", "identifierType"=>"ISBN"}])
753
- expect(subject.url).to eq("http://doi.wiley.com/10.1029/AR035")
754
- expect(subject.types).to eq("bibtex"=>"book", "citeproc"=>"book", "resourceType"=>"Book", "resourceTypeGeneral"=>"Book", "ris"=>"BOOK", "schemaOrg"=>"Book")
755
- expect(subject.creators).to eq([{"familyName"=>"McGinnis", "givenName"=>"Richard Frank", "name"=>"McGinnis, Richard Frank", "nameType"=>"Personal"}])
756
- expect(subject.titles).to eq([{"title"=>"Biogeography of Lanternfishes (Myctophidae) South of 30??S"}])
757
- expect(subject.dates).to eq([{"date"=>"1982", "dateType"=>"Issued"}, {"date"=>"2021-12-04T00:09:54Z", "dateType"=>"Updated"}])
758
- expect(subject.publication_year).to eq("1982")
759
- expect(subject.publisher).to eq("Wiley")
844
+ expect(subject.id).to eq('https://doi.org/10.1029/ar035')
845
+ expect(subject.identifiers).to eq([{ 'identifier' => '0-87590-181-6',
846
+ 'identifierType' => 'ISBN' }])
847
+ expect(subject.url).to eq('http://doi.wiley.com/10.1029/AR035')
848
+ expect(subject.types).to eq('bibtex' => 'book', 'citeproc' => 'book', 'resourceType' => 'Book',
849
+ 'resourceTypeGeneral' => 'Book', 'ris' => 'BOOK', 'schemaOrg' => 'Book')
850
+ expect(subject.creators).to eq([{ 'familyName' => 'McGinnis', 'givenName' => 'Richard Frank',
851
+ 'name' => 'McGinnis, Richard Frank', 'nameType' => 'Personal' }])
852
+ expect(subject.titles).to eq([{ 'title' => 'Biogeography of Lanternfishes (Myctophidae) South of 30??S' }])
853
+ expect(subject.dates).to eq([{ 'date' => '1982', 'dateType' => 'Issued' },
854
+ { 'date' => '2021-12-04T00:09:54Z', 'dateType' => 'Updated' }])
855
+ expect(subject.publication_year).to eq('1982')
856
+ expect(subject.publisher).to eq('Wiley')
760
857
  expect(subject.related_identifiers.length).to eq(46)
761
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"10.1016/0031-0182(70)90103-3", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
762
- expect(subject.container).to eq("identifier"=>"0066-4634", "identifierType"=>"ISSN", "title"=>"Antarctic Research Series", "type"=>"Book Series", "volume"=>"35")
763
- expect(subject.agency).to eq("crossref")
764
- expect(subject.date_registered).to be_nil
858
+ expect(subject.related_identifiers.first).to eq(
859
+ 'relatedIdentifier' => '10.1016/0031-0182(70)90103-3', 'relatedIdentifierType' => 'DOI', 'relationType' => 'References'
860
+ )
861
+ expect(subject.container).to eq('identifier' => '0066-4634', 'identifierType' => 'ISSN',
862
+ 'title' => 'Antarctic Research Series', 'type' => 'Book Series', 'volume' => '35')
863
+ expect(subject.agency).to eq('crossref')
864
+ expect(subject.date_registered.nil?).to be(true)
765
865
  end
766
866
 
767
- it "mEDRA" do
768
- input = "https://doi.org/10.3280/ecag2018-001005"
769
- subject = Briard::Metadata.new(input: input)
867
+ it 'mEDRA' do
868
+ input = 'https://doi.org/10.3280/ecag2018-001005'
869
+ subject = described_class.new(input: input)
770
870
  expect(subject.valid?).to be true
771
- expect(subject.id).to eq("https://doi.org/10.3280/ecag2018-001005")
772
- expect(subject.identifiers).to eq([{"identifier"=>"5", "identifierType"=>"article_number"}])
773
- expect(subject.url).to eq("http://www.francoangeli.it/riviste/Scheda_Riviste.asp?IDArticolo=61645")
774
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
871
+ expect(subject.id).to eq('https://doi.org/10.3280/ecag2018-001005')
872
+ expect(subject.identifiers).to eq([{ 'identifier' => '5',
873
+ 'identifierType' => 'article_number' }])
874
+ expect(subject.url).to eq('http://www.francoangeli.it/riviste/Scheda_Riviste.asp?IDArticolo=61645')
875
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
876
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
775
877
  expect(subject.creators.length).to eq(2)
776
- expect(subject.creators.first).to eq("familyName"=>"Oh", "givenName"=>"Sohae Eve", "name"=>"Oh, Sohae Eve", "nameType"=>"Personal")
777
- expect(subject.titles).to eq([{"title"=>"Substitutability between organic and conventional poultry products and organic price premiums"}])
778
- expect(subject.dates).to include({"date"=>"2018-05", "dateType"=>"Issued"})
779
- expect(subject.publication_year).to eq("2018")
780
- expect(subject.publisher).to eq("Franco Angeli")
781
- expect(subject.agency).to eq("crossref")
878
+ expect(subject.creators.first).to eq('familyName' => 'Oh', 'givenName' => 'Sohae Eve',
879
+ 'name' => 'Oh, Sohae Eve', 'nameType' => 'Personal')
880
+ expect(subject.titles).to eq([{ 'title' => 'Substitutability between organic and conventional poultry products and organic price premiums' }])
881
+ expect(subject.dates).to include({ 'date' => '2018-05', 'dateType' => 'Issued' })
882
+ expect(subject.publication_year).to eq('2018')
883
+ expect(subject.publisher).to eq('Franco Angeli')
884
+ expect(subject.agency).to eq('crossref')
782
885
  end
783
886
 
784
- it "KISTI" do
785
- input = "https://doi.org/10.5012/bkcs.2013.34.10.2889"
786
- subject = Briard::Metadata.new(input: input)
887
+ it 'KISTI' do
888
+ input = 'https://doi.org/10.5012/bkcs.2013.34.10.2889'
889
+ subject = described_class.new(input: input)
787
890
  expect(subject.valid?).to be true
788
- expect(subject.id).to eq("https://doi.org/10.5012/bkcs.2013.34.10.2889")
789
- expect(subject.identifiers).to eq([{"identifier"=>"JCGMCS_2013_v34n10_2889", "identifierType"=>"Publisher ID"}])
790
- expect(subject.url).to eq("http://koreascience.or.kr/journal/view.jsp?kj=JCGMCS&py=2013&vnc=v34n10&sp=2889")
791
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
891
+ expect(subject.id).to eq('https://doi.org/10.5012/bkcs.2013.34.10.2889')
892
+ expect(subject.identifiers).to eq([{ 'identifier' => 'JCGMCS_2013_v34n10_2889',
893
+ 'identifierType' => 'Publisher ID' }])
894
+ expect(subject.url).to eq('http://koreascience.or.kr/journal/view.jsp?kj=JCGMCS&py=2013&vnc=v34n10&sp=2889')
895
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
896
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
792
897
  expect(subject.creators.length).to eq(7)
793
- expect(subject.creators.first).to eq("familyName"=>"Huang", "givenName"=>"Guimei", "name"=>"Huang, Guimei", "nameType"=>"Personal")
794
- expect(subject.titles).to eq([{"title"=>"Synthesis, Crystal Structure and Theoretical Calculation of a Novel Nickel(II) Complex with Dibromotyrosine and 1,10-Phenanthroline"}])
795
- expect(subject.dates).to eq([{"date"=>"2013-10-20", "dateType"=>"Issued"}, {"date"=>"2016-12-14T21:40:52Z", "dateType"=>"Updated"}])
796
- expect(subject.publication_year).to eq("2013")
797
- expect(subject.publisher).to eq("Korean Chemical Society")
798
- expect(subject.agency).to eq("KISTI")
898
+ expect(subject.creators.first).to eq('familyName' => 'Huang', 'givenName' => 'Guimei',
899
+ 'name' => 'Huang, Guimei', 'nameType' => 'Personal')
900
+ expect(subject.titles).to eq([{ 'title' => 'Synthesis, Crystal Structure and Theoretical Calculation of a Novel Nickel(II) Complex with Dibromotyrosine and 1,10-Phenanthroline' }])
901
+ expect(subject.dates).to eq([{ 'date' => '2013-10-20', 'dateType' => 'Issued' },
902
+ { 'date' => '2016-12-14T21:40:52Z', 'dateType' => 'Updated' }])
903
+ expect(subject.publication_year).to eq('2013')
904
+ expect(subject.publisher).to eq('Korean Chemical Society')
905
+ expect(subject.agency).to eq('KISTI')
799
906
  end
800
907
 
801
- it "JaLC" do
802
- input = "https://doi.org/10.1241/johokanri.39.979"
803
- subject = Briard::Metadata.new(input: input)
908
+ it 'JaLC' do
909
+ input = 'https://doi.org/10.1241/johokanri.39.979'
910
+ subject = described_class.new(input: input)
804
911
  expect(subject.valid?).to be true
805
- expect(subject.id).to eq("https://doi.org/10.1241/johokanri.39.979")
806
- expect(subject.url).to eq("http://joi.jlc.jst.go.jp/JST.JSTAGE/johokanri/39.979?from=CrossRef")
807
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
808
- expect(subject.creators).to eq([{"familyName"=>"KUSUMOTO", "givenName"=>"Hiroyuki", "name"=>"KUSUMOTO, Hiroyuki", "nameType"=>"Personal"}])
809
- expect(subject.titles).to eq([{"title"=>"Utilizing the Internet. 12 Series. Future of the Internet."}])
810
- expect(subject.dates).to eq([{"date"=>"1997", "dateType"=>"Issued"}, {"date"=>"2020-03-06T06:44:36Z", "dateType"=>"Updated"}])
811
- expect(subject.publication_year).to eq("1997")
812
- expect(subject.publisher).to eq("Japan Science and Technology Agency (JST)")
813
- expect(subject.agency).to eq("JaLC")
912
+ expect(subject.id).to eq('https://doi.org/10.1241/johokanri.39.979')
913
+ expect(subject.url).to eq('http://joi.jlc.jst.go.jp/JST.JSTAGE/johokanri/39.979?from=CrossRef')
914
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
915
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
916
+ expect(subject.creators).to eq([{ 'familyName' => 'KUSUMOTO', 'givenName' => 'Hiroyuki',
917
+ 'name' => 'KUSUMOTO, Hiroyuki', 'nameType' => 'Personal' }])
918
+ expect(subject.titles).to eq([{ 'title' => 'Utilizing the Internet. 12 Series. Future of the Internet.' }])
919
+ expect(subject.dates).to eq([{ 'date' => '1997', 'dateType' => 'Issued' },
920
+ { 'date' => '2020-03-06T06:44:36Z', 'dateType' => 'Updated' }])
921
+ expect(subject.publication_year).to eq('1997')
922
+ expect(subject.publisher).to eq('Japan Science and Technology Agency (JST)')
923
+ expect(subject.agency).to eq('JaLC')
814
924
  end
815
925
 
816
- it "OP" do
817
- input = "https://doi.org/10.2903/j.efsa.2018.5239"
818
- subject = Briard::Metadata.new(input: input)
926
+ it 'OP' do
927
+ input = 'https://doi.org/10.2903/j.efsa.2018.5239'
928
+ subject = described_class.new(input: input)
819
929
  expect(subject.valid?).to be true
820
- expect(subject.id).to eq("https://doi.org/10.2903/j.efsa.2018.5239")
821
- expect(subject.url).to eq("http://doi.wiley.com/10.2903/j.efsa.2018.5239")
822
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
930
+ expect(subject.id).to eq('https://doi.org/10.2903/j.efsa.2018.5239')
931
+ expect(subject.url).to eq('http://doi.wiley.com/10.2903/j.efsa.2018.5239')
932
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
933
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
823
934
  expect(subject.creators.length).to eq(28)
824
- expect(subject.creators.first).to eq("familyName"=>"Younes", "givenName"=>"Maged", "name"=>"Younes, Maged", "nameType"=>"Personal")
825
- expect(subject.titles).to eq([{"title"=>"Scientific opinion on the safety of green tea catechins"}])
826
- expect(subject.dates).to include({"date"=>"2018-04", "dateType"=>"Issued"})
827
- expect(subject.publication_year).to eq("2018")
828
- expect(subject.publisher).to eq("Wiley")
829
- expect(subject.agency).to eq("OP")
935
+ expect(subject.creators.first).to eq('familyName' => 'Younes', 'givenName' => 'Maged',
936
+ 'name' => 'Younes, Maged', 'nameType' => 'Personal')
937
+ expect(subject.titles).to eq([{ 'title' => 'Scientific opinion on the safety of green tea catechins' }])
938
+ expect(subject.dates).to include({ 'date' => '2018-04', 'dateType' => 'Issued' })
939
+ expect(subject.publication_year).to eq('2018')
940
+ expect(subject.publisher).to eq('Wiley')
941
+ expect(subject.agency).to eq('OP')
830
942
  end
831
943
 
832
- it "multiple titles" do
833
- input = "https://doi.org/10.4000/dms.865"
834
- subject = Briard::Metadata.new(input: input)
944
+ it 'multiple titles' do
945
+ input = 'https://doi.org/10.4000/dms.865'
946
+ subject = described_class.new(input: input)
835
947
  expect(subject.valid?).to be true
836
- expect(subject.id).to eq("https://doi.org/10.4000/dms.865")
837
- expect(subject.url).to eq("http://journals.openedition.org/dms/865")
838
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
839
- expect(subject.creators).to eq([{"familyName"=>"Peraya", "givenName"=>"Daniel", "name"=>"Peraya, Daniel", "nameType"=>"Personal"}])
840
- expect(subject.titles).to eq([{"title"=>"Distances, absence, proximit??s et pr??sences??: des concepts en d??placement"}, {"title"=>"Distance(s), proximity and presence(s): evolving concepts"}])
841
- expect(subject.dates).to include({"date"=>"2014-12-14", "dateType"=>"Issued"})
842
- expect(subject.publication_year).to eq("2014")
843
- expect(subject.publisher).to eq("OpenEdition")
844
- expect(subject.agency).to eq("crossref")
845
- expect(subject.date_registered).to be_nil
948
+ expect(subject.id).to eq('https://doi.org/10.4000/dms.865')
949
+ expect(subject.url).to eq('http://journals.openedition.org/dms/865')
950
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
951
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
952
+ expect(subject.creators).to eq([{ 'familyName' => 'Peraya', 'givenName' => 'Daniel',
953
+ 'name' => 'Peraya, Daniel', 'nameType' => 'Personal' }])
954
+ expect(subject.titles).to eq([
955
+ { 'title' => 'Distances, absence, proximit??s et pr??sences??: des concepts en d??placement' }, { 'title' => 'Distance(s), proximity and presence(s): evolving concepts' }
956
+ ])
957
+ expect(subject.dates).to include({ 'date' => '2014-12-14', 'dateType' => 'Issued' })
958
+ expect(subject.publication_year).to eq('2014')
959
+ expect(subject.publisher).to eq('OpenEdition')
960
+ expect(subject.agency).to eq('crossref')
961
+ expect(subject.date_registered.nil?).to be(true)
846
962
  end
847
963
 
848
- it "multiple titles with missing" do
849
- input = "https://doi.org/10.1186/1471-2164-7-187"
850
- subject = Briard::Metadata.new(input: input)
964
+ it 'multiple titles with missing' do
965
+ input = 'https://doi.org/10.1186/1471-2164-7-187'
966
+ subject = described_class.new(input: input)
851
967
  expect(subject.valid?).to be true
852
- expect(subject.id).to eq("https://doi.org/10.1186/1471-2164-7-187")
853
- expect(subject.url).to eq("https://bmcgenomics.biomedcentral.com/articles/10.1186/1471-2164-7-187")
854
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
855
- expect(subject.creators).to eq([{"familyName"=>"Myers",
856
- "givenName"=>"Chad L",
857
- "name"=>"Myers, Chad L",
858
- "nameType"=>"Personal"},
859
- {"familyName"=>"Barrett",
860
- "givenName"=>"Daniel R",
861
- "name"=>"Barrett, Daniel R",
862
- "nameType"=>"Personal"},
863
- {"familyName"=>"Hibbs",
864
- "givenName"=>"Matthew A",
865
- "name"=>"Hibbs, Matthew A",
866
- "nameType"=>"Personal"},
867
- {"familyName"=>"Huttenhower",
868
- "givenName"=>"Curtis",
869
- "name"=>"Huttenhower, Curtis",
870
- "nameType"=>"Personal"},
871
- {"familyName"=>"Troyanskaya",
872
- "givenName"=>"Olga G",
873
- "name"=>"Troyanskaya, Olga G",
874
- "nameType"=>"Personal"}])
875
- expect(subject.titles).to eq([{"title"=>"Finding function: evaluation methods for functional genomic data"}])
876
- expect(subject.dates).to include({"date"=>"2006-07-25", "dateType"=>"Issued"})
877
- expect(subject.publication_year).to eq("2006")
878
- expect(subject.publisher).to eq("Springer Science and Business Media LLC")
879
- expect(subject.agency).to eq("crossref")
880
- expect(subject.date_registered).to eq("2021-08-31T17:31:49Z")
968
+ expect(subject.id).to eq('https://doi.org/10.1186/1471-2164-7-187')
969
+ expect(subject.url).to eq('https://bmcgenomics.biomedcentral.com/articles/10.1186/1471-2164-7-187')
970
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
971
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
972
+ expect(subject.creators).to eq([{ 'familyName' => 'Myers',
973
+ 'givenName' => 'Chad L',
974
+ 'name' => 'Myers, Chad L',
975
+ 'nameType' => 'Personal' },
976
+ { 'familyName' => 'Barrett',
977
+ 'givenName' => 'Daniel R',
978
+ 'name' => 'Barrett, Daniel R',
979
+ 'nameType' => 'Personal' },
980
+ { 'familyName' => 'Hibbs',
981
+ 'givenName' => 'Matthew A',
982
+ 'name' => 'Hibbs, Matthew A',
983
+ 'nameType' => 'Personal' },
984
+ { 'familyName' => 'Huttenhower',
985
+ 'givenName' => 'Curtis',
986
+ 'name' => 'Huttenhower, Curtis',
987
+ 'nameType' => 'Personal' },
988
+ { 'familyName' => 'Troyanskaya',
989
+ 'givenName' => 'Olga G',
990
+ 'name' => 'Troyanskaya, Olga G',
991
+ 'nameType' => 'Personal' }])
992
+ expect(subject.titles).to eq([{ 'title' => 'Finding function: evaluation methods for functional genomic data' }])
993
+ expect(subject.dates).to include({ 'date' => '2006-07-25', 'dateType' => 'Issued' })
994
+ expect(subject.publication_year).to eq('2006')
995
+ expect(subject.publisher).to eq('Springer Science and Business Media LLC')
996
+ expect(subject.agency).to eq('crossref')
997
+ expect(subject.date_registered).to eq('2021-08-31T17:31:49Z')
881
998
  end
882
999
 
883
- it "markup" do
884
- input = "https://doi.org/10.1098/rspb.2017.0132"
885
- subject = Briard::Metadata.new(input: input)
1000
+ it 'markup' do
1001
+ input = 'https://doi.org/10.1098/rspb.2017.0132'
1002
+ subject = described_class.new(input: input)
886
1003
  expect(subject.valid?).to be true
887
- expect(subject.id).to eq("https://doi.org/10.1098/rspb.2017.0132")
888
- expect(subject.url).to eq("https://royalsocietypublishing.org/doi/10.1098/rspb.2017.0132")
889
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1004
+ expect(subject.id).to eq('https://doi.org/10.1098/rspb.2017.0132')
1005
+ expect(subject.url).to eq('https://royalsocietypublishing.org/doi/10.1098/rspb.2017.0132')
1006
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1007
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
890
1008
  expect(subject.creators.size).to eq(6)
891
- expect(subject.creators.first).to eq("affiliation" => [{"name"=>"School of Biological Sciences, Centre for Evolutionary Biology, University of Western Australia, Crawley, WA 6009, Australia"}], "familyName" => "Dougherty","givenName" => "Liam R.","name" => "Dougherty, Liam R.","nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0003-1406-0680", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}],"nameType"=>"Personal")
892
- expect(subject.titles).to eq([{"title"=>"Sexual conflict and correlated evolution between male persistence and female resistance traits in the seed beetle <i>Callosobruchus maculatus</i>"}])
893
- expect(subject.dates).to include({"date"=>"2017-05-24", "dateType"=>"Issued"})
894
- expect(subject.publication_year).to eq("2017")
895
- expect(subject.publisher).to eq("The Royal Society")
896
- expect(subject.agency).to eq("crossref")
897
- expect(subject.date_registered).to eq("2021-02-14T10:36:45Z")
1009
+ expect(subject.creators.first).to eq(
1010
+ 'affiliation' => [{ 'name' => 'School of Biological Sciences, Centre for Evolutionary Biology, University of Western Australia, Crawley, WA 6009, Australia' }], 'familyName' => 'Dougherty', 'givenName' => 'Liam R.', 'name' => 'Dougherty, Liam R.', 'nameIdentifiers' => [{
1011
+ 'nameIdentifier' => 'https://orcid.org/0000-0003-1406-0680', 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org'
1012
+ }], 'nameType' => 'Personal'
1013
+ )
1014
+ expect(subject.titles).to eq([{ 'title' => 'Sexual conflict and correlated evolution between male persistence and female resistance traits in the seed beetle <i>Callosobruchus maculatus</i>' }])
1015
+ expect(subject.dates).to include({ 'date' => '2017-05-24', 'dateType' => 'Issued' })
1016
+ expect(subject.publication_year).to eq('2017')
1017
+ expect(subject.publisher).to eq('The Royal Society')
1018
+ expect(subject.agency).to eq('crossref')
1019
+ expect(subject.date_registered).to eq('2021-02-14T10:36:45Z')
898
1020
  end
899
1021
 
900
- it "empty given name" do
901
- input = "https://doi.org/10.1111/J.1865-1682.2010.01171.X"
902
- subject = Briard::Metadata.new(input: input)
1022
+ it 'empty given name' do
1023
+ input = 'https://doi.org/10.1111/J.1865-1682.2010.01171.X'
1024
+ subject = described_class.new(input: input)
903
1025
  expect(subject.valid?).to be true
904
- expect(subject.id).to eq("https://doi.org/10.1111/j.1865-1682.2010.01171.x")
905
- expect(subject.url).to eq("https://onlinelibrary.wiley.com/doi/10.1111/j.1865-1682.2010.01171.x")
906
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1026
+ expect(subject.id).to eq('https://doi.org/10.1111/j.1865-1682.2010.01171.x')
1027
+ expect(subject.url).to eq('https://onlinelibrary.wiley.com/doi/10.1111/j.1865-1682.2010.01171.x')
1028
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1029
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
907
1030
  expect(subject.creators.length).to eq(5)
908
- expect(subject.creators[3]).to eq("familyName"=>"Ehtisham-ul-Haq", "givenName"=>"???", "name"=>"Ehtisham-ul-Haq, ???", "nameType"=>"Personal")
909
- expect(subject.titles).to eq([{"title"=>"Serological Evidence of Brucella abortus Prevalence in Punjab Province, Pakistan - A Cross-Sectional Study"}])
910
- expect(subject.rights_list).to eq([{"rightsUri"=>"http://doi.wiley.com/10.1002/tdm_license_1.1"}])
911
- expect(subject.dates).to eq([{"date"=>"2010-12", "dateType"=>"Issued"}, {"date"=>"2021-07-07T02:32:16Z", "dateType"=>"Updated"}])
912
- expect(subject.publication_year).to eq("2010")
913
- expect(subject.publisher).to eq("Wiley")
1031
+ expect(subject.creators[3]).to eq('familyName' => 'Ehtisham-ul-Haq', 'givenName' => '???',
1032
+ 'name' => 'Ehtisham-ul-Haq, ???', 'nameType' => 'Personal')
1033
+ expect(subject.titles).to eq([{ 'title' => 'Serological Evidence of Brucella abortus Prevalence in Punjab Province, Pakistan - A Cross-Sectional Study' }])
1034
+ expect(subject.rights_list).to eq([{ 'rightsUri' => 'http://doi.wiley.com/10.1002/tdm_license_1.1' }])
1035
+ expect(subject.dates).to eq([{ 'date' => '2010-12', 'dateType' => 'Issued' },
1036
+ { 'date' => '2021-07-07T02:32:16Z', 'dateType' => 'Updated' }])
1037
+ expect(subject.publication_year).to eq('2010')
1038
+ expect(subject.publisher).to eq('Wiley')
914
1039
  end
915
1040
 
916
- it "invalid date" do
917
- input = "https://doi.org/10.1055/s-0039-1690894"
918
- subject = Briard::Metadata.new(input: input)
1041
+ it 'invalid date' do
1042
+ input = 'https://doi.org/10.1055/s-0039-1690894'
1043
+ subject = described_class.new(input: input)
919
1044
  expect(subject.valid?).to be true
920
- expect(subject.id).to eq("https://doi.org/10.1055/s-0039-1690894")
921
- expect(subject.identifiers).to eq([{"identifier"=>"s-0039-1690894", "identifierType"=>"sequence-number"}])
922
- expect(subject.url).to eq("http://www.thieme-connect.de/DOI/DOI?10.1055/s-0039-1690894")
923
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1045
+ expect(subject.id).to eq('https://doi.org/10.1055/s-0039-1690894')
1046
+ expect(subject.identifiers).to eq([{ 'identifier' => 's-0039-1690894',
1047
+ 'identifierType' => 'sequence-number' }])
1048
+ expect(subject.url).to eq('http://www.thieme-connect.de/DOI/DOI?10.1055/s-0039-1690894')
1049
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1050
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
924
1051
  expect(subject.creators.length).to eq(4)
925
- expect(subject.creators[3]).to eq("affiliation" => [{"name"=>"Department of Chemistry, Tianjin Key Laboratory of Molecular Optoelectronic Sciences, and Tianjin Collaborative Innovation Centre of Chemical Science and Engineering, Tianjin University"}, {"name"=>"Joint School of National University of Singapore and Tianjin University, International Campus of Tianjin University"}],
926
- "familyName" => "Ma",
927
- "givenName" => "Jun-An",
928
- "name" => "Ma, Jun-An",
929
- "nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0002-3902-6799", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}],
930
- "nameType" => "Personal")
931
- expect(subject.titles).to eq([{"title"=>"Silver-Catalyzed [3+3] Annulation of Glycine Imino Esters with Seyferth???Gilbert Reagent To Access Tetrahydro-1,2,4-triazinecarboxylate Esters"}])
932
- expect(subject.dates).to eq([{"date"=>"2020-04-08", "dateType"=>"Issued"}, {"date"=>"2020-06-16T23:13:36Z", "dateType"=>"Updated"}])
933
- expect(subject.publication_year).to eq("2020")
934
- expect(subject.publisher).to eq("Georg Thieme Verlag KG")
1052
+ expect(subject.creators[3]).to eq('affiliation' => [{ 'name' => 'Department of Chemistry, Tianjin Key Laboratory of Molecular Optoelectronic Sciences, and Tianjin Collaborative Innovation Centre of Chemical Science and Engineering, Tianjin University' }, { 'name' => 'Joint School of National University of Singapore and Tianjin University, International Campus of Tianjin University' }],
1053
+ 'familyName' => 'Ma',
1054
+ 'givenName' => 'Jun-An',
1055
+ 'name' => 'Ma, Jun-An',
1056
+ 'nameIdentifiers' => [{ 'nameIdentifier' => 'https://orcid.org/0000-0002-3902-6799',
1057
+ 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org' }],
1058
+ 'nameType' => 'Personal')
1059
+ expect(subject.titles).to eq([{ 'title' => 'Silver-Catalyzed [3+3] Annulation of Glycine Imino Esters with Seyferth???Gilbert Reagent To Access Tetrahydro-1,2,4-triazinecarboxylate Esters' }])
1060
+ expect(subject.dates).to eq([{ 'date' => '2020-04-08', 'dateType' => 'Issued' },
1061
+ { 'date' => '2020-06-16T23:13:36Z', 'dateType' => 'Updated' }])
1062
+ expect(subject.publication_year).to eq('2020')
1063
+ expect(subject.publisher).to eq('Georg Thieme Verlag KG')
935
1064
  end
936
1065
 
937
- it "journal article with" do
938
- input = "https://doi.org/10.1111/nph.14619"
939
- subject = Briard::Metadata.new(input: input)
1066
+ it 'journal article with' do
1067
+ input = 'https://doi.org/10.1111/nph.14619'
1068
+ subject = described_class.new(input: input)
940
1069
  expect(subject.valid?).to be true
941
- expect(subject.id).to eq("https://doi.org/10.1111/nph.14619")
942
- expect(subject.url).to eq("https://onlinelibrary.wiley.com/doi/10.1111/nph.14619")
943
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1070
+ expect(subject.id).to eq('https://doi.org/10.1111/nph.14619')
1071
+ expect(subject.url).to eq('https://onlinelibrary.wiley.com/doi/10.1111/nph.14619')
1072
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1073
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
944
1074
  expect(subject.creators.length).to eq(3)
945
- expect(subject.creators.first).to eq("nameType"=>"Personal", "nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0002-4156-3761", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}], "name"=>"Dissmeyer, Nico", "givenName"=>"Nico", "familyName"=>"Dissmeyer", "affiliation" => [{"name"=>"Independent Junior Research Group on Protein Recognition and Degradation; Leibniz Institute of Plant Biochemistry (IPB); Weinberg 3 Halle (Saale) D-06120 Germany"}, {"name"=>"ScienceCampus Halle - Plant-based Bioeconomy; Betty-Heimann-Strasse 3 Halle (Saale) D-06120 Germany"}])
946
- expect(subject.titles).to eq([{"title"=>"Life and death of proteins after protease cleavage: protein degradation by the N-end rule pathway"}])
947
- expect(subject.rights_list).to eq([{"rightsUri"=>"http://doi.wiley.com/10.1002/tdm_license_1.1"}, {"rightsUri"=>"http://onlinelibrary.wiley.com/termsAndConditions#vor"}])
948
- expect(subject.dates).to include({"date"=>"2018-05", "dateType"=>"Issued"})
949
- expect(subject.publication_year).to eq("2018")
950
- expect(subject.publisher).to eq("Wiley")
1075
+ expect(subject.creators.first).to eq('nameType' => 'Personal',
1076
+ 'nameIdentifiers' => [{ 'nameIdentifier' => 'https://orcid.org/0000-0002-4156-3761', 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org' }], 'name' => 'Dissmeyer, Nico', 'givenName' => 'Nico', 'familyName' => 'Dissmeyer', 'affiliation' => [{ 'name' => 'Independent Junior Research Group on Protein Recognition and Degradation; Leibniz Institute of Plant Biochemistry (IPB); Weinberg 3 Halle (Saale) D-06120 Germany' }, { 'name' => 'ScienceCampus Halle - Plant-based Bioeconomy; Betty-Heimann-Strasse 3 Halle (Saale) D-06120 Germany' }])
1077
+ expect(subject.titles).to eq([{ 'title' => 'Life and death of proteins after protease cleavage: protein degradation by the N-end rule pathway' }])
1078
+ expect(subject.rights_list).to eq([
1079
+ { 'rightsUri' => 'http://doi.wiley.com/10.1002/tdm_license_1.1' }, { 'rightsUri' => 'http://onlinelibrary.wiley.com/termsAndConditions#vor' }
1080
+ ])
1081
+ expect(subject.dates).to include({ 'date' => '2018-05', 'dateType' => 'Issued' })
1082
+ expect(subject.publication_year).to eq('2018')
1083
+ expect(subject.publisher).to eq('Wiley')
951
1084
  expect(subject.related_identifiers.length).to eq(49)
952
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"0028-646X", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
953
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.1002/pmic.201400530", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
954
- expect(subject.container).to eq("firstPage"=>"929", "identifier"=>"0028-646X", "identifierType"=>"ISSN", "issue"=>"3", "lastPage"=>"935", "title"=>"New Phytologist", "type"=>"Journal", "volume"=>"218")
955
- expect(subject.agency).to eq("crossref")
956
- expect(subject.date_registered).to eq("2018-08-03T11:45:49Z")
1085
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '0028-646X',
1086
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
1087
+ expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.1002/pmic.201400530',
1088
+ 'relatedIdentifierType' => 'DOI', 'relationType' => 'References')
1089
+ expect(subject.container).to eq('firstPage' => '929', 'identifier' => '0028-646X',
1090
+ 'identifierType' => 'ISSN', 'issue' => '3', 'lastPage' => '935', 'title' => 'New Phytologist', 'type' => 'Journal', 'volume' => '218')
1091
+ expect(subject.agency).to eq('crossref')
1092
+ expect(subject.date_registered).to eq('2018-08-03T11:45:49Z')
957
1093
  end
958
1094
 
959
- it "author literal" do
960
- input = "https://doi.org/10.1038/ng.3834"
961
- subject = Briard::Metadata.new(input: input)
1095
+ it 'author literal' do
1096
+ input = 'https://doi.org/10.1038/ng.3834'
1097
+ subject = described_class.new(input: input)
962
1098
  expect(subject.valid?).to be true
963
- expect(subject.id).to eq("https://doi.org/10.1038/ng.3834")
964
- expect(subject.url).to eq("http://www.nature.com/articles/ng.3834")
965
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1099
+ expect(subject.id).to eq('https://doi.org/10.1038/ng.3834')
1100
+ expect(subject.url).to eq('http://www.nature.com/articles/ng.3834')
1101
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1102
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
966
1103
  expect(subject.creators.length).to eq(14)
967
- expect(subject.creators.last).to eq("name"=>"GTEx Consortium", "nameType"=>"Organizational")
968
- expect(subject.titles).to eq([{"title"=>"The impact of structural variation on human gene expression"}])
969
- expect(subject.dates).to include({"date"=>"2017-04-03", "dateType"=>"Issued"})
970
- expect(subject.publication_year).to eq("2017")
971
- expect(subject.publisher).to eq("Springer Science and Business Media LLC")
972
- expect(subject.agency).to eq("crossref")
973
- expect(subject.date_registered).to eq("2019-11-02T09:30:06Z")
1104
+ expect(subject.creators.last).to eq('name' => 'GTEx Consortium',
1105
+ 'nameType' => 'Organizational')
1106
+ expect(subject.titles).to eq([{ 'title' => 'The impact of structural variation on human gene expression' }])
1107
+ expect(subject.dates).to include({ 'date' => '2017-04-03', 'dateType' => 'Issued' })
1108
+ expect(subject.publication_year).to eq('2017')
1109
+ expect(subject.publisher).to eq('Springer Science and Business Media LLC')
1110
+ expect(subject.agency).to eq('crossref')
1111
+ expect(subject.date_registered).to eq('2019-11-02T09:30:06Z')
974
1112
  end
975
1113
 
976
- it "affiliation is space" do
977
- input = "https://doi.org/10.1177/0042098011428175"
978
- subject = Briard::Metadata.new(input: input)
1114
+ it 'affiliation is space' do
1115
+ input = 'https://doi.org/10.1177/0042098011428175'
1116
+ subject = described_class.new(input: input)
979
1117
  expect(subject.valid?).to be true
980
- expect(subject.id).to eq("https://doi.org/10.1177/0042098011428175")
981
- expect(subject.url).to eq("http://journals.sagepub.com/doi/10.1177/0042098011428175")
982
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1118
+ expect(subject.id).to eq('https://doi.org/10.1177/0042098011428175')
1119
+ expect(subject.url).to eq('http://journals.sagepub.com/doi/10.1177/0042098011428175')
1120
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1121
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
983
1122
  expect(subject.creators.length).to eq(1)
984
- expect(subject.creators.first).to eq("affiliation"=>[{"name"=>"??"}], "familyName"=>"Petrovici", "givenName"=>"Norbert", "name"=>"Petrovici, Norbert", "nameType"=>"Personal")
985
- expect(subject.titles).to eq([{"title"=>"Workers and the City: Rethinking the Geographies of Power in Post-socialist Urbanisation"}])
986
- expect(subject.dates).to include({"date"=>"2011-12-22", "dateType"=>"Issued"})
987
- expect(subject.publication_year).to eq("2011")
988
- expect(subject.publisher).to eq("SAGE Publications")
989
- expect(subject.agency).to eq("crossref")
990
- expect(subject.date_registered).to eq("2021-05-16T02:02:38Z")
1123
+ expect(subject.creators.first).to eq('affiliation' => [{ 'name' => '??' }],
1124
+ 'familyName' => 'Petrovici', 'givenName' => 'Norbert', 'name' => 'Petrovici, Norbert', 'nameType' => 'Personal')
1125
+ expect(subject.titles).to eq([{ 'title' => 'Workers and the City: Rethinking the Geographies of Power in Post-socialist Urbanisation' }])
1126
+ expect(subject.dates).to include({ 'date' => '2011-12-22', 'dateType' => 'Issued' })
1127
+ expect(subject.publication_year).to eq('2011')
1128
+ expect(subject.publisher).to eq('SAGE Publications')
1129
+ expect(subject.agency).to eq('crossref')
1130
+ expect(subject.date_registered).to eq('2021-05-16T02:02:38Z')
991
1131
  end
992
1132
 
993
- it "multiple issn" do
994
- input = "https://doi.org/10.1007/978-3-642-34922-5_19"
995
- subject = Briard::Metadata.new(input: input)
1133
+ it 'multiple issn' do
1134
+ input = 'https://doi.org/10.1007/978-3-642-34922-5_19'
1135
+ subject = described_class.new(input: input)
996
1136
  expect(subject.valid?).to be true
997
- expect(subject.id).to eq("https://doi.org/10.1007/978-3-642-34922-5_19")
998
- expect(subject.url).to eq("http://link.springer.com/10.1007/978-3-642-34922-5_19")
999
- expect(subject.types).to eq("bibtex"=>"inbook", "citeproc"=>"chapter", "resourceType"=>"BookChapter", "resourceTypeGeneral"=>"BookChapter", "ris"=>"CHAP", "schemaOrg"=>"Chapter")
1137
+ expect(subject.id).to eq('https://doi.org/10.1007/978-3-642-34922-5_19')
1138
+ expect(subject.url).to eq('http://link.springer.com/10.1007/978-3-642-34922-5_19')
1139
+ expect(subject.types).to eq('bibtex' => 'inbook', 'citeproc' => 'chapter',
1140
+ 'resourceType' => 'BookChapter', 'resourceTypeGeneral' => 'BookChapter', 'ris' => 'CHAP', 'schemaOrg' => 'Chapter')
1000
1141
  expect(subject.creators.length).to eq(3)
1001
- expect(subject.creators.first).to eq("familyName"=>"Razib", "givenName"=>"Ali", "name"=>"Razib, Ali", "nameType"=>"Personal")
1002
- expect(subject.titles).to eq([{"title"=>"Log-Domain Arithmetic for High-Speed Fuzzy Control on a Field-Programmable Gate Array"}])
1003
- expect(subject.dates).to include({"date"=>"2013", "dateType"=>"Issued"})
1004
- expect(subject.publication_year).to eq("2013")
1005
- expect(subject.publisher).to eq("Springer Science and Business Media LLC")
1006
- expect(subject.container).to eq("identifier"=>"1860-0808", "identifierType"=>"ISSN", "title"=>"Studies in Fuzziness and Soft Computing", "type"=>"Book Series")
1007
- expect(subject.agency).to eq("crossref")
1008
- expect(subject.date_registered).to eq("2012-10-31T16:15:44Z")
1142
+ expect(subject.creators.first).to eq('familyName' => 'Razib', 'givenName' => 'Ali',
1143
+ 'name' => 'Razib, Ali', 'nameType' => 'Personal')
1144
+ expect(subject.titles).to eq([{ 'title' => 'Log-Domain Arithmetic for High-Speed Fuzzy Control on a Field-Programmable Gate Array' }])
1145
+ expect(subject.dates).to include({ 'date' => '2013', 'dateType' => 'Issued' })
1146
+ expect(subject.publication_year).to eq('2013')
1147
+ expect(subject.publisher).to eq('Springer Science and Business Media LLC')
1148
+ expect(subject.container).to eq('identifier' => '1860-0808', 'identifierType' => 'ISSN',
1149
+ 'title' => 'Studies in Fuzziness and Soft Computing', 'type' => 'Book Series')
1150
+ expect(subject.agency).to eq('crossref')
1151
+ expect(subject.date_registered).to eq('2012-10-31T16:15:44Z')
1009
1152
  end
1010
1153
 
1011
- it "article id as page number" do
1012
- input = "https://doi.org/10.1103/physrevlett.120.117701"
1013
- subject = Briard::Metadata.new(input: input)
1154
+ it 'article id as page number' do
1155
+ input = 'https://doi.org/10.1103/physrevlett.120.117701'
1156
+ subject = described_class.new(input: input)
1014
1157
  expect(subject.valid?).to be true
1015
- expect(subject.id).to eq("https://doi.org/10.1103/physrevlett.120.117701")
1016
- expect(subject.url).to eq("https://link.aps.org/doi/10.1103/PhysRevLett.120.117701")
1017
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"JournalArticle", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1158
+ expect(subject.id).to eq('https://doi.org/10.1103/physrevlett.120.117701')
1159
+ expect(subject.url).to eq('https://link.aps.org/doi/10.1103/PhysRevLett.120.117701')
1160
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1161
+ 'resourceType' => 'JournalArticle', 'resourceTypeGeneral' => 'JournalArticle', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
1018
1162
  expect(subject.creators.length).to eq(5)
1019
- expect(subject.creators.first).to eq("familyName"=>"Marrazzo", "givenName"=>"Antimo", "name"=>"Marrazzo, Antimo", "nameType"=>"Personal")
1020
- expect(subject.titles).to eq([{"title"=>"Prediction of a Large-Gap and Switchable Kane-Mele Quantum Spin Hall Insulator"}])
1021
- expect(subject.dates).to include({"date"=>"2018-03-13", "dateType"=>"Issued"})
1022
- expect(subject.publication_year).to eq("2018")
1023
- expect(subject.publisher).to eq("American Physical Society (APS)")
1024
- expect(subject.container).to eq("firstPage" => "117701", "identifier"=>"1079-7114", "identifierType"=>"ISSN", "issue"=>"11", "title"=>"Physical Review Letters", "type"=>"Journal", "volume"=>"120")
1025
- expect(subject.agency).to eq("crossref")
1026
- expect(subject.date_registered).to eq("2018-03-13T15:18:48Z")
1163
+ expect(subject.creators.first).to eq('familyName' => 'Marrazzo', 'givenName' => 'Antimo',
1164
+ 'name' => 'Marrazzo, Antimo', 'nameType' => 'Personal')
1165
+ expect(subject.titles).to eq([{ 'title' => 'Prediction of a Large-Gap and Switchable Kane-Mele Quantum Spin Hall Insulator' }])
1166
+ expect(subject.dates).to include({ 'date' => '2018-03-13', 'dateType' => 'Issued' })
1167
+ expect(subject.publication_year).to eq('2018')
1168
+ expect(subject.publisher).to eq('American Physical Society (APS)')
1169
+ expect(subject.container).to eq('firstPage' => '117701', 'identifier' => '1079-7114',
1170
+ 'identifierType' => 'ISSN', 'issue' => '11', 'title' => 'Physical Review Letters', 'type' => 'Journal', 'volume' => '120')
1171
+ expect(subject.agency).to eq('crossref')
1172
+ expect(subject.date_registered).to eq('2018-03-13T15:18:48Z')
1027
1173
  end
1028
1174
 
1029
- it "posted content copernicus" do
1030
- input = "https://doi.org/10.5194/CP-2020-95"
1031
- subject = Briard::Metadata.new(input: input)
1175
+ it 'posted content copernicus' do
1176
+ input = 'https://doi.org/10.5194/CP-2020-95'
1177
+ subject = described_class.new(input: input)
1032
1178
  expect(subject.valid?).to be true
1033
- expect(subject.url).to eq("https://cp.copernicus.org/preprints/cp-2020-95/cp-2020-95.pdf")
1034
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"PostedContent", "resourceTypeGeneral"=>"Preprint", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
1179
+ expect(subject.url).to eq('https://cp.copernicus.org/preprints/cp-2020-95/cp-2020-95.pdf')
1180
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
1181
+ 'resourceType' => 'PostedContent', 'resourceTypeGeneral' => 'Preprint', 'ris' => 'JOUR', 'schemaOrg' => 'ScholarlyArticle')
1035
1182
  expect(subject.creators.count).to eq(6)
1036
- expect(subject.creators.first).to eq("nameType" => "Personal", "familyName" => "Shao",
1037
- "givenName" => "Jun",
1038
- "name" => "Shao, Jun",
1039
- "nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0001-6130-6474", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}])
1040
- expect(subject.titles).to eq([{"title"=>"The Atmospheric Bridge Communicated the ??&lt;sup&gt;13&lt;/sup&gt;C Decline during the Last Deglaciation to the Global Upper Ocean"}])
1041
- expect(subject.id).to eq("https://doi.org/10.5194/cp-2020-95")
1042
- expect(subject.identifiers).to be_empty
1043
- expect(subject.descriptions.first["description"]).to start_with("Abstract. During the early last glacial termination")
1044
- expect(subject.dates).to include({"date"=>"2020-07-28", "dateType"=>"Issued"})
1045
- expect(subject.publication_year).to eq("2020")
1046
- expect(subject.publisher).to eq("Copernicus GmbH")
1047
- expect(subject.agency).to eq("crossref")
1183
+ expect(subject.creators.first).to eq('nameType' => 'Personal', 'familyName' => 'Shao',
1184
+ 'givenName' => 'Jun',
1185
+ 'name' => 'Shao, Jun',
1186
+ 'nameIdentifiers' => [{ 'nameIdentifier' => 'https://orcid.org/0000-0001-6130-6474', 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org' }])
1187
+ expect(subject.titles).to eq([{ 'title' => 'The Atmospheric Bridge Communicated the ??&lt;sup&gt;13&lt;/sup&gt;C Decline during the Last Deglaciation to the Global Upper Ocean' }])
1188
+ expect(subject.id).to eq('https://doi.org/10.5194/cp-2020-95')
1189
+ expect(subject.identifiers.empty?).to be(true)
1190
+ expect(subject.descriptions.first['description']).to start_with('Abstract. During the early last glacial termination')
1191
+ expect(subject.dates).to include({ 'date' => '2020-07-28', 'dateType' => 'Issued' })
1192
+ expect(subject.publication_year).to eq('2020')
1193
+ expect(subject.publisher).to eq('Copernicus GmbH')
1194
+ expect(subject.agency).to eq('crossref')
1048
1195
  end
1049
1196
 
1050
- it "book oup" do
1051
- input = "10.1093/oxfordhb/9780198746140.013.5"
1052
- subject = Briard::Metadata.new(input: input)
1197
+ it 'book oup' do
1198
+ input = '10.1093/oxfordhb/9780198746140.013.5'
1199
+ subject = described_class.new(input: input)
1053
1200
  expect(subject.valid?).to be true
1054
- expect(subject.url).to eq("https://academic.oup.com/edited-volume/28081/chapter/212116415")
1055
- expect(subject.types).to eq("bibtex"=>"book", "citeproc"=>"book", "resourceType"=>"Book", "resourceTypeGeneral"=>"Book", "ris"=>"BOOK", "schemaOrg"=>"Book")
1201
+ expect(subject.url).to eq('https://academic.oup.com/edited-volume/28081/chapter/212116415')
1202
+ expect(subject.types).to eq('bibtex' => 'book', 'citeproc' => 'book', 'resourceType' => 'Book',
1203
+ 'resourceTypeGeneral' => 'Book', 'ris' => 'BOOK', 'schemaOrg' => 'Book')
1056
1204
  expect(subject.creators.count).to eq(1)
1057
- expect(subject.creators.first).to eq("familyName"=>"Clayton", "givenName"=>"Barbra R.", "name"=>"Clayton, Barbra R.", "nameType"=>"Personal")
1205
+ expect(subject.creators.first).to eq('familyName' => 'Clayton', 'givenName' => 'Barbra R.',
1206
+ 'name' => 'Clayton, Barbra R.', 'nameType' => 'Personal')
1058
1207
  expect(subject.contributors.count).to eq(2)
1059
- expect(subject.contributors.first).to eq("contributorType"=>"Editor", "familyName"=>"Cozort", "givenName"=>"Daniel", "name"=>"Cozort, Daniel", "nameType"=>"Personal")
1060
- expect(subject.titles).to eq([{"title"=>"The Changing Way of the Bodhisattva"}])
1061
- expect(subject.id).to eq("https://doi.org/10.1093/oxfordhb/9780198746140.013.5")
1062
- expect(subject.identifiers).to be_empty
1063
- expect(subject.descriptions.first["description"]).to start_with("This chapter explores the nature of the connections")
1064
- expect(subject.dates).to include({"date"=>"2018-04-05", "dateType"=>"Issued"})
1065
- expect(subject.publication_year).to eq("2018")
1066
- expect(subject.publisher).to eq("Oxford University Press (OUP)")
1067
- expect(subject.agency).to eq("crossref")
1208
+ expect(subject.contributors.first).to eq('contributorType' => 'Editor', 'familyName' => 'Cozort',
1209
+ 'givenName' => 'Daniel', 'name' => 'Cozort, Daniel', 'nameType' => 'Personal')
1210
+ expect(subject.titles).to eq([{ 'title' => 'The Changing Way of the Bodhisattva' }])
1211
+ expect(subject.id).to eq('https://doi.org/10.1093/oxfordhb/9780198746140.013.5')
1212
+ expect(subject.identifiers.empty?).to be(true)
1213
+ expect(subject.descriptions.first['description']).to start_with('This chapter explores the nature of the connections')
1214
+ expect(subject.dates).to include({ 'date' => '2018-04-05', 'dateType' => 'Issued' })
1215
+ expect(subject.publication_year).to eq('2018')
1216
+ expect(subject.publisher).to eq('Oxford University Press (OUP)')
1217
+ expect(subject.agency).to eq('crossref')
1068
1218
  end
1069
1219
 
1070
- it "report osti" do
1071
- input = "10.2172/972169"
1072
- subject = Briard::Metadata.new(input: input)
1220
+ it 'report osti' do
1221
+ input = '10.2172/972169'
1222
+ subject = described_class.new(input: input)
1073
1223
  expect(subject.valid?).to be true
1074
- expect(subject.url).to eq("http://www.osti.gov/servlets/purl/972169-1QXROM/")
1075
- expect(subject.types).to eq("bibtex"=>"techreport", "citeproc"=>"report", "resourceType"=>"Report", "resourceTypeGeneral"=>"Report", "ris"=>"RPRT", "schemaOrg"=>"Report")
1224
+ expect(subject.url).to eq('http://www.osti.gov/servlets/purl/972169-1QXROM/')
1225
+ expect(subject.types).to eq('bibtex' => 'techreport', 'citeproc' => 'report',
1226
+ 'resourceType' => 'Report', 'resourceTypeGeneral' => 'Report', 'ris' => 'RPRT', 'schemaOrg' => 'Report')
1076
1227
  expect(subject.creators.count).to eq(4)
1077
- expect(subject.creators.first).to eq("familyName"=>"Denholm", "givenName"=>"P.", "name"=>"Denholm, P.", "nameType"=>"Personal")
1228
+ expect(subject.creators.first).to eq('familyName' => 'Denholm', 'givenName' => 'P.',
1229
+ 'name' => 'Denholm, P.', 'nameType' => 'Personal')
1078
1230
  expect(subject.contributors.count).to eq(0)
1079
- expect(subject.titles).to eq([{"title"=>"Role of Energy Storage with Renewable Electricity Generation"}])
1080
- expect(subject.id).to eq("https://doi.org/10.2172/972169")
1081
- expect(subject.identifiers).to eq( [{"identifier"=>"NREL/TP-6A2-47187", "identifierType"=>"report-number"}, {"identifier"=>"972169", "identifierType"=>"sequence-number"}])
1082
- expect(subject.descriptions).to be_empty
1083
- expect(subject.dates).to include({"date"=>"2010-01-01", "dateType"=>"Issued"})
1084
- expect(subject.publication_year).to eq("2010")
1085
- expect(subject.publisher).to eq("Office of Scientific and Technical Information (OSTI)")
1086
- expect(subject.agency).to eq("crossref")
1231
+ expect(subject.titles).to eq([{ 'title' => 'Role of Energy Storage with Renewable Electricity Generation' }])
1232
+ expect(subject.id).to eq('https://doi.org/10.2172/972169')
1233
+ expect(subject.identifiers).to eq([
1234
+ { 'identifier' => 'NREL/TP-6A2-47187',
1235
+ 'identifierType' => 'report-number' }, { 'identifier' => '972169', 'identifierType' => 'sequence-number' }
1236
+ ])
1237
+ expect(subject.descriptions.empty?).to be(true)
1238
+ expect(subject.dates).to include({ 'date' => '2010-01-01', 'dateType' => 'Issued' })
1239
+ expect(subject.publication_year).to eq('2010')
1240
+ expect(subject.publisher).to eq('Office of Scientific and Technical Information (OSTI)')
1241
+ expect(subject.agency).to eq('crossref')
1087
1242
  end
1088
1243
 
1089
- it "journal issue" do
1090
- input = "https://doi.org/10.6002/ect.2015.0371"
1091
- subject = Briard::Metadata.new(input: input)
1244
+ it 'journal issue' do
1245
+ input = 'https://doi.org/10.6002/ect.2015.0371'
1246
+ subject = described_class.new(input: input)
1092
1247
  expect(subject.valid?).to be true
1093
- expect(subject.id).to eq("https://doi.org/10.6002/ect.2015.0371")
1094
- expect(subject.url).to eq("http://ectrx.org/forms/ectrxcontentshow.php?doi_id=10.6002/ect.2015.0371")
1095
- expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceType"=>"JournalIssue", "resourceTypeGeneral"=>"Text", "ris"=>"JOUR", "schemaOrg"=>"PublicationIssue")
1096
- expect(subject.creators).to eq([{"name"=>":(unav)", "nameType"=>"Organizational"}])
1097
- expect(subject.titles).to eq([{"title"=>":(unav)"}])
1098
- expect(subject.dates).to eq([{"date"=>"2018-10", "dateType"=>"Issued"}, {"date"=>"2018-10-03T12:09:12Z", "dateType"=>"Updated"}])
1099
- expect(subject.publication_year).to eq("2018")
1100
- expect(subject.publisher).to eq("Baskent University")
1248
+ expect(subject.id).to eq('https://doi.org/10.6002/ect.2015.0371')
1249
+ expect(subject.url).to eq('http://ectrx.org/forms/ectrxcontentshow.php?doi_id=10.6002/ect.2015.0371')
1250
+ expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article-journal',
1251
+ 'resourceType' => 'JournalIssue', 'resourceTypeGeneral' => 'Text', 'ris' => 'JOUR', 'schemaOrg' => 'PublicationIssue')
1252
+ expect(subject.creators).to eq([{ 'name' => ':(unav)', 'nameType' => 'Organizational' }])
1253
+ expect(subject.titles).to eq([{ 'title' => ':(unav)' }])
1254
+ expect(subject.dates).to eq([{ 'date' => '2018-10', 'dateType' => 'Issued' },
1255
+ { 'date' => '2018-10-03T12:09:12Z', 'dateType' => 'Updated' }])
1256
+ expect(subject.publication_year).to eq('2018')
1257
+ expect(subject.publisher).to eq('Baskent University')
1101
1258
  expect(subject.related_identifiers.length).to eq(2)
1102
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"2146-8427", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
1103
- expect(subject.container).to eq("identifier"=>"2146-8427", "identifierType"=>"ISSN", "issue"=>"5", "title"=>"Experimental and Clinical Transplantation", "type"=>"Journal", "volume"=>"16")
1104
- expect(subject.agency).to eq("crossref")
1259
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '2146-8427',
1260
+ 'relatedIdentifierType' => 'ISSN', 'relationType' => 'IsPartOf', 'resourceTypeGeneral' => 'Collection')
1261
+ expect(subject.container).to eq('identifier' => '2146-8427', 'identifierType' => 'ISSN',
1262
+ 'issue' => '5', 'title' => 'Experimental and Clinical Transplantation', 'type' => 'Journal', 'volume' => '16')
1263
+ expect(subject.agency).to eq('crossref')
1105
1264
  end
1106
1265
 
1107
- it "not found error" do
1108
- input = "https://doi.org/10.7554/elife.01567x"
1109
- subject = Briard::Metadata.new(input: input)
1266
+ it 'not found error' do
1267
+ input = 'https://doi.org/10.7554/elife.01567x'
1268
+ subject = described_class.new(input: input)
1110
1269
  expect(subject.valid?).to be false
1111
- expect(subject.id).to eq("https://doi.org/10.7554/elife.01567x")
1112
- expect(subject.doi).to eq("10.7554/elife.01567x")
1113
- expect(subject.agency).to eq("crossref")
1114
- expect(subject.state).to eq("not_found")
1270
+ expect(subject.id).to eq('https://doi.org/10.7554/elife.01567x')
1271
+ expect(subject.doi).to eq('10.7554/elife.01567x')
1272
+ expect(subject.agency).to eq('crossref')
1273
+ expect(subject.state).to eq('not_found')
1115
1274
  end
1116
1275
  end
1117
1276
  end