hyrax-doi 0.1.0

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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +65 -0
  3. data/Rakefile +23 -0
  4. data/app/actors/hyrax/actors/doi_actor.rb +50 -0
  5. data/app/assets/config/hyrax_doi_manifest.js +2 -0
  6. data/app/assets/javascripts/hyrax/doi/application.js +15 -0
  7. data/app/assets/stylesheets/hyrax/doi/application.css +15 -0
  8. data/app/controllers/hyrax/doi/application_controller.rb +15 -0
  9. data/app/controllers/hyrax/doi/hyrax_doi_controller.rb +91 -0
  10. data/app/forms/concerns/hyrax/doi/datacite_doi_form_behavior.rb +18 -0
  11. data/app/forms/concerns/hyrax/doi/doi_form_behavior.rb +18 -0
  12. data/app/helpers/hyrax/doi/helper_behavior.rb +9 -0
  13. data/app/helpers/hyrax/doi/work_form_helper.rb +15 -0
  14. data/app/helpers/hyrax/doi/work_show_helper.rb +12 -0
  15. data/app/jobs/hyrax/doi/application_job.rb +7 -0
  16. data/app/jobs/hyrax/doi/register_doi_job.rb +18 -0
  17. data/app/models/concerns/hyrax/doi/datacite_doi_behavior.rb +21 -0
  18. data/app/models/concerns/hyrax/doi/doi_behavior.rb +38 -0
  19. data/app/models/concerns/hyrax/doi/solr_document/datacite_doi_behavior.rb +14 -0
  20. data/app/models/concerns/hyrax/doi/solr_document/doi_behavior.rb +14 -0
  21. data/app/presenters/concerns/hyrax/doi/datacite_doi_presenter_behavior.rb +20 -0
  22. data/app/presenters/concerns/hyrax/doi/doi_presenter_behavior.rb +12 -0
  23. data/app/services/bolognese/readers/hyrax_work_reader.rb +99 -0
  24. data/app/services/bolognese/writers/hyrax_work_writer.rb +50 -0
  25. data/app/services/hyrax/doi/datacite_client.rb +138 -0
  26. data/app/services/hyrax/doi/datacite_registrar.rb +121 -0
  27. data/app/views/hyrax/base/_attribute_rows.html.erb +18 -0
  28. data/app/views/hyrax/base/_form_doi.html.erb +73 -0
  29. data/config/locales/hyrax_doi.en.yml +7 -0
  30. data/config/routes.rb +5 -0
  31. data/lib/generators/hyrax/doi/add_to_work_type_generator.rb +97 -0
  32. data/lib/generators/hyrax/doi/install_generator.rb +74 -0
  33. data/lib/generators/hyrax/doi/templates/config/initializers/hyrax-doi.rb +15 -0
  34. data/lib/hyrax/doi.rb +9 -0
  35. data/lib/hyrax/doi/engine.rb +28 -0
  36. data/lib/hyrax/doi/errors.rb +8 -0
  37. data/lib/hyrax/doi/spec/shared_specs.rb +9 -0
  38. data/lib/hyrax/doi/spec/shared_specs/datacite_doi_behavior.rb +40 -0
  39. data/lib/hyrax/doi/spec/shared_specs/datacite_doi_form_behavior.rb +17 -0
  40. data/lib/hyrax/doi/spec/shared_specs/datacite_doi_presenter_behavior.rb +39 -0
  41. data/lib/hyrax/doi/spec/shared_specs/doi_behavior.rb +63 -0
  42. data/lib/hyrax/doi/spec/shared_specs/doi_form_behavior.rb +17 -0
  43. data/lib/hyrax/doi/spec/shared_specs/doi_presenter_behavior.rb +19 -0
  44. data/lib/hyrax/doi/spec/shared_specs/solr_document/datacite_doi_behavior.rb +20 -0
  45. data/lib/hyrax/doi/spec/shared_specs/solr_document/doi_behavior.rb +20 -0
  46. data/lib/hyrax/doi/version.rb +6 -0
  47. data/lib/tasks/hyrax/doi_tasks.rake +5 -0
  48. metadata +319 -0
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+ RSpec.shared_examples "a DOI-enabled model" do
3
+ subject { work }
4
+
5
+ let(:properties) do
6
+ [:doi]
7
+ end
8
+
9
+ describe "properties" do
10
+ it "has DOI properties" do
11
+ properties.each do |property|
12
+ expect(subject).to respond_to(property)
13
+ end
14
+ end
15
+ end
16
+
17
+ describe 'validations' do
18
+ describe 'validates format of doi' do
19
+ let(:valid_dois) { ['10.1234/abc', '10.1234.100/abc-def', '10.1234/1', '10.1234/doi/with/more/slashes'] }
20
+ let(:invalid_dois) { ['10.123/abc', 'https://doi.org/10.1234/abc', '10.1234/abc def', ''] }
21
+
22
+ it 'accepts valid dois' do
23
+ expect(subject).to allow_value([]).for(:doi)
24
+ expect(subject).to allow_value(nil).for(:doi)
25
+ expect(subject).to allow_value(valid_dois).for(:doi)
26
+ end
27
+
28
+ it 'rejects invalid dois' do
29
+ invalid_dois.each do |invalid_doi|
30
+ expect(subject).not_to allow_values([invalid_doi]).for(:doi)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ describe 'to_solr' do
37
+ let(:solr_doc) { subject.to_solr }
38
+
39
+ let(:solr_fields) do
40
+ [:doi_ssi]
41
+ end
42
+
43
+ before do
44
+ work.doi = ["10.1234/abc"]
45
+ end
46
+
47
+ it 'has solr fields' do
48
+ solr_fields.each do |field|
49
+ expect(solr_doc.fetch(field.to_s)).not_to be_blank
50
+ end
51
+ end
52
+ end
53
+
54
+ describe 'methods' do
55
+ it "doi_registrar is string or nil" do
56
+ expect(subject.doi_registrar).to be_a(String).or be_nil
57
+ end
58
+
59
+ it 'doi_registrar_opts is a hash' do
60
+ expect(subject.doi_registrar_opts).to be_a Hash
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ RSpec.shared_examples "a DOI-enabled form" do
3
+ subject { form }
4
+
5
+ describe "properties" do
6
+ it { is_expected.to delegate_method(:doi).to(:model) }
7
+
8
+ it 'includes properties in the list of terms' do
9
+ expect(subject.terms).to include(:doi)
10
+ end
11
+
12
+ it 'does not include properties in primary or secondary' do
13
+ expect(subject.primary_terms).not_to include(:doi)
14
+ expect(subject.secondary_terms).not_to include(:doi)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ RSpec.shared_examples "a DOI-enabled presenter" do
3
+ subject { presenter }
4
+
5
+ let(:presenter) { presenter_class.new(solr_document, nil, nil) }
6
+ let(:solr_document) { instance_double(solr_document_class) }
7
+
8
+ describe 'doi' do
9
+ let(:doi) { '10.1234/abc' }
10
+
11
+ before do
12
+ allow(solr_document).to receive(:doi).and_return(doi)
13
+ end
14
+
15
+ it 'returns a doi url' do
16
+ expect(subject.doi).to eq "https://doi.org/#{subject.solr_document.doi}"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ RSpec.shared_examples "a DataCite DOI-enabled solr document" do
3
+ let(:document) { solr_document_class.new(attributes) }
4
+ let(:attributes) { {} }
5
+
6
+ describe "doi_status_when_pubic" do
7
+ it 'returns nil if not present' do
8
+ expect(document.doi_status_when_public).to eq nil
9
+ end
10
+
11
+ context 'when present' do
12
+ let(:doi_status_when_public) { 'findable' }
13
+ let(:attributes) { { doi_status_when_public_ssi: doi_status_when_public } }
14
+
15
+ it 'returns doi_status_when_public' do
16
+ expect(document.doi_status_when_public).to eq doi_status_when_public
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ RSpec.shared_examples "a DOI-enabled solr document" do
3
+ let(:document) { solr_document_class.new(attributes) }
4
+ let(:attributes) { {} }
5
+
6
+ describe "doi" do
7
+ it 'returns nil if not present' do
8
+ expect(document.doi).to eq nil
9
+ end
10
+
11
+ context 'when present' do
12
+ let(:doi) { '10.1234/abc' }
13
+ let(:attributes) { { doi_ssi: doi } }
14
+
15
+ it 'returns the doi' do
16
+ expect(document.doi).to eq doi
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Hyrax
3
+ module DOI
4
+ VERSION = '0.1.0'
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # desc "Explaining what the task does"
3
+ # task :hyrax_doi do
4
+ # # Task goes here
5
+ # end
metadata ADDED
@@ -0,0 +1,319 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hyrax-doi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Colvard
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.2.4
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.2.4.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 5.2.4
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.2.4.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: hyrax
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.9'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.9'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bolognese
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.8'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.8.6
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.8'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.8.6
67
+ - !ruby/object:Gem::Dependency
68
+ name: ammeter
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: capybara
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: chromedriver-helper
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '2.1'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '2.1'
109
+ - !ruby/object:Gem::Dependency
110
+ name: bixby
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ - !ruby/object:Gem::Dependency
124
+ name: factory_bot_rails
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: pg
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: rspec_junit_formatter
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ - !ruby/object:Gem::Dependency
166
+ name: rspec-rails
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: shoulda-matchers
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ - !ruby/object:Gem::Dependency
194
+ name: webdrivers
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '4.0'
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - "~>"
205
+ - !ruby/object:Gem::Version
206
+ version: '4.0'
207
+ - !ruby/object:Gem::Dependency
208
+ name: webmock
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ - !ruby/object:Gem::Dependency
222
+ name: simplecov
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - '='
226
+ - !ruby/object:Gem::Version
227
+ version: 0.17.1
228
+ - - "<"
229
+ - !ruby/object:Gem::Version
230
+ version: '0.18'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - '='
236
+ - !ruby/object:Gem::Version
237
+ version: 0.17.1
238
+ - - "<"
239
+ - !ruby/object:Gem::Version
240
+ version: '0.18'
241
+ description: Tools for working with DOIs in Hyrax including model attributes, minting,
242
+ and fetching descriptive metadata.
243
+ email:
244
+ - chris.colvard@gmail.com
245
+ executables: []
246
+ extensions: []
247
+ extra_rdoc_files: []
248
+ files:
249
+ - README.md
250
+ - Rakefile
251
+ - app/actors/hyrax/actors/doi_actor.rb
252
+ - app/assets/config/hyrax_doi_manifest.js
253
+ - app/assets/javascripts/hyrax/doi/application.js
254
+ - app/assets/stylesheets/hyrax/doi/application.css
255
+ - app/controllers/hyrax/doi/application_controller.rb
256
+ - app/controllers/hyrax/doi/hyrax_doi_controller.rb
257
+ - app/forms/concerns/hyrax/doi/datacite_doi_form_behavior.rb
258
+ - app/forms/concerns/hyrax/doi/doi_form_behavior.rb
259
+ - app/helpers/hyrax/doi/helper_behavior.rb
260
+ - app/helpers/hyrax/doi/work_form_helper.rb
261
+ - app/helpers/hyrax/doi/work_show_helper.rb
262
+ - app/jobs/hyrax/doi/application_job.rb
263
+ - app/jobs/hyrax/doi/register_doi_job.rb
264
+ - app/models/concerns/hyrax/doi/datacite_doi_behavior.rb
265
+ - app/models/concerns/hyrax/doi/doi_behavior.rb
266
+ - app/models/concerns/hyrax/doi/solr_document/datacite_doi_behavior.rb
267
+ - app/models/concerns/hyrax/doi/solr_document/doi_behavior.rb
268
+ - app/presenters/concerns/hyrax/doi/datacite_doi_presenter_behavior.rb
269
+ - app/presenters/concerns/hyrax/doi/doi_presenter_behavior.rb
270
+ - app/services/bolognese/readers/hyrax_work_reader.rb
271
+ - app/services/bolognese/writers/hyrax_work_writer.rb
272
+ - app/services/hyrax/doi/datacite_client.rb
273
+ - app/services/hyrax/doi/datacite_registrar.rb
274
+ - app/views/hyrax/base/_attribute_rows.html.erb
275
+ - app/views/hyrax/base/_form_doi.html.erb
276
+ - config/locales/hyrax_doi.en.yml
277
+ - config/routes.rb
278
+ - lib/generators/hyrax/doi/add_to_work_type_generator.rb
279
+ - lib/generators/hyrax/doi/install_generator.rb
280
+ - lib/generators/hyrax/doi/templates/config/initializers/hyrax-doi.rb
281
+ - lib/hyrax/doi.rb
282
+ - lib/hyrax/doi/engine.rb
283
+ - lib/hyrax/doi/errors.rb
284
+ - lib/hyrax/doi/spec/shared_specs.rb
285
+ - lib/hyrax/doi/spec/shared_specs/datacite_doi_behavior.rb
286
+ - lib/hyrax/doi/spec/shared_specs/datacite_doi_form_behavior.rb
287
+ - lib/hyrax/doi/spec/shared_specs/datacite_doi_presenter_behavior.rb
288
+ - lib/hyrax/doi/spec/shared_specs/doi_behavior.rb
289
+ - lib/hyrax/doi/spec/shared_specs/doi_form_behavior.rb
290
+ - lib/hyrax/doi/spec/shared_specs/doi_presenter_behavior.rb
291
+ - lib/hyrax/doi/spec/shared_specs/solr_document/datacite_doi_behavior.rb
292
+ - lib/hyrax/doi/spec/shared_specs/solr_document/doi_behavior.rb
293
+ - lib/hyrax/doi/version.rb
294
+ - lib/tasks/hyrax/doi_tasks.rake
295
+ homepage: ''
296
+ licenses:
297
+ - MIT
298
+ metadata:
299
+ allowed_push_host: https://rubygems.org
300
+ post_install_message:
301
+ rdoc_options: []
302
+ require_paths:
303
+ - lib
304
+ required_ruby_version: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: '0'
309
+ required_rubygems_version: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ requirements: []
315
+ rubygems_version: 3.1.2
316
+ signing_key:
317
+ specification_version: 4
318
+ summary: Hyrax plugin for working with DOIs.
319
+ test_files: []