geo_works 0.1.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.
Files changed (336) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +34 -0
  3. data/.csslintrc +2 -0
  4. data/.engine_cart.yml +1 -0
  5. data/.eslintignore +1 -0
  6. data/.eslintrc +8 -0
  7. data/.fcrepo_wrapper +3 -0
  8. data/.gitignore +14 -0
  9. data/.rubocop.yml +105 -0
  10. data/.solr_wrapper +7 -0
  11. data/.travis.yml +33 -0
  12. data/CONTRIBUTING.md +159 -0
  13. data/Gemfile +48 -0
  14. data/LICENSE +202 -0
  15. data/README.md +143 -0
  16. data/Rakefile +25 -0
  17. data/app/assets/images/geo_works/.keep +0 -0
  18. data/app/assets/images/geo_works/images/geocoder.png +0 -0
  19. data/app/assets/images/geo_works/images/move-handle.png +0 -0
  20. data/app/assets/images/geo_works/images/resize-handle.png +0 -0
  21. data/app/assets/images/geo_works/images/throbber.gif +0 -0
  22. data/app/assets/javascripts/geo_works/Control.Geocoder.js +1056 -0
  23. data/app/assets/javascripts/geo_works/application.js +4 -0
  24. data/app/assets/javascripts/geo_works/bounding_box_selector.js +107 -0
  25. data/app/assets/javascripts/geo_works/es6-modules.js +7 -0
  26. data/app/assets/javascripts/geo_works/geo_works_boot.es6 +8 -0
  27. data/app/assets/javascripts/geo_works/leaflet-boundingbox.js +467 -0
  28. data/app/assets/javascripts/geo_works/relationships.js +3 -0
  29. data/app/assets/javascripts/geo_works/relationships/child_works.es6 +20 -0
  30. data/app/assets/javascripts/geo_works/relationships/parent_works.es6 +20 -0
  31. data/app/assets/javascripts/geo_works/relationships/related_works.es6 +187 -0
  32. data/app/assets/stylesheets/geo_works/Control.Geocoder.scss +104 -0
  33. data/app/assets/stylesheets/geo_works/application.css +18 -0
  34. data/app/assets/stylesheets/geo_works/bounding_box.scss +15 -0
  35. data/app/assets/stylesheets/geo_works/leaflet-boundingbox.scss +17 -0
  36. data/app/assets/stylesheets/geo_works/related_works.scss +29 -0
  37. data/app/assets/stylesheets/geo_works/thumbnails.scss +13 -0
  38. data/app/controllers/concerns/geo_works/events_behavior.rb +29 -0
  39. data/app/controllers/concerns/geo_works/file_sets_controller_behavior.rb +31 -0
  40. data/app/controllers/concerns/geo_works/geoblacklight_controller_behavior.rb +29 -0
  41. data/app/controllers/concerns/geo_works/image_works_controller_behavior.rb +9 -0
  42. data/app/controllers/concerns/geo_works/raster_works_controller_behavior.rb +9 -0
  43. data/app/controllers/concerns/geo_works/vector_works_controller_behavior.rb +9 -0
  44. data/app/forms/geo_works/basic_geo_metadata_form.rb +9 -0
  45. data/app/forms/geo_works/external_metadata_file_form.rb +8 -0
  46. data/app/forms/geo_works/georeferenced_form.rb +9 -0
  47. data/app/forms/hyrax/image_work_form.rb +7 -0
  48. data/app/forms/hyrax/raster_work_form.rb +8 -0
  49. data/app/forms/hyrax/vector_work_form.rb +8 -0
  50. data/app/helpers/geo_works/application_helper.rb +4 -0
  51. data/app/helpers/geo_works/bounding_box_helper.rb +73 -0
  52. data/app/helpers/geo_works/file_set_actions_helper.rb +31 -0
  53. data/app/helpers/geo_works/geo_works_helper.rb +22 -0
  54. data/app/helpers/geo_works/populate_metadata_helper.rb +7 -0
  55. data/app/jobs/geoblacklight_job.rb +10 -0
  56. data/app/jobs/geoserver_delivery_job.rb +36 -0
  57. data/app/models/concerns/geo_works/ability.rb +12 -0
  58. data/app/models/concerns/geo_works/basic_geo_metadata.rb +21 -0
  59. data/app/models/concerns/geo_works/external_metadata_file_behavior.rb +31 -0
  60. data/app/models/concerns/geo_works/extractors/fgdc_helper.rb +9 -0
  61. data/app/models/concerns/geo_works/extractors/fgdc_metadata_extractor.rb +114 -0
  62. data/app/models/concerns/geo_works/extractors/iso19139_helper.rb +50 -0
  63. data/app/models/concerns/geo_works/extractors/mods_helper.rb +15 -0
  64. data/app/models/concerns/geo_works/file_set_metadata.rb +15 -0
  65. data/app/models/concerns/geo_works/file_set_presenter_behavior.rb +7 -0
  66. data/app/models/concerns/geo_works/geo_file_format_behavior.rb +37 -0
  67. data/app/models/concerns/geo_works/geo_file_set_behavior.rb +11 -0
  68. data/app/models/concerns/geo_works/georeferenced_behavior.rb +18 -0
  69. data/app/models/concerns/geo_works/image_file_behavior.rb +14 -0
  70. data/app/models/concerns/geo_works/image_work_behavior.rb +69 -0
  71. data/app/models/concerns/geo_works/metadata_extraction_helper.rb +27 -0
  72. data/app/models/concerns/geo_works/raster_file_behavior.rb +14 -0
  73. data/app/models/concerns/geo_works/raster_work_behavior.rb +82 -0
  74. data/app/models/concerns/geo_works/solr_document_behavior.rb +46 -0
  75. data/app/models/concerns/geo_works/vector_file_behavior.rb +14 -0
  76. data/app/models/concerns/geo_works/vector_work_behavior.rb +78 -0
  77. data/app/presenters/geo_works/geo_works_show_presenter.rb +48 -0
  78. data/app/presenters/geo_works/image_work_show_presenter.rb +5 -0
  79. data/app/presenters/geo_works/raster_work_show_presenter.rb +5 -0
  80. data/app/presenters/geo_works/vector_work_show_presenter.rb +5 -0
  81. data/app/processors/geo_works/geoblacklight_event_processor.rb +29 -0
  82. data/app/processors/geo_works/geoblacklight_event_processor/delete_processor.rb +13 -0
  83. data/app/processors/geo_works/geoblacklight_event_processor/processor.rb +28 -0
  84. data/app/processors/geo_works/geoblacklight_event_processor/unknown_event.rb +15 -0
  85. data/app/processors/geo_works/geoblacklight_event_processor/update_processor.rb +15 -0
  86. data/app/processors/geo_works/processors/base_geo_processor.rb +81 -0
  87. data/app/processors/geo_works/processors/gdal.rb +49 -0
  88. data/app/processors/geo_works/processors/image.rb +66 -0
  89. data/app/processors/geo_works/processors/ogr.rb +19 -0
  90. data/app/processors/geo_works/processors/raster.rb +26 -0
  91. data/app/processors/geo_works/processors/raster/aig.rb +40 -0
  92. data/app/processors/geo_works/processors/raster/base.rb +41 -0
  93. data/app/processors/geo_works/processors/raster/dem.rb +29 -0
  94. data/app/processors/geo_works/processors/raster/info.rb +52 -0
  95. data/app/processors/geo_works/processors/rendering.rb +79 -0
  96. data/app/processors/geo_works/processors/vector.rb +24 -0
  97. data/app/processors/geo_works/processors/vector/base.rb +44 -0
  98. data/app/processors/geo_works/processors/vector/info.rb +84 -0
  99. data/app/processors/geo_works/processors/vector/shapefile.rb +20 -0
  100. data/app/processors/geo_works/processors/zip.rb +29 -0
  101. data/app/renderers/geo_works/coverage_renderer.rb +39 -0
  102. data/app/runners/geo_works/runners/raster_derivatives.rb +9 -0
  103. data/app/runners/geo_works/runners/vector_derivatives.rb +9 -0
  104. data/app/schemas/geo_works/basic_geo_metadata_optional.rb +40 -0
  105. data/app/schemas/geo_works/basic_geo_metadata_required.rb +25 -0
  106. data/app/schemas/geo_works/file_set_metadata_required.rb +5 -0
  107. data/app/services/geo_works/authority_service.rb +29 -0
  108. data/app/services/geo_works/delivery/geoserver.rb +118 -0
  109. data/app/services/geo_works/delivery_service.rb +11 -0
  110. data/app/services/geo_works/discovery.rb +4 -0
  111. data/app/services/geo_works/discovery/abstract_document.rb +37 -0
  112. data/app/services/geo_works/discovery/document_builder.rb +46 -0
  113. data/app/services/geo_works/discovery/document_builder/basic_metadata_builder.rb +71 -0
  114. data/app/services/geo_works/discovery/document_builder/composite_builder.rb +21 -0
  115. data/app/services/geo_works/discovery/document_builder/date_builder.rb +53 -0
  116. data/app/services/geo_works/discovery/document_builder/document_helper.rb +10 -0
  117. data/app/services/geo_works/discovery/document_builder/document_path.rb +91 -0
  118. data/app/services/geo_works/discovery/document_builder/layer_info_builder.rb +65 -0
  119. data/app/services/geo_works/discovery/document_builder/references_builder.rb +101 -0
  120. data/app/services/geo_works/discovery/document_builder/slug_builder.rb +24 -0
  121. data/app/services/geo_works/discovery/document_builder/spatial_builder.rb +37 -0
  122. data/app/services/geo_works/discovery/document_builder/wxs.rb +76 -0
  123. data/app/services/geo_works/discovery/geoblacklight_document.rb +152 -0
  124. data/app/services/geo_works/events_generator.rb +24 -0
  125. data/app/services/geo_works/events_generator/composite_generator.rb +18 -0
  126. data/app/services/geo_works/events_generator/geoblacklight_event_generator.rb +53 -0
  127. data/app/services/geo_works/events_generator/geoserver_event_generator.rb +33 -0
  128. data/app/services/geo_works/file_set_derivatives_service.rb +67 -0
  129. data/app/services/geo_works/image_format_service.rb +6 -0
  130. data/app/services/geo_works/metadata_format_service.rb +6 -0
  131. data/app/services/geo_works/raster_format_service.rb +6 -0
  132. data/app/services/geo_works/vector_format_service.rb +6 -0
  133. data/app/services/hyrax/curation_concern.rb +18 -0
  134. data/app/values/geo_works/coverage.rb +36 -0
  135. data/app/values/geo_works/time_period.rb +30 -0
  136. data/app/views/geo_works/_attribute_rows.html.erb +4 -0
  137. data/app/views/geo_works/_form_progress.html.erb +50 -0
  138. data/app/views/geo_works/_guts4form.html.erb +47 -0
  139. data/app/views/geo_works/_member.html.erb +11 -0
  140. data/app/views/geo_works/_metadata.html.erb +13 -0
  141. data/app/views/geo_works/_relationships.html.erb +12 -0
  142. data/app/views/geo_works/_representative_media.html.erb +5 -0
  143. data/app/views/geo_works/file_sets/_form.html.erb +48 -0
  144. data/app/views/geo_works/file_sets/actions/_default_actions.html.erb +16 -0
  145. data/app/views/geo_works/file_sets/actions/_image_actions.html.erb +22 -0
  146. data/app/views/geo_works/file_sets/actions/_metadata_actions.html.erb +16 -0
  147. data/app/views/geo_works/file_sets/actions/_raster_actions.html.erb +25 -0
  148. data/app/views/geo_works/file_sets/actions/_vector_actions.html.erb +25 -0
  149. data/app/views/geo_works/file_sets/media_display/_geo.html.erb +16 -0
  150. data/app/views/geo_works/file_sets/new.html.erb +12 -0
  151. data/app/views/geo_works/related/_child_member.html.erb +13 -0
  152. data/app/views/geo_works/related/_child_works.html.erb +24 -0
  153. data/app/views/geo_works/related/_external_metadata_file_member.html.erb +11 -0
  154. data/app/views/geo_works/related/_external_metadata_files.html.erb +24 -0
  155. data/app/views/geo_works/related/_geo_files.html.erb +24 -0
  156. data/app/views/geo_works/related/_new_child_member.html.erb +22 -0
  157. data/app/views/geo_works/related/_new_parent_member.html.erb +13 -0
  158. data/app/views/geo_works/related/_parent_member.html.erb +13 -0
  159. data/app/views/geo_works/related/_parent_works.html.erb +22 -0
  160. data/app/views/hyrax/image_works/_file_actions.html.erb +8 -0
  161. data/app/views/hyrax/image_works/_form.html.erb +16 -0
  162. data/app/views/hyrax/image_works/_image_actions.html.erb +11 -0
  163. data/app/views/hyrax/image_works/_image_work.html.erb +2 -0
  164. data/app/views/hyrax/image_works/_show_actions.html.erb +22 -0
  165. data/app/views/hyrax/image_works/show.html.erb +31 -0
  166. data/app/views/hyrax/raster_works/_file_actions.html.erb +8 -0
  167. data/app/views/hyrax/raster_works/_form.html.erb +16 -0
  168. data/app/views/hyrax/raster_works/_raster_actions.html.erb +11 -0
  169. data/app/views/hyrax/raster_works/_raster_work.html.erb +2 -0
  170. data/app/views/hyrax/raster_works/_show_actions.html.erb +22 -0
  171. data/app/views/hyrax/raster_works/show.html.erb +31 -0
  172. data/app/views/hyrax/vector_works/_file_actions.html.erb +8 -0
  173. data/app/views/hyrax/vector_works/_form.html.erb +16 -0
  174. data/app/views/hyrax/vector_works/_show_actions.html.erb +22 -0
  175. data/app/views/hyrax/vector_works/_vector_actions.html.erb +11 -0
  176. data/app/views/hyrax/vector_works/_vector_work.html.erb +2 -0
  177. data/app/views/hyrax/vector_works/show.html.erb +31 -0
  178. data/app/views/records/edit_fields/_coverage.html.erb +3 -0
  179. data/app/views/records/edit_fields/_should_populate_metadata.html.erb +10 -0
  180. data/app/vocabs/geo_works/geo_terms.rb +12 -0
  181. data/config/discovery/geoblacklight-schema.json +214 -0
  182. data/config/fcrepo_wrapper_test.yml +3 -0
  183. data/config/geoblacklight.yml +12 -0
  184. data/config/geoserver.yml +27 -0
  185. data/config/initializers/geo_server.rb +17 -0
  186. data/config/initializers/geoblacklight_config.rb +18 -0
  187. data/config/initializers/simpler_tiles.rb +65 -0
  188. data/config/locales/image_work.en.yml +8 -0
  189. data/config/locales/raster_work.en.yml +8 -0
  190. data/config/locales/vector_work.en.yml +8 -0
  191. data/config/routes.rb +24 -0
  192. data/config/simpler_tiles.yml +24 -0
  193. data/config/solr_wrapper_test.yml +7 -0
  194. data/docker-compose-full.yml +30 -0
  195. data/docker-compose.yml +9 -0
  196. data/geo_works.gemspec +44 -0
  197. data/lib/generators/geo_works/install_generator.rb +152 -0
  198. data/lib/generators/geo_works/templates/actors/hyrax/actors/image_work_actor.rb +6 -0
  199. data/lib/generators/geo_works/templates/actors/hyrax/actors/raster_work_actor.rb +6 -0
  200. data/lib/generators/geo_works/templates/actors/hyrax/actors/vector_work_actor.rb +6 -0
  201. data/lib/generators/geo_works/templates/config/authorities/image_formats.yml +7 -0
  202. data/lib/generators/geo_works/templates/config/authorities/metadata_formats.yml +7 -0
  203. data/lib/generators/geo_works/templates/config/authorities/raster_formats.yml +13 -0
  204. data/lib/generators/geo_works/templates/config/authorities/vector_formats.yml +7 -0
  205. data/lib/generators/geo_works/templates/config/initializers/hyrax_derivative_path_monkey_patch.rb +18 -0
  206. data/lib/generators/geo_works/templates/controllers/hyrax/file_sets_controller.rb +7 -0
  207. data/lib/generators/geo_works/templates/controllers/hyrax/image_works_controller.rb +7 -0
  208. data/lib/generators/geo_works/templates/controllers/hyrax/raster_works_controller.rb +8 -0
  209. data/lib/generators/geo_works/templates/controllers/hyrax/vector_works_controller.rb +8 -0
  210. data/lib/generators/geo_works/templates/geo_works.js +1 -0
  211. data/lib/generators/geo_works/templates/geo_works.scss +3 -0
  212. data/lib/generators/geo_works/templates/models/file_set.rb +4 -0
  213. data/lib/generators/geo_works/templates/models/image_work.rb +7 -0
  214. data/lib/generators/geo_works/templates/models/raster_work.rb +8 -0
  215. data/lib/generators/geo_works/templates/models/vector_work.rb +8 -0
  216. data/lib/generators/geo_works/templates/presenters/file_set_presenter.rb +3 -0
  217. data/lib/generators/geo_works/templates/spec/actor_spec.rb.erb +9 -0
  218. data/lib/generators/geo_works/templates/spec/controller_spec.rb.erb +9 -0
  219. data/lib/generators/geo_works/templates/spec/model_spec.rb.erb +9 -0
  220. data/lib/geo_works.rb +9 -0
  221. data/lib/geo_works/engine.rb +4 -0
  222. data/lib/geo_works/version.rb +3 -0
  223. data/lib/tasks/geo_works_tasks.rake +4 -0
  224. data/run-docker.sh +16 -0
  225. data/solr/config/_rest_managed.json +3 -0
  226. data/solr/config/admin-extra.html +31 -0
  227. data/solr/config/elevate.xml +36 -0
  228. data/solr/config/mapping-ISOLatin1Accent.txt +246 -0
  229. data/solr/config/protwords.txt +21 -0
  230. data/solr/config/schema.xml +372 -0
  231. data/solr/config/scripts.conf +24 -0
  232. data/solr/config/solrconfig.xml +321 -0
  233. data/solr/config/spellings.txt +2 -0
  234. data/solr/config/stopwords.txt +58 -0
  235. data/solr/config/stopwords_en.txt +58 -0
  236. data/solr/config/synonyms.txt +31 -0
  237. data/solr/config/xslt/example.xsl +132 -0
  238. data/solr/config/xslt/example_atom.xsl +67 -0
  239. data/solr/config/xslt/example_rss.xsl +66 -0
  240. data/solr/config/xslt/luke.xsl +337 -0
  241. data/spec/controllers/file_sets_controller_spec.rb +70 -0
  242. data/spec/controllers/image_works_controller_spec.rb +40 -0
  243. data/spec/controllers/raster_works_controller_spec.rb +36 -0
  244. data/spec/controllers/vector_works_controller_spec.rb +69 -0
  245. data/spec/factories/collections.rb +17 -0
  246. data/spec/factories/external_metadata_files.rb +20 -0
  247. data/spec/factories/image_files.rb +32 -0
  248. data/spec/factories/image_works.rb +69 -0
  249. data/spec/factories/permission_templates.rb +41 -0
  250. data/spec/factories/raster_files.rb +35 -0
  251. data/spec/factories/raster_works.rb +88 -0
  252. data/spec/factories/sipity_entities.rb +7 -0
  253. data/spec/factories/users.rb +26 -0
  254. data/spec/factories/vector_files.rb +31 -0
  255. data/spec/factories/vector_works.rb +84 -0
  256. data/spec/factories/workflow_states.rb +6 -0
  257. data/spec/factories/workflows.rb +6 -0
  258. data/spec/features/create_image_work_spec.rb +34 -0
  259. data/spec/features/create_raster_work_spec.rb +35 -0
  260. data/spec/features/create_vector_work_spec.rb +34 -0
  261. data/spec/features/image_work_show_spec.rb +62 -0
  262. data/spec/features/raster_work_show_spec.rb +62 -0
  263. data/spec/features/vector_work_show_spec.rb +61 -0
  264. data/spec/forms/geo_works/basic_geo_metadata_form_spec.rb +31 -0
  265. data/spec/forms/geo_works/external_metadata_file_form_spec.rb +30 -0
  266. data/spec/forms/geo_works/georeferenced_form_spec.rb +33 -0
  267. data/spec/forms/hyrax/image_work_form_spec.rb +11 -0
  268. data/spec/forms/hyrax/raster_work_form_spec.rb +17 -0
  269. data/spec/forms/hyrax/vector_work_form_spec.rb +17 -0
  270. data/spec/helpers/bounding_box_helper_spec.rb +39 -0
  271. data/spec/helpers/geo_works/file_set_actions_helper_spec.rb +70 -0
  272. data/spec/helpers/geo_works/populate_metadata_helper_spec.rb +31 -0
  273. data/spec/helpers/geo_works_helper_spec.rb +30 -0
  274. data/spec/jobs/geoblacklight_job_spec.rb +18 -0
  275. data/spec/jobs/geoserver_delivery_job_spec.rb +45 -0
  276. data/spec/models/concerns/basic_geo_metadata_spec.rb +21 -0
  277. data/spec/models/concerns/geo_works/file_set/derivatives_spec.rb +102 -0
  278. data/spec/models/concerns/geo_works/file_set/geo_file_format_behavior_spec.rb +56 -0
  279. data/spec/models/external_metadata_file_spec.rb +118 -0
  280. data/spec/models/file_set_spec.rb +9 -0
  281. data/spec/models/image_file_spec.rb +48 -0
  282. data/spec/models/image_work_spec.rb +71 -0
  283. data/spec/models/raster_file_spec.rb +48 -0
  284. data/spec/models/raster_work_spec.rb +122 -0
  285. data/spec/models/solr_document_spec.rb +41 -0
  286. data/spec/models/vector_file_spec.rb +48 -0
  287. data/spec/models/vector_work_spec.rb +109 -0
  288. data/spec/presenters/file_set_presenter_spec.rb +13 -0
  289. data/spec/presenters/geo_works_show_presenter_spec.rb +46 -0
  290. data/spec/presenters/image_work_show_presenter_spec.rb +51 -0
  291. data/spec/presenters/raster_work_show_presenter_spec.rb +74 -0
  292. data/spec/presenters/vector_work_show_presenter_spec.rb +41 -0
  293. data/spec/processors/geo_works/geoblacklight_event_processor_spec.rb +80 -0
  294. data/spec/processors/geo_works/processors/base_geo_processor_spec.rb +115 -0
  295. data/spec/processors/geo_works/processors/gdal_spec.rb +59 -0
  296. data/spec/processors/geo_works/processors/image_spec.rb +64 -0
  297. data/spec/processors/geo_works/processors/ogr_spec.rb +36 -0
  298. data/spec/processors/geo_works/processors/raster/aig_spec.rb +35 -0
  299. data/spec/processors/geo_works/processors/raster/base_spec.rb +54 -0
  300. data/spec/processors/geo_works/processors/raster/dem_spec.rb +30 -0
  301. data/spec/processors/geo_works/processors/raster/info_spec.rb +35 -0
  302. data/spec/processors/geo_works/processors/raster/processor_spec.rb +39 -0
  303. data/spec/processors/geo_works/processors/rendering_spec.rb +64 -0
  304. data/spec/processors/geo_works/processors/vector/base_spec.rb +54 -0
  305. data/spec/processors/geo_works/processors/vector/info_spec.rb +50 -0
  306. data/spec/processors/geo_works/processors/vector/processor_spec.rb +28 -0
  307. data/spec/processors/geo_works/processors/vector/shapefile_spec.rb +17 -0
  308. data/spec/processors/geo_works/processors/zip_spec.rb +39 -0
  309. data/spec/renderers/geo_works/coverage_renderer_spec.rb +21 -0
  310. data/spec/services/geo_works/delivery/geoserver_spec.rb +117 -0
  311. data/spec/services/geo_works/delivery_service_spec.rb +24 -0
  312. data/spec/services/geo_works/discovery/abstract_document_spec.rb +23 -0
  313. data/spec/services/geo_works/discovery/document_builder/basic_metadata_builder_spec.rb +35 -0
  314. data/spec/services/geo_works/discovery/document_builder/wxs_spec.rb +71 -0
  315. data/spec/services/geo_works/discovery/document_builder_spec.rb +220 -0
  316. data/spec/services/geo_works/discovery/geoblacklight_document_spec.rb +20 -0
  317. data/spec/services/geo_works/event_generator_spec.rb +18 -0
  318. data/spec/services/geo_works/events_generator/geoblacklight_event_generator_spec.rb +84 -0
  319. data/spec/services/geo_works/events_generator/geoserver_event_generator_spec.rb +22 -0
  320. data/spec/services/geo_works/raster_format_service_spec.rb +13 -0
  321. data/spec/services/hyrax/derivative_path_spec.rb +26 -0
  322. data/spec/spec_helper.rb +77 -0
  323. data/spec/support/backport_test.rb +14 -0
  324. data/spec/support/controllers/engine_helpers.rb +7 -0
  325. data/spec/support/database_cleaner.rb +18 -0
  326. data/spec/support/factory_girl.rb +3 -0
  327. data/spec/support/features.rb +14 -0
  328. data/spec/support/features/session_helpers.rb +40 -0
  329. data/spec/support/fixture_reader.rb +7 -0
  330. data/spec/support/helpers/controller_level_helpers.rb +27 -0
  331. data/spec/support/views/test_view_helpers.rb +10 -0
  332. data/spec/test_app_templates/lib/generators/test_app_generator.rb +24 -0
  333. data/spec/values/coverage_spec.rb +40 -0
  334. data/tasks/geo_works.rake +39 -0
  335. data/template.rb +10 -0
  336. metadata +789 -0
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hyrax::FileSetsController, type: :controller do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let(:parent) { FactoryGirl.build(:public_vector_work) }
6
+
7
+ subject { described_class.new }
8
+
9
+ describe '#new' do
10
+ it 'renders a geo file set form if the parent is a geo work' do
11
+ allow(subject).to receive(:geo?).and_return(true)
12
+ expect(subject).to receive(:render).with('geo_works/file_sets/new')
13
+ subject.new
14
+ end
15
+ it 'only render a geo file set form if the parent is a geo work' do
16
+ allow(subject).to receive(:geo?).and_return(false)
17
+ expect(subject).not_to receive(:render)
18
+ subject.new
19
+ end
20
+ end
21
+
22
+ describe 'messaging' do
23
+ let(:generator) { instance_double(GeoWorks::EventsGenerator) }
24
+
25
+ before do
26
+ sign_in user
27
+ allow(GeoWorks::EventsGenerator).to receive(:new).and_return(generator)
28
+ end
29
+
30
+ context 'after updating metadata' do
31
+ let!(:file_set) do
32
+ file_set = FileSet.create do |gf|
33
+ gf.apply_depositor_metadata(user)
34
+ gf.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
35
+ end
36
+ parent.ordered_members << file_set
37
+ parent.save
38
+ file_set
39
+ end
40
+
41
+ after do
42
+ file_set.destroy
43
+ end
44
+
45
+ it 'calls the record_updated generator method' do
46
+ expect(generator).to receive(:record_updated)
47
+ post :update, params: {
48
+ id: file_set,
49
+ file_set: { title: ['new_title'], keyword: [''], permissions_attributes: [{ type: 'person', name: 'archivist1', access: 'edit' }] }
50
+ }
51
+ end
52
+ end
53
+
54
+ context 'when destroying the file set' do
55
+ let(:file_set) do
56
+ file_set = FileSet.create! do |gf|
57
+ gf.apply_depositor_metadata(user)
58
+ end
59
+ parent.ordered_members << file_set
60
+ parent.save
61
+ file_set
62
+ end
63
+
64
+ it 'calls the record_deleted generator method' do
65
+ expect(generator).to receive(:record_deleted)
66
+ delete :destroy, params: { id: file_set }
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hyrax::ImageWorksController, type: :controller do
4
+ let(:user) { create(:admin) }
5
+ before { sign_in user }
6
+
7
+ before do
8
+ allow(GeoblacklightJob).to receive(:perform_later)
9
+ end
10
+
11
+ describe "#show_presenter" do
12
+ it "is a image work show presenter" do
13
+ expect(described_class.new.show_presenter).to eq(::GeoWorks::ImageWorkShowPresenter)
14
+ end
15
+ end
16
+
17
+ describe "#show" do
18
+ before do
19
+ create(:sipity_entity, proxy_for_global_id: work.to_global_id.to_s)
20
+ end
21
+ context "with an existing image work" do
22
+ let(:work) { create(:image_work, user: user, title: ['Image Work Title']) }
23
+ it "is a success" do
24
+ get :show, params: { id: work.id }
25
+ expect(response).to be_success
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#create' do
31
+ context 'when create is successful' do
32
+ let(:work) { create(:image_work, user: user) }
33
+ it 'creates an image work' do
34
+ allow(controller).to receive(:curation_concern).and_return(work)
35
+ post :create, params: { image_work: { title: ['a title'] } }
36
+ expect(response).to redirect_to main_app.hyrax_image_work_path(work) + '?locale=en'
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hyrax::RasterWorksController, type: :controller do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let(:raster_work) { FactoryGirl.create(:raster_work, user: user, title: ['Raster Work Title']) }
6
+ let(:reloaded) { raster_work.reload }
7
+ let!(:sipity_entity) do
8
+ create(:sipity_entity, proxy_for_global_id: raster_work.to_global_id.to_s)
9
+ end
10
+
11
+ describe "#show" do
12
+ before do
13
+ sign_in user
14
+ end
15
+ context "when there's a parent image work" do
16
+ let(:parent_image_work) { FactoryGirl.create(:image_work, user: user) }
17
+ let!(:parent_sipity_entity) do
18
+ create(:sipity_entity, proxy_for_global_id: parent_image_work.to_global_id.to_s)
19
+ end
20
+ it "is a success" do
21
+ parent_image_work.ordered_members << raster_work
22
+ parent_image_work.save
23
+ raster_work.update_index
24
+
25
+ get :show, params: { id: raster_work.id }
26
+ expect(response).to be_success
27
+ end
28
+ end
29
+ end
30
+
31
+ describe "#show_presenter" do
32
+ it "is a raster work show presenter" do
33
+ expect(described_class.new.show_presenter).to eq(GeoWorks::RasterWorkShowPresenter)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hyrax::VectorWorksController, type: :controller do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let(:vector_work) { FactoryGirl.create(:vector_work, user: user, title: ['Vector Work Title']) }
6
+ let(:reloaded) { vector_work.reload }
7
+ let!(:sipity_entity) do
8
+ create(:sipity_entity, proxy_for_global_id: vector_work.to_global_id.to_s)
9
+ end
10
+
11
+ describe "#show" do
12
+ before do
13
+ sign_in user
14
+ end
15
+ context "when there's a parent raster work" do
16
+ let(:parent_raster_work) { FactoryGirl.create(:raster_work, user: user) }
17
+ let!(:parent_sipity_entity) do
18
+ create(:sipity_entity, proxy_for_global_id: parent_raster_work.to_global_id.to_s)
19
+ end
20
+ it "is a success" do
21
+ parent_raster_work.ordered_members << vector_work
22
+ parent_raster_work.save
23
+ vector_work.update_index
24
+
25
+ get :show, params: { id: vector_work.id }
26
+ expect(response).to be_success
27
+ end
28
+ end
29
+ end
30
+
31
+ describe "#show_presenter" do
32
+ it "is a vector work show presenter" do
33
+ expect(described_class.new.show_presenter.name).to eq("GeoWorks::VectorWorkShowPresenter")
34
+ end
35
+ end
36
+
37
+ describe '#geoblacklight' do
38
+ # Tell RSpec where to find the geoblacklight route.
39
+ routes { GeoWorks::Engine.routes }
40
+ let(:builder) { double }
41
+ before do
42
+ sign_in user
43
+ allow(GeoWorks::Discovery::DocumentBuilder).to receive(:new).and_return(builder)
44
+ end
45
+
46
+ context 'with a valid geoblacklight document' do
47
+ before do
48
+ allow(builder).to receive(:to_hash).and_return(id: 'test')
49
+ end
50
+
51
+ it 'renders the document' do
52
+ get :geoblacklight, params: { id: vector_work.id, format: :json }
53
+ expect(response).to be_success
54
+ end
55
+ end
56
+
57
+ context 'with an invalid geoblacklight document' do
58
+ before do
59
+ allow(builder).to receive(:to_hash).and_return(error: 'problem')
60
+ end
61
+
62
+ it 'returns an error message with a 404 status' do
63
+ get :geoblacklight, params: { id: vector_work.id, format: :json }
64
+ expect(response.body).to include('problem')
65
+ expect(response.status).to eq(404)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,17 @@
1
+ FactoryGirl.define do
2
+ factory :collection do
3
+ transient do
4
+ user { FactoryGirl.create(:user) }
5
+ end
6
+
7
+ title ['Test collection title']
8
+
9
+ after(:build) do |collection, evaluator|
10
+ collection.apply_depositor_metadata(evaluator.user.user_key)
11
+ end
12
+
13
+ trait :public do
14
+ visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ FactoryGirl.define do
2
+ factory :external_metadata_file, class: FileSet do
3
+ initialize_with { new(geo_mime_type: 'application/xml; schema=iso19139') }
4
+ transient do
5
+ user { FactoryGirl.create(:user) }
6
+ content nil
7
+ end
8
+
9
+ after(:build) do |file, evaluator|
10
+ file.title = ['A metadata file']
11
+ file.apply_depositor_metadata(evaluator.user.user_key)
12
+ end
13
+
14
+ after(:create) do |file, evaluator|
15
+ if evaluator.content
16
+ Hydra::Works::UploadFileToFileSet.call(file, evaluator.content)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ FactoryGirl.define do
2
+ factory :image_file, class: FileSet do
3
+ initialize_with { new(geo_mime_type: 'image/tiff') }
4
+ transient do
5
+ user { FactoryGirl.create(:user) }
6
+ content nil
7
+ end
8
+
9
+ after(:build) do |file, evaluator|
10
+ file.title = ['An image file']
11
+ file.apply_depositor_metadata(evaluator.user.user_key)
12
+ end
13
+
14
+ after(:create) do |file, evaluator|
15
+ if evaluator.content
16
+ Hydra::Works::UploadFileToFileSet.call(file, evaluator.content)
17
+ end
18
+ end
19
+
20
+ factory :image_file_with_image do
21
+ after(:build) do |file, evaluator|
22
+ FactoryGirl.create(:image, user: evaluator.user).members << file
23
+ end
24
+ after(:create) do |file, evaluator|
25
+ if evaluator.content
26
+ Hydra::Works::UploadFileToFileSet.call(file, evaluator.content)
27
+ end
28
+ FactoryGirl.create(:image, user: evaluator.user).members << file
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,69 @@
1
+ FactoryGirl.define do
2
+ factory :image_work, aliases: [:private_image_work], class: ImageWork do
3
+ transient do
4
+ user { FactoryGirl.create(:user) }
5
+
6
+ visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
7
+ end
8
+
9
+ after(:build) do |image_work, evaluator|
10
+ image_work.apply_depositor_metadata(evaluator.user.user_key)
11
+ end
12
+
13
+ factory :public_image_work do
14
+ before(:create) do |image_work, _evaluator|
15
+ image_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
16
+ end
17
+ end
18
+
19
+ factory :image_work_with_one_file do
20
+ before(:create) do |image_work, evaluator|
21
+ image_work.ordered_members << FactoryGirl.create(:image_file, user: evaluator.user)
22
+ end
23
+ end
24
+
25
+ factory :image_work_with_one_metadata_file do
26
+ after(:create) do |image_work, evaluator|
27
+ 1.times { image_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user) }
28
+ end
29
+ end
30
+
31
+ factory :image_work_with_raster_works do
32
+ before(:create) do |image_work, evaluator|
33
+ image_work.ordered_members << FactoryGirl.create(:raster_work, user: evaluator.user)
34
+ end
35
+ end
36
+
37
+ factory :image_work_with_files_and_metadata_files do
38
+ after(:create) do |image_work, evaluator|
39
+ image_work.ordered_members << FactoryGirl.create(:image_file, user: evaluator.user)
40
+ image_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user)
41
+ image_work.save
42
+ end
43
+ end
44
+
45
+ factory :image_work_with_embargo_date do
46
+ transient do
47
+ embargo_date { Date.tomorrow.to_s }
48
+ end
49
+
50
+ factory :embargoed_image_work do
51
+ after(:build) { |image_work, evaluator| image_work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
52
+ end
53
+
54
+ factory :embargoed_image_work_with_files do
55
+ after(:build) { |image_work, evaluator| image_work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
56
+ after(:create) { |image_work, evaluator| 2.times { image_work.image_files << FactoryGirl.create(:image_file, user: evaluator.user) } }
57
+ end
58
+
59
+ factory :leased_image_work do
60
+ after(:build) { |image_work, evaluator| image_work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
61
+ end
62
+
63
+ factory :leased_image_work_with_files do
64
+ after(:build) { |image_work, evaluator| image_work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
65
+ after(:create) { |image_work, evaluator| 2.times { image_work.image_files << FactoryGirl.create(:image_file, user: evaluator.user) } }
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,41 @@
1
+ FactoryGirl.define do
2
+ factory :permission_template, class: Hyrax::PermissionTemplate do
3
+ # Given that there is a one to one strong relation between permission_template and admin_set,
4
+ # with a unique index on the admin_set_id, I don't want to have duplication in admin_set_id
5
+ sequence(:admin_set_id) { |n| format("%010d", n) }
6
+
7
+ before(:create) do |permission_template, evaluator|
8
+ if evaluator.with_admin_set
9
+ admin_set_id = permission_template.admin_set_id
10
+ admin_set =
11
+ if admin_set_id.present?
12
+ begin
13
+ AdminSet.find(admin_set_id)
14
+ rescue
15
+ create(:admin_set, id: admin_set_id)
16
+ end
17
+ else
18
+ create(:admin_set)
19
+ end
20
+ permission_template.admin_set_id = admin_set.id
21
+ end
22
+ end
23
+
24
+ after(:create) do |permission_template, evaluator|
25
+ if evaluator.with_workflows
26
+ Hyrax::Workflow::WorkflowImporter.load_workflow_for(permission_template: permission_template)
27
+ Sipity::Workflow.activate!(permission_template: permission_template, workflow_id: permission_template.available_workflows.pluck(:id).first)
28
+ end
29
+ if evaluator.with_active_workflow
30
+ workflow = create(:workflow, active: true, permission_template: permission_template)
31
+ create(:workflow_action, workflow: workflow) # Need to create a single action that can be taken
32
+ end
33
+ end
34
+
35
+ transient do
36
+ with_admin_set false
37
+ with_workflows false
38
+ with_active_workflow false
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,35 @@
1
+ FactoryGirl.define do
2
+ factory :raster_file, class: FileSet do
3
+ initialize_with { new(geo_mime_type: 'image/tiff; gdal-format=GTiff') }
4
+ transient do
5
+ user { FactoryGirl.create(:user) }
6
+ content nil
7
+
8
+ cartographic_projection 'urn:ogc:def:crs:EPSG::6326'
9
+ end
10
+
11
+ after(:build) do |file, evaluator|
12
+ file.apply_depositor_metadata(evaluator.user.user_key)
13
+ end
14
+
15
+ after(:create) do |file, evaluator|
16
+ if evaluator.content
17
+ Hydra::Works::UploadFileToFileSet.call(file, evaluator.content)
18
+ end
19
+ end
20
+
21
+ factory :raster_file_with_raster do
22
+ # after(:build) do |file, evaluator|
23
+ # file.title = ['testfile']
24
+ # end
25
+ after(:create) do |file, evaluator|
26
+ if evaluator.content
27
+ Hydra::Works::UploadFileToFileSet.call(file, evaluator.content)
28
+ end
29
+
30
+ raster = FactoryGirl.create(:raster, user: evaluator.user)
31
+ raster.raster_files << file
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,88 @@
1
+ FactoryGirl.define do
2
+ factory :raster_work, aliases: [:private_raster_work], class: RasterWork do
3
+ transient do
4
+ user { FactoryGirl.create(:user) }
5
+
6
+ visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
7
+ end
8
+
9
+ after(:build) do |raster_work, evaluator|
10
+ raster_work.apply_depositor_metadata(evaluator.user.user_key)
11
+ end
12
+
13
+ factory :public_raster_work do
14
+ before(:create) do |raster_work, _evaluator|
15
+ raster_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
16
+ end
17
+ end
18
+
19
+ factory :raster_work_with_one_file do
20
+ before(:create) do |raster_work, evaluator|
21
+ raster_work.ordered_members << FactoryGirl.create(:raster_file, user: evaluator.user, title: ['A GeoTIFF file'])
22
+ end
23
+ end
24
+
25
+ factory :raster_work_with_files do
26
+ before(:create) do |raster_work, evaluator|
27
+ 2.times { raster_work.ordered_members << FactoryGirl.create(:raster_file, user: evaluator.user) }
28
+ end
29
+ end
30
+
31
+ factory :raster_work_with_image_works do
32
+ before(:create) do |raster_work, evaluator|
33
+ image = FactoryGirl.create(:image_work, user: evaluator.user)
34
+ image.ordered_members << raster_work
35
+ end
36
+ end
37
+
38
+ factory :raster_work_with_vector_work do
39
+ after(:create) do |raster_work, evaluator|
40
+ raster_work.ordered_members << FactoryGirl.create(:vector_work, user: evaluator.user)
41
+ raster_work.save
42
+ end
43
+ end
44
+
45
+ factory :raster_work_with_one_metadata_file do
46
+ after(:create) do |raster_work, evaluator|
47
+ 1.times { raster_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user) }
48
+ end
49
+ end
50
+
51
+ factory :raster_work_with_metadata_files do
52
+ after(:create) do |raster_work, evaluator|
53
+ 2.times { raster_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user) }
54
+ end
55
+ end
56
+
57
+ factory :raster_work_with_files_and_metadata_files do
58
+ after(:create) do |raster_work, evaluator|
59
+ raster_work.ordered_members << FactoryGirl.create(:raster_file, user: evaluator.user)
60
+ raster_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user)
61
+ raster_work.save
62
+ end
63
+ end
64
+
65
+ factory :raster_work_with_embargo_date do
66
+ transient do
67
+ embargo_date { Date.tomorrow.to_s }
68
+ end
69
+ factory :embargoed_raster_work do
70
+ after(:build) { |raster_work, evaluator| raster_work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
71
+ end
72
+
73
+ factory :embargoed_raster_work_with_files do
74
+ after(:build) { |raster_work, evaluator| raster_work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
75
+ after(:create) { |raster_work, evaluator| 2.times { raster_work.ordered_members << FactoryGirl.create(:raster_file, user: evaluator.user) } }
76
+ end
77
+
78
+ factory :leased_raster_work do
79
+ after(:build) { |raster_work, evaluator| raster_work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
80
+ end
81
+
82
+ factory :leased_raster_work_with_files do
83
+ after(:build) { |raster_work, evaluator| raster_work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
84
+ after(:create) { |raster_work, evaluator| 2.times { raster_work.ordered_members << FactoryGirl.create(:raster_file, user: evaluator.user) } }
85
+ end
86
+ end
87
+ end
88
+ end