hyrax 2.0.0.beta1 → 2.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -2
- data/app/actors/hyrax/actors/file_set_actor.rb +12 -15
- data/app/assets/javascripts/hyrax.js +6 -5
- data/app/assets/javascripts/hyrax/{app.js → app.js.erb} +12 -8
- data/app/assets/javascripts/hyrax/channels/notifications.js +0 -0
- data/app/assets/javascripts/hyrax/notification.es6 +19 -31
- data/app/channels/hyrax/application_cable/channel.rb +6 -0
- data/app/channels/hyrax/application_cable/connection.rb +30 -0
- data/app/channels/hyrax/notifications_channel.rb +15 -0
- data/app/controllers/hyrax/depositors_controller.rb +2 -2
- data/app/controllers/hyrax/notifications_controller.rb +2 -0
- data/app/controllers/hyrax/users_controller.rb +0 -7
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +27 -0
- data/app/jobs/import_url_job.rb +3 -1
- data/app/jobs/stream_notifications_job.rb +10 -0
- data/app/models/proxy_deposit_request.rb +2 -2
- data/app/models/user_mailbox.rb +19 -0
- data/app/services/hyrax/{message_user_service.rb → abstract_message_service.rb} +7 -4
- data/app/services/hyrax/batch_create_failure_service.rb +1 -1
- data/app/services/hyrax/batch_create_success_service.rb +1 -1
- data/app/services/hyrax/fixity_check_failure_service.rb +1 -1
- data/app/services/hyrax/import_url_failure_service.rb +1 -1
- data/app/services/hyrax/messenger_service.rb +8 -0
- data/app/services/hyrax/workflow/abstract_notification.rb +1 -1
- data/app/views/_user_util_links.html.erb +1 -1
- data/app/views/hyrax/homepage/index.html.erb +1 -1
- data/config/locales/hyrax.de.yml +5 -2
- data/config/locales/hyrax.en.yml +4 -1
- data/config/locales/hyrax.es.yml +4 -1
- data/config/locales/hyrax.fr.yml +5 -2
- data/config/locales/hyrax.it.yml +4 -1
- data/config/locales/hyrax.pt-BR.yml +5 -2
- data/config/locales/hyrax.zh.yml +5 -2
- data/config/routes.rb +4 -2
- data/db/migrate/20170905135339_add_preferred_locale_to_users.rb +5 -0
- data/lib/generators/hyrax/templates/config/authorities/licenses.yml +28 -10
- data/lib/generators/hyrax/templates/config/hyrax.rb +0 -3
- data/lib/hyrax/configuration.rb +0 -5
- data/lib/hyrax/engine.rb +5 -0
- data/lib/hyrax/version.rb +1 -1
- data/spec/actors/hyrax/actors/file_set_actor_spec.rb +74 -0
- data/spec/channels/hyrax/application_cable/channel_spec.rb +14 -0
- data/spec/channels/hyrax/application_cable/connection_spec.rb +31 -0
- data/spec/channels/hyrax/notifications_channel_spec.rb +45 -0
- data/spec/controllers/hyrax/notifications_controller_spec.rb +1 -0
- data/spec/helpers/blacklight_helper_spec.rb +4 -2
- data/spec/helpers/hyrax_helper_spec.rb +34 -4
- data/spec/jobs/import_url_job_spec.rb +1 -1
- data/spec/jobs/stream_notifications_job_spec.rb +30 -0
- data/spec/models/collection_spec.rb +13 -19
- data/spec/models/proxy_deposit_request_spec.rb +2 -1
- data/spec/models/user_mailbox_spec.rb +73 -0
- data/spec/services/hyrax/abstract_message_service_spec.rb +25 -0
- data/spec/services/hyrax/messenger_service_spec.rb +15 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +6 -0
- data/spec/views/_user_util_links.html.erb_spec.rb +3 -2
- data/spec/views/hyrax/homepage/index.html.erb_spec.rb +4 -0
- data/template.rb +1 -1
- metadata +23 -14
- data/app/assets/javascripts/hyrax/notifications.es6 +0 -63
- data/app/views/hyrax/users/_notify_number.html.erb +0 -8
- data/app/views/hyrax/users/notifications_number.json.jbuilder +0 -1
- data/app/views/kaminari/blacklight/_first_page.html.erb +0 -9
- data/app/views/kaminari/blacklight/_gap.html.erb +0 -8
- data/app/views/kaminari/blacklight/_last_page.html.erb +0 -9
- data/app/views/kaminari/blacklight/_next_page.html.erb +0 -9
- data/app/views/kaminari/blacklight/_page.html.erb +0 -10
- data/app/views/kaminari/blacklight/_paginator.html.erb +0 -19
- data/app/views/kaminari/blacklight/_prev_page.html.erb +0 -9
@@ -1,5 +1,5 @@
|
|
1
1
|
module Hyrax
|
2
|
-
class
|
2
|
+
class AbstractMessageService
|
3
3
|
attr_reader :file_set, :user
|
4
4
|
|
5
5
|
def initialize(file_set, user)
|
@@ -8,15 +8,18 @@ module Hyrax
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def call
|
11
|
-
|
11
|
+
Hyrax::MessengerService.deliver(job_user,
|
12
|
+
user,
|
13
|
+
message,
|
14
|
+
subject)
|
12
15
|
end
|
13
16
|
|
14
|
-
# Passed
|
17
|
+
# Passed to Hyrax::MessengerService, override to provide message body for event.
|
15
18
|
def message
|
16
19
|
raise "Override #message in the service class"
|
17
20
|
end
|
18
21
|
|
19
|
-
# Passed
|
22
|
+
# Passed to Hyrax::MessengerService, override to provide subject for event.
|
20
23
|
def subject
|
21
24
|
raise "Override #subject in the service class"
|
22
25
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<%= render 'shared/locale_picker' if available_translations.size > 1 %>
|
3
3
|
<% if user_signed_in? %>
|
4
4
|
<li>
|
5
|
-
<%=
|
5
|
+
<%= render_notifications(user: current_user) %>
|
6
6
|
</li>
|
7
7
|
<li class="dropdown">
|
8
8
|
<%= link_to hyrax.dashboard_profile_path(current_user), role: 'button', data: { toggle: 'dropdown' }, aria: { haspopup: true, expanded: false} do %>
|
data/config/locales/hyrax.de.yml
CHANGED
@@ -511,7 +511,7 @@ de:
|
|
511
511
|
user_activity: Benutzeraktivität
|
512
512
|
user_notifications: Benutzerbenachrichtigungen
|
513
513
|
view_files: Dateien ansehen
|
514
|
-
document_language:
|
514
|
+
document_language: de
|
515
515
|
edit_profile: Profil bearbeiten
|
516
516
|
embargoes:
|
517
517
|
edit:
|
@@ -697,7 +697,10 @@ de:
|
|
697
697
|
dashboard:
|
698
698
|
menu: Instrumententafel
|
699
699
|
language_switch: Sprache wechseln
|
700
|
-
notifications:
|
700
|
+
notifications:
|
701
|
+
many: Sie haben %{count} ungelesene Benachrichtigungen
|
702
|
+
one: Sie haben eine ungelesene Benachrichtigung
|
703
|
+
zero: Sie haben keine ungelesenen Benachrichtigungen
|
701
704
|
profile:
|
702
705
|
login: Anmeldung
|
703
706
|
logout: Ausloggen
|
data/config/locales/hyrax.en.yml
CHANGED
@@ -686,7 +686,10 @@ en:
|
|
686
686
|
dashboard:
|
687
687
|
menu: "Dashboard"
|
688
688
|
language_switch: "Switch language"
|
689
|
-
notifications:
|
689
|
+
notifications:
|
690
|
+
zero: "You have no unread notifications"
|
691
|
+
one: "You have one unread notification"
|
692
|
+
many: "You have %{count} unread notifications"
|
690
693
|
profile:
|
691
694
|
login: "Login"
|
692
695
|
logout: "Logout"
|
data/config/locales/hyrax.es.yml
CHANGED
@@ -694,7 +694,10 @@ es:
|
|
694
694
|
dashboard:
|
695
695
|
menu: Panel de Control
|
696
696
|
language_switch: Cambiar idioma
|
697
|
-
notifications:
|
697
|
+
notifications:
|
698
|
+
many: Tienes notificaciones no leídas de %{count}
|
699
|
+
one: Tienes una notificación no leída
|
700
|
+
zero: No tienes notificaciones no leídas.
|
698
701
|
profile:
|
699
702
|
login: Iniciar sesión
|
700
703
|
logout: Cerrar sesión
|
data/config/locales/hyrax.fr.yml
CHANGED
@@ -511,7 +511,7 @@ fr:
|
|
511
511
|
user_activity: Activité de l'utilisateur
|
512
512
|
user_notifications: Notifications de l'utilisateur
|
513
513
|
view_files: Afficher les fichiers
|
514
|
-
document_language:
|
514
|
+
document_language: fr
|
515
515
|
edit_profile: Editer le profil
|
516
516
|
embargoes:
|
517
517
|
edit:
|
@@ -697,7 +697,10 @@ fr:
|
|
697
697
|
dashboard:
|
698
698
|
menu: Tableau de bord
|
699
699
|
language_switch: Changer de langue
|
700
|
-
notifications:
|
700
|
+
notifications:
|
701
|
+
many: Vous avez des notifications non-lues %{count}
|
702
|
+
one: Vous avez une notification non lue
|
703
|
+
zero: Vous n'avez aucune notification non lue
|
701
704
|
profile:
|
702
705
|
login: S'identifier
|
703
706
|
logout: Connectez - Out
|
data/config/locales/hyrax.it.yml
CHANGED
@@ -697,7 +697,10 @@ it:
|
|
697
697
|
dashboard:
|
698
698
|
menu: Cruscotto
|
699
699
|
language_switch: Cambiare la lingua
|
700
|
-
notifications:
|
700
|
+
notifications:
|
701
|
+
many: Hai notifiche non letti %{count}
|
702
|
+
one: Hai una notifica non letti
|
703
|
+
zero: Non hai notifiche non letti
|
701
704
|
profile:
|
702
705
|
login: Accesso
|
703
706
|
logout: Logout
|
@@ -511,7 +511,7 @@ pt-BR:
|
|
511
511
|
user_activity: Atividade do usuário
|
512
512
|
user_notifications: Notificações do usuário
|
513
513
|
view_files: Ver arquivos
|
514
|
-
document_language:
|
514
|
+
document_language: pt-BR
|
515
515
|
edit_profile: Editar Perfil
|
516
516
|
embargoes:
|
517
517
|
edit:
|
@@ -697,7 +697,10 @@ pt-BR:
|
|
697
697
|
dashboard:
|
698
698
|
menu: painel de controle
|
699
699
|
language_switch: Alterar idioma
|
700
|
-
notifications:
|
700
|
+
notifications:
|
701
|
+
many: Você recebeu notificações não lidas do %{count}
|
702
|
+
one: Você tem uma notificação não lida
|
703
|
+
zero: Você não possui notificações não lidas
|
701
704
|
profile:
|
702
705
|
login: Entrar
|
703
706
|
logout: Sair
|
data/config/locales/hyrax.zh.yml
CHANGED
@@ -512,7 +512,7 @@ zh:
|
|
512
512
|
user_activity: 用户活动
|
513
513
|
user_notifications: 用户通知
|
514
514
|
view_files: 阅览文件
|
515
|
-
document_language:
|
515
|
+
document_language: zh
|
516
516
|
edit_profile: 编辑个人资料
|
517
517
|
embargoes:
|
518
518
|
edit:
|
@@ -700,7 +700,10 @@ zh:
|
|
700
700
|
dashboard:
|
701
701
|
menu: 控件板
|
702
702
|
language_switch: 转换语言
|
703
|
-
notifications:
|
703
|
+
notifications:
|
704
|
+
many: 您有%{count}未读通知
|
705
|
+
one: 您有一个未读通知
|
706
|
+
zero: 您没有未读通知
|
704
707
|
profile:
|
705
708
|
login: 登录
|
706
709
|
logout: 退出登录
|
data/config/routes.rb
CHANGED
@@ -42,8 +42,6 @@ Hyrax::Engine.routes.draw do
|
|
42
42
|
match 'batch_edits/:id' => 'batch_edits#add', :via => :put
|
43
43
|
match 'batch_edits' => 'batch_edits#destroy_collection', :via => :delete
|
44
44
|
|
45
|
-
# Notifications route for catalog index view
|
46
|
-
get 'users/notifications_number' => 'users#notifications_number', as: :user_notify
|
47
45
|
resources :batch_uploads, only: [:new, :create], controller: 'batch_uploads'
|
48
46
|
|
49
47
|
resources :collections, only: :show do # public landing show page
|
@@ -94,6 +92,10 @@ Hyrax::Engine.routes.draw do
|
|
94
92
|
delete 'delete_all'
|
95
93
|
end
|
96
94
|
end
|
95
|
+
namespace :notifications do
|
96
|
+
# WebSocket for notifications
|
97
|
+
mount ActionCable.server => 'endpoint', as: :endpoint
|
98
|
+
end
|
97
99
|
|
98
100
|
# User profile
|
99
101
|
resources :users, only: [:index, :show] do
|
@@ -1,28 +1,46 @@
|
|
1
1
|
terms:
|
2
2
|
- id: http://creativecommons.org/licenses/by/3.0/us/
|
3
3
|
term: Attribution 3.0 United States
|
4
|
-
active:
|
4
|
+
active: false
|
5
5
|
- id: http://creativecommons.org/licenses/by-sa/3.0/us/
|
6
6
|
term: Attribution-ShareAlike 3.0 United States
|
7
|
-
active:
|
7
|
+
active: false
|
8
8
|
- id: http://creativecommons.org/licenses/by-nc/3.0/us/
|
9
9
|
term: Attribution-NonCommercial 3.0 United States
|
10
|
-
active:
|
10
|
+
active: false
|
11
11
|
- id: http://creativecommons.org/licenses/by-nd/3.0/us/
|
12
12
|
term: Attribution-NoDerivs 3.0 United States
|
13
|
-
active:
|
13
|
+
active: false
|
14
14
|
- id: http://creativecommons.org/licenses/by-nc-nd/3.0/us/
|
15
15
|
term: Attribution-NonCommercial-NoDerivs 3.0 United States
|
16
|
-
active:
|
16
|
+
active: false
|
17
17
|
- id: http://creativecommons.org/licenses/by-nc-sa/3.0/us/
|
18
18
|
term: Attribution-NonCommercial-ShareAlike 3.0 United States
|
19
|
+
active: false
|
20
|
+
- id: http://www.europeana.eu/portal/rights/rr-r.html
|
21
|
+
term: All rights reserved
|
22
|
+
active: false
|
23
|
+
- id: https://creativecommons.org/licenses/by/4.0/
|
24
|
+
term: Creative Commons BY Attribution 4.0 International
|
19
25
|
active: true
|
20
|
-
- id:
|
21
|
-
term:
|
26
|
+
- id: https://creativecommons.org/licenses/by-sa/4.0/
|
27
|
+
term: Creative Commons BY-SA Attribution-ShareAlike 4.0 International
|
28
|
+
active: true
|
29
|
+
- id: https://creativecommons.org/licenses/by-nd/4.0/
|
30
|
+
term: Creative Commons BY-ND Attribution-NoDerivatives 4.0 International
|
31
|
+
active: true
|
32
|
+
- id: https://creativecommons.org/licenses/by-nc/4.0/
|
33
|
+
term: Creative Commons BY-NC Attribution-NonCommercial 4.0 International
|
34
|
+
active: true
|
35
|
+
- id: https://creativecommons.org/licenses/by-nc-nd/4.0/
|
36
|
+
term: Creative Commons BY-NC-ND Attribution-NonCommercial-NoDerivs 4.0 International
|
37
|
+
active: true
|
38
|
+
- id: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
39
|
+
term: Creative Commons BY-NC-SA Attribution-NonCommercial-ShareAlike 4.0 International
|
22
40
|
active: true
|
23
41
|
- id: http://creativecommons.org/publicdomain/zero/1.0/
|
24
|
-
term: CC0 1.0 Universal
|
42
|
+
term: Creative Commons CC0 1.0 Universal
|
25
43
|
active: true
|
26
|
-
- id: http://
|
27
|
-
term:
|
44
|
+
- id: http://creativecommons.org/publicdomain/mark/1.0/
|
45
|
+
term: Creative Commons Public Domain Mark 1.0
|
28
46
|
active: true
|
@@ -20,9 +20,6 @@ Hyrax.config do |config|
|
|
20
20
|
# How many notifications should be displayed on the dashboard
|
21
21
|
# config.max_notifications_for_dashboard = 5
|
22
22
|
|
23
|
-
# How often clients should poll for notifications
|
24
|
-
# config.notifications_update_poll_interval = 30.seconds
|
25
|
-
|
26
23
|
# How frequently should a file be fixity checked
|
27
24
|
# config.max_days_between_fixity_checks = 7
|
28
25
|
|
data/lib/hyrax/configuration.rb
CHANGED
@@ -261,11 +261,6 @@ module Hyrax
|
|
261
261
|
@max_notifications_for_dashboard ||= 5
|
262
262
|
end
|
263
263
|
|
264
|
-
attr_writer :notifications_update_poll_interval
|
265
|
-
def notifications_update_poll_interval
|
266
|
-
@notifications_update_poll_interval ||= 30.seconds
|
267
|
-
end
|
268
|
-
|
269
264
|
attr_writer :activity_to_show_default_seconds_since_now
|
270
265
|
def activity_to_show_default_seconds_since_now
|
271
266
|
@activity_to_show_default_seconds_since_now ||= 24 * 60 * 60
|
data/lib/hyrax/engine.rb
CHANGED
@@ -25,6 +25,11 @@ module Hyrax
|
|
25
25
|
"Blacklight::Exceptions::RecordNotFound" => :not_found
|
26
26
|
)
|
27
27
|
|
28
|
+
config.before_initialize do
|
29
|
+
# ActionCable should use Hyrax's connection class instead of app's
|
30
|
+
config.action_cable.connection_class = -> { 'Hyrax::ApplicationCable::Connection'.safe_constantize }
|
31
|
+
end
|
32
|
+
|
28
33
|
config.after_initialize do
|
29
34
|
begin
|
30
35
|
Hyrax.config.persist_registered_roles!
|
data/lib/hyrax/version.rb
CHANGED
@@ -133,6 +133,80 @@ RSpec.describe Hyrax::Actors::FileSetActor do
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
describe '#create_content when from_url is true' do
|
137
|
+
before do
|
138
|
+
expect(JobIoWrapper).to receive(:create_with_varied_file_handling!).with(any_args).once.and_call_original
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'calls ingest_file' do
|
142
|
+
actor.create_content(file, from_url: true)
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'when an alternative relationship is specified' do
|
146
|
+
before do
|
147
|
+
# Relationship must be declared before being used. Inject it here.
|
148
|
+
FileSet.class_eval do
|
149
|
+
directly_contains_one :remastered, through: :files, type: ::RDF::URI("http://otherpcdm.example.org/use#Remastered"), class_name: 'Hydra::PCDM::File'
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'calls ingest_file' do
|
154
|
+
actor.create_content(file, :remastered, from_url: true)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context 'using ::File' do
|
159
|
+
let(:file) { local_file }
|
160
|
+
|
161
|
+
before { actor.create_content(local_file, from_url: true) }
|
162
|
+
|
163
|
+
it 'sets the label and title' do
|
164
|
+
expect(file_set.label).to eq(File.basename(local_file))
|
165
|
+
expect(file_set.title).to eq([File.basename(local_file)])
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'gets the mime_type from original_file' do
|
169
|
+
expect(file_set.mime_type).to eq('image/png')
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context 'when file_set.title is empty and file_set.label is not' do
|
174
|
+
let(:long_name) do
|
175
|
+
'an absurdly long title that goes on way to long and messes up the display of the page which should not need ' \
|
176
|
+
'to be this big in order to show this impossibly long, long, long, oh so long string'
|
177
|
+
end
|
178
|
+
let(:short_name) { 'Nice Short Name' }
|
179
|
+
|
180
|
+
before do
|
181
|
+
allow(file_set).to receive(:label).and_return(short_name)
|
182
|
+
actor.create_content(file, from_url: true)
|
183
|
+
end
|
184
|
+
|
185
|
+
subject { file_set.title }
|
186
|
+
|
187
|
+
it { is_expected.to match_array [short_name] }
|
188
|
+
end
|
189
|
+
|
190
|
+
context 'when a label is already specified' do
|
191
|
+
let(:label) { 'test_file.png' }
|
192
|
+
let(:file_set) do
|
193
|
+
FileSet.new do |f|
|
194
|
+
f.apply_depositor_metadata(user.user_key)
|
195
|
+
f.label = label
|
196
|
+
end
|
197
|
+
end
|
198
|
+
let(:actor) { described_class.new(file_set, user) }
|
199
|
+
|
200
|
+
before do
|
201
|
+
actor.create_content(file, from_url: true)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "retains the object's original label" do
|
205
|
+
expect(file_set.label).to eql(label)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
136
210
|
describe "#update_metadata" do
|
137
211
|
it "is successful" do
|
138
212
|
expect(actor.update_metadata("title" => ["updated title"])).to be true
|
@@ -0,0 +1,14 @@
|
|
1
|
+
RSpec.describe Hyrax::ApplicationCable::Channel, no_clean: true do
|
2
|
+
subject { described_class.new(connection, identifier) }
|
3
|
+
|
4
|
+
let(:connection) { double('connection', identifiers: []) }
|
5
|
+
let(:identifier) { double }
|
6
|
+
|
7
|
+
describe 'behaves like an ActionCable::Channel::Base' do
|
8
|
+
it { is_expected.to respond_to(:perform_action) }
|
9
|
+
it { is_expected.to respond_to(:unsubscribe_from_channel) }
|
10
|
+
it { is_expected.to respond_to(:stop_all_streams) }
|
11
|
+
it { is_expected.to respond_to(:stream_for) }
|
12
|
+
it { is_expected.to respond_to(:stream_from) }
|
13
|
+
end
|
14
|
+
end
|