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,48 @@
1
+ module GeoWorks
2
+ class GeoWorksShowPresenter < Hyrax::WorkShowPresenter
3
+ delegate :spatial, :temporal, :issued, :coverage, :provenance, :layer_modified,
4
+ :identifier, to: :solr_document
5
+ class_attribute :file_format_service
6
+
7
+ def geo_file_set_presenters
8
+ # filter for geo file sets
9
+ file_set_presenters.select do |member|
10
+ file_format_service.include? member.solr_document.fetch(:geo_mime_type_tesim, [])[0]
11
+ end
12
+ end
13
+
14
+ def external_metadata_file_set_presenters
15
+ # filter for external metadata files
16
+ file_set_presenters.select do |member|
17
+ MetadataFormatService.include? member.solr_document.fetch(:geo_mime_type_tesim, [])[0]
18
+ end
19
+ end
20
+
21
+ def parent_work_presenters
22
+ # filter out collection presenters
23
+ member_of_presenters.select do |member|
24
+ member.model_name.name != "Collection"
25
+ end
26
+ end
27
+
28
+ def member_of_presenters
29
+ Hyrax::PresenterFactory.build_presenters(member_of_ids,
30
+ collection_presenter_class,
31
+ *presenter_factory_arguments)
32
+ end
33
+
34
+ def member_of_ids
35
+ ActiveFedora::SolrService.query("{!field f=member_ids_ssim}#{id}",
36
+ fl: ActiveFedora.id_field)
37
+ .map { |x| x.fetch(ActiveFedora.id_field) }
38
+ end
39
+
40
+ def attribute_to_html(field, options = {})
41
+ if field == :coverage
42
+ GeoWorks::CoverageRenderer.new(field, send(field), options).render
43
+ else
44
+ super field, options
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,5 @@
1
+ module GeoWorks
2
+ class ImageWorkShowPresenter < GeoWorksShowPresenter
3
+ self.file_format_service = ImageFormatService
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module GeoWorks
2
+ class RasterWorkShowPresenter < GeoWorksShowPresenter
3
+ self.file_format_service = GeoWorks::RasterFormatService
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module GeoWorks
2
+ class VectorWorkShowPresenter < GeoWorksShowPresenter
3
+ self.file_format_service = VectorFormatService
4
+ end
5
+ end
@@ -0,0 +1,29 @@
1
+ module GeoWorks
2
+ class GeoblacklightEventProcessor
3
+ attr_reader :event
4
+ def initialize(event)
5
+ @event = event
6
+ end
7
+
8
+ delegate :process, to: :processor
9
+
10
+ private
11
+
12
+ def event_type
13
+ event['event']
14
+ end
15
+
16
+ def processor
17
+ case event_type
18
+ when 'CREATED'
19
+ UpdateProcessor.new(event)
20
+ when 'UPDATED'
21
+ UpdateProcessor.new(event)
22
+ when 'DELETED'
23
+ DeleteProcessor.new(event)
24
+ else
25
+ UnknownEvent.new(event)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ module GeoWorks
2
+ class GeoblacklightEventProcessor
3
+ class DeleteProcessor < Processor
4
+ def process
5
+ index.delete_by_query "layer_slug_s:#{RSolr.solr_escape(id)}"
6
+ index.commit
7
+ true
8
+ rescue RSolr::Error::Http
9
+ false
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ module GeoWorks
2
+ class GeoblacklightEventProcessor
3
+ class Processor
4
+ attr_reader :event
5
+ def initialize(event)
6
+ @event = event
7
+ end
8
+
9
+ private
10
+
11
+ def event_type
12
+ event['event']
13
+ end
14
+
15
+ def id
16
+ event['id']
17
+ end
18
+
19
+ def doc
20
+ event['doc']
21
+ end
22
+
23
+ def index
24
+ RSolr.connect(url: GeoWorks::Geoblacklight.config['url'])
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ module GeoWorks
2
+ class GeoblacklightEventProcessor
3
+ class UnknownEvent < Processor
4
+ attr_reader :event
5
+ def initialize(event)
6
+ @event = event
7
+ end
8
+
9
+ def process
10
+ Rails.logger.info("Unable to process event type #{event_type}")
11
+ false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module GeoWorks
2
+ class GeoblacklightEventProcessor
3
+ class UpdateProcessor < Processor
4
+ def process
5
+ index.update params: { overwrite: true },
6
+ data: [doc].to_json,
7
+ headers: { 'Content-Type' => 'application/json' }
8
+ index.commit
9
+ true
10
+ rescue RSolr::Error::Http
11
+ false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,81 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module BaseGeoProcessor
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # Chains together and recursively runs a set of commands.
8
+ # Except for the last command in the queue, a temp file
9
+ # is created as output and is then fed into the input of the next.
10
+ # Temp files are deleted in reverse order after the last command
11
+ # is run. The commands must have the same method signature:
12
+ # command_name(in_path, out_path, options)
13
+ #
14
+ # @param in_path [String] file input path
15
+ # @param out_path [String] processor output file path
16
+ # @param method_queue [Array] set of commands to run
17
+ # @param options [Hash] creation options to pass
18
+ def self.run_commands(in_path, out_path, method_queue, options)
19
+ next_step = method_queue.shift
20
+ if method_queue.empty?
21
+ method(next_step).call(in_path, out_path, options)
22
+ else
23
+ temp = temp_path(out_path)
24
+ method(next_step).call(in_path, temp, options)
25
+ run_commands(temp, out_path, method_queue, options)
26
+ FileUtils.rm_rf(temp)
27
+ end
28
+ end
29
+
30
+ # Returns a path to an intermediate temp file or directory.
31
+ # @param path [String] input file path to base temp path on
32
+ # @return [String] tempfile path
33
+ def self.temp_path(path)
34
+ time = (Time.now.to_f * 1000).to_i
35
+ "#{File.dirname(path)}/#{File.basename(path, File.extname(path))}_#{time}"
36
+ end
37
+ end
38
+
39
+ def options_for(_format)
40
+ {
41
+ label: label,
42
+ output_size: output_size,
43
+ output_srid: output_srid,
44
+ basename: basename,
45
+ id: id
46
+ }
47
+ end
48
+
49
+ # Returns the label directive or an empty string.
50
+ # @return [Sting] output label
51
+ def label
52
+ directives.fetch(:label, '')
53
+ end
54
+
55
+ # Transforms the size directive into a GDAL size parameter.
56
+ # @return [String] derivative size
57
+ def output_size
58
+ return unless directives[:size]
59
+ directives[:size].tr('x', ' ')
60
+ end
61
+
62
+ # Gets srid for reprojection derivative or returns WGS 84.
63
+ # @return [String] spatial reference code
64
+ def output_srid
65
+ directives.fetch(:srid, 'EPSG:4326')
66
+ end
67
+
68
+ # Extracts the base file name (without extension) from the source file path.
69
+ # @return [String] base file name for source
70
+ def basename
71
+ File.basename(source_path, File.extname(source_path))
72
+ end
73
+
74
+ # Gets the fileset id or returns nil.
75
+ # @return [String] fileset id
76
+ def id
77
+ directives.fetch(:id, nil)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,49 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Gdal
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # Executes a gdal_translate command. Used to translate a raster
8
+ # format into a different format. Also used in generating thumbnails
9
+ # from vector data.
10
+ # @param in_path [String] file input path
11
+ # @param out_path [String] processor output file path
12
+ # @param options [Hash] creation options
13
+ def self.translate(in_path, out_path, _options)
14
+ execute "gdal_translate -q -ot Byte -of GTiff \"#{in_path}\" #{out_path}"
15
+ end
16
+
17
+ # Executes a gdalwarp command. Used to transform a raster
18
+ # from one projection into another.
19
+ # @param in_path [String] file input path
20
+ # @param out_path [String] processor output file path
21
+ # @param options [Hash] creation options
22
+ def self.warp(in_path, out_path, options)
23
+ execute "gdalwarp -q -r bilinear -t_srs #{options[:output_srid]} "\
24
+ "#{in_path} #{out_path} -co 'COMPRESS=NONE'"
25
+ end
26
+
27
+ # Executes a gdal_translate command. Used to compress
28
+ # a previously uncompressed raster.
29
+ # @param in_path [String] file input path
30
+ # @param out_path [String] processor output file path
31
+ # @param options [Hash] creation options
32
+ def self.compress(in_path, out_path, options)
33
+ execute "gdal_translate -q -ot Byte -a_srs #{options[:output_srid]} "\
34
+ "#{in_path} #{out_path} -co 'COMPRESS=LZW'"
35
+ end
36
+
37
+ # Executes a gdal_rasterize command. Used to rasterize vector
38
+ # format into raster format.
39
+ # @param in_path [String] file input path
40
+ # #param options [Hash] creation options
41
+ # @param out_path [String] processor output file path
42
+ def self.rasterize(in_path, out_path, options)
43
+ execute "gdal_rasterize -q -burn 0 -init 255 -ot Byte -ts "\
44
+ "#{options[:output_size]} -of GTiff #{in_path} #{out_path}"
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,66 @@
1
+ require 'mini_magick'
2
+
3
+ module GeoWorks
4
+ module Processors
5
+ module Image
6
+ extend ActiveSupport::Concern
7
+ included do
8
+ # Uses imagemagick to resize an image and convert it to the output format.
9
+ # Keeps the aspect ratio of the original image and adds padding to
10
+ # to the output image. The file extension is the output format.
11
+ # @param in_path [String] file input path
12
+ # @param out_path [String] processor output file path.
13
+ # @param options [Hash] creation options
14
+ # @option options [String] `:output_size` as "w h" or "wxh"
15
+ # rubocop:disable Metrics/MethodLength
16
+ def self.convert(in_path, out_path, options)
17
+ size = options[:output_size].tr(' ', 'x')
18
+ convert = MiniMagick::Tool::Convert.new(whiny: false)
19
+ convert << in_path
20
+ convert << "-resize"
21
+ convert << size
22
+ convert << "-extent"
23
+ convert << size
24
+ convert << "-background"
25
+ convert << "white"
26
+ convert << "-gravity"
27
+ convert << "center"
28
+ convert << out_path
29
+
30
+ # suppress stderr b/c geotiffs return 'unknown field' warnings
31
+ convert.call { |_stdout, _stderr| }
32
+ end
33
+ # rubocop:enable Metrics/MethodLength
34
+
35
+ # Trims extra whitespace.
36
+ # @param in_path [String] file input path
37
+ # @param out_path [String] processor output file path.
38
+ # @param options [Hash] creation options
39
+ def self.trim(in_path, out_path, _options)
40
+ MiniMagick::Tool::Convert.new do |convert|
41
+ convert << in_path
42
+ convert << "-trim"
43
+ convert << out_path
44
+ end
45
+ end
46
+
47
+ # Centers and pads image.
48
+ # @param in_path [String] file input path
49
+ # @param out_path [String] processor output file path.
50
+ # @param options [Hash] creation options
51
+ def self.center(in_path, out_path, options)
52
+ MiniMagick::Tool::Convert.new do |convert|
53
+ convert << "-size"
54
+ convert << options[:output_size].tr(' ', 'x')
55
+ convert << "xc:white"
56
+ convert << in_path
57
+ convert << "-gravity"
58
+ convert << "center"
59
+ convert << "-composite"
60
+ convert << out_path
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,19 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Ogr
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # Executes a ogr2ogr command. Used to reproject a
8
+ # vector dataset and save the output as a shapefile
9
+ # @param in_path [String] file input path
10
+ # #param options [Hash] creation options
11
+ # @param out_path [String] processor output file path
12
+ def self.reproject(in_path, out_path, options)
13
+ execute "env SHAPE_ENCODING= ogr2ogr -q -nln #{options[:id]} -f 'ESRI Shapefile'"\
14
+ " -t_srs #{options[:output_srid]} -preserve_fid '#{out_path}' '#{in_path}'"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Raster
4
+ class Processor < Hydra::Derivatives::Processors::Processor
5
+ def process
6
+ raster_processor_class.new(source_path,
7
+ directives,
8
+ output_file_service: output_file_service).process
9
+ end
10
+
11
+ # Returns a raster processor class based on mime type passed in the directives object.
12
+ # @return raster processing class
13
+ def raster_processor_class
14
+ case directives.fetch(:input_format)
15
+ when 'text/plain; gdal-format=USGSDEM'
16
+ GeoWorks::Processors::Raster::Dem
17
+ when 'application/octet-stream; gdal-format=AIG'
18
+ GeoWorks::Processors::Raster::Aig
19
+ else
20
+ GeoWorks::Processors::Raster::Base
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,40 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Raster
4
+ class Aig < GeoWorks::Processors::Raster::Base
5
+ include GeoWorks::Processors::Zip
6
+
7
+ def self.encode(path, options, output_file)
8
+ unzip(path, output_file) do |zip_path|
9
+ info = Info.new(zip_path)
10
+ options[:min_max] = info.min_max
11
+ case options[:label]
12
+ when :thumbnail
13
+ encode_raster(zip_path, output_file, options)
14
+ when :display_raster
15
+ reproject_raster(zip_path, output_file, options)
16
+ end
17
+ end
18
+ end
19
+
20
+ # Set of commands to run to reproject the AIG.
21
+ # @return [Array] set of command name symbols
22
+ def self.reproject_queue
23
+ [:warp, :translate]
24
+ end
25
+
26
+ # Executes a gdal_translate command to translate a raster
27
+ # format into a different format with a scaling options. This command
28
+ # scales the min and max values of the raster into the 0 to 255 range.
29
+ # Scale is inverted (255 to 0) to create a better visualization.
30
+ # @param in_path [String] file input path
31
+ # @param out_path [String] processor output file path
32
+ # @param options [Hash] creation options
33
+ def self.translate(in_path, out_path, options)
34
+ execute "gdal_translate -scale #{options[:min_max]} 255 0 "\
35
+ "-q -ot Byte -of GTiff \"#{in_path}\" #{out_path}"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end