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,41 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Raster
4
+ class Base < Hydra::Derivatives::Processors::Processor
5
+ include Hydra::Derivatives::Processors::ShellBasedProcessor
6
+ include GeoWorks::Processors::BaseGeoProcessor
7
+ include GeoWorks::Processors::Image
8
+ include GeoWorks::Processors::Gdal
9
+
10
+ def self.encode(path, options, output_file)
11
+ case options[:label]
12
+ when :thumbnail
13
+ encode_raster(path, output_file, options)
14
+ when :display_raster
15
+ reproject_raster(path, output_file, options)
16
+ end
17
+ end
18
+
19
+ # Set of commands to run to encode the raster thumbnail.
20
+ # @return [Array] set of command name symbols
21
+ def self.encode_queue
22
+ [:translate, :convert]
23
+ end
24
+
25
+ # Set of commands to run to reproject the raster.
26
+ # @return [Array] set of command name symbols
27
+ def self.reproject_queue
28
+ [:warp, :compress]
29
+ end
30
+
31
+ def self.encode_raster(in_path, out_path, options)
32
+ run_commands(in_path, out_path, encode_queue, options)
33
+ end
34
+
35
+ def self.reproject_raster(in_path, out_path, options)
36
+ run_commands(in_path, out_path, reproject_queue, options)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,29 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Raster
4
+ class Dem < GeoWorks::Processors::Raster::Base
5
+ # Set of commands to run to encode the DEM thumbnail.
6
+ # @return [Array] set of command name symbols
7
+ def self.encode_queue
8
+ [:hillshade, :convert]
9
+ end
10
+
11
+ # Set of commands to run to reproject the DEM.
12
+ # @return [Array] set of command name symbols
13
+ def self.reproject_queue
14
+ [:hillshade, :warp]
15
+ end
16
+
17
+ # Executes a gdal hillshade command. Calculates hillshade
18
+ # on a raster that contains elevation data.
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.hillshade(in_path, out_path, _options)
23
+ execute "gdaldem hillshade -q "\
24
+ "-of GTiff \"#{in_path}\" #{out_path}"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,52 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Raster
4
+ class Info
5
+ attr_accessor :doc
6
+ attr_writer :min_max, :size
7
+
8
+ def initialize(path)
9
+ @doc = gdalinfo(path)
10
+ end
11
+
12
+ # Returns the min and max values for a raster.
13
+ # @return [String] computed min and max values
14
+ def min_max
15
+ @min_max ||= raster_min_max
16
+ end
17
+
18
+ # Returns the raster size.
19
+ # @return [Array] raster size
20
+ def size
21
+ @size ||= raster_size
22
+ end
23
+
24
+ private
25
+
26
+ # Runs the gdalinfo command and returns the result as a string.
27
+ # @param path [String] path to raster file
28
+ # @return [String] output of gdalinfo
29
+ def gdalinfo(path)
30
+ stdout, _stderr, _status = Open3.capture3("gdalinfo -mm #{path}")
31
+ stdout
32
+ end
33
+
34
+ # Given an output string from the gdalinfo command, returns
35
+ # a formatted string for the computed min and max values.
36
+ # @return [String] computed min and max values
37
+ def raster_min_max
38
+ match = %r{(?<=Computed Min/Max=).*?(?=\s)}.match(doc)
39
+ match ? match[0].tr(',', ' ') : ''
40
+ end
41
+
42
+ # Given an output string from the gdalinfo command, returns
43
+ # an array containing the raster width and height as strings.
44
+ # @return [String] raster size
45
+ def raster_size
46
+ match = /(?<=Size is ).*/.match(doc)
47
+ match ? match[0].tr(',', '') : ''
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,79 @@
1
+ require 'simpler_tiles'
2
+
3
+ module GeoWorks
4
+ module Processors
5
+ module Rendering
6
+ extend ActiveSupport::Concern
7
+ included do
8
+ # Renders a thumbnail from a vector dataset.
9
+ # @param in_path [String] file input path
10
+ # @param out_path [String] processor output file path
11
+ # @param options [Hash] creation options
12
+ def self.vector_thumbnail(in_path, out_path, options)
13
+ map = GeoWorks::Processors::Rendering.simple_tiles_map(in_path, options)
14
+ File.open(out_path, 'wb') { |f| f.write map.to_png }
15
+ end
16
+ end
17
+
18
+ class << self
19
+ # Builds a simple tiles map from a shapefile.
20
+ # @param in_path [String] file input path
21
+ # @param options [Hash] creation
22
+ # @return [SimplerTiles::Map] simple tiles map
23
+ def simple_tiles_map(in_path, options)
24
+ assign_rendering_options(in_path, options)
25
+ size = rendering_size(options)
26
+ SimplerTiles::Map.new do |m|
27
+ m.srs = 'EPSG:4326'
28
+ m.bgcolor = SimplerTiles.config.bg_color
29
+ m.width = size[0]
30
+ m.height = size[1]
31
+ m.set_bounds(*simple_tiles_bounds(options))
32
+ add_shapefile_layer(in_path, m)
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ # Adds a shapefile layer to a simple tiles map.
39
+ # @param in_path [String] file input path
40
+ # @param options [Hash] creation options
41
+ def add_shapefile_layer(in_path, map)
42
+ Dir.glob("#{in_path}/*.shp").each do |shp|
43
+ map.layer shp do |l|
44
+ l.query "select * from '#{File.basename shp, '.shp'}'" do |q|
45
+ q.styles SimplerTiles.config.to_h
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ # Re-orders options bounds for use with a simple tiles map.
52
+ # @param options [Hash] creation options
53
+ # @return [Array] simple tiles map bounds
54
+ def simple_tiles_bounds(options)
55
+ [options[:bounds][:east],
56
+ options[:bounds][:north],
57
+ options[:bounds][:west],
58
+ options[:bounds][:south]]
59
+ end
60
+
61
+ # Transforms the size directive into an array.
62
+ # @param options [Hash] creation options
63
+ # @return [Array] derivative size
64
+ def rendering_size(options)
65
+ options[:output_size].split(' ').map(&:to_i)
66
+ end
67
+
68
+ # Assigns new values from the vector info command to the creation options hash.
69
+ # @param in_path [String] file input path
70
+ # @param options [Hash] creation options
71
+ def assign_rendering_options(in_path, options)
72
+ vector_info = GeoWorks::Processors::Vector::Info.new(in_path)
73
+ options[:name] = vector_info.name
74
+ options[:bounds] = vector_info.bounds
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,24 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Vector
4
+ class Processor < Hydra::Derivatives::Processors::Processor
5
+ def process
6
+ vector_processor_class.new(source_path,
7
+ directives,
8
+ output_file_service: output_file_service).process
9
+ end
10
+
11
+ # Returns a vector processor class based on mime type passed in the directives object.
12
+ # @return vector processing class
13
+ def vector_processor_class
14
+ case directives.fetch(:input_format)
15
+ when 'application/zip; ogr-format="ESRI Shapefile"'
16
+ GeoWorks::Processors::Vector::Shapefile
17
+ else
18
+ GeoWorks::Processors::Vector::Base
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,44 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Vector
4
+ class Base < Hydra::Derivatives::Processors::Processor
5
+ include Hydra::Derivatives::Processors::ShellBasedProcessor
6
+ include GeoWorks::Processors::BaseGeoProcessor
7
+ include GeoWorks::Processors::Image
8
+ include GeoWorks::Processors::Ogr
9
+ include GeoWorks::Processors::Gdal
10
+ include GeoWorks::Processors::Rendering
11
+ include GeoWorks::Processors::Zip
12
+
13
+ def self.encode(path, options, output_file)
14
+ case options[:label]
15
+ when :thumbnail
16
+ encode_vector(path, output_file, options)
17
+ when :display_vector
18
+ reproject_vector(path, output_file, options)
19
+ end
20
+ end
21
+
22
+ # Set of commands to run to encode the vector thumbnail.
23
+ # @return [Array] set of command name symbols
24
+ def self.encode_queue
25
+ [:reproject, :vector_thumbnail, :trim, :center]
26
+ end
27
+
28
+ # Set of commands to run to reproject the vector.
29
+ # @return [Array] set of command name symbols
30
+ def self.reproject_queue
31
+ [:reproject, :zip]
32
+ end
33
+
34
+ def self.encode_vector(in_path, out_path, options)
35
+ run_commands(in_path, out_path, encode_queue, options)
36
+ end
37
+
38
+ def self.reproject_vector(in_path, out_path, options)
39
+ run_commands(in_path, out_path, reproject_queue, options)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,84 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Vector
4
+ class Info
5
+ attr_accessor :doc
6
+ attr_writer :name, :driver
7
+
8
+ def initialize(path)
9
+ @doc = ogrinfo(path)
10
+ end
11
+
12
+ # Returns the vector dataset name
13
+ # @return [String] dataset name
14
+ def name
15
+ @name = vector_name
16
+ end
17
+
18
+ # Returns the ogr driver name
19
+ # @return [String] driver name
20
+ def driver
21
+ @driver = driver_name
22
+ end
23
+
24
+ # Returns vector geometry type
25
+ # @return [String] geom
26
+ def geom
27
+ @geom = vector_geom
28
+ end
29
+
30
+ # Returns vector bounds
31
+ # @return [String] bounds
32
+ def bounds
33
+ @bounds = vector_bounds
34
+ end
35
+
36
+ private
37
+
38
+ # Runs the ogrinfo command and returns the result as a string.
39
+ # @param path [String] path to vector file or shapefile directory
40
+ # @return [String] output of ogrinfo
41
+ def ogrinfo(path)
42
+ stdout, _stderr, _status = Open3.capture3("ogrinfo -ro -so -al #{path}")
43
+ stdout
44
+ end
45
+
46
+ # Given an output string from the ogrinfo command, returns
47
+ # the vector dataset name.
48
+ # @return [String] vector dataset name
49
+ def vector_name
50
+ match = /(?<=Layer name:\s).*?(?=\n)/.match(doc)
51
+ match ? match[0] : ''
52
+ end
53
+
54
+ # Given an output string from the ogrinfo command, returns
55
+ # the ogr driver used to read dataset.
56
+ # @return [String] ogr driver name
57
+ def driver_name
58
+ match = /(?<=driver\s`).*?(?=')/.match(doc)
59
+ match ? match[0] : ''
60
+ end
61
+
62
+ # Given an output string from the ogrinfo command, returns
63
+ # the vector geometry type.
64
+ # @return [String] vector geom
65
+ def vector_geom
66
+ match = /(?<=Geometry:\s).*?(?=\n)/.match(doc)
67
+ match ? match[0] : ''
68
+ end
69
+
70
+ # Given an output string from the ogrinfo command, returns
71
+ # the vector bounding box.
72
+ # @return [Hash] vector bounds
73
+ def vector_bounds
74
+ match = /(?<=Extent:\s).*?(?=\n)/.match(doc)
75
+ extent = match ? match[0] : ''
76
+
77
+ # remove parens and spaces, split into array, and assign elements to variables
78
+ w, s, e, n = extent.delete(' ').gsub(')-(', ',').delete('(').delete(')').split(',')
79
+ { north: n.to_f, east: e.to_f, south: s.to_f, west: w.to_f }
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,20 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Vector
4
+ class Shapefile < GeoWorks::Processors::Vector::Base
5
+ include GeoWorks::Processors::Zip
6
+
7
+ def self.encode(path, options, output_file)
8
+ unzip(path, output_file) do |zip_path|
9
+ case options[:label]
10
+ when :thumbnail
11
+ encode_vector(zip_path, output_file, options)
12
+ when :display_vector
13
+ reproject_vector(zip_path, output_file, options)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ module GeoWorks
2
+ module Processors
3
+ module Zip
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # Unzips a file, invokes a block, and then deletes the unzipped file(s).
8
+ # Use to wrap processor methods for geo file formats that
9
+ # are zipped before uploading.
10
+ # @param in_path [String] file input path
11
+ # @param output_file [String] processor output file path
12
+ def self.unzip(in_path, output_file, _options = {})
13
+ basename = File.basename(output_file, File.extname(output_file))
14
+ zip_out_path = "#{File.dirname(output_file)}/#{basename}_out"
15
+ execute "unzip -qq -j -d \"#{zip_out_path}\" \"#{in_path}\""
16
+ yield zip_out_path
17
+ FileUtils.rm_rf(zip_out_path)
18
+ end
19
+
20
+ # Zips a file or directory.
21
+ # @param in_path [String] file input path
22
+ # @param output_file [String] output zip file
23
+ def self.zip(in_path, output_file, _options = {})
24
+ execute "zip -j -qq -r \"#{output_file}\" \"#{in_path}\""
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ module GeoWorks
2
+ class CoverageRenderer < Hyrax::Renderers::AttributeRenderer
3
+ include BoundingBoxHelper
4
+
5
+ def render
6
+ coverage = values.first if values
7
+ return '' unless coverage
8
+ markup(coverage).html_safe
9
+ end
10
+
11
+ private
12
+
13
+ def markup(coverage)
14
+ markup = ''
15
+ markup << %(<tr><th>#{label}</th>\n<td id='accordion'><ul class='tabular'>)
16
+ markup << %(<div id='bbox' class='collapse in'></div>)
17
+ markup << bbox_display_inputs
18
+ markup << bbox_script_tag(coverage)
19
+ markup << toggle_button
20
+ markup << %(</ul></td></tr>)
21
+ markup
22
+ end
23
+
24
+ def toggle_button
25
+ %(
26
+ <a data-toggle='collapse' data-parent='accordion' href='#bbox' class='btn btn-default'>
27
+ Toggle Map</a>
28
+ )
29
+ end
30
+
31
+ def bbox_script_tag(coverage)
32
+ %(
33
+ <script>
34
+ boundingBoxSelector({coverage: '#{coverage}', readonly: true});
35
+ </script>
36
+ )
37
+ end
38
+ end
39
+ end