worthwhile 0.0.1.alpha → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rspec +1 -0
  4. data/.travis.yml +19 -0
  5. data/Gemfile +7 -11
  6. data/README.md +8 -12
  7. data/Rakefile +17 -2
  8. data/app/actors/concerns/worthwhile/manages_embargoes_actor.rb +79 -0
  9. data/app/actors/curation_concern/base_actor.rb +68 -0
  10. data/app/actors/curation_concern/generic_file_actor.rb +40 -0
  11. data/app/actors/curation_concern/generic_work_actor.rb +92 -0
  12. data/app/actors/curation_concern/linked_resource_actor.rb +4 -0
  13. data/app/assets/images/default.png +0 -0
  14. data/app/assets/images/nope.png +0 -0
  15. data/app/assets/javascripts/.gitkeep +0 -0
  16. data/app/assets/javascripts/modernizr.js +3 -0
  17. data/app/assets/javascripts/worthwhile/.gitkeep +0 -0
  18. data/app/assets/javascripts/worthwhile/accept_contributor_agreement.js +15 -0
  19. data/app/assets/javascripts/worthwhile/application.js +18 -0
  20. data/app/assets/javascripts/worthwhile/browse_everything_implement.js +7 -0
  21. data/app/assets/javascripts/worthwhile/embargoes.js +17 -0
  22. data/app/assets/javascripts/worthwhile/facet_mine.js +22 -0
  23. data/app/assets/javascripts/worthwhile/help_modal.js +36 -0
  24. data/app/assets/javascripts/worthwhile/link_groups.js.coffee +123 -0
  25. data/app/assets/javascripts/worthwhile/link_users.js.coffee +126 -0
  26. data/app/assets/javascripts/worthwhile/manage_repeating_fields.js +74 -0
  27. data/app/assets/javascripts/worthwhile/proxy_rights.js.coffee +95 -0
  28. data/app/assets/javascripts/worthwhile/proxy_submission.js +23 -0
  29. data/app/assets/javascripts/worthwhile/select_works.js.coffee +20 -0
  30. data/app/assets/javascripts/worthwhile/worthwhile.js +45 -0
  31. data/app/assets/stylesheets/worthwhile.css.scss +23 -0
  32. data/app/assets/stylesheets/worthwhile/_global-variables.css.scss +5 -0
  33. data/app/assets/stylesheets/worthwhile/_modules.css.scss +14 -0
  34. data/app/assets/stylesheets/worthwhile/_positioning.css.scss +138 -0
  35. data/app/assets/stylesheets/worthwhile/_theme.css.scss +46 -0
  36. data/app/assets/stylesheets/worthwhile/_typography.css.scss +142 -0
  37. data/app/assets/stylesheets/worthwhile/_variables_bootstrap.css.scss +7 -0
  38. data/app/assets/stylesheets/worthwhile/_worthwhile.css.scss +7 -0
  39. data/app/assets/stylesheets/worthwhile/downloads.css.scss +3 -0
  40. data/app/assets/stylesheets/worthwhile/help_requests.css.scss +3 -0
  41. data/app/assets/stylesheets/worthwhile/modules/accessibility.css.scss +50 -0
  42. data/app/assets/stylesheets/worthwhile/modules/accordion.css.scss +33 -0
  43. data/app/assets/stylesheets/worthwhile/modules/attributes.css.scss +26 -0
  44. data/app/assets/stylesheets/worthwhile/modules/classify_work.css.scss +100 -0
  45. data/app/assets/stylesheets/worthwhile/modules/collections.css.scss +42 -0
  46. data/app/assets/stylesheets/worthwhile/modules/embargoes.css.scss +15 -0
  47. data/app/assets/stylesheets/worthwhile/modules/emphatic_action_area.css.scss +14 -0
  48. data/app/assets/stylesheets/worthwhile/modules/forms.css.scss +116 -0
  49. data/app/assets/stylesheets/worthwhile/modules/multi_value_fields.css.scss +52 -0
  50. data/app/assets/stylesheets/worthwhile/modules/pagination.css.scss +4 -0
  51. data/app/assets/stylesheets/worthwhile/modules/search_results.css.scss +55 -0
  52. data/app/assets/stylesheets/worthwhile/modules/site_actions.css.scss +53 -0
  53. data/app/assets/stylesheets/worthwhile/modules/site_search.css.scss +46 -0
  54. data/app/controllers/catalog_controller.rb +3 -0
  55. data/app/controllers/collections_controller.rb +59 -0
  56. data/app/controllers/concerns/worthwhile/application_controller_behavior.rb +23 -0
  57. data/app/controllers/concerns/worthwhile/catalog_controller.rb +347 -0
  58. data/app/controllers/concerns/worthwhile/curation_concern_controller.rb +131 -0
  59. data/app/controllers/concerns/worthwhile/files_controller.rb +149 -0
  60. data/app/controllers/concerns/worthwhile/manages_embargoes.rb +22 -0
  61. data/app/controllers/concerns/worthwhile/parent_container.rb +31 -0
  62. data/app/controllers/concerns/worthwhile/themed_layout_controller.rb +31 -0
  63. data/app/controllers/concerns/worthwhile/without_namespace.rb +15 -0
  64. data/app/controllers/curation_concern/generic_files_controller.rb +6 -0
  65. data/app/controllers/curation_concern/generic_works_controller.rb +6 -0
  66. data/app/controllers/curation_concern/linked_resources_controller.rb +68 -0
  67. data/app/controllers/curation_concern/permissions_controller.rb +19 -0
  68. data/app/controllers/downloads_controller.rb +4 -0
  69. data/app/controllers/embargoes_controller.rb +44 -0
  70. data/app/controllers/leases_controller.rb +34 -0
  71. data/app/controllers/registrations_controller.rb +20 -0
  72. data/app/controllers/sessions_controller.rb +4 -0
  73. data/app/controllers/worthwhile/application_controller.rb +7 -0
  74. data/app/controllers/worthwhile/classify_concerns_controller.rb +35 -0
  75. data/app/datastreams/generic_work_metadata.rb +3 -0
  76. data/app/datastreams/worthwhile/generic_work_rdf_properties.rb +57 -0
  77. data/app/datastreams/worthwhile/properties_datastream.rb +28 -0
  78. data/app/helpers/curate/collections_helper.rb +133 -0
  79. data/app/helpers/worthwhile/ability_helper.rb +46 -0
  80. data/app/helpers/worthwhile/attribute_helper.rb +67 -0
  81. data/app/helpers/worthwhile/catalog_helper.rb +38 -0
  82. data/app/helpers/worthwhile/collections_helper.rb +19 -0
  83. data/app/helpers/worthwhile/embargo_helper.rb +17 -0
  84. data/app/helpers/worthwhile/generic_file_helper.rb +19 -0
  85. data/app/helpers/worthwhile/lease_helper.rb +18 -0
  86. data/app/helpers/worthwhile/main_app_helpers.rb +14 -0
  87. data/app/helpers/worthwhile/render_constraints_helper.rb +42 -0
  88. data/app/helpers/worthwhile/search_paths_helper.rb +13 -0
  89. data/app/helpers/worthwhile/thumbnail_helper.rb +11 -0
  90. data/app/helpers/worthwhile/title_helper.rb +23 -0
  91. data/app/helpers/worthwhile/url_helper.rb +16 -0
  92. data/app/inputs/multi_value_input.rb +72 -0
  93. data/app/models/collection.rb +15 -0
  94. data/app/models/concerns/curation_concern/collection_model.rb +62 -0
  95. data/app/models/concerns/curation_concern/curatable.rb +77 -0
  96. data/app/models/concerns/curation_concern/has_representative.rb +14 -0
  97. data/app/models/concerns/curation_concern/human_readable_type.rb +23 -0
  98. data/app/models/concerns/curation_concern/with_basic_metadata.rb +49 -0
  99. data/app/models/concerns/curation_concern/with_editors.rb +44 -0
  100. data/app/models/concerns/curation_concern/with_generic_files.rb +23 -0
  101. data/app/models/concerns/curation_concern/with_linked_resources.rb +21 -0
  102. data/app/models/concerns/curation_concern/work.rb +24 -0
  103. data/app/models/concerns/worthwhile/ability.rb +34 -0
  104. data/app/models/concerns/worthwhile/generic_file/versioned_content.rb +18 -0
  105. data/app/models/concerns/worthwhile/generic_file_base.rb +64 -0
  106. data/app/models/concerns/worthwhile/solr_document_behavior.rb +140 -0
  107. data/app/models/generic_work.rb +5 -0
  108. data/app/models/worthwhile/classify_concern.rb +47 -0
  109. data/app/models/worthwhile/content_version.rb +23 -0
  110. data/app/models/worthwhile/contributor_agreement.rb +23 -0
  111. data/app/models/worthwhile/generic_file.rb +5 -0
  112. data/app/models/worthwhile/linked_resource.rb +41 -0
  113. data/app/models/worthwhile/quick_classification_query.rb +31 -0
  114. data/app/services/worthwhile/curation_concern.rb +21 -0
  115. data/app/services/worthwhile/embargo_service.rb +26 -0
  116. data/app/services/worthwhile/lease_service.rb +23 -0
  117. data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
  118. data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
  119. data/app/views/catalog/_document.html.erb +3 -0
  120. data/app/views/catalog/_document_list.html.erb +5 -0
  121. data/app/views/catalog/_home_text.html.erb +8 -0
  122. data/app/views/catalog/_index_default.html.erb +17 -0
  123. data/app/views/catalog/_index_header_list_default.html.erb +17 -0
  124. data/app/views/catalog/_navbar.html.erb +12 -0
  125. data/app/views/catalog/_show_partials/_default.html.erb +22 -0
  126. data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
  127. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  128. data/app/views/catalog/index.html.erb +48 -0
  129. data/app/views/collections/_batch_edits_actions.html.erb +3 -0
  130. data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
  131. data/app/views/collections/_collection.html.erb +1 -0
  132. data/app/views/collections/_dashboard_document_list.html.erb +6 -0
  133. data/app/views/collections/_document_list.html.erb +7 -0
  134. data/app/views/collections/_edit_actions.html.erb +5 -0
  135. data/app/views/collections/_edit_descriptions.html.erb +20 -0
  136. data/app/views/collections/_form.html.erb +26 -0
  137. data/app/views/collections/_form_for_select_collection.html.erb +34 -0
  138. data/app/views/collections/_form_permission.html.erb +36 -0
  139. data/app/views/collections/_form_required_information.html.erb +11 -0
  140. data/app/views/collections/_identifier_and_action.html.erb +15 -0
  141. data/app/views/collections/_media_display.html.erb +1 -0
  142. data/app/views/collections/_paginate.html.erb +6 -0
  143. data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
  144. data/app/views/collections/_show_actions.html.erb +8 -0
  145. data/app/views/collections/_show_descriptions.html.erb +10 -0
  146. data/app/views/collections/_show_fields.html.erb +0 -0
  147. data/app/views/collections/_single_item_action_fields.html.erb +6 -0
  148. data/app/views/collections/_sort_and_per_page.html.erb +29 -0
  149. data/app/views/collections/_view_type_group.html.erb +13 -0
  150. data/app/views/collections/edit.html.erb +22 -0
  151. data/app/views/collections/new.html.erb +15 -0
  152. data/app/views/collections/show.html.erb +24 -0
  153. data/app/views/curate/collections/_add_to_collection_modal.html.erb +15 -0
  154. data/app/views/curate/collections/_button_remove_from_collection.html.erb +6 -0
  155. data/app/views/curate/collections/_form_to_add_member.html.erb +27 -0
  156. data/app/views/curate/collections/add_member_form.html.erb +6 -0
  157. data/app/views/curation_concern/base/_attributes.html.erb +25 -0
  158. data/app/views/curation_concern/base/_collections.html.erb +26 -0
  159. data/app/views/curation_concern/base/_form.html.erb +27 -0
  160. data/app/views/curation_concern/base/_form_additional_information.html.erb +9 -0
  161. data/app/views/curation_concern/base/_form_content_license.html.erb +16 -0
  162. data/app/views/curation_concern/base/_form_contributor_agreement.html.erb +29 -0
  163. data/app/views/curation_concern/base/_form_descriptive_fields.erb +23 -0
  164. data/app/views/curation_concern/base/_form_files_and_links.html.erb +29 -0
  165. data/app/views/curation_concern/base/_form_permission.html.erb +52 -0
  166. data/app/views/curation_concern/base/_form_permission_embargo.html.erb +6 -0
  167. data/app/views/curation_concern/base/_form_permission_lease.html.erb +6 -0
  168. data/app/views/curation_concern/base/_form_permission_under_embargo.html.erb +16 -0
  169. data/app/views/curation_concern/base/_form_permission_under_lease.html.erb +18 -0
  170. data/app/views/curation_concern/base/_form_representative_image.html.erb +13 -0
  171. data/app/views/curation_concern/base/_form_required_information.html.erb +11 -0
  172. data/app/views/curation_concern/base/_form_supplementary_fields.html.erb +15 -0
  173. data/app/views/curation_concern/base/_legally_binding_text.html.erb +33 -0
  174. data/app/views/curation_concern/base/_related_files.html.erb +24 -0
  175. data/app/views/curation_concern/base/_related_resources.html.erb +40 -0
  176. data/app/views/curation_concern/base/_representative_media.html.erb +8 -0
  177. data/app/views/curation_concern/base/edit.html.erb +15 -0
  178. data/app/views/curation_concern/base/new.html.erb +14 -0
  179. data/app/views/curation_concern/base/show.html.erb +32 -0
  180. data/app/views/curation_concern/base/unauthorized.html.erb +3 -0
  181. data/app/views/curation_concern/generic_files/_form.html.erb +35 -0
  182. data/app/views/curation_concern/generic_files/_media_display.html.erb +20 -0
  183. data/app/views/curation_concern/generic_files/edit.html.erb +5 -0
  184. data/app/views/curation_concern/generic_files/show.html.erb +15 -0
  185. data/app/views/curation_concern/generic_works/_generic_work.html.erb +3 -0
  186. data/app/views/curation_concern/linked_resources/_form.html.erb +11 -0
  187. data/app/views/curation_concern/linked_resources/edit.html.erb +5 -0
  188. data/app/views/curation_concern/linked_resources/new.html.erb +5 -0
  189. data/app/views/curation_concern/permissions/confirm.html.erb +13 -0
  190. data/app/views/curation_concern/worthwhile/generic_files/_actions.html.erb +16 -0
  191. data/app/views/curation_concern/worthwhile/generic_files/_generic_file.html.erb +12 -0
  192. data/app/views/embargoes/_embargo_history.html.erb +7 -0
  193. data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
  194. data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
  195. data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
  196. data/app/views/embargoes/edit.html.erb +43 -0
  197. data/app/views/embargoes/index.html.erb +18 -0
  198. data/app/views/layouts/boilerplate.html.erb +22 -0
  199. data/app/views/layouts/common_objects.html.erb +36 -0
  200. data/app/views/layouts/curate_nd.html.erb +33 -0
  201. data/app/views/layouts/curate_nd/1_column.html.erb +22 -0
  202. data/app/views/layouts/curate_nd/2_column.html.erb +26 -0
  203. data/app/views/layouts/curate_nd/catalog.html.erb +38 -0
  204. data/app/views/layouts/curate_nd/dashboard.html.erb +22 -0
  205. data/app/views/leases/_lease_history.html.erb +7 -0
  206. data/app/views/leases/_list_active_leases.html.erb +16 -0
  207. data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
  208. data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
  209. data/app/views/leases/edit.html.erb +43 -0
  210. data/app/views/leases/index.html.erb +18 -0
  211. data/app/views/shared/_add_content.html.erb +32 -0
  212. data/app/views/shared/_brand_bar.html.erb +10 -0
  213. data/app/views/shared/_flash_message.html.erb +17 -0
  214. data/app/views/shared/_footer.html.erb +10 -0
  215. data/app/views/shared/_ga.html.erb +6 -0
  216. data/app/views/shared/_header.html.erb +12 -0
  217. data/app/views/shared/_my_actions.html.erb +21 -0
  218. data/app/views/shared/_site_actions.html.erb +7 -0
  219. data/app/views/shared/_site_search.html.erb +12 -0
  220. data/app/views/shared/_title_bar.html.erb +16 -0
  221. data/app/views/worthwhile/classify_concerns/new.html.erb +27 -0
  222. data/app/workers/visibility_copy_worker.rb +29 -0
  223. data/config/initializers/simple_form.rb +31 -0
  224. data/config/locales/sufia.en.yml +26 -0
  225. data/config/locales/worthwhile.en.yml +68 -0
  226. data/config/routes.rb +4 -0
  227. data/lib/generators/worthwhile/install_generator.rb +74 -0
  228. data/lib/generators/worthwhile/templates/worthwhile.css.scss +3 -0
  229. data/lib/generators/worthwhile/templates/worthwhile.js +1 -0
  230. data/lib/generators/worthwhile/templates/worthwhile_config.rb +3 -0
  231. data/lib/generators/worthwhile/templates/worthwhile_helper.rb +4 -0
  232. data/lib/worthwhile.rb +3 -1
  233. data/lib/worthwhile/configuration.rb +74 -0
  234. data/lib/worthwhile/controller_resource.rb +10 -0
  235. data/lib/worthwhile/engine.rb +20 -0
  236. data/lib/worthwhile/rails/routes.rb +78 -0
  237. data/lib/worthwhile/spec_support.rb +10 -0
  238. data/lib/worthwhile/version.rb +1 -1
  239. data/spec/abilities/generic_file_abilities_spec.rb +62 -0
  240. data/spec/abilities/generic_work_abilities_spec.rb +58 -0
  241. data/spec/actors/curation_concern/generic_work_actor_spec.rb +215 -0
  242. data/spec/actors/curation_concern/linked_resource_actor_spec.rb +36 -0
  243. data/spec/actors/worthwile/manages_embargoes_actor_spec.rb +95 -0
  244. data/spec/controllers/catalog_controller_spec.rb +114 -0
  245. data/spec/controllers/collections_controller_spec.rb +216 -0
  246. data/spec/controllers/curation_concern/generic_files_controller_spec.rb +258 -0
  247. data/spec/controllers/curation_concern/generic_works_controller_spec.rb +171 -0
  248. data/spec/controllers/curation_concern/linked_resources_controller_spec.rb +123 -0
  249. data/spec/controllers/curation_concern/permissions_controller_spec.rb +29 -0
  250. data/spec/controllers/downloads_controller_spec.rb +53 -0
  251. data/spec/controllers/embargoes_controller_spec.rb +107 -0
  252. data/spec/controllers/leases_controller_spec.rb +95 -0
  253. data/spec/controllers/worthwhile/classify_concerns_controller_spec.rb +35 -0
  254. data/spec/factories/collections_factory.rb +21 -0
  255. data/spec/factories/create_curation_concern.rb +3 -0
  256. data/spec/factories/generic_files.rb +18 -0
  257. data/spec/factories/generic_works.rb +37 -0
  258. data/spec/factories/linked_resources_factory.rb +18 -0
  259. data/spec/factories/users.rb +15 -0
  260. data/spec/features/add_external_link_spec.rb +25 -0
  261. data/spec/features/add_file_spec.rb +28 -0
  262. data/spec/features/collection_spec.rb +238 -0
  263. data/spec/features/embargo_spec.rb +45 -0
  264. data/spec/features/lease_spec.rb +43 -0
  265. data/spec/features/update_file_spec.rb +28 -0
  266. data/spec/fixtures/files/image.png +0 -0
  267. data/spec/helpers/catalog_helper_spec.rb +58 -0
  268. data/spec/helpers/configuration_helper_spec.rb +13 -0
  269. data/spec/helpers/render_constraints_helper_spec.rb +19 -0
  270. data/spec/helpers/thumbnail_helper_spec.rb +21 -0
  271. data/spec/helpers/url_helper_spec.rb +19 -0
  272. data/spec/matchers.rb +24 -0
  273. data/spec/matchers/metadata_field_matchers.rb +28 -0
  274. data/spec/models/collection_spec.rb +136 -0
  275. data/spec/models/curation_concern/collection_model_spec.rb +50 -0
  276. data/spec/models/curation_concern/work_spec.rb +30 -0
  277. data/spec/models/generic_work_spec.rb +24 -0
  278. data/spec/models/worthwhile/content_version_spec.rb +27 -0
  279. data/spec/models/worthwhile/generic_file_spec.rb +77 -0
  280. data/spec/models/worthwhile/linked_resource_spec.rb +76 -0
  281. data/spec/routing/worthwhile/routes_spec.rb +23 -0
  282. data/spec/services/embargo_service_spec.rb +38 -0
  283. data/spec/services/lease_service_spec.rb +37 -0
  284. data/spec/spec_helper.rb +30 -5
  285. data/spec/support/controllers/engine_helpers.rb +7 -0
  286. data/spec/support/curation_concern/factory_helpers.rb +14 -0
  287. data/spec/support/features.rb +19 -0
  288. data/spec/support/features/fixture_file_upload.rb +14 -0
  289. data/spec/support/features/session_helpers.rb +41 -0
  290. data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
  291. data/spec/support/shared/shared_examples_is_a_curation_concern_model.rb +40 -0
  292. data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
  293. data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
  294. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -29
  295. data/spec/views/curation_concern/base/_attributes.html.erb_spec.rb +25 -0
  296. data/spec/views/curation_concern/base/show.html.erb_spec.rb +25 -0
  297. data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
  298. data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
  299. data/spec/workers/visibility_copy_worker_spec.rb +68 -0
  300. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  301. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  302. data/vendor/assets/javascripts/handlebars.js +2278 -0
  303. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
  304. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
  305. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
  306. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
  307. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
  308. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
  309. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
  310. data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
  311. data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
  312. data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
  313. data/vendor/assets/stylesheets/token-input-mac.css +204 -0
  314. data/vendor/assets/stylesheets/token-input.css +127 -0
  315. data/worthwhile.gemspec +9 -3
  316. metadata +469 -9
@@ -0,0 +1,27 @@
1
+ <% content_for :page_header do %>
2
+
3
+ <h2>What are you uploading?</h2>
4
+ <p>Before we can begin we need to know a little about what you're uploading.</p>
5
+
6
+ <% end %>
7
+
8
+
9
+ <div class="row">
10
+ <ul class="classify-work">
11
+ <% classify_concern.all_curation_concern_classes.each do |klass| %>
12
+ <% if can? :create, klass %>
13
+ <li class="work-type">
14
+ <h3 class="title"><%= klass.human_readable_type %></h3>
15
+ <p class="short-description"><%= klass.human_readable_short_description %></p>
16
+ <%= link_to 'Add New',
17
+ main_app.new_polymorphic_path([:curation_concern, klass]),
18
+ class: "add-button btn btn-primary #{dom_class(klass, 'add_new')}"
19
+ %>
20
+ </li>
21
+ <% end %>
22
+ <% end %>
23
+ <li class="work-type placeholder" aria-hidden="true"></li>
24
+ <li class="work-type placeholder" aria-hidden="true"></li>
25
+ <li class="work-type placeholder" aria-hidden="true"></li>
26
+ </ul>
27
+ </div>
@@ -0,0 +1,29 @@
1
+ class VisibilityCopyWorker
2
+ def queue_name
3
+ :permissions
4
+ end
5
+
6
+ attr_accessor :pid
7
+
8
+ def initialize(pid)
9
+ self.pid = pid
10
+ end
11
+
12
+ def run
13
+ work = ActiveFedora::Base.find(pid)
14
+ work.generic_files.each do |file|
15
+ # visibility must come first, because it can clear an embargo/lease
16
+ file.visibility = work.visibility
17
+
18
+ file.embargo_release_date = work.embargo_release_date
19
+ file.visibility_during_embargo = work.visibility_during_embargo
20
+ file.visibility_after_embargo = work.visibility_after_embargo
21
+
22
+ file.lease_expiration_date = work.lease_expiration_date
23
+ file.visibility_during_lease = work.visibility_during_lease
24
+ file.visibility_after_lease = work.visibility_after_lease
25
+ file.save!
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,31 @@
1
+ require 'simple_form'
2
+ # Use this setup block to configure all options available in SimpleForm.
3
+ SimpleForm.setup do |config|
4
+ config.wrappers :inline, tag: 'span', class: 'form-group inline', error_class: 'has-error' do |b|
5
+ b.use :html5
6
+ b.use :placeholder
7
+ b.use :label, class: 'control-label'
8
+ b.use :input, class: 'form-control'
9
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
10
+ end
11
+
12
+ config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
13
+ b.use :html5
14
+ b.use :placeholder
15
+ b.use :label, class: 'control-label'
16
+ b.wrapper tag: 'div' do |ba|
17
+ ba.use :input, class: 'form-control'
18
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
19
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
20
+ end
21
+ end
22
+
23
+ # Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
24
+ # Check the Bootstrap docs (http://getbootstrap.com/css/)
25
+ # to learn about the different styles for forms and inputs,
26
+ # buttons and other elements.
27
+ config.default_wrapper = :vertical_form
28
+
29
+ config.error_notification_class = 'alert alert-danger'
30
+ config.button_class = 'btn btn-default'
31
+ end
@@ -0,0 +1,26 @@
1
+ en:
2
+ sufia:
3
+ product_name: "Curate"
4
+ institution_name: "Your Institution"
5
+ institution_homepage_url: "#"
6
+ division_name: "Your Division at Institution"
7
+ division_homepage_url: "#"
8
+ search:
9
+ form:
10
+ q:
11
+ label: "Search Curate"
12
+ placeholder: "Type keywords in here"
13
+ search_facets:
14
+ label: "View:"
15
+ profile:
16
+ default_title: "Selected Works:"
17
+ work:
18
+ editor:
19
+ legend: "Content Editors"
20
+ caption: "Who should be able to make changes to this work?"
21
+ individual:
22
+ name: "Individual"
23
+ help: "At least one person should be able to edit this work"
24
+ group:
25
+ name: "Group"
26
+ help: "Add groups to allow others to collaboratively edit this work."
@@ -0,0 +1,68 @@
1
+ en:
2
+ worthwhile:
3
+ catalog:
4
+ index:
5
+ type_tabs:
6
+ all: All
7
+ blacklight:
8
+ search:
9
+ fields:
10
+ facet:
11
+ human_readable_type_sim: Type of Work
12
+ desc_metadata__creator_sim: Creator
13
+ desc_metadata__tag_sim: Keyword
14
+ desc_metadata__subject_sim: Subject
15
+ desc_metadata__language_sim: Language
16
+ desc_metadata__based_near_sim: Location
17
+ desc_metadata__publisher_sim: Publisher
18
+ file_format_sim: Format
19
+ generic_type_sim: Type
20
+ index:
21
+ desc_metadata__description_tesim: "Description"
22
+ desc_metadata__tag_tesim: "Keyword"
23
+ desc_metadata__subject_tesim: "Subject"
24
+ desc_metadata__creator_tesim: "Creator"
25
+ desc_metadata__contributor_tesim: "Contributor"
26
+ desc_metadata__publisher_tesim: "Publisher"
27
+ desc_metadata__based_near_tesim: "Location"
28
+ desc_metadata__language_tesim: "Language"
29
+ desc_metadata__date_uploaded_tesi: "Date Uploaded"
30
+ desc_metadata__date_modified_tesi: "Date Modified"
31
+ desc_metadata__date_created_tesim: "Date Created"
32
+ desc_metadata__rights_tesim: "Rights"
33
+ human_readable_type_tesim: "Resource Type"
34
+ desc_metadata__format_tesim: "File Format"
35
+ desc_metadata__identifier_tesim: "Identifier"
36
+ show:
37
+ desc_metadata__title_tesim: "Title"
38
+ desc_metadata__description_tesim: "Description"
39
+ desc_metadata__tag_tesim: "Keyword"
40
+ desc_metadata__subject_tesim: "Subject"
41
+ desc_metadata__creator_tesim: "Creator"
42
+ desc_metadata__contributor_tesim: "Contributor"
43
+ desc_metadata__publisher_tesim: "Publisher"
44
+ desc_metadata__based_near_tesim: "Location"
45
+ desc_metadata__language_tesim: "Language"
46
+ desc_metadata__date_uploaded_tesi: "Date Uploaded"
47
+ desc_metadata__date_modified_tesi: "Date Modified"
48
+ desc_metadata__date_created_tesim: "Date Created"
49
+ desc_metadata__rights_tesim: "Rights"
50
+ human_readable_type_tesim: "Resource Type"
51
+ desc_metadata__format_tesim: "File Format"
52
+ desc_metadata__identifier_tesim: "Identifier"
53
+ simple_form:
54
+ hints:
55
+ defaults:
56
+ description: 'Please keep your description to 300 words or fewer.'
57
+ labels:
58
+ defaults:
59
+ lease_expiration_date: 'until'
60
+ embargo_release_date: 'until'
61
+ visibility_during_embargo: 'Restricted to'
62
+ visibility_after_embargo: 'then open it up to'
63
+ visibility_during_lease: 'Is available for'
64
+ visibility_after_lease: 'then restrict it to'
65
+
66
+
67
+
68
+
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ Worthwhile::Engine.routes.draw do
2
+ # mount BrowseEverything::Engine => '/remote_files/browse'
3
+ resources :classify_concerns, only: [:new, :create]
4
+ end
@@ -0,0 +1,74 @@
1
+ require 'rails/generators'
2
+
3
+ module Worthwhile
4
+ class Install < Rails::Generators::Base
5
+
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ def run_blacklight_generator
9
+ say_status("warning", "GENERATING BL", :yellow)
10
+ generate 'blacklight:install', '--devise'
11
+
12
+ say_status("warning", "GENERATING HYDRA-HEAD", :yellow)
13
+ generate "hydra:head -f"
14
+
15
+ say_status("warning", "GENERATING SUFIA", :yellow)
16
+ generate "sufia:models:install#{options[:force] ? ' -f' : ''}"
17
+ end
18
+
19
+ def remove_catalog_controller
20
+ say_status("warning", "Removing Blacklight's generated CatalogController...", :yellow)
21
+ remove_file('app/controllers/catalog_controller.rb')
22
+ end
23
+
24
+ def inject_application_controller_behavior
25
+ inject_into_file 'app/controllers/application_controller.rb', :after => /Blacklight::Controller\s*\n/ do
26
+ " include Worthwhile::ApplicationControllerBehavior\n"
27
+ end
28
+ end
29
+
30
+ def inject_routes
31
+ inject_into_file 'config/routes.rb', :after => /devise_for :users\s*\n/ do
32
+ " mount Hydra::Collections::Engine => '/'\n"\
33
+ " mount Worthwhile::Engine, at: '/'\n"\
34
+ " worthwhile_collections\n"\
35
+ " worthwhile_curation_concerns\n"\
36
+ " worthwhile_embargo_management\n"\
37
+ end
38
+ end
39
+
40
+ def inject_ability
41
+ inject_into_file 'app/models/ability.rb', :after => /Hydra::Ability\s*\n/ do
42
+ " include Worthwhile::Ability\n"\
43
+ " self.ability_logic += [:everyone_can_create_curation_concerns]\n\n"
44
+ end
45
+ end
46
+
47
+ # Add behaviors to the SolrDocument model
48
+ def inject_solr_document_behavior
49
+ file_path = "app/models/solr_document.rb"
50
+ if File.exists?(file_path)
51
+ inject_into_file file_path, after: /include Blacklight::Solr::Document.*$/ do
52
+ "\n # Adds Worthwhile behaviors to the SolrDocument.\n" +
53
+ " include Worthwhile::SolrDocumentBehavior\n"
54
+ end
55
+ else
56
+ puts " \e[31mFailure\e[0m Worthwhile requires a SolrDocument object. This generators assumes that the model is defined in the file #{file_path}, which does not exist."
57
+ end
58
+ end
59
+
60
+ def assets
61
+ copy_file "worthwhile.css.scss", "app/assets/stylesheets/worthwhile.css.scss"
62
+ copy_file "worthwhile.js", "app/assets/javascripts/worthwhile.js"
63
+ end
64
+
65
+ def add_helper
66
+ copy_file "worthwhile_helper.rb", "app/helpers/worthwhile_helper.rb"
67
+ #inject_into_class 'app/helpers/application_helper.rb', ApplicationHelper, " include WorthwhileHelper"
68
+ end
69
+
70
+ def add_config_file
71
+ copy_file "worthwhile_config.rb", "config/initializers/worthwhile_config.rb"
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,3 @@
1
+ @import 'worthwhile/variables_bootstrap';
2
+ @import 'bootstrap';
3
+ @import 'worthwhile/worthwhile';
@@ -0,0 +1 @@
1
+ //= require worthwhile/application
@@ -0,0 +1,3 @@
1
+ Worthwhile.configure do |config|
2
+ config.register_curation_concern 'GenericWork'
3
+ end
@@ -0,0 +1,4 @@
1
+ module WorthwhileHelper
2
+ include ::BlacklightHelper
3
+ include Worthwhile::MainAppHelpers
4
+ end
data/lib/worthwhile.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "worthwhile/version"
2
+ require 'worthwhile/engine'
3
+ require 'worthwhile/configuration'
2
4
 
3
5
  module Worthwhile
4
- # Your code goes here...
6
+
5
7
  end
@@ -0,0 +1,74 @@
1
+ module Worthwhile
2
+
3
+ class << self
4
+ attr_accessor :configuration
5
+ end
6
+
7
+ def self.configure
8
+ self.configuration ||= Configuration.new
9
+ yield(configuration)
10
+ end
11
+
12
+ class Configuration
13
+ # An anonymous function that receives a path to a file
14
+ # and returns AntiVirusScanner::NO_VIRUS_FOUND_RETURN_VALUE if no
15
+ # virus is found; Any other returned value means a virus was found
16
+ attr_writer :default_antivirus_instance
17
+ def default_antivirus_instance
18
+ @default_antivirus_instance ||= lambda {|file_path|
19
+ AntiVirusScanner::NO_VIRUS_FOUND_RETURN_VALUE
20
+ }
21
+ end
22
+
23
+ # Configure default search options from config/search_config.yml
24
+ attr_writer :search_config
25
+ def search_config
26
+ @search_config ||= "search_config not set"
27
+ end
28
+
29
+ # Configure the application root url.
30
+ attr_writer :application_root_url
31
+ def application_root_url
32
+ @application_root_url || (raise RuntimeError.new("Make sure to set your Worthwhile.configuration.application_root_url"))
33
+ end
34
+
35
+ # When was this last built/deployed
36
+ attr_writer :build_identifier
37
+ def build_identifier
38
+ # If you restart the server, this could be out of sync; A better
39
+ # implementation is to read something from the file system. However
40
+ # that detail is an exercise for the developer.
41
+ @build_identifier ||= Time.now.strftime("%Y-%m-%d %H:%M:%S")
42
+ end
43
+
44
+ # Override characterization runner
45
+ attr_accessor :characterization_runner
46
+
47
+ def register_curation_concern(*curation_concern_types)
48
+ Array(curation_concern_types).flatten.compact.each do |cc_type|
49
+ class_name = normalize_concern_name(cc_type)
50
+ if ! registered_curation_concern_types.include?(class_name)
51
+ self.registered_curation_concern_types << class_name
52
+ end
53
+ end
54
+ end
55
+
56
+ # Returns the class names (strings) of the registered curation concerns
57
+ def registered_curation_concern_types
58
+ @registered_curation_concern_types ||= []
59
+ end
60
+
61
+ # Returns the classes of the registered curation concerns
62
+ def curation_concerns
63
+ registered_curation_concern_types.map(&:constantize)
64
+ end
65
+
66
+ private
67
+
68
+ def normalize_concern_name(c)
69
+ c.to_s.camelize
70
+ end
71
+ end
72
+
73
+ configure {}
74
+ end
@@ -0,0 +1,10 @@
1
+ module Worthwhile
2
+ class ControllerResource < CanCan::ControllerResource
3
+ protected
4
+
5
+ # Override resource_params to make this a nop. Worthwhile uses actors to assign attributes
6
+ def resource_params
7
+ {}
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,20 @@
1
+ #Load blacklight which will give worthwhile views a higher preference than those in blacklight
2
+ require 'blacklight'
3
+ require 'sufia/models'
4
+ require 'hydra-collections'
5
+
6
+ module Worthwhile
7
+ class Engine < ::Rails::Engine
8
+ isolate_namespace Worthwhile
9
+ require 'breadcrumbs_on_rails'
10
+
11
+ config.autoload_paths += %W(
12
+ #{config.root}/lib
13
+ #{config.root}/app/actors/concerns
14
+ )
15
+
16
+ initializer 'worthwhile.initialize' do
17
+ require 'worthwhile/rails/routes'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,78 @@
1
+ module ActionDispatch::Routing
2
+ class Mapper
3
+
4
+ def worthwhile_curation_concerns
5
+ resources :downloads, only: :show
6
+ namespace :curation_concern, path: :concern do
7
+ Worthwhile.configuration.registered_curation_concern_types.map(&:tableize).each do |curation_concern_name|
8
+ namespaced_resources curation_concern_name, except: [:index]
9
+ end
10
+ resources :permissions, only: [] do
11
+ member do
12
+ get :confirm
13
+ post :copy
14
+ end
15
+ end
16
+ resources :linked_resources, only: [:new, :create], path: 'container/:parent_id/linked_resources'
17
+ resources :linked_resources, only: [:show, :edit, :update, :destroy]
18
+ resources :generic_files, only: [:new, :create], path: 'container/:parent_id/generic_files'
19
+ resources :generic_files, only: [:show, :edit, :update, :destroy] do
20
+ member do
21
+ get :versions
22
+ put :rollback
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ # Used in conjunction with Hydra::Collections::Engine routes.
29
+ # Adds routes for doing paginated searches within a collection's contents
30
+ # @example in routes.rb:
31
+ # mount Hydra::Collections::Engine => '/'
32
+ # worthwhile_collections
33
+ def worthwhile_collections
34
+ resources :collections, only: :show do
35
+ member do
36
+ get 'page/:page', action: :index
37
+ get 'facet/:id', action: :facet, as: :dashboard_facet
38
+ end
39
+ collection do
40
+ get :add_member_form
41
+ put '', action: :update
42
+ put :remove_member
43
+ end
44
+ end
45
+ end
46
+
47
+ def worthwhile_embargo_management
48
+ resources :embargoes, only: [:index, :edit, :destroy] do
49
+ collection do
50
+ patch :update
51
+ end
52
+ end
53
+ resources :leases, only: [:index, :edit, :destroy] do
54
+ collection do
55
+ patch :update
56
+ end
57
+ end
58
+ end
59
+
60
+ private
61
+ # Namespaces routes appropriately
62
+ # @example route_namespaced_target("worthwhile/generic_work") is equivalent to
63
+ # namespace "worthwhile" do
64
+ # resources "generic_work", except: [:index]
65
+ # end
66
+ def namespaced_resources(target, opts={})
67
+ if target.include?("/")
68
+ the_namespace = target[0..target.index("/")-1]
69
+ new_target = target[target.index("/")+1..-1]
70
+ namespace the_namespace do
71
+ namespaced_resources(new_target, opts)
72
+ end
73
+ else
74
+ resources target, opts
75
+ end
76
+ end
77
+ end
78
+ end