cirneco 0.7.3 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +16 -1
- data/lib/cirneco/doi.rb +34 -2
- data/lib/cirneco/utils.rb +36 -0
- data/lib/cirneco/version.rb +1 -1
- data/spec/doi_spec.rb +14 -0
- data/spec/utils_spec.rb +13 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a82c5b7e10ab13eabc1913ab86f856bf1d28ee68
|
4
|
+
data.tar.gz: 38c61337cd19f6623ad835182baccaf2607f260f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dbc92ffc86523a271cb1c69e2af2778f56bf2b0ca4c61714f3825fcbc84ee52ce7af2b42cd9edd1ead906e9a2620feda76de8dfec622698b74b2ab8a7910cf1
|
7
|
+
data.tar.gz: 00c3050b139c651521e9e1d0c0a454002f0fff2ff5f5b1a018a0e8aefcc4a258a009c2c7a03c332c1bb762dbc3176a941d8bdce961b7680a056f5c2d6b8967e1
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -87,9 +87,14 @@ Generate a random DOI in the format `xxxx-xxxy` where `y` is the checksum
|
|
87
87
|
cirneco doi generate
|
88
88
|
```
|
89
89
|
|
90
|
+
Decode DOI
|
91
|
+
```
|
92
|
+
cirneco doi decode 10.5072/0000-03VC
|
93
|
+
```
|
94
|
+
|
90
95
|
Check DOI for valid checksum
|
91
96
|
```
|
92
|
-
cirneco doi check 10.
|
97
|
+
cirneco doi check 10.5072/0000-03VC
|
93
98
|
```
|
94
99
|
|
95
100
|
Mint a DOI with metadata from a markdown file with YAML frontmatter
|
@@ -102,6 +107,16 @@ Mint DOIs with metadata for all markdown files in a folder
|
|
102
107
|
cirneco doi mint /source/posts
|
103
108
|
```
|
104
109
|
|
110
|
+
Mint a DOI and hide metadata from a markdown file with YAML frontmatter
|
111
|
+
```
|
112
|
+
cirneco doi mint_and_hide /source/posts/cool-dois.html.md
|
113
|
+
```
|
114
|
+
|
115
|
+
Mint DOIs and hide metadata for all markdown files in a folder
|
116
|
+
```
|
117
|
+
cirneco doi mint_and_hide /source/posts
|
118
|
+
```
|
119
|
+
|
105
120
|
Hide DOI metadata for a markdown file with YAML frontmatter
|
106
121
|
```
|
107
122
|
cirneco doi hide /source/posts/cool-dois.html.md
|
data/lib/cirneco/doi.rb
CHANGED
@@ -54,6 +54,17 @@ module Cirneco
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
desc "decode DOI", "decode DOI encoded using Crockford base32 algorithm"
|
58
|
+
def decode(doi)
|
59
|
+
number = decode_doi(doi)
|
60
|
+
|
61
|
+
if number > 0
|
62
|
+
puts "DOI #{doi} was encoded with #{number}"
|
63
|
+
else
|
64
|
+
puts "DOI #{doi} could not be decoded"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
57
68
|
desc "check DOI", "check DOI using Crockford base32 checksum"
|
58
69
|
def check(doi)
|
59
70
|
if decode_doi(doi) > 0
|
@@ -63,7 +74,7 @@ module Cirneco
|
|
63
74
|
end
|
64
75
|
end
|
65
76
|
|
66
|
-
desc "mint
|
77
|
+
desc "mint DOCUMENT", "mint document"
|
67
78
|
method_option :sitepath, :default => ENV['SITE_SITEPATH']
|
68
79
|
method_option :authorpath, :default => ENV['SITE_AUTHORPATH']
|
69
80
|
method_option :referencespath, :default => ENV['SITE_REFERENCESPATH']
|
@@ -84,7 +95,28 @@ module Cirneco
|
|
84
95
|
puts response
|
85
96
|
end
|
86
97
|
|
87
|
-
desc "hide
|
98
|
+
desc "mint and hide DOCUMENT", "mint and hide document"
|
99
|
+
method_option :sitepath, :default => ENV['SITE_SITEPATH']
|
100
|
+
method_option :authorpath, :default => ENV['SITE_AUTHORPATH']
|
101
|
+
method_option :referencespath, :default => ENV['SITE_REFERENCESPATH']
|
102
|
+
method_option :csl, :default => ENV['SITE_CSLPATH']
|
103
|
+
method_option :number, :type => :numeric, :aliases => '-n'
|
104
|
+
method_option :username, :default => ENV['MDS_USERNAME']
|
105
|
+
method_option :password, :default => ENV['MDS_PASSWORD']
|
106
|
+
method_option :prefix, :default => ENV['PREFIX']
|
107
|
+
method_option :sandbox, :type => :boolean, :force => false
|
108
|
+
def mint_and_hide(filepath)
|
109
|
+
|
110
|
+
if File.directory?(filepath)
|
111
|
+
response = mint_and_hide_dois_for_all_files(filepath, options)
|
112
|
+
else
|
113
|
+
response = mint_and_hide_doi_for_file(filepath, options)
|
114
|
+
end
|
115
|
+
|
116
|
+
puts response
|
117
|
+
end
|
118
|
+
|
119
|
+
desc "hide DOCUMENT", "hide document"
|
88
120
|
method_option :sitepath, :default => ENV['SITE_SITEPATH']
|
89
121
|
method_option :authorpath, :default => ENV['SITE_AUTHORPATH']
|
90
122
|
method_option :referencespath, :default => ENV['SITE_REFERENCESPATH']
|
data/lib/cirneco/utils.rb
CHANGED
@@ -44,6 +44,23 @@ module Cirneco
|
|
44
44
|
"DOI #{new_metadata["doi"]} minted for #{filename}"
|
45
45
|
end
|
46
46
|
|
47
|
+
# currently only supports markdown files with YAML header
|
48
|
+
def mint_and_hide_doi_for_file(filepath, options={})
|
49
|
+
filename = File.basename(filepath)
|
50
|
+
return "File #{filename} ignored: not a markdown file" unless File.extname(filepath) == ".md"
|
51
|
+
|
52
|
+
old_metadata = Bergamasco::Markdown.read_yaml_for_doi_metadata(filepath)
|
53
|
+
return "DOI #{old_metadata["doi"]} not changed for #{filename}" if old_metadata["doi"] && old_metadata["published"]
|
54
|
+
|
55
|
+
metadata = generate_metadata_for_work(filepath, options)
|
56
|
+
work = post_and_hide_metadata_for_work(metadata, options)
|
57
|
+
|
58
|
+
# return "Errors for DOI #{metadata["doi"]}:\n#{work.validation_errors}" if work.validation_errors.present?
|
59
|
+
|
60
|
+
new_metadata = Bergamasco::Markdown.update_file(filepath, "doi" => metadata["doi"], "published" => false)
|
61
|
+
"DOI #{new_metadata["doi"]} minted and hidden for #{filename}"
|
62
|
+
end
|
63
|
+
|
47
64
|
# currently only supports markdown files with YAML header
|
48
65
|
# DOIs are never deleted, but we can remove the metadata from the DataCite index
|
49
66
|
def hide_doi_for_file(filepath, options={})
|
@@ -68,6 +85,12 @@ module Cirneco
|
|
68
85
|
end.join("\n")
|
69
86
|
end
|
70
87
|
|
88
|
+
def mint_and_hide_dois_for_all_files(folderpath, options={})
|
89
|
+
Dir.glob("#{folderpath}/*.md").map do |filepath|
|
90
|
+
mint_and_hide_doi_for_file(filepath, options)
|
91
|
+
end.join("\n")
|
92
|
+
end
|
93
|
+
|
71
94
|
def hide_dois_for_all_files(folderpath, options={})
|
72
95
|
Dir.glob("#{folderpath}/*.md").map do |filepath|
|
73
96
|
hide_doi_for_file(filepath, options)
|
@@ -194,6 +217,19 @@ module Cirneco
|
|
194
217
|
work.put_doi(metadata["doi"], options.merge(url: metadata["url"]))
|
195
218
|
end
|
196
219
|
|
220
|
+
def post_and_hide_metadata_for_work(metadata, options={})
|
221
|
+
work = Cirneco::Work.new(metadata)
|
222
|
+
return work.validation_errors if work.validation_errors.present?
|
223
|
+
|
224
|
+
response = work.post_metadata(work.data, options)
|
225
|
+
return response unless response.status == 201
|
226
|
+
|
227
|
+
response = work.put_doi(metadata["doi"], options.merge(url: metadata["url"]))
|
228
|
+
return response unless response.status == 201
|
229
|
+
|
230
|
+
work.delete_metadata(metadata["doi"], options)
|
231
|
+
end
|
232
|
+
|
197
233
|
def hide_metadata_for_work(metadata, options={})
|
198
234
|
work = Cirneco::Work.new(metadata)
|
199
235
|
return work.validation_errors if work.validation_errors.present?
|
data/lib/cirneco/version.rb
CHANGED
data/spec/doi_spec.rb
CHANGED
@@ -55,6 +55,10 @@ describe Cirneco::Doi do
|
|
55
55
|
expect { subject.generate }.to output("No PREFIX provided. Use --prefix option or PREFIX ENV variable\n").to_stdout
|
56
56
|
end
|
57
57
|
|
58
|
+
it 'decodes a doi' do
|
59
|
+
expect { subject.decode doi }.to output("DOI #{doi} was encoded with 123\n").to_stdout
|
60
|
+
end
|
61
|
+
|
58
62
|
it 'checks a doi' do
|
59
63
|
expect { subject.check doi }.to output("Checksum for #{doi} is valid\n").to_stdout
|
60
64
|
end
|
@@ -76,6 +80,11 @@ describe Cirneco::Doi do
|
|
76
80
|
expect { subject.hide filepath }.to output("DOI 10.5072/0000-03VC hidden for #{filename}\n").to_stdout
|
77
81
|
end
|
78
82
|
|
83
|
+
it 'mints and hides a doi' do
|
84
|
+
subject.options = { csl: csl, bibliography: bibliography }
|
85
|
+
expect { subject.mint_and_hide filepath }.to output("DOI 10.5072/0000-03VC minted and hidden for #{filename}\n").to_stdout
|
86
|
+
end
|
87
|
+
|
79
88
|
it 'mints dois for contents of a folder' do
|
80
89
|
subject.options = { csl: csl, bibliography: bibliography }
|
81
90
|
expect { subject.mint fixture_path }.to output("DOI 10.5072/0000-03VC minted for #{filename}\n").to_stdout
|
@@ -86,6 +95,11 @@ describe Cirneco::Doi do
|
|
86
95
|
expect { subject.hide fixture_path }.to output("DOI 10.5072/0000-03VC hidden for #{filename}\n").to_stdout
|
87
96
|
end
|
88
97
|
|
98
|
+
it 'mints and hides dois for contents of a folder' do
|
99
|
+
subject.options = { csl: csl, bibliography: bibliography }
|
100
|
+
expect { subject.mint_and_hide fixture_path }.to output("DOI 10.5072/0000-03VC minted and hidden for #{filename}\n").to_stdout
|
101
|
+
end
|
102
|
+
|
89
103
|
it 'should ignore non-markdown file for mint file' do
|
90
104
|
filename = 'cool-dois.yml'
|
91
105
|
expect { subject.mint fixture_path + filename }.to output("File #{filename} ignored: not a markdown file\n").to_stdout
|
data/spec/utils_spec.rb
CHANGED
@@ -56,6 +56,13 @@ describe Cirneco::DataCenter, vcr: true, :order => :defined do
|
|
56
56
|
expect(response).to eq("DOI 10.5072/0000-03VC hidden for cool-dois.html.md")
|
57
57
|
end
|
58
58
|
|
59
|
+
it 'should mint and hide for file' do
|
60
|
+
filepath = fixture_path + 'cool-dois.html.md'
|
61
|
+
number = 123
|
62
|
+
response = subject.mint_and_hide_doi_for_file(filepath, number: number, csl: csl, bibliography: bibliography)
|
63
|
+
expect(response).to eq("DOI 10.5072/0000-03VC minted and hidden for cool-dois.html.md")
|
64
|
+
end
|
65
|
+
|
59
66
|
it 'should mint for all files' do
|
60
67
|
number = 123
|
61
68
|
response = subject.mint_dois_for_all_files(fixture_path, number: number, csl: csl, bibliography: bibliography)
|
@@ -68,6 +75,12 @@ describe Cirneco::DataCenter, vcr: true, :order => :defined do
|
|
68
75
|
expect(response).to eq("DOI 10.5072/0000-03VC hidden for cool-dois.html.md")
|
69
76
|
end
|
70
77
|
|
78
|
+
it 'should mint and hide for all files' do
|
79
|
+
number = 123
|
80
|
+
response = subject.mint_and_hide_dois_for_all_files(fixture_path, number: number, csl: csl, bibliography: bibliography)
|
81
|
+
expect(response).to eq("DOI 10.5072/0000-03VC minted and hidden for cool-dois.html.md")
|
82
|
+
end
|
83
|
+
|
71
84
|
it 'should ignore non-markdown file for mint file' do
|
72
85
|
filepath = fixture_path + 'cool-dois.yml'
|
73
86
|
response = subject.mint_doi_for_file(filepath)
|