sufia 7.1.0 → 7.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (393) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +49 -0
  3. data/.engine_cart.yml +1 -0
  4. data/.eslintignore +1 -0
  5. data/.eslintrc +213 -0
  6. data/.gitignore +2 -0
  7. data/.hound.yml +5 -0
  8. data/.rubocop.yml +27 -17
  9. data/.rubocop_todo.yml +6 -3
  10. data/.scss-lint.yml +253 -0
  11. data/.travis.yml +3 -2
  12. data/Gemfile +5 -1
  13. data/README.md +30 -16
  14. data/app/assets/javascripts/sufia.js +6 -0
  15. data/app/assets/javascripts/sufia/app.js +13 -5
  16. data/app/assets/javascripts/sufia/fileupload.js.erb +12 -0
  17. data/app/assets/javascripts/sufia/initialize.js +3 -0
  18. data/app/assets/javascripts/sufia/save_work/required_fields.es6 +5 -1
  19. data/app/assets/javascripts/sufia/save_work/save_work_control.es6 +12 -0
  20. data/app/assets/javascripts/sufia/trophy.js +14 -14
  21. data/app/assets/javascripts/sufia/uploader.js +32 -3
  22. data/app/assets/stylesheets/fileupload/jquery.fileupload-ui.scss +29 -35
  23. data/app/assets/stylesheets/sufia/_batch-edit.scss +0 -5
  24. data/app/assets/stylesheets/sufia/_browse_everything_overrides.scss +1 -1
  25. data/app/assets/stylesheets/sufia/_buttons.scss +6 -1
  26. data/app/assets/stylesheets/sufia/_catalog.scss +6 -0
  27. data/app/assets/stylesheets/sufia/_collections.scss +29 -13
  28. data/app/assets/stylesheets/sufia/_dashboard.scss +27 -19
  29. data/app/assets/stylesheets/sufia/_file-listing.scss +7 -0
  30. data/app/assets/stylesheets/sufia/_file_upload.scss +20 -0
  31. data/app/assets/stylesheets/sufia/_form.scss +30 -0
  32. data/app/assets/stylesheets/sufia/_home-page.scss +87 -33
  33. data/app/assets/stylesheets/sufia/_representative-media.scss +4 -0
  34. data/app/assets/stylesheets/sufia/_styles.scss +0 -23
  35. data/app/assets/stylesheets/sufia/_sufia.scss +10 -7
  36. data/app/assets/stylesheets/sufia/_variables.scss +14 -0
  37. data/app/assets/stylesheets/sufia/_work-show.scss +1 -1
  38. data/app/assets/stylesheets/sufia/admin.scss +203 -0
  39. data/app/assets/stylesheets/sufia/widgets.css +288 -0
  40. data/app/controllers/api/items_controller.rb +1 -1
  41. data/app/controllers/concerns/sufia/admin/stats_behavior.rb +7 -1
  42. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +1 -1
  43. data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +0 -1
  44. data/app/controllers/concerns/sufia/collections_controller_behavior.rb +1 -1
  45. data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +19 -5
  46. data/app/controllers/concerns/sufia/deny_access_override_behavior.rb +13 -0
  47. data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +1 -10
  48. data/app/controllers/concerns/sufia/file_sets_controller_behavior.rb +1 -1
  49. data/app/controllers/concerns/sufia/homepage_controller_behavior.rb +11 -2
  50. data/app/controllers/concerns/sufia/my_controller_behavior.rb +7 -16
  51. data/app/controllers/concerns/sufia/singular_subresource_controller.rb +1 -10
  52. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +1 -1
  53. data/app/controllers/concerns/sufia/users_controller_behavior.rb +2 -25
  54. data/app/controllers/concerns/sufia/works_controller_behavior.rb +27 -3
  55. data/app/controllers/content_blocks_controller.rb +12 -2
  56. data/app/controllers/curation_concerns/file_sets_controller.rb +0 -1
  57. data/app/controllers/curation_concerns/permissions_controller.rb +8 -16
  58. data/app/controllers/my/highlights_controller.rb +1 -1
  59. data/app/controllers/stats_controller.rb +2 -2
  60. data/app/controllers/sufia/admin/admin_sets_controller.rb +114 -0
  61. data/app/controllers/sufia/admin/features_controller.rb +13 -0
  62. data/app/controllers/sufia/admin/stats_controller.rb +5 -0
  63. data/app/controllers/sufia/admin/strategies_controller.rb +14 -0
  64. data/app/controllers/sufia/admin_controller.rb +11 -0
  65. data/app/controllers/sufia/admin_sets_controller.rb +25 -0
  66. data/app/controllers/sufia/resource_sync_controller.rb +11 -15
  67. data/app/forms/sufia/forms/admin_set_form.rb +30 -0
  68. data/app/forms/sufia/forms/batch_edit_form.rb +1 -1
  69. data/app/forms/sufia/forms/work_form.rb +2 -2
  70. data/app/helpers/sufia/citations_behaviors/title_behavior.rb +1 -1
  71. data/app/helpers/sufia/dashboard_helper_behavior.rb +6 -0
  72. data/app/helpers/sufia/permissions_helper.rb +19 -0
  73. data/app/helpers/sufia/sufia_helper_behavior.rb +13 -6
  74. data/app/indexers/sufia/work_indexer.rb +4 -0
  75. data/app/jobs/attach_files_to_work_job.rb +3 -1
  76. data/app/jobs/content_depositor_change_event_job.rb +0 -7
  77. data/app/jobs/content_event_job.rb +0 -7
  78. data/app/jobs/event_job.rb +1 -11
  79. data/app/jobs/inherit_permissions_job.rb +24 -0
  80. data/app/mailers/sufia/contact_mailer.rb +11 -0
  81. data/app/models/concerns/sufia/ability.rb +12 -1
  82. data/app/models/concerns/sufia/content_block_behavior.rb +47 -0
  83. data/app/models/concerns/sufia/solr_document/export.rb +6 -0
  84. data/app/models/concerns/sufia/solr_document_behavior.rb +4 -0
  85. data/app/models/concerns/sufia/user.rb +7 -8
  86. data/app/models/concerns/sufia/with_events.rb +5 -1
  87. data/app/models/concerns/sufia/works/featured.rb +1 -1
  88. data/app/models/concerns/sufia/works/trophies.rb +1 -1
  89. data/app/models/content_block.rb +1 -39
  90. data/app/models/featured_work_list.rb +0 -1
  91. data/app/models/file_download_stat.rb +18 -7
  92. data/app/models/file_view_stat.rb +5 -2
  93. data/app/models/sufia/contact_form.rb +33 -0
  94. data/app/models/sufia/feature.rb +5 -0
  95. data/app/models/sufia/statistic.rb +6 -5
  96. data/app/presenters/sufia/admin_dashboard_presenter.rb +8 -0
  97. data/app/presenters/sufia/admin_set_presenter.rb +7 -0
  98. data/app/presenters/sufia/admin_stats_presenter.rb +0 -4
  99. data/app/presenters/sufia/collection_presenter.rb +5 -4
  100. data/app/presenters/sufia/file_set_presenter.rb +16 -3
  101. data/app/presenters/sufia/file_usage.rb +37 -0
  102. data/app/presenters/sufia/stats_usage_presenter.rb +43 -0
  103. data/app/presenters/sufia/trophy_presenter.rb +2 -0
  104. data/app/presenters/sufia/work_show_presenter.rb +3 -1
  105. data/app/presenters/sufia/work_usage.rb +30 -0
  106. data/app/search_builders/collection_search_builder.rb +1 -1
  107. data/app/search_builders/sufia/admin_set_member_search_builder.rb +12 -0
  108. data/app/search_builders/sufia/single_admin_set_search_builder.rb +9 -0
  109. data/app/services/sufia/admin_set_service.rb +22 -0
  110. data/app/services/sufia/analytics.rb +51 -26
  111. data/app/services/sufia/collection_size_service.rb +1 -1
  112. data/app/services/sufia/file_set_csv_service.rb +1 -1
  113. data/app/services/sufia/statistics/system_stats.rb +0 -6
  114. data/app/views/_controls.html.erb +8 -4
  115. data/app/views/_logo.html.erb +1 -1
  116. data/app/views/_toolbar.html.erb +1 -1
  117. data/app/views/catalog/_facet_limit.html.erb +2 -2
  118. data/app/views/catalog/_search_form.html.erb +0 -4
  119. data/app/views/catalog/_thumbnail_list_collection.html.erb +1 -3
  120. data/app/views/catalog/index.html.erb +1 -1
  121. data/app/views/collections/_dashboard_document_list.html.erb +1 -3
  122. data/app/views/collections/_document_list.html.erb +0 -2
  123. data/app/views/collections/_form.html.erb +1 -1
  124. data/app/views/collections/_form_for_select_collection.html.erb +1 -1
  125. data/app/views/collections/_media_display.html.erb +1 -3
  126. data/app/views/collections/_show_descriptions.html.erb +1 -1
  127. data/app/views/collections/_show_document_list.html.erb +3 -1
  128. data/app/views/collections/_show_document_list_menu.html.erb +12 -12
  129. data/app/views/collections/_show_document_list_row.html.erb +6 -4
  130. data/app/views/contact_form/new.html.erb +1 -1
  131. data/app/views/curation_concerns/base/_attribute_rows.html.erb +12 -10
  132. data/app/views/curation_concerns/base/_citations.html.erb +2 -2
  133. data/app/views/curation_concerns/base/_form_files.html.erb +11 -3
  134. data/app/views/curation_concerns/base/_form_metadata.html.erb +1 -1
  135. data/app/views/curation_concerns/base/_form_progress.html.erb +2 -2
  136. data/app/views/curation_concerns/base/_form_relationships.html.erb +8 -0
  137. data/app/views/curation_concerns/base/_guts4form.html.erb +8 -4
  138. data/app/views/curation_concerns/base/_items.html.erb +7 -7
  139. data/app/views/curation_concerns/base/_relationships.html.erb +0 -1
  140. data/app/views/curation_concerns/base/_show_actions.html.erb +3 -0
  141. data/app/views/curation_concerns/base/_social_media.html.erb +49 -15
  142. data/app/views/curation_concerns/file_sets/_actions.html.erb +1 -9
  143. data/app/views/curation_concerns/file_sets/_groups_description.html.erb +1 -5
  144. data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +3 -0
  145. data/app/views/curation_concerns/permissions/confirm_access.html.erb +12 -0
  146. data/app/views/dashboard/_index_partials/_heading_greetings.html.erb +1 -1
  147. data/app/views/layouts/admin.html.erb +71 -0
  148. data/app/views/layouts/{sufia-one-column.html.erb → curation_concerns/1_column.html.erb} +1 -1
  149. data/app/views/layouts/homepage.html.erb +35 -2
  150. data/app/views/layouts/sufia-dashboard.html.erb +1 -1
  151. data/app/views/my/_facet_pagination.html.erb +5 -5
  152. data/app/views/my/_index_partials/_list_collections.html.erb +1 -3
  153. data/app/views/my/_scripts.js.erb +1 -2
  154. data/app/views/my/index.html.erb +3 -3
  155. data/app/views/records/edit_fields/_description.html.erb +2 -2
  156. data/app/views/records/edit_fields/_rights.html.erb +3 -2
  157. data/app/views/records/show_fields/_rights.html.erb +2 -1
  158. data/app/views/shared/_footer.html.erb +1 -1
  159. data/app/views/sufia/admin/_menu.html.erb +5 -0
  160. data/app/views/sufia/admin/_sidebar.html.erb +23 -0
  161. data/app/views/sufia/admin/admin_sets/_form.html.erb +18 -0
  162. data/app/views/sufia/admin/admin_sets/_sort_and_per_page.html.erb +5 -0
  163. data/app/views/sufia/admin/admin_sets/edit.html.erb +9 -0
  164. data/app/views/sufia/admin/admin_sets/index.html.erb +46 -0
  165. data/app/views/sufia/admin/admin_sets/new.html.erb +9 -0
  166. data/app/views/sufia/admin/admin_sets/show.html.erb +43 -0
  167. data/app/views/sufia/admin/features/index.html.erb +57 -0
  168. data/app/views/sufia/admin/show.html.erb +36 -0
  169. data/app/views/{admin → sufia/admin}/stats/_date_form.html.erb +0 -0
  170. data/app/views/{admin → sufia/admin}/stats/_deposits.html.erb +0 -0
  171. data/app/views/{admin → sufia/admin}/stats/_new_users.html.erb +0 -0
  172. data/app/views/{admin → sufia/admin}/stats/_stats_by_date.html.erb +4 -4
  173. data/app/views/{admin → sufia/admin}/stats/_top_data.html.erb +2 -2
  174. data/app/views/{admin → sufia/admin}/stats/_works.html.erb +0 -0
  175. data/app/views/sufia/admin/stats/show.html.erb +7 -0
  176. data/app/views/sufia/admin_sets/_admin_set.html.erb +25 -0
  177. data/app/views/sufia/admin_sets/_document_list.html.erb +30 -0
  178. data/app/views/sufia/admin_sets/_member_document.html.erb +26 -0
  179. data/app/views/sufia/admin_sets/_search_form.html.erb +12 -0
  180. data/app/views/sufia/admin_sets/_sort_and_per_page.html.erb +5 -0
  181. data/app/views/sufia/admin_sets/index.html.erb +2 -0
  182. data/app/views/sufia/admin_sets/show.html.erb +33 -0
  183. data/app/views/sufia/contact_mailer/contact.html.erb +5 -0
  184. data/app/views/sufia/homepage/_explore_collections.html.erb +28 -0
  185. data/app/views/sufia/homepage/_featured_researcher.html.erb +7 -2
  186. data/app/views/sufia/homepage/_featured_works.html.erb +1 -1
  187. data/app/views/sufia/homepage/_home_content.html.erb +21 -3
  188. data/app/views/sufia/homepage/_marketing.html.erb +1 -1
  189. data/app/views/sufia/homepage/_recently_uploaded.html.erb +14 -16
  190. data/app/views/sufia/homepage/index.html.erb +14 -5
  191. data/app/views/users/_activity_log.html.erb +0 -1
  192. data/app/views/users/_contributions.html.erb +1 -1
  193. data/app/views/users/_profile_actions.html.erb +6 -16
  194. data/app/views/users/_vitals.html.erb +0 -5
  195. data/app/views/users/index.html.erb +16 -16
  196. data/config/features.rb +10 -0
  197. data/config/locales/sufia.en.yml +76 -25
  198. data/config/routes.rb +16 -17
  199. data/db/migrate/20160415212015_create_features.rb +10 -0
  200. data/lib/generators/sufia/install_generator.rb +10 -34
  201. data/lib/generators/sufia/templates/catalog_controller.rb +7 -6
  202. data/lib/generators/sufia/templates/config/sufia.rb +7 -0
  203. data/lib/generators/sufia/work_generator.rb +2 -2
  204. data/lib/sufia.rb +0 -1
  205. data/lib/sufia/arkivo/metadata_munger.rb +13 -2
  206. data/lib/sufia/configuration.rb +5 -0
  207. data/lib/sufia/controlled_vocabulary/importer/downloader.rb +17 -0
  208. data/lib/sufia/controlled_vocabulary/importer/language.rb +62 -0
  209. data/lib/sufia/engine.rb +7 -0
  210. data/lib/sufia/redis_event_store.rb +2 -2
  211. data/lib/sufia/resource_sync/resource_list_writer.rb +1 -1
  212. data/lib/sufia/version.rb +1 -1
  213. data/solr/config/solrconfig.xml +26 -15
  214. data/spec/actors/sufia/create_with_files_actor_spec.rb +6 -4
  215. data/spec/actors/sufia/create_with_remote_files_actor_spec.rb +26 -18
  216. data/spec/controllers/api/items_controller_spec.rb +32 -22
  217. data/spec/controllers/api/zotero_controller_spec.rb +2 -2
  218. data/spec/controllers/batch_edits_controller_spec.rb +5 -6
  219. data/spec/controllers/catalog_controller_spec.rb +11 -11
  220. data/spec/controllers/citations_controller_spec.rb +2 -2
  221. data/spec/controllers/collections_controller_spec.rb +57 -36
  222. data/spec/controllers/contact_form_controller_spec.rb +6 -6
  223. data/spec/controllers/content_blocks_controller_spec.rb +8 -8
  224. data/spec/controllers/curation_concerns/audits_controller_spec.rb +2 -2
  225. data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +51 -43
  226. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +51 -27
  227. data/spec/controllers/curation_concerns/permissions_controller_spec.rb +24 -0
  228. data/spec/controllers/depositors_controller_spec.rb +5 -5
  229. data/spec/controllers/downloads_controller_spec.rb +4 -4
  230. data/spec/controllers/featured_work_lists_controller_spec.rb +5 -3
  231. data/spec/controllers/featured_works_controller_spec.rb +9 -9
  232. data/spec/controllers/mailbox_controller_spec.rb +1 -1
  233. data/spec/controllers/my/collections_controller_spec.rb +3 -7
  234. data/spec/controllers/my/highlights_controller_spec.rb +2 -2
  235. data/spec/controllers/my/shares_controller_spec.rb +2 -2
  236. data/spec/controllers/my/works_controller_spec.rb +5 -14
  237. data/spec/controllers/pages_controller_spec.rb +2 -2
  238. data/spec/controllers/static_controller_spec.rb +2 -2
  239. data/spec/controllers/stats_controller_spec.rb +8 -8
  240. data/spec/controllers/sufia/admin/admin_sets_controller_spec.rb +123 -0
  241. data/spec/controllers/sufia/admin/features_controller_spec.rb +29 -0
  242. data/spec/controllers/{admin → sufia/admin}/stats_controller_spec.rb +10 -6
  243. data/spec/controllers/sufia/admin/strategies_controller_spec.rb +30 -0
  244. data/spec/controllers/sufia/admin_controller_spec.rb +13 -0
  245. data/spec/controllers/sufia/admin_sets_controller_spec.rb +28 -0
  246. data/spec/controllers/sufia/batch_uploads_controller_spec.rb +48 -17
  247. data/spec/controllers/sufia/homepage_controller_spec.rb +21 -0
  248. data/spec/controllers/sufia/trophies_controller_spec.rb +2 -2
  249. data/spec/controllers/sufia/uploads_controller_spec.rb +5 -5
  250. data/spec/controllers/tinymce_assets_controller_spec.rb +5 -5
  251. data/spec/controllers/transfers_controller_spec.rb +23 -16
  252. data/spec/controllers/users_controller_spec.rb +21 -69
  253. data/spec/factories/admin_sets.rb +9 -0
  254. data/spec/factories/collections_factory.rb +5 -3
  255. data/spec/factories/generic_works.rb +3 -1
  256. data/spec/features/admin_admin_set_spec.rb +30 -0
  257. data/spec/features/browse_dashboard_files_spec.rb +3 -3
  258. data/spec/features/contact_form_spec.rb +5 -5
  259. data/spec/features/create_work_spec.rb +1 -1
  260. data/spec/features/display_dashboard_spec.rb +1 -1
  261. data/spec/features/ownership_transfer_spec.rb +29 -30
  262. data/spec/features/search_spec.rb +2 -1
  263. data/spec/features/user_admin_set_spec.rb +55 -0
  264. data/spec/features/work_show_spec.rb +13 -3
  265. data/spec/forms/curation_concerns/generic_work_form_spec.rb +30 -24
  266. data/spec/forms/sufia/forms/admin_set_form_spec.rb +20 -0
  267. data/spec/forms/sufia/forms/batch_edit_form_spec.rb +27 -25
  268. data/spec/forms/sufia/forms/batch_upload_form_spec.rb +29 -26
  269. data/spec/forms/sufia/forms/collection_form_spec.rb +36 -32
  270. data/spec/helpers/sufia_helper_spec.rb +17 -28
  271. data/spec/indexers/sufia/work_indexer_spec.rb +16 -0
  272. data/spec/javascripts/required_field_spec.js +41 -0
  273. data/spec/javascripts/save_work_spec.js +9 -0
  274. data/spec/jobs/attach_files_to_work_job_spec.rb +6 -1
  275. data/spec/jobs/batch_create_job_spec.rb +8 -6
  276. data/spec/jobs/content_delete_event_job_spec.rb +6 -18
  277. data/spec/jobs/content_deposit_event_job_spec.rb +3 -12
  278. data/spec/jobs/content_depositor_change_event_job_spec.rb +3 -8
  279. data/spec/jobs/content_new_version_event_job_spec.rb +3 -12
  280. data/spec/jobs/content_restored_version_event_job_spec.rb +3 -11
  281. data/spec/jobs/content_update_event_job_spec.rb +13 -79
  282. data/spec/jobs/file_set_attached_event_job_spec.rb +2 -10
  283. data/spec/jobs/inherit_permissions_job_spec.rb +96 -0
  284. data/spec/jobs/user_edit_profile_event_job_spec.rb +3 -7
  285. data/spec/lib/sufia/analytics_spec.rb +42 -11
  286. data/spec/lib/sufia/arkivo/actor_spec.rb +4 -4
  287. data/spec/lib/sufia/arkivo/schema_validator_spec.rb +18 -18
  288. data/spec/lib/sufia/controlled_vocabulary/importer/language_spec.rb +24 -0
  289. data/spec/lib/sufia/redis_event_store_spec.rb +8 -0
  290. data/spec/lib/sufia/resource_sync/capability_list_writer_spec.rb +4 -2
  291. data/spec/lib/sufia/resource_sync/resource_list_writer_spec.rb +10 -7
  292. data/spec/models/file_download_stat_spec.rb +35 -12
  293. data/spec/models/file_view_stat_spec.rb +12 -12
  294. data/spec/models/flipflop_spec.rb +8 -0
  295. data/spec/models/generic_work_spec.rb +3 -1
  296. data/spec/models/solr_document_spec.rb +20 -8
  297. data/spec/models/sufia/ability_spec.rb +5 -0
  298. data/spec/models/user_spec.rb +4 -28
  299. data/spec/models/work_view_stat_spec.rb +26 -17
  300. data/spec/presenters/sufia/admin_dashboard_presenter_spec.rb +14 -0
  301. data/spec/presenters/sufia/admin_set_presenter_spec.rb +28 -0
  302. data/spec/presenters/sufia/admin_stats_presenter_spec.rb +0 -8
  303. data/spec/presenters/sufia/collection_presenter_spec.rb +21 -16
  304. data/spec/presenters/sufia/file_set_presenter_spec.rb +44 -1
  305. data/spec/presenters/sufia/file_usage_spec.rb +49 -55
  306. data/spec/presenters/sufia/work_show_presenter_spec.rb +12 -2
  307. data/spec/presenters/sufia/work_usage_spec.rb +37 -36
  308. data/spec/routing/route_spec.rb +19 -21
  309. data/spec/search_builder/sufia/my_shares_search_builder_spec.rb +14 -7
  310. data/spec/search_builder/sufia/single_admin_set_search_builder_spec.rb +17 -0
  311. data/spec/services/sufia/actor_factory_spec.rb +11 -9
  312. data/spec/services/sufia/admin_set_service_spec.rb +27 -0
  313. data/spec/services/sufia/audit_failure_service_spec.rb +1 -1
  314. data/spec/services/sufia/file_set_csv_service_spec.rb +6 -7
  315. data/spec/services/sufia/statistics/system_stats_spec.rb +0 -10
  316. data/spec/services/sufia/user_stat_importer_spec.rb +306 -2
  317. data/spec/spec_helper.rb +43 -4
  318. data/spec/support/backport_test_helpers.rb +19 -0
  319. data/spec/support/selectors.rb +0 -19
  320. data/spec/test_app_templates/Gemfile.extra +1 -0
  321. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -2
  322. data/spec/views/_toolbar.html.erb_spec.rb +6 -6
  323. data/spec/views/catalog/_index_list_default.html.erb_spec.rb +10 -1
  324. data/spec/views/catalog/_thumbnail_list_collection.html.erb_spec.rb +10 -0
  325. data/spec/views/citations/work.html.erb_spec.rb +2 -2
  326. data/spec/views/collections/_form_for_select_collection.html.erb_spec.rb +6 -4
  327. data/spec/views/collections/_show_document_list.html.erb_spec.rb +1 -0
  328. data/spec/views/collections/_show_document_list_menu.html.erb_spec.rb +14 -3
  329. data/spec/views/collections/show.html.erb_spec.rb +7 -2
  330. data/spec/views/curation_concerns/base/_attribute_rows.html.erb_spec.rb +19 -0
  331. data/spec/views/curation_concerns/base/_citations.html.erb_spec.rb +2 -2
  332. data/spec/views/curation_concerns/base/_form.html.erb_spec.rb +2 -0
  333. data/spec/views/curation_concerns/base/_form_relationships.html.erb_spec.rb +48 -0
  334. data/spec/views/curation_concerns/base/_items.html.erb_spec.rb +49 -0
  335. data/spec/views/curation_concerns/base/_relationships.html.erb_spec.rb +2 -30
  336. data/spec/views/curation_concerns/base/_show_actions.html.erb_spec.rb +69 -0
  337. data/spec/views/curation_concerns/base/_social_media.html.erb_spec.rb +18 -0
  338. data/spec/views/curation_concerns/file_sets/_permission_form.html.erb_spec.rb +2 -2
  339. data/spec/views/curation_concerns/file_sets/_show_actions.html.erb_spec.rb +18 -3
  340. data/spec/views/curation_concerns/file_sets/media_display/_default.html.erb_spec.rb +26 -0
  341. data/spec/views/dashboard/index_spec.rb +5 -9
  342. data/spec/views/my/_list_collections.html.erb_spec.rb +1 -0
  343. data/spec/views/records/edit_fields/_description.html.erb_spec.rb +66 -0
  344. data/spec/views/stats_file.html.erb_spec.rb +5 -5
  345. data/spec/views/sufia/admin/admin_sets/index.html.erb_spec.rb +27 -0
  346. data/spec/views/{admin/stats/index.html.erb_spec.rb → sufia/admin/stats/show.html.erb_spec.rb} +1 -1
  347. data/spec/views/sufia/batch_uploads/_form.html.erb_spec.rb +3 -1
  348. data/spec/views/sufia/homepage/_featured_works.html.erb_spec.rb +9 -7
  349. data/spec/views/sufia/homepage/{_home_header.html.erb_spec.rb → index.html.erb_spec.rb} +3 -3
  350. data/spec/views/users/_user_util_links.html.erb_spec.rb +1 -1
  351. data/spec/views/users/index.html.erb_spec.rb +2 -1
  352. data/spec/views/users/show.html.erb_spec.rb +5 -1
  353. data/sufia.gemspec +13 -8
  354. data/tasks/controlled_vocabularies.rake +9 -0
  355. data/vendor/assets/stylesheets/sharing_buttons.css +163 -0
  356. metadata +246 -124
  357. data/app/assets/images/old_main_tulips.jpg +0 -0
  358. data/app/assets/javascripts/sufia/fileupload.js +0 -6
  359. data/app/assets/stylesheets/sufia.scss +0 -10
  360. data/app/controllers/admin/stats_controller.rb +0 -3
  361. data/app/controllers/errors_controller.rb +0 -12
  362. data/app/jobs/user_follow_event_job.rb +0 -21
  363. data/app/jobs/user_unfollow_event_job.rb +0 -20
  364. data/app/models/contact_form.rb +0 -28
  365. data/app/models/follow.rb +0 -12
  366. data/app/presenters/file_usage.rb +0 -49
  367. data/app/presenters/sufia/characterization_behavior.rb +0 -80
  368. data/app/presenters/work_usage.rb +0 -51
  369. data/app/views/admin/_menu.html.erb +0 -8
  370. data/app/views/admin/stats/index.html.erb +0 -10
  371. data/app/views/advanced/_advanced_search_facets.html.erb +0 -1
  372. data/app/views/advanced/_advanced_search_fields.html.erb +0 -8
  373. data/app/views/advanced/_advanced_search_form.html.erb +0 -34
  374. data/app/views/advanced/_advanced_search_help.html.erb +0 -13
  375. data/app/views/advanced/_facet_layout.html.erb +0 -5
  376. data/app/views/advanced/_facet_limit.html.erb +0 -7
  377. data/app/views/advanced/index.html.erb +0 -21
  378. data/app/views/collections/_search_collection_dashboard_form.html.erb +0 -11
  379. data/app/views/curation_concerns/base/_relationships_member_rows.html.erb +0 -24
  380. data/app/views/errors/404.html.erb +0 -8
  381. data/app/views/layouts/error.html.erb +0 -27
  382. data/app/views/static/subject_libraries.html.erb +0 -32
  383. data/app/views/sufia/homepage/_home_header.html.erb +0 -13
  384. data/app/views/users/_follower_modal.html.erb +0 -32
  385. data/app/views/users/_following_modal.html.erb +0 -32
  386. data/db/migrate/20160328222155_acts_as_follower_migration.rb +0 -17
  387. data/spec/controllers/my_controller_spec.rb +0 -2
  388. data/spec/jobs/user_follow_event_job_spec.rb +0 -24
  389. data/spec/jobs/user_unfollow_event_job_spec.rb +0 -25
  390. data/spec/lib/sufia/user_stat_importer_spec.rb +0 -309
  391. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +0 -33
  392. data/spec/views/users/_follower_modal.html.erb_spec.rb +0 -46
  393. data/spec/views/users/_following_modal.html.erb_spec.rb +0 -55
@@ -4,9 +4,8 @@ class CatalogController < ApplicationController
4
4
  include Sufia::Catalog
5
5
  include BlacklightAdvancedSearch::Controller
6
6
 
7
- # These before_filters apply the hydra access controls
8
- before_filter :enforce_show_permissions, only: :show
9
- skip_before_filter :default_html_head
7
+ # This filter applies the hydra access controls
8
+ before_action :enforce_show_permissions, only: :show
10
9
 
11
10
  def self.uploaded_field
12
11
  solr_name('system_create', :stored_sortable, type: :date)
@@ -73,13 +72,15 @@ class CatalogController < ApplicationController
73
72
  config.add_index_field solr_name("publisher", :stored_searchable), label: "Publisher", itemprop: 'publisher', link_to_search: solr_name("publisher", :facetable)
74
73
  config.add_index_field solr_name("based_near", :stored_searchable), label: "Location", itemprop: 'contentLocation', link_to_search: solr_name("based_near", :facetable)
75
74
  config.add_index_field solr_name("language", :stored_searchable), label: "Language", itemprop: 'inLanguage', link_to_search: solr_name("language", :facetable)
76
- config.add_index_field solr_name("date_uploaded", :stored_sortable, type: :date), label: "Date Uploaded", itemprop: 'datePublished'
77
- config.add_index_field solr_name("date_modified", :stored_sortable, type: :date), label: "Date Modified", itemprop: 'dateModified'
75
+ config.add_index_field solr_name("date_uploaded", :stored_sortable, type: :date), label: "Date Uploaded", itemprop: 'datePublished', helper_method: :human_readable_date
76
+ config.add_index_field solr_name("date_modified", :stored_sortable, type: :date), label: "Date Modified", itemprop: 'dateModified', helper_method: :human_readable_date
78
77
  config.add_index_field solr_name("date_created", :stored_searchable), label: "Date Created", itemprop: 'dateCreated'
79
- config.add_index_field solr_name("rights", :stored_searchable), label: "Rights", helper_method: :rights_statement_links
78
+ config.add_index_field solr_name("rights", :stored_searchable), label: "Rights", helper_method: :license_links
80
79
  config.add_index_field solr_name("resource_type", :stored_searchable), label: "Resource Type", link_to_search: solr_name("resource_type", :facetable)
81
80
  config.add_index_field solr_name("file_format", :stored_searchable), label: "File Format", link_to_search: solr_name("file_format", :facetable)
82
81
  config.add_index_field solr_name("identifier", :stored_searchable), label: "Identifier", helper_method: :index_field_link, field_name: 'identifier'
82
+ config.add_index_field solr_name("embargo_release_date", :stored_sortable, type: :date), label: "Embargo release date", helper_method: :human_readable_date
83
+ config.add_index_field solr_name("lease_expiration_date", :stored_sortable, type: :date), label: "Lease expiration date", helper_method: :human_readable_date
83
84
 
84
85
  # solr fields to be displayed in the show (single result) view
85
86
  # The ordering of the field names is the order of the display
@@ -88,11 +88,18 @@ Sufia.config do |config|
88
88
 
89
89
  # The user who runs audit jobs. Update this if you aren't using emails
90
90
  # config.audit_user_key = 'audituser@example.com'
91
+ #
92
+ # The banner image. Should be 5000px wide by 1000px tall.
93
+ # config.banner_image = 'https://cloud.githubusercontent.com/assets/92044/18370978/88ecac20-75f6-11e6-8399-6536640ef695.jpg'
91
94
 
92
95
  # Temporary path to hold uploads before they are ingested into FCrepo.
93
96
  # This must be a lambda that returns a Pathname
94
97
  # config.upload_path = ->() { Rails.root + 'tmp' + 'uploads' }
95
98
 
99
+ # Location on local file system where derivatives will be stored.
100
+ # If you use a multi-server architecture, this MUST be a shared volume.
101
+ # config.derivatives_path = File.join(Rails.root, 'tmp', 'derivatives')
102
+
96
103
  # If browse-everything has been configured, load the configs. Otherwise, set to nil.
97
104
  begin
98
105
  if defined? BrowseEverything
@@ -45,8 +45,8 @@ module Sufia
45
45
  file_path = "app/controllers/curation_concerns/#{plural_file_name}_controller.rb"
46
46
  if File.exist?(file_path)
47
47
  inject_into_file file_path, after: /include CurationConcerns::CurationConcernController/ do
48
- "\n # Adds Sufia behaviors to the controller.\n" \
49
- " include Sufia::WorksControllerBehavior\n"
48
+ "\n # Adds Sufia behaviors to the controller.\n" \
49
+ " include Sufia::WorksControllerBehavior\n"
50
50
  end
51
51
  else
52
52
  puts " \e[31mFailure\e[0m Sufia requires a #{controller_class_name} object. This generator assumes that the model is defined in the file #{file_path}, which does not exist."
data/lib/sufia.rb CHANGED
@@ -2,7 +2,6 @@ require 'select2-rails'
2
2
  require 'nest'
3
3
  require 'redis-namespace'
4
4
  require 'mailboxer'
5
- require 'acts_as_follower'
6
5
  require 'carrierwave'
7
6
  require 'rails_autolink'
8
7
  require 'font-awesome-rails'
@@ -35,8 +35,7 @@ module Sufia
35
35
  end
36
36
 
37
37
  # Then, parse creators and contributors out
38
- creator_names = munged_creators.select { |c| Sufia::Arkivo::CREATOR_TYPES.include? c['creatorType'] }.map { |c| c['name'] }
39
- contributor_names = munged_creators.select { |c| Sufia::Arkivo::CONTRIBUTOR_TYPES.include? c['creatorType'] }.map { |c| c['name'] }
38
+ creator_names, contributor_names = split_creators_and_contributors(munged_creators)
40
39
  munged['creator'] = creator_names unless creator_names.blank?
41
40
  munged['contributor'] = contributor_names unless contributor_names.blank?
42
41
 
@@ -44,6 +43,18 @@ module Sufia
44
43
  munged.delete('creators') if munged['creators']
45
44
  munged
46
45
  end
46
+
47
+ private
48
+
49
+ def split_creators_and_contributors(list_of_creators)
50
+ creators = []
51
+ contributors = []
52
+ list_of_creators.each do |creator|
53
+ creators << creator['name'] if Sufia::Arkivo::CREATOR_TYPES.include? creator['creatorType']
54
+ contributors << creator['name'] if Sufia::Arkivo::CONTRIBUTOR_TYPES.include? creator['creatorType']
55
+ end
56
+ [creators, contributors]
57
+ end
47
58
  end
48
59
  end
49
60
  end
@@ -7,6 +7,11 @@ module Sufia
7
7
  delegate(*(CurationConcerns.config.methods - Object.methods),
8
8
  to: :curation_concerns_config)
9
9
 
10
+ attr_writer :banner_image
11
+ def banner_image
12
+ @banner_image ||= "https://cloud.githubusercontent.com/assets/92044/18370978/88ecac20-75f6-11e6-8399-6536640ef695.jpg"
13
+ end
14
+
10
15
  attr_writer :persistent_hostpath
11
16
  def persistent_hostpath
12
17
  @persistent_hostpath ||= "http://localhost/files/"
@@ -0,0 +1,17 @@
1
+ require 'ruby-progressbar'
2
+
3
+ module Sufia
4
+ module ControlledVocabulary
5
+ module Importer
6
+ class Downloader
7
+ def self.fetch(url, output)
8
+ open(url) do |io|
9
+ IO.copy_stream(io, output)
10
+ end
11
+ rescue OpenURI::HTTPError => e
12
+ raise "Unable to download from #{url}\n#{e.message}: #{e.io.read}"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,62 @@
1
+ require_relative 'downloader'
2
+ require 'rdf/rdfxml'
3
+ module Sufia
4
+ module ControlledVocabulary
5
+ module Importer
6
+ class Language
7
+ URL = 'http://www.lexvo.org/resources/lexvo_2013-02-09.rdf.gz'.freeze
8
+
9
+ def initialize
10
+ stdout_logger = Logger.new(STDOUT)
11
+ stdout_logger.level = Logger::INFO
12
+ stdout_logger.formatter = proc do |_severity, _datetime, _progname, msg|
13
+ "#{msg}\n"
14
+ end
15
+ Rails.logger.extend(ActiveSupport::Logger.broadcast(stdout_logger))
16
+ end
17
+
18
+ def import
19
+ download
20
+ extract
21
+ logger.info "Importing #{rdf_path}"
22
+ Qa::Services::RDFAuthorityParser.import_rdf(
23
+ 'languages',
24
+ [rdf_path],
25
+ format: 'rdfxml',
26
+ predicate: RDF::Vocab::SKOS.prefLabel
27
+ )
28
+ logger.info "Import complete"
29
+ end
30
+
31
+ delegate :logger, to: Rails
32
+
33
+ def rdf_path
34
+ @rdf_path ||= download_path.sub(/\.gz$/, '')
35
+ end
36
+
37
+ def extract
38
+ return if File.exist?(rdf_path)
39
+ logger.info "Extracting #{download_path}"
40
+ system("gunzip #{download_path}")
41
+ raise "Unable to extract #{download_path}" unless $CHILD_STATUS.success?
42
+ end
43
+
44
+ def download
45
+ return if File.exist?(rdf_path) || File.exist?(download_path)
46
+ logger.info "Downloading #{URL}"
47
+ Downloader.fetch(URL, download_path)
48
+ end
49
+
50
+ def download_path
51
+ File.join(download_dir, File.basename(URL))
52
+ end
53
+
54
+ def download_dir
55
+ @download_dir ||= File.join(Rails.root, 'tmp')
56
+ FileUtils.mkdir_p @download_dir
57
+ @download_dir
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
data/lib/sufia/engine.rb CHANGED
@@ -7,6 +7,8 @@ module Sufia
7
7
  require 'jquery-ui-rails'
8
8
  require 'flot-rails'
9
9
  require 'almond-rails'
10
+ require 'jquery-datatables-rails'
11
+ require 'flipflop'
10
12
 
11
13
  config.autoload_paths += %W(
12
14
  #{config.root}/app/controllers/concerns
@@ -25,6 +27,7 @@ module Sufia
25
27
  load File.expand_path('../../../tasks/reindex.rake', __FILE__)
26
28
  load File.expand_path('../../../tasks/stats_tasks.rake', __FILE__)
27
29
  load File.expand_path('../../../tasks/sufia_user.rake', __FILE__)
30
+ load File.expand_path('../../../tasks/controlled_vocabularies.rake', __FILE__)
28
31
  end
29
32
 
30
33
  initializer 'requires' do
@@ -32,6 +35,9 @@ module Sufia
32
35
  end
33
36
 
34
37
  initializer 'configure' do
38
+ # Set the path for the flipflop config:
39
+ Flipflop::Engine.config_file = Sufia::Engine.root + "config/features.rb"
40
+
35
41
  Sufia.config.tap do |c|
36
42
  Hydra::Derivatives.ffmpeg_path = c.ffmpeg_path
37
43
  Hydra::Derivatives.temp_file_base = c.temp_file_base
@@ -58,6 +64,7 @@ module Sufia
58
64
 
59
65
  app.config.assets.precompile << /fontawesome-webfont\.(?:svg|ttf|woff)$/
60
66
  app.config.assets.precompile += %w(*.png *.jpg *.ico *.gif *.svg)
67
+ app.config.assets.precompile += %w(sufia/admin.css)
61
68
 
62
69
  Sprockets::ES6.configuration = { 'modules' => 'amd', 'moduleIds' => true }
63
70
  # When we upgrade to Sprockets 4, we can ditch sprockets-es6 and config AMD
@@ -44,7 +44,7 @@ module Sufia
44
44
  timestamp: RedisEventStore.instance.hget("events:#{event_id}", "timestamp")
45
45
  }
46
46
  end
47
- rescue Redis::CommandError
47
+ rescue Redis::CommandError, Redis::CannotConnectError
48
48
  RedisEventStore.logger.error("unable to fetch event: #{@key}")
49
49
  []
50
50
  end
@@ -52,7 +52,7 @@ module Sufia
52
52
  # Adds a value to the end of a list identified by key
53
53
  def push(value)
54
54
  RedisEventStore.instance.lpush(@key, value)
55
- rescue Redis::CommandError
55
+ rescue Redis::CommandError, Redis::CannotConnectError
56
56
  RedisEventStore.logger.error("unable to push event: #{@key}")
57
57
  nil
58
58
  end
@@ -18,7 +18,7 @@ module Sufia
18
18
 
19
19
  private
20
20
 
21
- def builder(capability_list_url: 'http://example.com/dataset1/capabilitylist.xml')
21
+ def builder
22
22
  Nokogiri::XML::Builder.new do |xml|
23
23
  xml.urlset('xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
24
24
  'xmlns:rs' => 'http://www.openarchives.org/rs/terms/') do
data/lib/sufia/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sufia
2
- VERSION = '7.1.0'.freeze
2
+ VERSION = '7.2.0'.freeze
3
3
  end
@@ -17,11 +17,11 @@
17
17
  -->
18
18
 
19
19
  <!--
20
- This is a stripped down config file used for a simple example...
21
- It is *not* a good example to work from.
20
+ This is a stripped down config file used for a simple example...
21
+ It is *not* a good example to work from.
22
22
  -->
23
23
  <config>
24
-
24
+
25
25
  <!-- Controls what version of Lucene various components of Solr
26
26
  adhere to. Generally, you want to use the latest version to
27
27
  get all bug fixes and improvements. It is highly recommended
@@ -29,15 +29,15 @@
29
29
  affect both how text is indexed and queried.
30
30
  -->
31
31
  <luceneMatchVersion>5.0.0</luceneMatchVersion>
32
-
32
+
33
33
  <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" />
34
34
  <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" />
35
35
  <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
36
36
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
37
37
 
38
- <directoryFactory name="DirectoryFactory"
38
+ <directoryFactory name="DirectoryFactory"
39
39
  class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}">
40
- </directoryFactory>
40
+ </directoryFactory>
41
41
 
42
42
  <codecFactory class="solr.SchemaCodecFactory"/>
43
43
 
@@ -45,18 +45,33 @@
45
45
 
46
46
 
47
47
  <dataDir>${solr.blacklight-core.data.dir:}</dataDir>
48
-
48
+
49
49
  <requestDispatcher handleSelect="true" >
50
50
  <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048000" />
51
51
  </requestDispatcher>
52
-
52
+
53
53
  <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
54
54
 
55
- <!-- config for the admin interface -->
55
+ <!-- config for the admin interface -->
56
56
  <admin>
57
57
  <defaultQuery>*:*</defaultQuery>
58
58
  </admin>
59
59
 
60
+ <updateHandler class="solr.DirectUpdateHandler2">
61
+ <updateLog>
62
+ <str name="dir">${solr.ulog.dir:}</str>
63
+ </updateLog>
64
+
65
+ <autoCommit>
66
+ <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
67
+ <openSearcher>false</openSearcher>
68
+ </autoCommit>
69
+
70
+ <autoSoftCommit>
71
+ <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
72
+ </autoSoftCommit>
73
+ </updateHandler>
74
+
60
75
  <!-- SearchHandler
61
76
 
62
77
  http://wiki.apache.org/solr/SearchHandler
@@ -87,7 +102,6 @@
87
102
  -->
88
103
  <str name="qf">
89
104
  id
90
- active_fedora_model_ssi
91
105
  title_tesim
92
106
  author_tesim
93
107
  subject_tesim
@@ -119,9 +133,6 @@
119
133
 
120
134
  <str name="facet">true</str>
121
135
  <str name="facet.mincount">1</str>
122
- <str name="facet.limit">10</str>
123
- <str name="facet.field">active_fedora_model_ssi</str>
124
- <str name="facet.field">subject_sim</str>
125
136
 
126
137
  <str name="spellcheck">true</str>
127
138
  <str name="spellcheck.dictionary">default</str>
@@ -190,7 +201,7 @@
190
201
  <!-- Spell Check
191
202
 
192
203
  The spell check component can return a list of alternative spelling
193
- suggestions.
204
+ suggestions.
194
205
 
195
206
  http://wiki.apache.org/solr/SpellCheckComponent
196
207
  -->
@@ -245,7 +256,7 @@
245
256
  </lst>
246
257
  -->
247
258
 
248
- <!-- a spellchecker that use an alternate comparator
259
+ <!-- a spellchecker that use an alternate comparator
249
260
 
250
261
  comparatorClass be one of:
251
262
  1. score (default)
@@ -1,8 +1,10 @@
1
1
  describe Sufia::CreateWithFilesActor do
2
- let(:create_actor) { double('create actor', create: true,
3
- curation_concern: work,
4
- update: true,
5
- user: user) }
2
+ let(:create_actor) do
3
+ double('create actor', create: true,
4
+ curation_concern: work,
5
+ update: true,
6
+ user: user)
7
+ end
6
8
  let(:actor) do
7
9
  CurationConcerns::Actors::ActorStack.new(work, user, [described_class])
8
10
  end
@@ -1,7 +1,9 @@
1
1
  describe Sufia::CreateWithRemoteFilesActor do
2
- let(:create_actor) { double('create actor', create: true,
3
- curation_concern: work,
4
- user: user) }
2
+ let(:create_actor) do
3
+ double('create actor', create: true,
4
+ curation_concern: work,
5
+ user: user)
6
+ end
5
7
  let(:actor) do
6
8
  CurationConcerns::Actors::ActorStack.new(work, user, [described_class])
7
9
  end
@@ -11,12 +13,14 @@ describe Sufia::CreateWithRemoteFilesActor do
11
13
  let(:url2) { "https://dl.dropbox.com/fake/blah-blah.Getting%20Started.pdf" }
12
14
  let(:file) { "file:///local/file/here.txt" }
13
15
 
14
- let(:remote_files) { [{ url: url1,
15
- expires: "2014-03-31T20:37:36.214Z",
16
- file_name: "filepicker-demo.txt.txt" },
17
- { url: url2,
18
- expires: "2014-03-31T20:37:36.731Z",
19
- file_name: "Getting+Started.pdf" }] }
16
+ let(:remote_files) do
17
+ [{ url: url1,
18
+ expires: "2014-03-31T20:37:36.214Z",
19
+ file_name: "filepicker-demo.txt.txt" },
20
+ { url: url2,
21
+ expires: "2014-03-31T20:37:36.731Z",
22
+ file_name: "Getting+Started.pdf" }]
23
+ end
20
24
  let(:attributes) { { remote_files: remote_files } }
21
25
 
22
26
  before do
@@ -25,12 +29,14 @@ describe Sufia::CreateWithRemoteFilesActor do
25
29
  end
26
30
 
27
31
  context "with source uris that are remote" do
28
- let(:remote_files) { [{ url: url1,
29
- expires: "2014-03-31T20:37:36.214Z",
30
- file_name: "filepicker-demo.txt.txt" },
31
- { url: url2,
32
- expires: "2014-03-31T20:37:36.731Z",
33
- file_name: "Getting+Started.pdf" }] }
32
+ let(:remote_files) do
33
+ [{ url: url1,
34
+ expires: "2014-03-31T20:37:36.214Z",
35
+ file_name: "filepicker-demo.txt.txt" },
36
+ { url: url2,
37
+ expires: "2014-03-31T20:37:36.731Z",
38
+ file_name: "Getting+Started.pdf" }]
39
+ end
34
40
 
35
41
  it "attaches files" do
36
42
  expect(ImportUrlJob).to receive(:perform_later).with(FileSet, CurationConcerns::Operation).twice
@@ -39,9 +45,11 @@ describe Sufia::CreateWithRemoteFilesActor do
39
45
  end
40
46
 
41
47
  context "with source uris that are local files" do
42
- let(:remote_files) { [{ url: file,
43
- expires: "2014-03-31T20:37:36.214Z",
44
- file_name: "here.txt" }] }
48
+ let(:remote_files) do
49
+ [{ url: file,
50
+ expires: "2014-03-31T20:37:36.214Z",
51
+ file_name: "here.txt" }]
52
+ end
45
53
 
46
54
  it "attaches files" do
47
55
  expect(IngestLocalFileJob).to receive(:perform_later).with(FileSet, "/local/file/here.txt", user)