cirneco 0.5.7 → 0.5.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +6 -3
- data/Gemfile.lock +5 -6
- data/cirneco.gemspec +1 -1
- data/lib/cirneco/utils.rb +65 -15
- data/lib/cirneco/version.rb +1 -1
- data/lib/cirneco/work.rb +50 -52
- data/spec/api_spec.rb +12 -11
- data/spec/fixtures/apa.csl +621 -0
- data/spec/fixtures/authors.yml +19 -0
- data/spec/fixtures/references.bib +506 -0
- data/spec/fixtures/site.yml +7 -0
- data/spec/utils_spec.rb +23 -0
- data/spec/work_spec.rb +13 -11
- metadata +8 -5
- data/0006.xml +0 -78
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc53bd40a384ab3df63764308d8f6267f230975a
|
4
|
+
data.tar.gz: 8596911b41e4513f9c947c0cb0b2a345d57e2a8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 508aeb634c7e6b5af2cb88ee30e6f9b031ca85456f02b237c497050b5ac34f608c04a0f694b9507c577f0859b802fe012f36e8939fd3037c7aee3c22e739b43b
|
7
|
+
data.tar.gz: bfccc96e67b81775f5747bf00d89d71537d4d1c3d4e73c27401ecb2bd48d330a0de047c03a0ce5b85d92a8d7f8058416ea707b6d7382da6548532d99ef9b0cd5
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -3,9 +3,12 @@ rvm:
|
|
3
3
|
- 2.3.1
|
4
4
|
|
5
5
|
before_install:
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
- wget https://github.com/jgm/pandoc/releases/download/1.15.2/pandoc-1.15.2-1-amd64.deb
|
7
|
+
- sudo dpkg -i pandoc-1.15.2-1-amd64.deb
|
8
|
+
- rm pandoc-1.15.2-1-amd64.deb
|
9
|
+
- sudo add-apt-repository ppa:kalakris/cmake -y
|
10
|
+
- sudo apt-get update -q
|
11
|
+
- sudo apt-get install cmake -y
|
9
12
|
|
10
13
|
install:
|
11
14
|
- travis_retry bundle install
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cirneco (0.5.
|
4
|
+
cirneco (0.5.8)
|
5
5
|
activesupport (~> 4.2, >= 4.2.5)
|
6
6
|
base32-crockford-checksum (~> 0.2.2)
|
7
|
-
bergamasco (~> 0.
|
7
|
+
bergamasco (~> 0.2)
|
8
8
|
builder (~> 3.2, >= 3.2.2)
|
9
9
|
dotenv (~> 2.1, >= 2.1.1)
|
10
10
|
maremma (~> 3.1)
|
@@ -20,11 +20,11 @@ GEM
|
|
20
20
|
minitest (~> 5.1)
|
21
21
|
thread_safe (~> 0.3, >= 0.3.4)
|
22
22
|
tzinfo (~> 1.1)
|
23
|
-
addressable (2.
|
24
|
-
public_suffix (~> 2.0, >= 2.0.2)
|
23
|
+
addressable (2.3.8)
|
25
24
|
base32-crockford-checksum (0.2.3)
|
26
|
-
bergamasco (0.
|
25
|
+
bergamasco (0.2.3)
|
27
26
|
activesupport (~> 4.2, >= 4.2.5)
|
27
|
+
addressable (~> 2.3.8)
|
28
28
|
builder (~> 3.2, >= 3.2.2)
|
29
29
|
commonmarker (~> 0.14.0)
|
30
30
|
loofah (~> 2.0, >= 2.0.3)
|
@@ -73,7 +73,6 @@ GEM
|
|
73
73
|
mini_portile2 (~> 2.1.0)
|
74
74
|
oj (2.13.1)
|
75
75
|
pandoc-ruby (2.0.1)
|
76
|
-
public_suffix (2.0.4)
|
77
76
|
rack (2.0.1)
|
78
77
|
rack-test (0.6.3)
|
79
78
|
rack (>= 1.0)
|
data/cirneco.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
# Declary dependencies here, rather than in the Gemfile
|
18
18
|
s.add_dependency 'maremma', '~> 3.1'
|
19
|
-
s.add_dependency 'bergamasco', '~> 0.
|
19
|
+
s.add_dependency 'bergamasco', '~> 0.2'
|
20
20
|
s.add_dependency 'base32-crockford-checksum', '~> 0.2.2'
|
21
21
|
s.add_dependency 'nokogiri', '~> 1.6', '>= 1.6.8'
|
22
22
|
s.add_dependency 'builder', '~> 3.2', '>= 3.2.2'
|
data/lib/cirneco/utils.rb
CHANGED
@@ -57,8 +57,6 @@ module Cirneco
|
|
57
57
|
"DOI removed from #{filename}"
|
58
58
|
elsif updated_file != file
|
59
59
|
"DOI #{doi} added to #{filename}"
|
60
|
-
else
|
61
|
-
"DOI #{doi} found in #{filename}"
|
62
60
|
end
|
63
61
|
end
|
64
62
|
|
@@ -68,26 +66,78 @@ module Cirneco
|
|
68
66
|
end.join("\n")
|
69
67
|
end
|
70
68
|
|
71
|
-
def
|
72
|
-
|
69
|
+
def generate_metadata_for_work(filepath, options={})
|
70
|
+
metadata = Bergamasco::Markdown.read_yaml_for_doi_metadata(filepath, options.except(:number))
|
71
|
+
|
72
|
+
return "Error: required metadata missing" unless ["author", "title", "date", "summary"].all? { |k| metadata.key? k }
|
73
|
+
|
74
|
+
# read in optional yaml configuration file for site
|
75
|
+
sitepath = options[:sitepath] || ENV['SITE_SITEPATH']
|
76
|
+
site_options = sitepath.present? ? Bergamasco::Markdown.read_yaml(sitepath) : {}
|
77
|
+
|
78
|
+
# read in optional yaml configuration file for authors
|
79
|
+
authorpath = options[:authorpath] || ENV['SITE_AUTHORPATH']
|
80
|
+
author_options = authorpath.present? ? Bergamasco::Markdown.read_yaml(authorpath) : {}
|
81
|
+
|
82
|
+
# required metadata
|
83
|
+
prefix = options[:prefix] || ENV['PREFIX']
|
84
|
+
metadata["doi"] ||= encode_doi(prefix, options)
|
85
|
+
|
86
|
+
site_url = site_options["site_url"] || ENV['SITE_URL']
|
87
|
+
metadata["url"] ||= url_from_path(site_url, filepath)
|
88
|
+
|
89
|
+
metadata["creators"] = Array(metadata["author"]).map do |a|
|
90
|
+
author = author_options.fetch(a, {})
|
91
|
+
if author.present?
|
92
|
+
{ given_name: author["given"],
|
93
|
+
family_name: author["family"],
|
94
|
+
orcid: author["orcid"] }
|
95
|
+
else
|
96
|
+
{ literal: a }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
metadata["publisher"] = site_options["site_title"] || ENV['SITE_TITLE']
|
101
|
+
metadata["publication_year"] = metadata["date"][0..3].to_i
|
102
|
+
|
103
|
+
metadata["type"] ||= site_options["site_default_type"] || ENV['SITE_DEFAULT_TYPE'] || "BlogPosting"
|
104
|
+
resource_type_general = metadata["type"] == "Dataset" ? "Dataset" : "Text"
|
105
|
+
|
106
|
+
metadata["resource_type"] = { value: metadata["type"],
|
107
|
+
resource_type_general: resource_type_general }
|
108
|
+
|
109
|
+
# recommended metadata
|
110
|
+
metadata["descriptions"] = [{ value: metadata["summary"],
|
111
|
+
description_type: "Abstract" }]
|
73
112
|
|
74
|
-
|
113
|
+
# use default version 1.0
|
114
|
+
metadata["version"] ||= "1.0"
|
75
115
|
|
76
|
-
|
77
|
-
|
116
|
+
license_name = site_options.fetch("license", {}).fetch("name", nil) || ENV['SITE_LICENCE_NAME'] || "Creative Commons Attribution"
|
117
|
+
license_url = site_options.fetch("license", {}).fetch("url", nil) || ENV['SITE_LICENCE_URL'] || "https://creativecommons.org/licenses/by/4.0/"
|
118
|
+
metadata["rights_list"] = [{ value: license_name, rights_uri: license_url }]
|
78
119
|
|
79
|
-
|
80
|
-
resource_type_general = resource_type == "Dataset" ? "Dataset" : "Text"
|
120
|
+
metadata["subjects"] = Array(metadata["tags"]).select { |t| t != "featured" }
|
81
121
|
|
82
|
-
|
83
|
-
|
122
|
+
contributor = site_options["site_institution"] || ENV['SITE_INSTITUTION']
|
123
|
+
metadata["contributors"] = [{ literal: contributor, contributor_type: "HostingInstitution" }]
|
124
|
+
|
125
|
+
metadata = metadata.extract!(*%w(doi url creators title publisher
|
126
|
+
publication_year resource_type descriptions version rights_list subjects contributors
|
127
|
+
related_identifiers))
|
128
|
+
end
|
129
|
+
|
130
|
+
def url_from_path(site_url, filepath)
|
131
|
+
site_url.to_s.chomp("\\") + "/" + File.basename(filepath)[0..-9] + "/"
|
132
|
+
end
|
84
133
|
|
85
|
-
|
134
|
+
def create_work_from_metadata(metadata, options={})
|
135
|
+
work = Cirneco::Work.new(metadata)
|
86
136
|
|
87
|
-
|
88
|
-
|
137
|
+
filename = metadata["doi"].split("/", 2).last + ".xml"
|
138
|
+
IO.write(filename, work.data)
|
89
139
|
|
90
|
-
|
140
|
+
work
|
91
141
|
end
|
92
142
|
end
|
93
143
|
end
|
data/lib/cirneco/version.rb
CHANGED
data/lib/cirneco/work.rb
CHANGED
@@ -11,26 +11,27 @@ module Cirneco
|
|
11
11
|
include Cirneco::Api
|
12
12
|
include Cirneco::Utils
|
13
13
|
|
14
|
-
attr_accessor :doi, :creators, :title, :publisher, :publication_year, :resource_type, :version, :related_identifiers, :rights_list, :descriptions, :
|
14
|
+
attr_accessor :doi, :url, :creators, :title, :publisher, :publication_year, :resource_type, :version, :related_identifiers, :rights_list, :descriptions, :contributors, :subjects, :media, :username, :password, :validation_errors
|
15
|
+
|
16
|
+
def initialize(metadata, **options)
|
17
|
+
@doi = metadata.fetch("doi", nil)
|
18
|
+
@url = metadata.fetch("url", nil)
|
19
|
+
@creators = metadata.fetch("creators", nil)
|
20
|
+
@title = metadata.fetch("title", nil)
|
21
|
+
@publisher = metadata.fetch("publisher", nil)
|
22
|
+
@publication_year = metadata.fetch("publication_year", nil)
|
23
|
+
@resource_type = metadata.fetch("resource_type", nil)
|
24
|
+
@version = metadata.fetch("version", nil)
|
25
|
+
@rights_list = metadata.fetch("rights_list", nil)
|
26
|
+
@subjects = metadata.fetch("subjects", nil)
|
27
|
+
@descriptions = metadata.fetch("descriptions", nil)
|
28
|
+
@contributors = metadata.fetch("contributors", nil)
|
29
|
+
@related_identifiers = metadata.fetch("related_identifiers", nil)
|
15
30
|
|
16
|
-
def initialize(doi:, creators:, title:, publisher:, publication_year:, resource_type:, **options)
|
17
|
-
@doi = doi
|
18
|
-
@creators = creators
|
19
|
-
@title = title
|
20
|
-
@publisher = publisher
|
21
|
-
@publication_year = publication_year
|
22
|
-
@resource_type = resource_type
|
23
|
-
|
24
|
-
@url = options.fetch(:url, nil)
|
25
31
|
@media = options.fetch(:media, nil)
|
26
32
|
|
27
33
|
@username = options.fetch(:username, nil)
|
28
34
|
@password = options.fetch(:password, nil)
|
29
|
-
|
30
|
-
@version = options.fetch(:version, nil)
|
31
|
-
@rights_list = options.fetch(:rights_list, nil)
|
32
|
-
@descriptions = options.fetch(:descriptions, nil)
|
33
|
-
@related_identifiers = options.fetch(:related_identifiers, nil)
|
34
35
|
end
|
35
36
|
|
36
37
|
SCHEMA = File.expand_path("../../../resources/kernel-4.0/metadata.xsd", __FILE__)
|
@@ -55,8 +56,10 @@ module Cirneco
|
|
55
56
|
insert_titles(xml)
|
56
57
|
insert_publisher(xml)
|
57
58
|
insert_publication_year(xml)
|
58
|
-
insert_subjects(xml)
|
59
59
|
insert_resource_type(xml)
|
60
|
+
insert_subjects(xml)
|
61
|
+
insert_contributors(xml)
|
62
|
+
insert_related_identifiers(xml)
|
60
63
|
insert_version(xml)
|
61
64
|
insert_rights_list(xml)
|
62
65
|
insert_descriptions(xml)
|
@@ -69,22 +72,35 @@ module Cirneco
|
|
69
72
|
def insert_creators(xml)
|
70
73
|
return nil unless creators.present?
|
71
74
|
|
72
|
-
xml.
|
75
|
+
xml.creators do
|
73
76
|
creators.each do |creator|
|
74
77
|
xml.creator do
|
75
|
-
|
78
|
+
insert_person(xml, creator, "creator")
|
76
79
|
end
|
77
80
|
end
|
78
81
|
end
|
79
82
|
end
|
80
83
|
|
81
|
-
def
|
82
|
-
|
84
|
+
def insert_contributors(xml)
|
85
|
+
return nil unless contributors.present?
|
83
86
|
|
84
|
-
xml.
|
85
|
-
|
86
|
-
|
87
|
-
|
87
|
+
xml.contributors do
|
88
|
+
contributors.each do |contributor|
|
89
|
+
xml.contributor("contributorType" => contributor[:contributor_type]) do
|
90
|
+
insert_person(xml, contributor, "contributor")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def insert_person(xml, person, type)
|
97
|
+
person_name = [person[:family_name], person[:given_name], person[:literal]].compact.join(", ")
|
98
|
+
|
99
|
+
xml.send(:'creatorName', person_name) if type == "creator"
|
100
|
+
xml.send(:'contributorName', person_name) if type == "contributor"
|
101
|
+
xml.send(:'givenName', person[:given_name]) if person[:given_name].present?
|
102
|
+
xml.send(:'familyName', person[:family_name]) if person[:family_name].present?
|
103
|
+
xml.nameIdentifier(person[:orcid], 'schemeURI' => 'http://orcid.org/', 'nameIdentifierScheme' => 'ORCID') if person[:orcid].present?
|
88
104
|
end
|
89
105
|
|
90
106
|
def insert_titles(xml)
|
@@ -125,6 +141,16 @@ module Cirneco
|
|
125
141
|
xml.version(version)
|
126
142
|
end
|
127
143
|
|
144
|
+
def insert_related_identifiers(xml)
|
145
|
+
return xml unless related_identifiers.present?
|
146
|
+
|
147
|
+
xml.relatedIdentifiers do
|
148
|
+
related_identifiers.each do |related_identifier|
|
149
|
+
xml.relatedIdentifier(related_identifier[:value], 'relatedIdentifierType' => related_identifier[:related_identifier_type], 'relationType' => related_identifier[:relation_type])
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
128
154
|
def insert_rights_list(xml)
|
129
155
|
return xml unless rights_list.present?
|
130
156
|
|
@@ -145,34 +171,6 @@ module Cirneco
|
|
145
171
|
end
|
146
172
|
end
|
147
173
|
|
148
|
-
def insert_contributors(xml)
|
149
|
-
return nil unless contributors.present?
|
150
|
-
|
151
|
-
xml.send(:'work:contributors') do
|
152
|
-
contributors.each do |contributor|
|
153
|
-
xml.contributor do
|
154
|
-
insert_contributor(xml, contributor)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
def insert_contributor(xml, contributor)
|
161
|
-
if contributor[:orcid].present?
|
162
|
-
xml.send(:'common:contributor-orcid') do
|
163
|
-
xml.send(:'common:uri', contributor[:orcid])
|
164
|
-
xml.send(:'common:path', contributor[:orcid][17..-1])
|
165
|
-
xml.send(:'common:host', 'orcid.org')
|
166
|
-
end
|
167
|
-
end
|
168
|
-
xml.send(:'credit-name', contributor[:credit_name])
|
169
|
-
if contributor[:role]
|
170
|
-
xml.send(:'contributor-attributes') do
|
171
|
-
xml.send(:'contributor-role', contributor[:role])
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
174
|
def without_control(s)
|
177
175
|
r = ''
|
178
176
|
s.each_codepoint do |c|
|
data/spec/api_spec.rb
CHANGED
@@ -2,12 +2,19 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Cirneco::Work, vcr: true, :order => :defined do
|
4
4
|
let(:doi) { "10.23725/0000-03VC" }
|
5
|
+
let(:url) { "http://www.datacite.org" }
|
5
6
|
let(:creators) { [{ given_name: "Elizabeth", family_name: "Miller", orcid: "0000-0001-5000-0007", affiliation: "DataCite" }] }
|
6
7
|
let(:title) { "Full DataCite XML Example" }
|
7
8
|
let(:publisher) { "DataCite" }
|
8
9
|
let(:publication_year) { 2014 }
|
9
10
|
let(:resource_type) { { value: "XML", resource_type_general: "Software" } }
|
10
|
-
let(:
|
11
|
+
let(:metadata) { { "doi" => doi,
|
12
|
+
"url" => url,
|
13
|
+
"creators" => creators,
|
14
|
+
"title" => title,
|
15
|
+
"publisher" => publisher,
|
16
|
+
"publication_year" => publication_year,
|
17
|
+
"resource_type" => resource_type } }
|
11
18
|
let(:media) { [{ mime_type: "application/pdf", url:"http://www.datacite.org/cirneco-test.pdf" }]}
|
12
19
|
let(:username) { ENV['MDS_USERNAME'] }
|
13
20
|
let(:password) { ENV['MDS_PASSWORD'] }
|
@@ -15,16 +22,10 @@ describe Cirneco::Work, vcr: true, :order => :defined do
|
|
15
22
|
let(:fixture_path) { "spec/fixtures/" }
|
16
23
|
let(:samples_path) { "resources/kernel-4.0/samples/" }
|
17
24
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
publication_year: publication_year,
|
23
|
-
resource_type: resource_type,
|
24
|
-
url: url,
|
25
|
-
media: media,
|
26
|
-
username: username,
|
27
|
-
password: password) }
|
25
|
+
subject { Cirneco::Work.new(metadata,
|
26
|
+
media: media,
|
27
|
+
username: username,
|
28
|
+
password: password) }
|
28
29
|
|
29
30
|
describe "Metadata API" do
|
30
31
|
describe "get" do
|