sufia 6.2.0 → 6.3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +146 -0
- data/.travis.yml +4 -7
- data/Gemfile +2 -0
- data/History.md +29 -1
- data/README.md +25 -9
- data/SUFIA_VERSION +1 -1
- data/app/assets/stylesheets/sufia/_collections.scss +15 -0
- data/app/assets/stylesheets/sufia/_file-listing.scss +7 -0
- data/app/assets/stylesheets/sufia/_home-page.scss +10 -0
- data/app/builders/sufia/bootstrap_breadcrumbs_builder.rb +3 -5
- data/app/controllers/admin/stats_controller.rb +1 -76
- data/app/controllers/api/items_controller.rb +4 -6
- data/app/controllers/api/zotero_controller.rb +5 -5
- data/app/controllers/authorities_controller.rb +5 -1
- data/app/controllers/batch_edits_controller.rb +3 -3
- data/app/controllers/concerns/sufia/admin/depositor_stats.rb +41 -0
- data/app/controllers/concerns/sufia/admin/stats_behavior.rb +94 -0
- data/app/controllers/concerns/sufia/batch_controller_behavior.rb +16 -18
- data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +54 -56
- data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -6
- data/app/controllers/concerns/sufia/collections_controller_behavior.rb +39 -39
- data/app/controllers/concerns/sufia/controller.rb +10 -10
- data/app/controllers/concerns/sufia/dashboard_controller_behavior.rb +17 -18
- data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +9 -12
- data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +6 -7
- data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +39 -40
- data/app/controllers/concerns/sufia/files_controller/upload_complete_behavior.rb +1 -1
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +109 -110
- data/app/controllers/concerns/sufia/homepage_controller.rb +8 -8
- data/app/controllers/concerns/sufia/my_controller_behavior.rb +13 -10
- data/app/controllers/concerns/sufia/single_use_links_controller_behavior.rb +11 -14
- data/app/controllers/concerns/sufia/single_use_links_viewer_controller_behavior.rb +27 -21
- data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +17 -17
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +54 -54
- data/app/controllers/contact_form_controller.rb +1 -1
- data/app/controllers/content_blocks_controller.rb +11 -12
- data/app/controllers/directory_controller.rb +2 -3
- data/app/controllers/featured_work_lists_controller.rb +1 -1
- data/app/controllers/featured_works_controller.rb +2 -4
- data/app/controllers/homepage_controller.rb +1 -2
- data/app/controllers/mailbox_controller.rb +12 -32
- data/app/controllers/my/collections_controller.rb +3 -4
- data/app/controllers/my/files_controller.rb +4 -6
- data/app/controllers/my/highlights_controller.rb +4 -6
- data/app/controllers/my/shares_controller.rb +3 -5
- data/app/controllers/pages_controller.rb +1 -3
- data/app/controllers/single_use_links_controller.rb +0 -1
- data/app/controllers/single_use_links_viewer_controller.rb +0 -1
- data/app/controllers/static_controller.rb +1 -0
- data/app/forms/sufia/forms/collection_edit_form.rb +2 -2
- data/app/helpers/batch_edits_helper.rb +1 -3
- data/app/helpers/content_block_helper.rb +7 -8
- data/app/helpers/generic_file_helper.rb +23 -24
- data/app/helpers/sufia/blacklight_override.rb +6 -7
- data/app/helpers/sufia/dashboard_helper_behavior.rb +4 -7
- data/app/helpers/sufia/permissions_helper.rb +3 -4
- data/app/helpers/sufia/sufia_helper_behavior.rb +30 -29
- data/app/helpers/trophy_helper.rb +15 -15
- data/app/inputs/select_with_modal_help_input.rb +3 -3
- data/app/inputs/with_help_icon.rb +4 -4
- data/app/jobs/content_delete_event_job.rb +0 -1
- data/app/jobs/content_depositor_change_event_job.rb +1 -2
- data/app/jobs/event_job.rb +0 -1
- data/app/jobs/user_unfollow_event_job.rb +1 -0
- data/app/models/concerns/sufia/solr_document_behavior.rb +1 -2
- data/app/models/contact_form.rb +6 -6
- data/app/models/content_block.rb +1 -2
- data/app/models/featured_work_list.rb +3 -5
- data/app/models/user_mailbox.rb +44 -0
- data/app/presenters/sufia/collection_presenter.rb +6 -8
- data/app/presenters/sufia/generic_file_presenter.rb +2 -2
- data/app/presenters/sufia/presenter_renderer.rb +2 -2
- data/app/presenters/sufia/version_list_presenter.rb +1 -1
- data/app/presenters/sufia/version_presenter.rb +3 -6
- data/app/search_builders/deposit_search_builder.rb +19 -0
- data/app/search_builders/sufia/my_search_builder_behavior.rb +1 -2
- data/app/search_builders/sufia/search_builder.rb +1 -3
- data/app/uploaders/tinymce_asset_uploader.rb +0 -2
- data/app/views/_controls.html.erb +5 -5
- data/app/views/admin/stats/_deposits.html.erb +19 -0
- data/app/views/admin/stats/index.html.erb +2 -0
- data/app/views/batch_edits/edit.html.erb +2 -2
- data/app/views/collections/_edit_actions.html.erb +3 -3
- data/app/views/collections/_form_for_select_collection.html.erb +2 -2
- data/app/views/collections/_sort_and_per_page.html.erb +12 -9
- data/app/views/collections/_view_type_group.html.erb +1 -1
- data/app/views/collections/edit.html.erb +5 -5
- data/app/views/collections/show.html.erb +7 -6
- data/app/views/homepage/_announcement.html.erb +5 -0
- data/app/views/homepage/_home.html.erb +1 -0
- data/app/views/my/_sort_and_per_page.html.erb +14 -10
- data/app/views/my/index.html.erb +1 -1
- data/app/views/pages/show.html.erb +0 -2
- data/app/views/single_use_links/new_download.html.erb +1 -1
- data/app/views/single_use_links_viewer/show.html.erb +1 -1
- data/app/views/users/_notify_link.html.erb +1 -1
- data/app/views/users/_notify_number.html.erb +2 -2
- data/config/initializers/simple_form.rb +1 -1
- data/config/initializers/simple_form_bootstrap.rb +1 -1
- data/config/locales/sufia.en.yml +4 -0
- data/config/routes.rb +2 -3
- data/lib/generators/sufia/admin_stat_generator.rb +0 -3
- data/lib/generators/sufia/install_generator.rb +8 -9
- data/lib/generators/sufia/templates/catalog_controller.rb +2 -3
- data/lib/generators/sufia/templates/config/action_dispatch_http_upload_monkey_patch.rb +1 -0
- data/lib/generators/sufia/upgrade400_generator.rb +9 -9
- data/lib/generators/sufia/upgrade600_generator.rb +1 -4
- data/lib/sufia.rb +2 -2
- data/lib/sufia/arkivo/actor.rb +1 -1
- data/lib/sufia/arkivo/create_subscription_job.rb +30 -30
- data/lib/sufia/arkivo/metadata_munger.rb +7 -7
- data/lib/sufia/arkivo/schema_validator.rb +1 -1
- data/lib/sufia/single_use_error.rb +0 -1
- data/lib/sufia/version.rb +1 -1
- data/lib/sufia/zotero/config.rb +13 -13
- data/spec/actors/generic_file/actor_spec.rb +17 -18
- data/spec/controllers/admin_stats_controller_spec.rb +56 -5
- data/spec/controllers/api/zotero_controller_spec.rb +10 -9
- data/spec/controllers/authorities_controller_spec.rb +8 -8
- data/spec/controllers/batch_controller_spec.rb +19 -20
- data/spec/controllers/batch_edits_controller_spec.rb +8 -9
- data/spec/controllers/catalog_controller_spec.rb +7 -9
- data/spec/controllers/collections_controller_spec.rb +30 -32
- data/spec/controllers/content_blocks_controller_spec.rb +4 -4
- data/spec/controllers/dashboard_controller_spec.rb +12 -12
- data/spec/controllers/depositors_controller_spec.rb +8 -8
- data/spec/controllers/downloads_controller_spec.rb +10 -11
- data/spec/controllers/featured_work_lists_controller_spec.rb +4 -4
- data/spec/controllers/featured_works_controller_spec.rb +11 -12
- data/spec/controllers/generic_files_controller_spec.rb +154 -125
- data/spec/controllers/homepage_controller_spec.rb +22 -15
- data/spec/controllers/mailbox_controller_spec.rb +20 -36
- data/spec/controllers/my/collections_controller_spec.rb +4 -5
- data/spec/controllers/my/files_controller_spec.rb +10 -11
- data/spec/controllers/my/highlights_controller_spec.rb +4 -5
- data/spec/controllers/my/shares_controller_spec.rb +12 -14
- data/spec/controllers/my_controller_spec.rb +1 -3
- data/spec/controllers/pages_controller_spec.rb +4 -4
- data/spec/controllers/single_use_links_controller_spec.rb +1 -3
- data/spec/controllers/single_use_links_viewer_controller_spec.rb +1 -2
- data/spec/controllers/static_controller_spec.rb +1 -1
- data/spec/controllers/tinymce_assets_controller_spec.rb +8 -9
- data/spec/controllers/transfers_controller_spec.rb +19 -19
- data/spec/controllers/users_controller_spec.rb +33 -35
- data/spec/factories/api_items.rb +2 -2
- data/spec/factories/content_blocks.rb +1 -1
- data/spec/factories/featured_works.rb +1 -1
- data/spec/factories/generic_files.rb +3 -3
- data/spec/factories/users.rb +7 -8
- data/spec/features/browse_dashboard_files_spec.rb +14 -18
- data/spec/features/browse_files_spec.rb +3 -4
- data/spec/features/catalog_search_spec.rb +3 -5
- data/spec/features/cloud_upload_spec.rb +2 -2
- data/spec/features/collection_spec.rb +21 -21
- data/spec/features/contact_form_spec.rb +10 -11
- data/spec/features/display_dashboard_spec.rb +5 -9
- data/spec/features/edit_file_spec.rb +8 -9
- data/spec/features/featured_item_spec.rb +1 -1
- data/spec/features/ingest_upload_files_spec.rb +5 -5
- data/spec/features/notifications_spec.rb +2 -6
- data/spec/features/ownership_transfer_spec.rb +2 -2
- data/spec/features/proxy_spec.rb +2 -2
- data/spec/features/search_spec.rb +3 -4
- data/spec/features/single_use_links_spec.rb +1 -1
- data/spec/features/users_spec.rb +4 -5
- data/spec/forms/collection_edit_form_spec.rb +2 -2
- data/spec/forms/generic_file_edit_form_spec.rb +6 -7
- data/spec/helpers/batch_edits_helper_spec.rb +9 -13
- data/spec/helpers/content_block_helper_spec.rb +3 -3
- data/spec/helpers/dashboard_helper_spec.rb +19 -24
- data/spec/helpers/generic_file_helper_spec.rb +5 -7
- data/spec/helpers/sufia_helper_spec.rb +43 -54
- data/spec/helpers/trophy_helper_spec.rb +5 -5
- data/spec/inputs/multi_value_with_help_input_spec.rb +1 -2
- data/spec/inputs/select_with_help_input_spec.rb +19 -15
- data/spec/javascripts/jasmine_spec.rb +4 -5
- data/spec/javascripts/support/jasmine_helper.rb +9 -9
- data/spec/jobs/active_fedora_id_based_job_spec.rb +7 -5
- data/spec/jobs/audit_job_spec.rb +7 -7
- data/spec/jobs/batch_update_job_spec.rb +5 -6
- data/spec/jobs/characterize_job_spec.rb +1 -1
- data/spec/jobs/content_depositor_change_event_job_spec.rb +1 -1
- data/spec/jobs/create_derivatives_job_spec.rb +5 -5
- data/spec/jobs/event_jobs_spec.rb +16 -16
- data/spec/jobs/import_url_job_spec.rb +36 -5
- data/spec/jobs/ingest_local_file_job_spec.rb +31 -20
- data/spec/jobs/sufia_resque_queue_spec.rb +1 -1
- data/spec/lib/sufia/analytics_spec.rb +0 -1
- data/spec/lib/sufia/arkivo/actor_spec.rb +6 -6
- data/spec/lib/sufia/arkivo/schema_validator_spec.rb +18 -18
- data/spec/lib/sufia/breadcrumbs_spec.rb +5 -6
- data/spec/lib/sufia/messages_spec.rb +11 -12
- data/spec/lib/sufia/readable_permissions_spec.rb +8 -10
- data/spec/lib/sufia/upload_complete_behavior_spec.rb +6 -7
- data/spec/lib/sufia/user_stat_importer_spec.rb +30 -33
- data/spec/lib/sufia/writable_permissions_spec.rb +1 -3
- data/spec/lib/sufia/zotero/config_spec.rb +4 -6
- data/spec/models/ability_spec.rb +11 -9
- data/spec/models/batch_spec.rb +13 -13
- data/spec/models/characterization_spec.rb +2 -3
- data/spec/models/checksum_audit_log_spec.rb +18 -19
- data/spec/models/collection_spec.rb +11 -12
- data/spec/models/content_block_spec.rb +33 -22
- data/spec/models/download_spec.rb +3 -5
- data/spec/models/featured_work_list_spec.rb +3 -3
- data/spec/models/featured_work_spec.rb +12 -14
- data/spec/models/file_content_datastream_spec.rb +9 -7
- data/spec/models/file_download_stat_spec.rb +34 -40
- data/spec/models/file_usage_spec.rb +46 -52
- data/spec/models/file_view_stat_spec.rb +35 -41
- data/spec/models/fits_datastream_spec.rb +23 -25
- data/spec/models/generic_file/visibility_spec.rb +10 -5
- data/spec/models/generic_file_spec.rb +86 -88
- data/spec/models/geo_names_resource_spec.rb +3 -5
- data/spec/models/local_authority_spec.rb +30 -33
- data/spec/models/pageview_spec.rb +3 -3
- data/spec/models/proxy_deposit_request_spec.rb +3 -3
- data/spec/models/single_use_link_spec.rb +36 -36
- data/spec/models/solr_document_spec.rb +3 -6
- data/spec/models/trophy_spec.rb +8 -9
- data/spec/models/user_mailbox_spec.rb +62 -0
- data/spec/models/user_spec.rb +28 -29
- data/spec/presenters/presenter_renderer_spec.rb +1 -1
- data/spec/presenters/sufia/generic_file_presenter_spec.rb +5 -5
- data/spec/presenters/sufia/version_list_presenter_spec.rb +2 -2
- data/spec/presenters/sufia/version_presenter_spec.rb +1 -1
- data/spec/routing/featured_works_route_spec.rb +4 -4
- data/spec/routing/ownership_transfers_route_spec.rb +1 -1
- data/spec/routing/route_spec.rb +89 -89
- data/spec/services/generic_file_audit_service_spec.rb +8 -8
- data/spec/services/repository_audit_service_spec.rb +7 -3
- data/spec/spec_helper.rb +5 -4
- data/spec/support/features/session_helpers.rb +1 -1
- data/spec/support/input_support.rb +1 -2
- data/spec/support/rake.rb +1 -1
- data/spec/support/selectors.rb +1 -6
- data/spec/support/statistic_helper.rb +1 -1
- data/spec/support/uploaded_file_monkeypatch.rb +1 -1
- data/spec/tasks/rake_spec.rb +3 -5
- data/spec/views/admin/stats/index.html.erb_spec.rb +16 -16
- data/spec/views/batch/edit.html.erb_spec.rb +1 -3
- data/spec/views/batch_edits/check_all_spec.rb +5 -5
- data/spec/views/batch_edits/edit.html.erb_spec.rb +1 -3
- data/spec/views/catalog/index.html.erb_spec.rb +1 -3
- data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +4 -5
- data/spec/views/collections/_form.html.erb_spec.rb +5 -3
- data/spec/views/collections/_show_descriptions.html.erb_spec.rb +7 -8
- data/spec/views/collections/_show_document_list.erb_spec.rb +4 -6
- data/spec/views/dashboard/index_spec.rb +14 -21
- data/spec/views/generic_file/_browse_everything.html.erb_spec.rb +2 -2
- data/spec/views/generic_file/_permission_form.html.erb_spec.rb +8 -9
- data/spec/views/generic_file/edit.html.erb_spec.rb +7 -7
- data/spec/views/generic_file/show.html.erb_spec.rb +24 -25
- data/spec/views/generic_file/stats.html.erb_spec.rb +19 -19
- data/spec/views/homepage/_announcement.html.erb_spec.rb +51 -0
- data/spec/views/homepage/_featured_works.html.erb_spec.rb +5 -9
- data/spec/views/homepage/_home_header.html.erb_spec.rb +2 -2
- data/spec/views/my/facet.html.erb_spec.rb +4 -4
- data/spec/views/single_use_links/new_download.html.erb_spec.rb +28 -0
- data/spec/views/single_use_links_viewer/show.html.erb_spec.rb +29 -0
- data/spec/views/users/_follower_modal.html.erb_spec.rb +7 -8
- data/spec/views/users/_following_modal.html.erb_spec.rb +4 -5
- data/spec/views/users/_notify_number.html.erb_spec.rb +2 -5
- data/spec/views/users/_user_util_links.html.erb_spec.rb +5 -8
- data/spec/views/users/index.html.erb_spec.rb +4 -6
- data/spec/views/users/show.html.erb_spec.rb +4 -7
- data/tasks/sufia-dev.rake +19 -3
- metadata +20 -5
|
@@ -28,7 +28,7 @@ class CatalogController < ApplicationController
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
configure_blacklight do |config|
|
|
31
|
-
#Show gallery view
|
|
31
|
+
# Show gallery view
|
|
32
32
|
config.view.gallery.partials = [:index_header, :index]
|
|
33
33
|
config.view.slideshow.partials = [:index]
|
|
34
34
|
|
|
@@ -119,7 +119,7 @@ class CatalogController < ApplicationController
|
|
|
119
119
|
# solr request handler? The one set in config[:default_solr_parameters][:qt],
|
|
120
120
|
# since we aren't specifying it otherwise.
|
|
121
121
|
config.add_search_field('all_fields', label: 'All Fields', include_in_advanced_search: false) do |field|
|
|
122
|
-
all_names = config.show_fields.values.map
|
|
122
|
+
all_names = config.show_fields.values.map(&:field).join(" ")
|
|
123
123
|
title_name = solr_name("title", :stored_searchable)
|
|
124
124
|
field.solr_parameters = {
|
|
125
125
|
qf: "#{all_names} file_format_tesim all_text_timv",
|
|
@@ -312,5 +312,4 @@ class CatalogController < ApplicationController
|
|
|
312
312
|
# mean") suggestion is offered.
|
|
313
313
|
config.spell_max = 5
|
|
314
314
|
end
|
|
315
|
-
|
|
316
315
|
end
|
|
@@ -7,7 +7,7 @@ class Sufia::Upgrade400Generator < Rails::Generators::Base
|
|
|
7
7
|
|
|
8
8
|
source_root File.expand_path('../templates', __FILE__)
|
|
9
9
|
|
|
10
|
-
argument :model_name, type: :string
|
|
10
|
+
argument :model_name, type: :string, default: "user"
|
|
11
11
|
desc """
|
|
12
12
|
This generator for upgrading sufia from 3.7.2 to 4.0 makes the following changes to your application:
|
|
13
13
|
1. Updates the root route
|
|
@@ -40,9 +40,9 @@ This generator for upgrading sufia from 3.7.2 to 4.0 makes the following changes
|
|
|
40
40
|
def inject_sufia_controller_behavior
|
|
41
41
|
controller_name = "CatalogController"
|
|
42
42
|
file_path = "app/controllers/catalog_controller.rb"
|
|
43
|
-
if File.
|
|
43
|
+
if File.exist?(file_path)
|
|
44
44
|
insert_into_file file_path, after: 'include Hydra::Controller::ControllerBehavior' do
|
|
45
|
-
"\n # Adds Sufia behaviors to the catalog controller (#{controller_name})\n"
|
|
45
|
+
"\n # Adds Sufia behaviors to the catalog controller (#{controller_name})\n" \
|
|
46
46
|
" include Sufia::Catalog\n"
|
|
47
47
|
end
|
|
48
48
|
else
|
|
@@ -68,9 +68,9 @@ This generator for upgrading sufia from 3.7.2 to 4.0 makes the following changes
|
|
|
68
68
|
|
|
69
69
|
def blacklight_marc
|
|
70
70
|
file_path = 'app/models/solr_document.rb'
|
|
71
|
-
return unless File.
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
return unless File.exist?(file_path) &&
|
|
72
|
+
file_contains?('app/models/solr_document.rb', 'Blacklight::Solr::Document::Marc') &&
|
|
73
|
+
!file_contains?('Gemfile', 'blacklight-marc')
|
|
74
74
|
insert_into_file 'Gemfile', after: /gem 'sufia'.*$/ do
|
|
75
75
|
"\ngem 'blacklight-marc'"
|
|
76
76
|
end
|
|
@@ -85,7 +85,7 @@ This generator for upgrading sufia from 3.7.2 to 4.0 makes the following changes
|
|
|
85
85
|
|
|
86
86
|
private
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
def file_contains?(path, string)
|
|
89
|
+
File.readlines(path).grep(/#{string}/).any?
|
|
90
|
+
end
|
|
91
91
|
end
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
require 'rails/generators'
|
|
3
3
|
|
|
4
4
|
class Sufia::Upgrade600Generator < Rails::Generators::Base
|
|
5
|
-
|
|
6
5
|
source_root File.expand_path('../templates', __FILE__)
|
|
7
6
|
|
|
8
7
|
desc """
|
|
@@ -13,7 +12,7 @@ This generator for upgrading sufia to 6.0 makes the following changes to your ap
|
|
|
13
12
|
def insert_builder
|
|
14
13
|
insert_into_file 'app/models/search_builder.rb', after: /include Blacklight::Solr::SearchBuilderBehavior/ do
|
|
15
14
|
# First line should be generated by Hydra. projecthydra/hydra-head#255
|
|
16
|
-
"\n include Hydra::AccessControlsEnforcement"
|
|
15
|
+
"\n include Hydra::AccessControlsEnforcement" \
|
|
17
16
|
"\n include Sufia::SearchBuilder\n"
|
|
18
17
|
end
|
|
19
18
|
end
|
|
@@ -21,6 +20,4 @@ This generator for upgrading sufia to 6.0 makes the following changes to your ap
|
|
|
21
20
|
def migrations
|
|
22
21
|
generate "sufia:models:upgrade600"
|
|
23
22
|
end
|
|
24
|
-
|
|
25
23
|
end
|
|
26
|
-
|
data/lib/sufia.rb
CHANGED
|
@@ -37,8 +37,8 @@ module Sufia
|
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
config.assets.paths << config.root.join('vendor', 'assets', 'fonts')
|
|
40
|
-
config.assets.precompile <<
|
|
41
|
-
config.assets.precompile <<
|
|
40
|
+
config.assets.precompile << /vjs\.(?:eot|ttf|woff)$/
|
|
41
|
+
config.assets.precompile << /fontawesome-webfont\.(?:svg|ttf|woff)$/
|
|
42
42
|
config.assets.precompile += %w( ZeroClipboard.swf )
|
|
43
43
|
end
|
|
44
44
|
end
|
data/lib/sufia/arkivo/actor.rb
CHANGED
|
@@ -82,7 +82,7 @@ module Sufia
|
|
|
82
82
|
def extract_file_from_item
|
|
83
83
|
encoded = item['file']['base64']
|
|
84
84
|
content = Base64.decode64(encoded)
|
|
85
|
-
tmp = Tempfile.new(item['file']['md5'],
|
|
85
|
+
tmp = Tempfile.new(item['file']['md5'], encoding: Encoding::UTF_8)
|
|
86
86
|
tmp.binmode
|
|
87
87
|
tmp.original_filename = item['file']['filename']
|
|
88
88
|
tmp.content_type = item['file']['contentType']
|
|
@@ -27,41 +27,41 @@ module Sufia
|
|
|
27
27
|
|
|
28
28
|
private
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
def logger
|
|
31
|
+
ActiveFedora::Base.logger
|
|
32
|
+
end
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
def validate_user!
|
|
35
|
+
log_and_raise('User not found') if user.blank?
|
|
36
|
+
log_and_raise('User does not have an Arkivo token') if user.arkivo_token.blank?
|
|
37
|
+
log_and_raise('User has not yet connected with Zotero') if user.zotero_userid.blank?
|
|
38
|
+
log_and_raise('User already has a subscription') if user.arkivo_subscription.present?
|
|
39
|
+
end
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
def log_and_raise(message)
|
|
42
|
+
logger.error "*** Arkivo error: #{message}: #{user}"
|
|
43
|
+
raise SubscriptionError, message
|
|
44
|
+
end
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
def post_to_api
|
|
47
|
+
Faraday.new(url: Sufia::Arkivo.config[:url]).post do |request|
|
|
48
|
+
request.url Sufia::Arkivo.new_subscription_url
|
|
49
|
+
request.headers['Content-Type'] = 'application/json'
|
|
50
|
+
request.body = new_subscription_json
|
|
51
|
+
end
|
|
51
52
|
end
|
|
52
|
-
end
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
def new_subscription_json
|
|
55
|
+
{
|
|
56
|
+
url: Sufia::Zotero.publications_url(@user.zotero_userid),
|
|
57
|
+
plugins: [
|
|
58
|
+
{
|
|
59
|
+
name: "sufia",
|
|
60
|
+
options: { token: @user.arkivo_token }
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
}.to_json
|
|
64
|
+
end
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
module Sufia
|
|
2
2
|
module Arkivo
|
|
3
3
|
CREATOR_TYPES = ['author', 'interviewer', 'director', 'scriptwriter',
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
'inventor', 'composer', 'cartographer', 'programmer', 'artist',
|
|
5
|
+
'bookAuthor'
|
|
6
|
+
]
|
|
7
7
|
|
|
8
8
|
CONTRIBUTOR_TYPES = ['contributor', 'editor', 'translator', 'seriesEditor',
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
'interviewee', 'producer', 'castMember', 'sponsor', 'counsel',
|
|
10
|
+
'attorneyAgent', 'recipient', 'performer', 'wordsBy', 'commenter',
|
|
11
|
+
'presenter', 'guest', 'podcaster', 'reviewedAuthor', 'cosponsor'
|
|
12
|
+
]
|
|
13
13
|
|
|
14
14
|
class MetadataMunger
|
|
15
15
|
def initialize(metadata)
|
|
@@ -48,7 +48,7 @@ module Sufia
|
|
|
48
48
|
def call
|
|
49
49
|
JSON::Validator.validate!(Sufia::Arkivo::ITEM_SCHEMA, item, version: :draft3)
|
|
50
50
|
rescue JSON::Schema::ValidationError => exception
|
|
51
|
-
raise Sufia::Arkivo::InvalidItem
|
|
51
|
+
raise Sufia::Arkivo::InvalidItem, exception.message
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
end
|
data/lib/sufia/version.rb
CHANGED
data/lib/sufia/zotero/config.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
module Sufia
|
|
2
|
+
module Zotero
|
|
3
|
+
def self.config
|
|
4
|
+
@config ||= reload_config!
|
|
5
|
+
end
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
def self.reload_config!
|
|
8
|
+
@config = YAML.load(ERB.new(IO.read(File.join(Rails.root, 'config', 'zotero.yml'))).result)['zotero']
|
|
9
|
+
end
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
def self.publications_url(zotero_userid)
|
|
12
|
+
"/users/#{zotero_userid}/publications/items"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -5,14 +5,14 @@ describe Sufia::GenericFile::Actor do
|
|
|
5
5
|
|
|
6
6
|
let(:user) { FactoryGirl.create(:user) }
|
|
7
7
|
let(:generic_file) { FactoryGirl.create(:generic_file) }
|
|
8
|
-
let(:actor) {
|
|
9
|
-
let(:uploaded_file) { fixture_file_upload('/world.png','image/png') }
|
|
8
|
+
let(:actor) { described_class.new(generic_file, user) }
|
|
9
|
+
let(:uploaded_file) { fixture_file_upload('/world.png', 'image/png') }
|
|
10
10
|
|
|
11
11
|
describe "#create_content" do
|
|
12
12
|
let(:deposit_message) { double('deposit message') }
|
|
13
13
|
let(:characterize_message) { double('characterize message') }
|
|
14
14
|
|
|
15
|
-
it "
|
|
15
|
+
it "enqueues deposit and characterize messages" do
|
|
16
16
|
allow(ContentDepositEventJob).to receive(:new).with(generic_file.id, user.user_key).and_return(deposit_message)
|
|
17
17
|
allow(CharacterizeJob).to receive(:new).with(generic_file.id).and_return(characterize_message)
|
|
18
18
|
expect(Sufia.queue).to receive(:push).with(deposit_message)
|
|
@@ -24,25 +24,24 @@ describe Sufia::GenericFile::Actor do
|
|
|
24
24
|
let(:file) { "world.png" }
|
|
25
25
|
let(:long_name) { "an absurdly long title that goes on way to long and messes up the display of the page which should not need to be this big in order to show this impossibly long, long, long, oh so long string" }
|
|
26
26
|
let(:short_name) { "Nice Short Name" }
|
|
27
|
-
let(:actor) {
|
|
27
|
+
let(:actor) { described_class.new(generic_file, user) }
|
|
28
28
|
before do
|
|
29
29
|
allow(generic_file).to receive(:label).and_return(short_name)
|
|
30
30
|
allow(Sufia.queue).to receive(:push)
|
|
31
31
|
actor.create_content(fixture_file_upload(file), long_name, 'content', 'image/png')
|
|
32
|
-
end
|
|
32
|
+
end
|
|
33
33
|
subject { generic_file.title }
|
|
34
34
|
it { is_expected.to eql [short_name] }
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
context "with two existing versions from different users" do
|
|
38
|
-
|
|
39
38
|
let(:file1) { "world.png" }
|
|
40
39
|
let(:file2) { "image.jpg" }
|
|
41
|
-
let(:actor1) {
|
|
42
|
-
let(:actor2) {
|
|
40
|
+
let(:actor1) { described_class.new(generic_file, user) }
|
|
41
|
+
let(:actor2) { described_class.new(generic_file, second_user) }
|
|
43
42
|
|
|
44
43
|
let(:second_user) { FactoryGirl.find_or_create(:archivist) }
|
|
45
|
-
let(:versions)
|
|
44
|
+
let(:versions) { generic_file.content.versions }
|
|
46
45
|
|
|
47
46
|
before do
|
|
48
47
|
allow(Sufia.queue).to receive(:push)
|
|
@@ -50,22 +49,22 @@ describe Sufia::GenericFile::Actor do
|
|
|
50
49
|
actor2.create_content(fixture_file_upload(file2), file2, 'content', 'image/jpeg')
|
|
51
50
|
end
|
|
52
51
|
|
|
53
|
-
it "
|
|
52
|
+
it "has two versions" do
|
|
54
53
|
expect(versions.all.count).to eq 2
|
|
55
54
|
end
|
|
56
55
|
|
|
57
|
-
it "
|
|
56
|
+
it "has the current version" do
|
|
58
57
|
expect(generic_file.content.latest_version.label).to eq 'version2'
|
|
59
58
|
expect(generic_file.content.mime_type).to eq "image/jpeg"
|
|
60
59
|
expect(generic_file.content.original_name).to eq file2
|
|
61
60
|
end
|
|
62
61
|
|
|
63
|
-
it "
|
|
62
|
+
it "uses the first version for the object's title and label" do
|
|
64
63
|
expect(generic_file.label).to eql(file1)
|
|
65
64
|
expect(generic_file.title.first).to eql(file1)
|
|
66
65
|
end
|
|
67
66
|
|
|
68
|
-
it "
|
|
67
|
+
it "notes the user for each version" do
|
|
69
68
|
expect(VersionCommitter.where(version_id: versions.first.uri).pluck(:committer_login)).to eq [user.user_key]
|
|
70
69
|
expect(VersionCommitter.where(version_id: versions.last.uri).pluck(:committer_login)).to eq [second_user.user_key]
|
|
71
70
|
end
|
|
@@ -73,19 +72,19 @@ describe Sufia::GenericFile::Actor do
|
|
|
73
72
|
end
|
|
74
73
|
|
|
75
74
|
describe "#virus_check" do
|
|
76
|
-
it "
|
|
75
|
+
it "returns the results of running ClamAV scanfile method" do
|
|
77
76
|
expect(ClamAV.instance).to receive(:scanfile).and_return(1)
|
|
78
|
-
expect {
|
|
77
|
+
expect { described_class.virus_check(File.new(fixture_path + '/world.png')) }.to raise_error(Sufia::VirusFoundError)
|
|
79
78
|
end
|
|
80
79
|
end
|
|
81
80
|
|
|
82
81
|
describe "#featured_work" do
|
|
83
82
|
let(:gf) { FactoryGirl.create(:generic_file, visibility: 'open') }
|
|
84
|
-
let(:actor) {
|
|
83
|
+
let(:actor) { described_class.new(gf, user) }
|
|
85
84
|
|
|
86
85
|
before { FeaturedWork.create(generic_file_id: gf.id) }
|
|
87
86
|
|
|
88
|
-
it "
|
|
87
|
+
it "is removed if document is not public" do
|
|
89
88
|
# Switch document from public to restricted
|
|
90
89
|
expect { actor.update_metadata({}, 'restricted') }.to change { FeaturedWork.count }.by(-1)
|
|
91
90
|
end
|
|
@@ -100,7 +99,7 @@ describe Sufia::GenericFile::Actor do
|
|
|
100
99
|
f.label = label
|
|
101
100
|
end
|
|
102
101
|
end
|
|
103
|
-
let(:actor) {
|
|
102
|
+
let(:actor) { described_class.new(generic_file_with_label, user) }
|
|
104
103
|
|
|
105
104
|
before do
|
|
106
105
|
allow(actor).to receive(:save_characterize_and_record_committer).and_return("true")
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
|
3
3
|
describe Admin::StatsController, type: :controller do
|
|
4
4
|
let(:user1) { FactoryGirl.find_or_create(:user) }
|
|
5
5
|
let(:user2) { FactoryGirl.find_or_create(:archivist) }
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
before do
|
|
8
8
|
allow(user1).to receive(:groups).and_return(['admin'])
|
|
9
9
|
allow(user2).to receive(:groups).and_return(['not-admin'])
|
|
@@ -54,7 +54,7 @@ describe Admin::StatsController, type: :controller do
|
|
|
54
54
|
ActiveFedora::SolrService.instance.conn.delete_by_id(poltergeist.id)
|
|
55
55
|
original_files_count
|
|
56
56
|
end
|
|
57
|
-
it "
|
|
57
|
+
it "provides accurate files_count, ensuring that solr deletes have been expunged first" do
|
|
58
58
|
get :index
|
|
59
59
|
expect(assigns[:files_count][:total]).to eq(original_files_count - 1)
|
|
60
60
|
end
|
|
@@ -63,9 +63,9 @@ describe Admin::StatsController, type: :controller do
|
|
|
63
63
|
describe "counts" do
|
|
64
64
|
context "when date range not set" do
|
|
65
65
|
before do
|
|
66
|
-
FactoryGirl.
|
|
67
|
-
FactoryGirl.
|
|
68
|
-
FactoryGirl.
|
|
66
|
+
FactoryGirl.build(:generic_file, depositor: user1, id: "abc1223").update_index
|
|
67
|
+
FactoryGirl.build(:public_file, depositor: user1, id: "bbb1223").update_index
|
|
68
|
+
FactoryGirl.build(:registered_file, depositor: user1, id: "ccc1223").update_index
|
|
69
69
|
Collection.create(title: "test") do |c|
|
|
70
70
|
c.apply_depositor_metadata(user1.user_key)
|
|
71
71
|
end
|
|
@@ -98,5 +98,56 @@ describe Admin::StatsController, type: :controller do
|
|
|
98
98
|
end
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
+
describe "depositor counts" do
|
|
102
|
+
before do
|
|
103
|
+
GenericFile.new(id: "abc123") do |gf|
|
|
104
|
+
gf.apply_depositor_metadata(user1)
|
|
105
|
+
gf.update_index
|
|
106
|
+
end
|
|
107
|
+
GenericFile.new(id: "def123") do |gf|
|
|
108
|
+
gf.apply_depositor_metadata(user2)
|
|
109
|
+
gf.update_index
|
|
110
|
+
end
|
|
111
|
+
GenericFile.new(id: "zzz123") do |gf|
|
|
112
|
+
gf.create_date = [2.days.ago]
|
|
113
|
+
gf.apply_depositor_metadata(user1)
|
|
114
|
+
gf.update_index
|
|
115
|
+
end
|
|
116
|
+
Collection.new(id: "ccc123") do |c|
|
|
117
|
+
c.apply_depositor_metadata(user1)
|
|
118
|
+
c.update_index
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "gathers user deposits" do
|
|
123
|
+
get :index
|
|
124
|
+
expect(assigns[:depositors]).to include({ key: user1.user_key, deposits: 2, user: user1 }, key: user2.user_key, deposits: 1, user: user2)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "gathers user deposits during a date range" do
|
|
128
|
+
get :index, deposit_stats: { start_date: 1.days.ago.strftime("%Y-%m-%d"), end_date: 0.days.ago.strftime("%Y-%m-%d") }
|
|
129
|
+
expect(assigns[:depositors]).to include({ key: user1.user_key, deposits: 1, user: user1 }, key: user2.user_key, deposits: 1, user: user2)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
context "more than 10 users" do
|
|
133
|
+
let(:users) { [] }
|
|
134
|
+
before do
|
|
135
|
+
(1..12).each do |number|
|
|
136
|
+
luser = User.create(email: "user#{number}@blah.com", password: "blahbalh")
|
|
137
|
+
users << luser
|
|
138
|
+
GenericFile.new(id: "more#{number}") do |gf|
|
|
139
|
+
gf.apply_depositor_metadata(luser)
|
|
140
|
+
gf.update_index
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "gathers user deposits" do
|
|
146
|
+
get :index
|
|
147
|
+
expect(assigns[:depositors]).to include({ key: user1.user_key, deposits: 2, user: user1 }, key: user2.user_key, deposits: 1, user: user2)
|
|
148
|
+
users.each { |user| expect(assigns[:depositors]).to include(key: user.user_key, deposits: 1, user: user) }
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
101
152
|
end
|
|
102
153
|
end
|