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,31 @@
1
+ module GeoWorks
2
+ module FileSetsControllerBehavior
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ self.show_presenter = ::FileSetPresenter
6
+ self.form_class = Hyrax::Forms::FileSetEditForm
7
+ end
8
+
9
+ # Render geo file sets form if parent is a geo work
10
+ def new
11
+ if geo?
12
+ render 'geo_works/file_sets/new'
13
+ else
14
+ super
15
+ end
16
+ end
17
+
18
+ # inject mime_type into permitted params
19
+ def file_set_params
20
+ super.tap do |permitted_params|
21
+ permitted_params[:geo_mime_type] = params[:file_set][:geo_mime_type]
22
+ end
23
+ end
24
+
25
+ protected
26
+
27
+ def geo?
28
+ parent.image_work? || parent.raster_work? || parent.vector_work?
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ module GeoWorks
2
+ module GeoblacklightControllerBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ def geoblacklight
7
+ respond_to do |f|
8
+ f.json do
9
+ if builder.to_hash.fetch(:error, nil)
10
+ render json: builder, status: 404
11
+ else
12
+ render json: builder
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def document_class
22
+ Discovery::GeoblacklightDocument
23
+ end
24
+
25
+ def builder
26
+ @builder ||= Discovery::DocumentBuilder.new(presenter, document_class.new)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,9 @@
1
+ module GeoWorks
2
+ module ImageWorksControllerBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ self.show_presenter = GeoWorks::ImageWorkShowPresenter
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module GeoWorks
2
+ module RasterWorksControllerBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ self.show_presenter = GeoWorks::RasterWorkShowPresenter
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module GeoWorks
2
+ module VectorWorksControllerBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ self.show_presenter = GeoWorks::VectorWorkShowPresenter
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module GeoWorks
2
+ module BasicGeoMetadataForm
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ self.terms += [:spatial, :temporal, :coverage, :issued]
6
+ self.required_fields += [:coverage]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module GeoWorks
2
+ module ExternalMetadataFileForm
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ self.terms += [:should_populate_metadata]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module GeoWorks
2
+ module GeoreferencedForm
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ self.terms += [:cartographic_projection]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module Hyrax
2
+ class ImageWorkForm < Hyrax::Forms::WorkForm
3
+ include ::GeoWorks::BasicGeoMetadataForm
4
+ include ::GeoWorks::ExternalMetadataFileForm
5
+ self.model_class = ::ImageWork
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Hyrax
2
+ class RasterWorkForm < Hyrax::Forms::WorkForm
3
+ include ::GeoWorks::BasicGeoMetadataForm
4
+ include ::GeoWorks::GeoreferencedForm
5
+ include ::GeoWorks::ExternalMetadataFileForm
6
+ self.model_class = ::RasterWork
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Hyrax
2
+ class VectorWorkForm < Hyrax::Forms::WorkForm
3
+ include ::GeoWorks::BasicGeoMetadataForm
4
+ include ::GeoWorks::GeoreferencedForm
5
+ include ::GeoWorks::ExternalMetadataFileForm
6
+ self.model_class = ::VectorWork
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ module GeoWorks
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,73 @@
1
+ module GeoWorks
2
+ module BoundingBoxHelper
3
+ ##
4
+ # Builds HTML string for bounding box selector tool.
5
+ # Calls boundingBoxSelector javascript function and
6
+ # passes the id of the location input element that it binds to.
7
+ # @param [Symbol] name of property that holds bounding box string
8
+ # @return[String]
9
+ def bbox(property)
10
+ markup = ''
11
+ markup << %(<div id='bbox'></div>)
12
+ markup << bbox_display_inputs
13
+ markup << bbox_script_tag(property)
14
+ markup.html_safe
15
+ end
16
+
17
+ ##
18
+ # Returns markup for a row of read only bounding box inputs.
19
+ # @return[String]
20
+ # rubocop:disable MethodLength
21
+ def bbox_display_inputs
22
+ %(
23
+ <div class="row bbox-inputs">
24
+ <div class="col-md-3">
25
+ <div class="input-group">
26
+ <span class="input-group-addon"><div>North</div></span>
27
+ <input readonly id="bbox-north" type="text" class="form-control bbox-input">
28
+ </div>
29
+ </div>
30
+ <div class="col-md-3">
31
+ <div class="input-group">
32
+ <span class="input-group-addon"><div>East</div></span>
33
+ <input readonly id="bbox-east" type="text" class="form-control bbox-input">
34
+ </div>
35
+ </div>
36
+ <div class="col-md-3">
37
+ <div class="input-group">
38
+ <span class="input-group-addon"><div>South</div></span>
39
+ <input readonly id="bbox-south" type="text" class="form-control bbox-input">
40
+ </div>
41
+ </div>
42
+ <div class="col-md-3">
43
+ <div class="input-group">
44
+ <span class="input-group-addon"><div>West</div></span>
45
+ <input readonly id="bbox-west" type="text" class="form-control bbox-input">
46
+ </div>
47
+ </div>
48
+ </div>
49
+ )
50
+ end
51
+ # rubocop:enable MethodLength
52
+
53
+ ##
54
+ # Returns script tag markup for loading the bounding box selector.
55
+ # @param[Symbol] name of property that holds bounding box string
56
+ # @return[String] script tag
57
+ def bbox_script_tag(property)
58
+ %(
59
+ <script>
60
+ boundingBoxSelector({inputId: #{bbox_input_id(property)}});
61
+ </script>
62
+ )
63
+ end
64
+
65
+ ##
66
+ # Returns id of location input that is bound to bbox selector.
67
+ # @param [Symbol] name of property that holds bounding box string
68
+ # @return[String] id of location input element
69
+ def bbox_input_id(property)
70
+ "#{curation_concern.class.name.underscore}_#{property}"
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,31 @@
1
+ module GeoWorks
2
+ module FileSetActionsHelper
3
+ def file_set_actions(presenter, locals = {})
4
+ render file_set_actions_partial(presenter),
5
+ locals.merge(file_set: presenter)
6
+ end
7
+
8
+ def file_set_actions_partial(file_set)
9
+ format = file_set_actions_format(file_set)
10
+ 'geo_works/file_sets/actions/' +
11
+ if format
12
+ format
13
+ else
14
+ 'default_actions'
15
+ end
16
+ end
17
+
18
+ def file_set_actions_format(file_set)
19
+ geo_mime_type = file_set.solr_document.fetch(:geo_mime_type_ssim, []).first
20
+ if GeoWorks::ImageFormatService.include?(geo_mime_type)
21
+ 'image_actions'
22
+ elsif GeoWorks::VectorFormatService.include?(geo_mime_type)
23
+ 'vector_actions'
24
+ elsif GeoWorks::RasterFormatService.include?(geo_mime_type)
25
+ 'raster_actions'
26
+ elsif GeoWorks::MetadataFormatService.include?(geo_mime_type)
27
+ 'metadata_actions'
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ module GeoWorks
2
+ module GeoWorksHelper
3
+ # Returns human readable name of child geo work type.
4
+ # @param [GeoWorksShowPresenter] geo work show presenter
5
+ # @return[String]
6
+ def child_geo_works_type(presenter)
7
+ case presenter.class.to_s
8
+ when /ImageWorkShowPresenter/
9
+ 'Raster'
10
+ when /RasterWorkShowPresenter/
11
+ 'Vector'
12
+ end
13
+ end
14
+
15
+ # Returns human readable name of geo work type.
16
+ # @param [GeoWorksShowPresenter] geo work show presenter
17
+ # @return[String]
18
+ def geo_work_type(presenter)
19
+ presenter.human_readable_type.sub('Work', '')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ module GeoWorks
2
+ module PopulateMetadataHelper
3
+ def external_metadata_file_presenters
4
+ GeoWorksShowPresenter.new(curation_concern, nil).external_metadata_file_set_presenters
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'uri'
2
+
3
+ # Loads geoblacklight
4
+ class GeoblacklightJob < ActiveJob::Base
5
+ queue_as :default
6
+
7
+ def perform(message)
8
+ GeoWorks::GeoblacklightEventProcessor.new(message).process
9
+ end
10
+ end
@@ -0,0 +1,36 @@
1
+ require 'uri'
2
+
3
+ ##
4
+ # Delivers derivatives to external services, like GeoServer
5
+ ##
6
+ class GeoserverDeliveryJob < ActiveJob::Base
7
+ queue_as Hyrax.config.ingest_queue_name
8
+
9
+ attr_reader :file_set
10
+
11
+ ##
12
+ # Precondition is that all derivatives are created and saved.
13
+ # @param [FileSet] file_set
14
+ # @param [String] content_url contains the display copy to deliver
15
+ def perform(message)
16
+ @file_set = ActiveFedora::Base.find(message['id'])
17
+ uri = URI.parse(content_url)
18
+ return if uri.path == ''
19
+ GeoWorks::DeliveryService.new(file_set, uri.path).publish
20
+ end
21
+
22
+ def content_url
23
+ case file_set.geo_mime_type
24
+ when *GeoWorks::RasterFormatService.select_options.map(&:last)
25
+ return derivatives_service.send(:derivative_url, 'display_raster')
26
+ when *GeoWorks::VectorFormatService.select_options.map(&:last)
27
+ return derivatives_service.send(:derivative_url, 'display_vector')
28
+ else
29
+ return ''
30
+ end
31
+ end
32
+
33
+ def derivatives_service
34
+ GeoWorks::FileSetDerivativesService.new(file_set)
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ module GeoWorks
2
+ module Ability
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ self.ability_logic += [:geo_works_permissions]
6
+ end
7
+
8
+ def geo_works_permissions
9
+ alias_action :geoblacklight, to: :read
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ module GeoWorks
2
+ # Attributes and methods for basic geospatial metadata used by Works
3
+ module BasicGeoMetadata
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ apply_schema ::GeoWorks::BasicGeoMetadataRequired,
8
+ ActiveFedora::SchemaIndexingStrategy.new(
9
+ ActiveFedora::Indexers::GlobalIndexer.new(
10
+ [:stored_searchable, :facetable, :symbol]
11
+ )
12
+ )
13
+ apply_schema ::GeoWorks::BasicGeoMetadataOptional,
14
+ ActiveFedora::SchemaIndexingStrategy.new(
15
+ ActiveFedora::Indexers::GlobalIndexer.new(
16
+ [:stored_searchable, :facetable, :symbol]
17
+ )
18
+ )
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,31 @@
1
+ module GeoWorks
2
+ # Attributes and methods for vector metadata files
3
+ module ExternalMetadataFileBehavior
4
+ extend ActiveSupport::Concern
5
+ include ::GeoWorks::Extractors::Iso19139Helper
6
+ include ::GeoWorks::Extractors::FgdcHelper
7
+ include ::GeoWorks::Extractors::ModsHelper
8
+
9
+ # Extracts properties from the constitutent external metadata file
10
+ # @example
11
+ # extract_iso19139_metadata
12
+ # extract_fgdc_metadata
13
+ # extract_mods_metadata
14
+ # @return [Hash]
15
+ def extract_metadata
16
+ raise ArgumentError, "MIME type unspecified or not configured" if schema.blank?
17
+ fn = "extract_#{schema.downcase}_metadata"
18
+ raise ArgumentError, "Unsupported metadata standard: #{schema}" unless respond_to?(fn.to_sym)
19
+ send(fn, metadata_xml)
20
+ end
21
+
22
+ # Retrives data from PCDM::File
23
+ def metadata_xml
24
+ Nokogiri::XML(original_file.content)
25
+ end
26
+
27
+ def schema
28
+ (MetadataFormatService.label(geo_mime_type) || '').parameterize(separator: '_')
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ module GeoWorks
2
+ module Extractors
3
+ module FgdcHelper
4
+ def extract_fgdc_metadata(doc)
5
+ GeoWorks::Extractors::FgdcMetadataExtractor.new(doc).to_hash
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,114 @@
1
+ module GeoWorks
2
+ module Extractors
3
+ class FgdcMetadataExtractor
4
+ attr_reader :doc
5
+ def initialize(doc)
6
+ @doc = doc
7
+ end
8
+
9
+ def to_hash
10
+ metadata_required.merge(metadata_optional)
11
+ end
12
+
13
+ def metadata_required
14
+ {
15
+ coverage: coverage,
16
+ creator: creators,
17
+ description: [doc.at_xpath('//idinfo/descript/abstract').text],
18
+ title: [doc.at_xpath('//idinfo/citation/citeinfo/title').text]
19
+ }.compact
20
+ end
21
+
22
+ def metadata_optional
23
+ {
24
+ issued: issued,
25
+ publisher: publishers,
26
+ spatial: placenames,
27
+ subject: keywords,
28
+ temporal: timeperiods
29
+ }.compact
30
+ end
31
+
32
+ def coverage
33
+ doc.at_xpath('//idinfo/spdom/bounding').tap do |node|
34
+ return GeoWorks::Coverage.new(
35
+ coverage_coordinate(node, 'north'),
36
+ coverage_coordinate(node, 'east'),
37
+ coverage_coordinate(node, 'south'),
38
+ coverage_coordinate(node, 'west')
39
+ ).to_s
40
+ end
41
+ nil
42
+ end
43
+
44
+ def coverage_coordinate(node, direction)
45
+ node.at_xpath("#{direction}bc").text.to_f
46
+ end
47
+
48
+ def issued
49
+ doc.at_xpath('//idinfo/citation/citeinfo/pubdate').tap do |node|
50
+ return node.text[0..3].to_i unless node.nil? # extract year only
51
+ end
52
+ nil
53
+ end
54
+
55
+ def timeperiods
56
+ ::GeoWorks::TimePeriod.new(
57
+ extract_multivalued('//idinfo/keywords/temporal/tempkey'), doc
58
+ ).value
59
+ end
60
+
61
+ def publishers
62
+ extract_multivalued('//idinfo/citation/citeinfo/pubinfo/publish')
63
+ end
64
+
65
+ def creators
66
+ extract_multivalued('//idinfo/citation/citeinfo/origin')
67
+ end
68
+
69
+ def placenames
70
+ extract_multivalued('//idinfo/keywords/place/placekey')
71
+ end
72
+
73
+ def keywords
74
+ keywords = extract_multivalued('//idinfo/keywords/theme/themekey')
75
+ keywords.map! { |k| TOPIC_CATEGORIES[k.to_sym].present? ? TOPIC_CATEGORIES[k.to_sym] : k }
76
+ keywords.uniq!
77
+ keywords.present? ? keywords : nil
78
+ end
79
+
80
+ # ISO 19115 Topic Category
81
+ TOPIC_CATEGORIES = {
82
+ farming: 'Farming',
83
+ biota: 'Biology and Ecology',
84
+ climatologyMeteorologyAtmosphere: 'Climatology, Meteorology and Atmosphere',
85
+ boundaries: 'Boundaries',
86
+ elevation: 'Elevation',
87
+ environment: 'Environment',
88
+ geoscientificinformation: 'Geoscientific Information',
89
+ health: 'Health',
90
+ imageryBaseMapsEarthCover: 'Imagery and Base Maps',
91
+ intelligenceMilitary: 'Military',
92
+ inlandWaters: 'Inland Waters',
93
+ location: 'Location',
94
+ oceans: 'Oceans',
95
+ planningCadastre: 'Planning and Cadastral',
96
+ structure: 'Structures',
97
+ transportation: 'Transportation',
98
+ utilitiesCommunication: 'Utilities and Communication',
99
+ society: 'Society'
100
+ }.freeze
101
+
102
+ private
103
+
104
+ def extract_multivalued(xpath)
105
+ values = []
106
+ doc.xpath(xpath).each do |node|
107
+ values << node.text.strip
108
+ end
109
+ values.uniq!
110
+ values.present? ? values : nil
111
+ end
112
+ end
113
+ end
114
+ end