commonmeta-ruby 3.0.10 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +37 -36
  3. data/commonmeta.gemspec +1 -1
  4. data/lib/commonmeta/metadata_utils.rb +2 -0
  5. data/lib/commonmeta/readers/json_post_reader.rb +78 -0
  6. data/lib/commonmeta/utils.rb +19 -0
  7. data/lib/commonmeta/version.rb +1 -1
  8. data/spec/author_utils_spec.rb +10 -0
  9. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_item_metadata/blogger_post.yml +94 -0
  10. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_item_metadata/ghost_post.yml +117 -0
  11. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_item_metadata/ghost_post_with_doi.yml +117 -0
  12. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_item_metadata/jekyll_post.yml +170 -0
  13. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_item_metadata/wordpress_post.yml +163 -0
  14. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_post_metadata/blogger_post.yml +94 -0
  15. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_post_metadata/ghost_post_with_doi.yml +117 -0
  16. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_post_metadata/jekyll_post.yml +87 -0
  17. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_post_metadata/wordpress_post.yml +163 -0
  18. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_link/license.yml +221 -0
  19. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_link/url.yml +221 -0
  20. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_item_from_rogue_scholar_with_doi.yml +163 -0
  21. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_item_from_upstream_blog.yml +243 -0
  22. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_post_from_rogue_scholar_with_doi.yml +163 -0
  23. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_post_from_upstream_blog.yml +243 -0
  24. data/spec/readers/json_post_reader_spec.rb +89 -0
  25. data/spec/utils_spec.rb +330 -314
  26. data/spec/writers/crossref_xml_writer_spec.rb +183 -137
  27. metadata +22 -5
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Commonmeta::Metadata, vcr: true do
6
+ subject { described_class.new(input: input, from: 'json_feed') }
7
+
8
+ context 'get json_post metadata' do
9
+ it 'blogger post' do
10
+ input = 'https://rogue-scholar.org/api/posts/1jgo59el'
11
+ subject = described_class.new(input: input)
12
+ expect(subject.valid?).to be true
13
+ expect(subject.id).to eq('https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html')
14
+ expect(subject.url).to eq('https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html')
15
+ expect(subject.type).to eq('Article')
16
+ expect(subject.creators.length).to eq(1)
17
+ expect(subject.creators.first).to eq("familyName"=>"Page", "givenName"=>"Roderic", "type"=>"Person")
18
+ expect(subject.titles).to eq([{"title"=>"Ten years and a million links"}])
19
+ expect(subject.license).to eq('id' => 'CC-BY-4.0',
20
+ 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
21
+ expect(subject.date).to eq('published' => '2023-05-31')
22
+ expect(subject.descriptions).to eq([{"description"=>"As trailed on a Twitter thread last week I’ve been working on a manuscript describing the efforts to map taxonomic names to their original descriptions in the taxonomic literature. Putting together a...", "descriptionType"=>"Abstract"}])
23
+ expect(subject.publisher).to eq('name' => 'iPhylo')
24
+ expect(subject.subjects).to be_nil
25
+ expect(subject.language).to eq('en')
26
+ expect(subject.container).to eq("identifier"=>"https://iphylo.blogspot.com/", "identifierType"=>"URL", "title"=>"iPhylo", "type"=>"Periodical")
27
+ end
28
+
29
+ it 'ghost post with doi' do
30
+ input = 'https://rogue-scholar.org/api/posts/1jgo8yel'
31
+ subject = described_class.new(input: input)
32
+ expect(subject.valid?).to be true
33
+ expect(subject.id).to eq('https://doi.org/10.53731/4nwxn-frt36')
34
+ expect(subject.url).to eq('https://blog.front-matter.io/posts/does-it-compose')
35
+ expect(subject.type).to eq('Article')
36
+ expect(subject.creators.length).to eq(1)
37
+ expect(subject.creators.first).to eq("id" => "https://orcid.org/0000-0003-1419-2405", "familyName"=>"Fenner", "givenName"=>"Martin", "type"=>"Person")
38
+ expect(subject.titles).to eq([{"title"=>"Does it compose?"}])
39
+ expect(subject.license).to eq('id' => 'CC-BY-4.0',
40
+ 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
41
+ expect(subject.date).to eq('published' => '2023-05-16', 'updated' => '2023-05-16')
42
+ expect(subject.descriptions).to eq([{"description"=>"One question I have increasingly asked myself in the past few years. Meaning Can I run this open source software using Docker containers and a Docker Compose file?As the Docker project turned ten this...", "descriptionType"=>"Abstract"}])
43
+ expect(subject.publisher).to eq('name' => 'Front Matter')
44
+ expect(subject.subjects).to eq([{"subject"=>"news"}])
45
+ expect(subject.language).to eq('en')
46
+ expect(subject.container).to eq("identifier"=>"https://blog.front-matter.io/", "identifierType"=>"URL", "title"=>"Front Matter", "type"=>"Periodical")
47
+ end
48
+
49
+ it 'wordpress post' do
50
+ input = 'https://rogue-scholar.org/api/posts/zkevlyd3'
51
+ subject = described_class.new(input: input)
52
+ expect(subject.valid?).to be true
53
+ expect(subject.id).to eq('https://wisspub.net/2023/05/23/eu-mitgliedstaaten-betonen-die-rolle-von-wissenschaftsgeleiteten-open-access-modellen-jenseits-von-apcs')
54
+ expect(subject.url).to eq('https://wisspub.net/2023/05/23/eu-mitgliedstaaten-betonen-die-rolle-von-wissenschaftsgeleiteten-open-access-modellen-jenseits-von-apcs')
55
+ expect(subject.type).to eq('Article')
56
+ expect(subject.creators.length).to eq(1)
57
+ expect(subject.creators.first).to eq("familyName"=>"Pampel", "givenName"=>"Heinz", "id"=>"https://orcid.org/0000-0003-3334-2771", "type"=>"Person")
58
+ expect(subject.titles).to eq([{"title"=>"EU-Mitgliedstaaten betonen die Rolle von wissenschaftsgeleiteten Open-Access-Modellen jenseits von APCs"}])
59
+ expect(subject.license).to eq('id' => 'CC-BY-4.0',
60
+ 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
61
+ expect(subject.date).to eq('published' => '2023-05-23', 'updated' => '2023-05-23')
62
+ expect(subject.descriptions).to eq([{"description"=>"Die EU-Wissenschaftsministerien haben sich auf ihrer heutigen Sitzung in Brüssel unter dem Titel “Council conclusions on high-quality, transparent, open, trustworthy and equitable scholarly publishing” (PDF...", "descriptionType"=>"Abstract"}])
63
+ expect(subject.publisher).to eq('name' => 'wisspub.net')
64
+ expect(subject.subjects).to eq([{"subject"=>"open access"}, {"subject"=>"open access transformation"}, {"subject"=>"open science"}, {"subject"=>"eu"}])
65
+ expect(subject.language).to eq('de')
66
+ expect(subject.container).to eq("identifier"=>"https://wisspub.net/", "identifierType"=>"URL", "title"=>"wisspub.net", "type"=>"Periodical")
67
+ end
68
+
69
+ it 'jekyll post' do
70
+ input = 'https://rogue-scholar.org/api/posts/1jdkwod5'
71
+ subject = described_class.new(input: input)
72
+ expect(subject.valid?).to be true
73
+ expect(subject.id).to eq('https://citationstyles.org/2020/07/11/seeking-public-comment-on-CSL-1-0-2')
74
+ expect(subject.url).to eq('https://citationstyles.org/2020/07/11/seeking-public-comment-on-CSL-1-0-2')
75
+ expect(subject.type).to eq('Article')
76
+ expect(subject.creators.length).to eq(1)
77
+ expect(subject.creators.first).to eq("familyName"=>"Karcher", "givenName"=>"Sebastian", "type"=>"Person")
78
+ expect(subject.titles).to eq([{"title"=>"Seeking Public Comment on CSL 1.0.2 Release"}])
79
+ expect(subject.license).to eq('id' => 'CC-BY-4.0',
80
+ 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
81
+ expect(subject.date).to eq('published' => '2020-07-11', 'updated' => '2020-07-11')
82
+ expect(subject.descriptions).to eq([{"description"=>"Over the past few months, Citation Style Language developers have worked to address a backlog of feature requests. This work will be reflected in two upcoming releases. The first of these, 1.0.2, is slated...", "descriptionType"=>"Abstract"}])
83
+ expect(subject.publisher).to eq('name' => 'Citation Style Language')
84
+ expect(subject.subjects).to be_nil
85
+ expect(subject.language).to eq('en')
86
+ expect(subject.container).to eq("identifier"=>"https://citationstyles.org/", "identifierType"=>"URL", "title"=>"Citation Style Language", "type"=>"Periodical")
87
+ end
88
+ end
89
+ end