bolognese 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/bolognese/author_utils.rb +5 -2
- data/lib/bolognese/datacite_utils.rb +4 -4
- data/lib/bolognese/metadata.rb +8 -4
- data/lib/bolognese/metadata_utils.rb +3 -6
- data/lib/bolognese/readers/citeproc_reader.rb +2 -1
- data/lib/bolognese/readers/codemeta_reader.rb +2 -2
- data/lib/bolognese/readers/crossref_reader.rb +3 -2
- data/lib/bolognese/readers/datacite_json_reader.rb +1 -1
- data/lib/bolognese/readers/datacite_reader.rb +2 -1
- data/lib/bolognese/readers/schema_org_reader.rb +2 -2
- data/lib/bolognese/utils.rb +4 -0
- data/lib/bolognese/version.rb +1 -1
- data/lib/bolognese/writers/jats_writer.rb +2 -2
- data/lib/bolognese/writers/schema_org_writer.rb +1 -1
- data/spec/readers/crossref_reader_spec.rb +1 -1
- data/spec/readers/datacite_reader_spec.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 101b83ceef5cc504cac6e51becd5840d9c27e78a7247033d61183ce7958d5e08
|
4
|
+
data.tar.gz: 9409014f1925750a0795f8cc90607b8fdef63a23d9a8b4ce23fd7c16c7ea19a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b88362a0aa9c1661fcef16b3886964ec4c214a468310f8df40e9ae50be18657a4f7aae999674a1c3109d65f9f503c3f3830bc5c77597817d0a57d0cec73f45c3
|
7
|
+
data.tar.gz: 250e6261325c0b745d783b865d53d7b9c9d0726fec30b5cc02afeaa1961453f8d5f3afcf1ace249f26b60d9eb1f40d20e041fb10d9fbbbacbdf806012090f81e
|
data/Gemfile.lock
CHANGED
@@ -35,13 +35,15 @@ module Bolognese
|
|
35
35
|
family_name = parse_attributes(author.fetch("familyName", nil))
|
36
36
|
name = cleanup_author(name)
|
37
37
|
name = [family_name, given_name].join(", ") if name.blank? && family_name.present?
|
38
|
+
contributor_type = parse_attributes(author.fetch("contributorType", nil))
|
38
39
|
|
39
40
|
author = { "type" => type || "Person",
|
40
41
|
"id" => id,
|
41
42
|
"name" => name,
|
42
43
|
"givenName" => given_name,
|
43
44
|
"familyName" => family_name,
|
44
|
-
"identifier" => identifier
|
45
|
+
"identifier" => identifier,
|
46
|
+
"contributorType" => contributor_type }.compact
|
45
47
|
|
46
48
|
return author if family_name.present?
|
47
49
|
|
@@ -63,7 +65,8 @@ module Bolognese
|
|
63
65
|
"name" => name,
|
64
66
|
"givenName" => given_name,
|
65
67
|
"familyName" => family_name,
|
66
|
-
"identifier" => identifier
|
68
|
+
"identifier" => identifier,
|
69
|
+
"contributorType" => contributor_type }.compact
|
67
70
|
else
|
68
71
|
{ "type" => type, "name" => name }.compact
|
69
72
|
end
|
@@ -54,12 +54,12 @@ module Bolognese
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def insert_contributors(xml)
|
57
|
-
return xml unless
|
57
|
+
return xml unless contributor.present?
|
58
58
|
|
59
59
|
xml.contributors do
|
60
|
-
Array.wrap(
|
61
|
-
xml.contributor("contributorType" => "
|
62
|
-
insert_person(xml,
|
60
|
+
Array.wrap(contributor).each do |con|
|
61
|
+
xml.contributor("contributorType" => con["contributorType"] || "Other") do
|
62
|
+
insert_person(xml, con, "contributor")
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
data/lib/bolognese/metadata.rb
CHANGED
@@ -6,11 +6,11 @@ module Bolognese
|
|
6
6
|
class Metadata
|
7
7
|
include Bolognese::MetadataUtils
|
8
8
|
|
9
|
-
attr_writer :id, :provider_id, :client_id, :doi, :identifier, :creator, :
|
10
|
-
:volume, :first_page, :last_page, :url, :version,
|
11
|
-
:keywords, :
|
9
|
+
attr_writer :id, :provider_id, :client_id, :doi, :identifier, :creator, :contributor, :title, :publisher,
|
10
|
+
:rights, :dates, :publication_year, :volume, :first_page, :last_page, :url, :version,
|
11
|
+
:keywords, :contributor, :description, :alternate_identifiers, :language, :size,
|
12
12
|
:formats, :schema_version, :meta, :periodical,
|
13
|
-
:format, :funding_references, :
|
13
|
+
:format, :funding_references, :state, :geo_location,
|
14
14
|
:types, :content_url, :related_identifiers
|
15
15
|
|
16
16
|
def initialize(input: nil, from: nil, **options)
|
@@ -195,5 +195,9 @@ module Bolognese
|
|
195
195
|
def creator
|
196
196
|
@creator ||= meta.fetch("creator", nil)
|
197
197
|
end
|
198
|
+
|
199
|
+
def contributor
|
200
|
+
@contributor ||= meta.fetch("contributor", nil)
|
201
|
+
end
|
198
202
|
end
|
199
203
|
end
|
@@ -61,8 +61,9 @@ module Bolognese
|
|
61
61
|
include Bolognese::Writers::SchemaOrgWriter
|
62
62
|
include Bolognese::Writers::TurtleWriter
|
63
63
|
|
64
|
-
attr_accessor :string, :from, :sandbox, :meta, :regenerate, :issue
|
64
|
+
attr_accessor :string, :from, :sandbox, :meta, :regenerate, :issue
|
65
65
|
attr_reader :doc, :service_provider, :page_start, :page_end, :reverse, :name_detector
|
66
|
+
attr_writer :style, :locale
|
66
67
|
|
67
68
|
# replace DOI in XML if provided in options
|
68
69
|
def raw
|
@@ -79,10 +80,6 @@ module Bolognese
|
|
79
80
|
(from == "datacite") && regenerate.blank? && raw.present?
|
80
81
|
end
|
81
82
|
|
82
|
-
def editor
|
83
|
-
@editor ||= meta.fetch("editor", nil)
|
84
|
-
end
|
85
|
-
|
86
83
|
def service_provider
|
87
84
|
@service_provider ||= meta.fetch("service_provider", nil)
|
88
85
|
end
|
@@ -128,7 +125,7 @@ module Bolognese
|
|
128
125
|
"categories" => Array.wrap(keywords).map { |k| parse_attributes(k, content: "text", first: true) }.presence,
|
129
126
|
"language" => language,
|
130
127
|
"author" => to_citeproc(creator),
|
131
|
-
"
|
128
|
+
"contributor" => to_citeproc(contributor),
|
132
129
|
"issued" => get_date(dates, "Issued") ? get_date_parts(get_date(dates, "Issued")) : nil,
|
133
130
|
"submitted" => Array.wrap(dates).find { |d| d["type"] == "Submitted" }.to_h.fetch("__content__", nil),
|
134
131
|
"abstract" => parse_attributes(description, content: "text", first: true),
|
@@ -45,7 +45,7 @@ module Bolognese
|
|
45
45
|
}.compact
|
46
46
|
doi = normalize_doi(meta.fetch("DOI", nil))
|
47
47
|
creator = get_authors(from_citeproc(Array.wrap(meta.fetch("author", nil))))
|
48
|
-
|
48
|
+
contributor = get_authors(from_citeproc(Array.wrap(meta.fetch("editor", nil))))
|
49
49
|
dates = if meta.fetch("issued", nil).present?
|
50
50
|
[{ "date" => get_date_from_date_parts(meta.fetch("issued", nil)),
|
51
51
|
"date_type" => "Issued" }]
|
@@ -83,6 +83,7 @@ module Bolognese
|
|
83
83
|
"url" => normalize_id(meta.fetch("URL", nil)),
|
84
84
|
"title" => [{ "text" => meta.fetch("title", nil) }],
|
85
85
|
"creator" => creator,
|
86
|
+
"contributor" => contributor,
|
86
87
|
"periodical" => periodical,
|
87
88
|
"publisher" => meta.fetch("publisher", nil),
|
88
89
|
"related_identifiers" => related_identifiers,
|
@@ -22,7 +22,7 @@ module Bolognese
|
|
22
22
|
identifier = meta.fetch("identifier", nil)
|
23
23
|
id = normalize_id(meta.fetch("@id", nil) || identifier)
|
24
24
|
author = get_authors(from_schema_org(Array.wrap(meta.fetch("agents", nil))))
|
25
|
-
|
25
|
+
contributor = get_authors(from_schema_org(Array.wrap(meta.fetch("editor", nil))))
|
26
26
|
dates = []
|
27
27
|
dates << { "date" => meta.fetch("datePublished"), "date_type" => "Issued" } if meta.fetch("datePublished", nil).present?
|
28
28
|
dates << { "date" => meta.fetch("dateCreated"), "date_type" => "Created" } if meta.fetch("dateCreated", nil).present?
|
@@ -47,7 +47,7 @@ module Bolognese
|
|
47
47
|
"url" => normalize_id(meta.fetch("codeRepository", nil)),
|
48
48
|
"title" => [{ "text" => meta.fetch("title", nil) }],
|
49
49
|
"creator" => author,
|
50
|
-
"
|
50
|
+
"contributor" => contributor,
|
51
51
|
"publisher" => publisher,
|
52
52
|
#{}"is_part_of" => is_part_of,
|
53
53
|
"dates" => dates,
|
@@ -109,7 +109,7 @@ module Bolognese
|
|
109
109
|
"title" => [{ "text" => parse_attributes(bibliographic_metadata.dig("titles", "title")) }],
|
110
110
|
"alternate_identifiers" => crossref_alternate_identifiers(bibliographic_metadata),
|
111
111
|
"creator" => crossref_people(bibliographic_metadata, "author"),
|
112
|
-
"
|
112
|
+
"contributor" => crossref_people(bibliographic_metadata, "editor"),
|
113
113
|
"funding_references" => crossref_funding_reference(program_metadata),
|
114
114
|
"publisher" => publisher,
|
115
115
|
"periodical" => periodical,
|
@@ -170,7 +170,8 @@ module Bolognese
|
|
170
170
|
"id" => parse_attributes(a["ORCID"]),
|
171
171
|
"name" => [a["given_name"], a["surname"]].join(" "),
|
172
172
|
"givenName" => a["given_name"],
|
173
|
-
"familyName" => a["surname"]
|
173
|
+
"familyName" => a["surname"],
|
174
|
+
"contributorType" => contributor_role == "editor" ? "Editor" : nil }.compact
|
174
175
|
end.unwrap
|
175
176
|
end
|
176
177
|
|
@@ -40,7 +40,7 @@ module Bolognese
|
|
40
40
|
"title" => meta.fetch("title", nil),
|
41
41
|
"alternate_identifiers" => meta.fetch("alternate-identifiers", nil),
|
42
42
|
"creator" => meta.fetch("creator", nil),
|
43
|
-
"
|
43
|
+
"contributor" => meta.fetch("contributor", nil),
|
44
44
|
"publisher" => meta.fetch("publisher", nil),
|
45
45
|
"periodical" => meta.fetch("periodical", nil),
|
46
46
|
"service_provider" => "DataCite",
|
@@ -105,7 +105,7 @@ module Bolognese
|
|
105
105
|
if k.nil?
|
106
106
|
nil
|
107
107
|
elsif k.is_a?(String)
|
108
|
-
sanitize(k)
|
108
|
+
{ "text" => sanitize(k) }
|
109
109
|
else
|
110
110
|
{ "subject_scheme" => k["subjectScheme"], "scheme_uri" => k["schemeURI"], "text" => sanitize(k["__content__"]) }.compact
|
111
111
|
end
|
@@ -171,6 +171,7 @@ module Bolognese
|
|
171
171
|
"url" => options.fetch(:url, nil),
|
172
172
|
"title" => title,
|
173
173
|
"creator" => get_authors(Array.wrap(meta.dig("creators", "creator"))),
|
174
|
+
"contributor" => get_authors(Array.wrap(meta.dig("contributors", "contributor"))),
|
174
175
|
"periodical" => periodical,
|
175
176
|
"publisher" => meta.fetch("publisher", "").strip.presence,
|
176
177
|
"service_provider" => "DataCite",
|
@@ -62,7 +62,7 @@ module Bolognese
|
|
62
62
|
}.compact
|
63
63
|
authors = meta.fetch("author", nil) || meta.fetch("creator", nil)
|
64
64
|
author = get_authors(from_schema_org(Array.wrap(authors)))
|
65
|
-
|
65
|
+
contributor = get_authors(from_schema_org(Array.wrap(meta.fetch("editor", nil))))
|
66
66
|
publisher = parse_attributes(meta.fetch("publisher", nil), content: "name", first: true)
|
67
67
|
|
68
68
|
ct = (type == "Dataset") ? "includedInDataCatalog" : "Periodical"
|
@@ -136,7 +136,7 @@ module Bolognese
|
|
136
136
|
"formats" => Array.wrap(meta.fetch("encodingFormat", nil) || meta.fetch("fileFormat", nil)).unwrap,
|
137
137
|
"title" => meta.fetch("name", nil).present? ? [{ "text" => meta.fetch("name", nil) }] : nil,
|
138
138
|
"creator" => author,
|
139
|
-
"
|
139
|
+
"contributor" => contributor,
|
140
140
|
"publisher" => publisher,
|
141
141
|
"service_provider" => parse_attributes(meta.fetch("provider", nil), content: "name", first: true),
|
142
142
|
"periodical" => periodical,
|
data/lib/bolognese/utils.rb
CHANGED
@@ -816,6 +816,10 @@ module Bolognese
|
|
816
816
|
dd.fetch("date", nil)
|
817
817
|
end
|
818
818
|
|
819
|
+
def get_contributor(contributor, contributor_type)
|
820
|
+
contributor.select { |c| c["contributor_type"] == contributor_type }
|
821
|
+
end
|
822
|
+
|
819
823
|
def jsonlint(json)
|
820
824
|
return ["No JSON provided"] unless json.present?
|
821
825
|
|
data/lib/bolognese/version.rb
CHANGED
@@ -51,9 +51,9 @@ module Bolognese
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def insert_editors(xml)
|
54
|
-
if
|
54
|
+
if contributor.present?
|
55
55
|
xml.send("person-group", "person-group-type" => "editor") do
|
56
|
-
Array.wrap(
|
56
|
+
Array.wrap(contributor).each do |creator|
|
57
57
|
xml.name do
|
58
58
|
insert_contributor(xml, creator)
|
59
59
|
end
|
@@ -12,7 +12,7 @@ module Bolognese
|
|
12
12
|
"additionalType" => types["resource_type"],
|
13
13
|
"name" => parse_attributes(title, content: "text", first: true),
|
14
14
|
"author" => to_schema_org(creator),
|
15
|
-
"editor" => to_schema_org(
|
15
|
+
"editor" => to_schema_org(contributor),
|
16
16
|
"description" => parse_attributes(description, content: "text", first: true),
|
17
17
|
"license" => Array.wrap(rights).map { |l| l["id"] }.compact.unwrap,
|
18
18
|
"version" => version,
|
@@ -53,7 +53,7 @@ describe Bolognese::Metadata, vcr: true do
|
|
53
53
|
expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resource_type"=>"JournalArticle", "resource_type_general"=>"Text", "ris"=>"JOUR", "type"=>"ScholarlyArticle")
|
54
54
|
expect(subject.creator.length).to eq(5)
|
55
55
|
expect(subject.creator.first).to eq("type"=>"Person", "name"=>"Markus Ralser", "givenName"=>"Markus", "familyName"=>"Ralser")
|
56
|
-
expect(subject.
|
56
|
+
expect(subject.contributor).to eq("contributorType"=>"Editor", "familyName"=>"Janbon", "givenName"=>"Guilhem", "name"=>"Guilhem Janbon", "type"=>"Person")
|
57
57
|
expect(subject.title).to eq([{"text"=>"Triose Phosphate Isomerase Deficiency Is Caused by Altered Dimerization–Not Catalytic Inactivity–of the Mutant Enzymes"}])
|
58
58
|
expect(subject.rights).to eq([{"id"=>"http://creativecommons.org/licenses/by/4.0"}])
|
59
59
|
expect(subject.dates).to eq([{"date"=>"2006-12-20", "date_type"=>"Issued"}, {"date"=>"2017-06-17T12:26:15Z", "date_type"=>"Updated"}])
|
@@ -741,7 +741,7 @@ describe Bolognese::Metadata, vcr: true do
|
|
741
741
|
expect(subject.types["resource_type"]).to eq("DroNc-seq data")
|
742
742
|
expect(subject.creator).to eq("name"=>"The GTEx Consortium", "type"=>"Organization")
|
743
743
|
expect(subject.title).to eq([{"text"=>"DroNc-seq data"}])
|
744
|
-
expect(subject.keywords).to eq(["gtex", "annotation", "phenotype", "gene regulation", "transcriptomics"])
|
744
|
+
expect(subject.keywords).to eq([{"text"=>"gtex"}, {"text"=>"annotation"}, {"text"=>"phenotype"}, {"text"=>"gene regulation"}, {"text"=>"transcriptomics"}])
|
745
745
|
expect(subject.dates).to eq([{"date"=>"2017", "date_type"=>"Issued"}])
|
746
746
|
expect(subject.publication_year).to eq("2017")
|
747
747
|
expect(subject.related_identifiers.length).to eq(4)
|