hyrax-doi 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []