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,50 @@
1
+ module GeoWorks
2
+ module Extractors
3
+ module Iso19139Helper
4
+ NS = {
5
+ 'xmlns:gmd' => 'http://www.isotc211.org/2005/gmd',
6
+ 'xmlns:gco' => 'http://www.isotc211.org/2005/gco'
7
+ }.freeze
8
+
9
+ # TODO: Migrate this code into an XSLT?
10
+ # TODO: Need to support multivalued fields
11
+ def extract_iso19139_metadata(doc)
12
+ h = {}
13
+ doc.at_xpath('//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString', NS).tap do |node|
14
+ h[:title] = [node.text.strip]
15
+ end
16
+
17
+ doc.at_xpath('//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox', NS).tap do |node|
18
+ w = node.at_xpath('gmd:westBoundLongitude/gco:Decimal', NS).text.to_f
19
+ e = node.at_xpath('gmd:eastBoundLongitude/gco:Decimal', NS).text.to_f
20
+ n = node.at_xpath('gmd:northBoundLatitude/gco:Decimal', NS).text.to_f
21
+ s = node.at_xpath('gmd:southBoundLatitude/gco:Decimal', NS).text.to_f
22
+ h[:coverage] = GeoWorks::Coverage.new(n, e, s, w).to_s
23
+ end
24
+
25
+ doc.at_xpath('//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract/gco:CharacterString', NS).tap do |node|
26
+ h[:description] = [node.text.strip]
27
+ end
28
+
29
+ doc.xpath('//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue=\'originator\']', NS).each do |node|
30
+ h[:creator] = begin
31
+ [node.at_xpath('ancestor-or-self::*/gmd:individualName', NS).text.strip]
32
+ rescue
33
+ [node.at_xpath('ancestor-or-self::*/gmd:organisationName', NS).text.strip]
34
+ end
35
+ end
36
+
37
+ # TODO: Not sure if custodian is the same as source
38
+ doc.xpath('//gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode[@codeListValue=\'custodian\']', NS).each do |node|
39
+ h[:source] = begin
40
+ [node.at_xpath('ancestor-or-self::*/gmd:individualName', NS).text.strip]
41
+ rescue
42
+ [node.at_xpath('ancestor-or-self::*/gmd:organisationName', NS).text.strip]
43
+ end
44
+ end
45
+
46
+ h
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,15 @@
1
+ module GeoWorks
2
+ module Extractors
3
+ module ModsHelper
4
+ NS = {
5
+ 'xmlns:mods' => 'http://www.loc.gov/mods/v3'
6
+ }.freeze
7
+ def extract_mods_metadata(doc)
8
+ {
9
+ title: [doc.at_xpath('//mods:mods/mods:titleInfo/mods:title', NS).text],
10
+ description: [doc.at_xpath('//mods:mods/mods:abstract', NS).text]
11
+ }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module GeoWorks
2
+ # Attributes and methods for basic geospatial metadata used by Works
3
+ module FileSetMetadata
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ apply_schema ::GeoWorks::FileSetMetadataRequired,
8
+ ActiveFedora::SchemaIndexingStrategy.new(
9
+ ActiveFedora::Indexers::GlobalIndexer.new(
10
+ [:stored_searchable, :symbol]
11
+ )
12
+ )
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module GeoWorks
2
+ module FileSetPresenterBehavior
3
+ def label
4
+ nil
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,37 @@
1
+ module GeoWorks
2
+ module GeoFileFormatBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ def image_file?
6
+ GeoWorks::ImageFormatService.include?(geo_mime_type)
7
+ end
8
+
9
+ def raster_file?
10
+ GeoWorks::RasterFormatService.include?(geo_mime_type)
11
+ end
12
+
13
+ def vector_file?
14
+ GeoWorks::VectorFormatService.include?(geo_mime_type)
15
+ end
16
+
17
+ def external_metadata_file?
18
+ GeoWorks::MetadataFormatService.include?(geo_mime_type)
19
+ end
20
+
21
+ def geo_file_format?
22
+ image_file? || raster_file? || vector_file? || external_metadata_file?
23
+ end
24
+
25
+ def image_work?
26
+ false
27
+ end
28
+
29
+ def raster_work?
30
+ false
31
+ end
32
+
33
+ def vector_work?
34
+ false
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ module GeoWorks
2
+ module GeoFileSetBehavior
3
+ extend ActiveSupport::Concern
4
+ include ::GeoWorks::GeoFileFormatBehavior
5
+ include ::GeoWorks::ImageFileBehavior
6
+ include ::GeoWorks::RasterFileBehavior
7
+ include ::GeoWorks::VectorFileBehavior
8
+ include ::GeoWorks::ExternalMetadataFileBehavior
9
+ include ::GeoWorks::FileSetMetadata
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module GeoWorks
2
+ # Attributes and methods for georeferenced files
3
+ module GeoreferencedBehavior
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # Defines the OGC coordinate reference system (CRS) identifier for the resource
8
+ # @see http://www.opengeospatial.org/ogcna OGC Naming Authority
9
+ # @example
10
+ # raster_file.cartographic_projection = "urn:ogc:def:crs:EPSG:6.3:26986"
11
+ property :cartographic_projection,
12
+ predicate: ::RDF::Vocab::Bibframe.cartographicProjection,
13
+ multiple: false do |index|
14
+ index.as :stored_searchable
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module GeoWorks
2
+ # Attributes and methods for image files
3
+ module ImageFileBehavior
4
+ extend ActiveSupport::Concern
5
+
6
+ # Retrieve the Image Work of which this Object is a member
7
+ # @return [GeoWorks::ImageWork]
8
+ def image_work
9
+ parents.select do |parent|
10
+ parent.class.included_modules.include?(::GeoWorks::ImageWorkBehavior)
11
+ end.to_a
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,69 @@
1
+ module GeoWorks
2
+ # Attributes and methods for image works
3
+ module ImageWorkBehavior
4
+ extend ActiveSupport::Concern
5
+ include ::GeoWorks::MetadataExtractionHelper
6
+
7
+ included do
8
+ type [Hydra::PCDM::Vocab::PCDMTerms.Object,
9
+ Hydra::Works::Vocab::WorksTerms.GenericWork,
10
+ ::GeoWorks::GeoTerms.ImageWork]
11
+ end
12
+
13
+ def image_file
14
+ members.select(&:image_file?).to_a.first
15
+ end
16
+
17
+ def metadata_files
18
+ members.select(&:external_metadata_file?)
19
+ end
20
+
21
+ def raster_works
22
+ members.select(&:raster_work?)
23
+ end
24
+
25
+ # Defines type by what it is and isn't
26
+
27
+ # This is an Image Resource
28
+ # @return [Boolean]
29
+ def image_work?
30
+ true
31
+ end
32
+
33
+ # This is not an ImageFile Resource
34
+ # @return [Boolean]
35
+ def image_file?
36
+ false
37
+ end
38
+
39
+ # This is not an ImageFile Resource
40
+ # @return [Boolean]
41
+ def raster_work?
42
+ false
43
+ end
44
+
45
+ # This is not an ImageFile Resource
46
+ # @return [Boolean]
47
+ def raster_file?
48
+ false
49
+ end
50
+
51
+ # This is not an ImageFile Resource
52
+ # @return [Boolean]
53
+ def vector_work?
54
+ false
55
+ end
56
+
57
+ # This is not an ImageFile Resource
58
+ # @return [Boolean]
59
+ def vector_file?
60
+ false
61
+ end
62
+
63
+ # This is not an ExternalMetadataFile Resource
64
+ # @return [Boolean]
65
+ def external_metadata_file?
66
+ false
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,27 @@
1
+ module GeoWorks
2
+ module MetadataExtractionHelper
3
+ # Extracts properties from the constitutent external metadata file
4
+ # @return [Hash]
5
+ def extract_metadata(id)
6
+ return {} if metadata_files.blank?
7
+ metadata_file = metadata_files.find { |f| f.id == id }
8
+ metadata_file.extract_metadata if metadata_file
9
+ end
10
+
11
+ # Sets properties from the constitutent external metadata file
12
+ def populate_metadata(id)
13
+ extract_metadata(id).each do |k, v|
14
+ send("#{k}=".to_sym, v) # set each property
15
+ end
16
+ end
17
+
18
+ attr_accessor :should_populate_metadata
19
+
20
+ def should_populate_metadata=(args)
21
+ @should_populate_metadata = args.present? && args != ''
22
+ return unless should_populate_metadata
23
+ populate_metadata(args)
24
+ save
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ module GeoWorks
2
+ # Attributes and methods for raster files
3
+ module RasterFileBehavior
4
+ extend ActiveSupport::Concern
5
+ include ::GeoWorks::GeoreferencedBehavior
6
+ # Retrieve the Raster Work of which this Object is a member
7
+ # @return [GeoWorks::Raster]
8
+ def raster_work
9
+ parents.select do |parent|
10
+ parent.class.included_modules.include?(::GeoWorks::RasterWorkBehavior)
11
+ end.to_a
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,82 @@
1
+ # Attributes and methods for raster works
2
+ module GeoWorks
3
+ module RasterWorkBehavior
4
+ extend ActiveSupport::Concern
5
+ include ::GeoWorks::MetadataExtractionHelper
6
+
7
+ included do
8
+ type [Hydra::PCDM::Vocab::PCDMTerms.Object,
9
+ Hydra::Works::Vocab::WorksTerms.GenericWork,
10
+ ::GeoWorks::GeoTerms.RasterWork]
11
+ end
12
+
13
+ def raster_files
14
+ members.select(&:raster_file?)
15
+ end
16
+
17
+ def metadata_files
18
+ members.select(&:external_metadata_file?)
19
+ end
20
+
21
+ def vector_works
22
+ members.select(&:vector_work?)
23
+ end
24
+
25
+ # Defines type by what it is and isn't
26
+ # @return [Boolean]
27
+ def image_work?
28
+ false
29
+ end
30
+
31
+ def image_file?
32
+ false
33
+ end
34
+
35
+ def raster_work?
36
+ true
37
+ end
38
+
39
+ def raster_file?
40
+ false
41
+ end
42
+
43
+ def vector_work?
44
+ false
45
+ end
46
+
47
+ def vector_file?
48
+ false
49
+ end
50
+
51
+ def external_metadata_file?
52
+ false
53
+ end
54
+
55
+ # Retrieve all Image Works for which georeferencing generates this Raster Work
56
+ # @return [Array]
57
+ def image_works
58
+ ordered_by.select do |parent|
59
+ parent.class.included_modules.include?(::GeoWorks::ImageWorkBehavior)
60
+ end
61
+ end
62
+
63
+ # Retrieve the only Image Works for which georeferencing generates this Raster Work
64
+ # @return [GeoWorks::ImageWork]
65
+ def image_work
66
+ image_works.first
67
+ end
68
+
69
+ def to_solr(solr_doc = {})
70
+ super.tap do |doc|
71
+ doc[solr_name("ordered_by", :symbol)] ||= []
72
+ doc[solr_name("ordered_by", :symbol)] += send(:ordered_by_ids)
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ def solr_name(*args)
79
+ ActiveFedora.index_field_mapper.solr_name(*args)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,46 @@
1
+ module GeoWorks
2
+ module SolrDocumentBehavior
3
+ extend ActiveSupport::Concern
4
+ include Hyrax::SolrDocumentBehavior
5
+
6
+ # @return [Array<String>]
7
+ def spatial
8
+ fetch(Solrizer.solr_name('spatial'), [])
9
+ end
10
+
11
+ # @return [Array<String>]
12
+ def temporal
13
+ fetch(Solrizer.solr_name('temporal'), [])
14
+ end
15
+
16
+ # @return [String]
17
+ def issued
18
+ fetch(Solrizer.solr_name('issued'), nil)
19
+ end
20
+
21
+ # @return [String]
22
+ def coverage
23
+ fetch(Solrizer.solr_name('coverage'), nil)
24
+ end
25
+
26
+ # @return [String]
27
+ def provenance
28
+ name = I18n.t('hyrax.institution_name')
29
+ raise ArgumentError, "Provenance required in configuration" unless name.present?
30
+ name
31
+ end
32
+
33
+ # @return [DateTime]
34
+ def layer_modified
35
+ # TODO: `date_modified` isn't working correctly -- it's stored as a string not a date
36
+ # @see 'https://github.com/projecthydra/curation_concerns/issues/957'
37
+ dt = first(Solrizer.solr_name('system_modified', :stored_sortable, type: :date))
38
+ dt.nil? ? nil : DateTime.parse(dt).utc
39
+ end
40
+
41
+ # @return [Array<String>]
42
+ def identifier
43
+ fetch(Solrizer.solr_name('identifier'), [])
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,14 @@
1
+ module GeoWorks
2
+ # Attributes and methods for vector files
3
+ module VectorFileBehavior
4
+ extend ActiveSupport::Concern
5
+ include ::GeoWorks::GeoreferencedBehavior
6
+ # Retrieve the Vector Work of which this Object is a member
7
+ # @return [GeoWorks::VectorWork]
8
+ def vector_work
9
+ parents.select do |parent|
10
+ parent.class.included_modules.include?(::GeoWorks::VectorWorkBehavior)
11
+ end.to_a
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,78 @@
1
+ module GeoWorks
2
+ # Attributes and methods for vector works
3
+ module VectorWorkBehavior
4
+ extend ActiveSupport::Concern
5
+ include ::GeoWorks::MetadataExtractionHelper
6
+
7
+ included do
8
+ type [Hydra::PCDM::Vocab::PCDMTerms.Object,
9
+ Hydra::Works::Vocab::WorksTerms.GenericWork,
10
+ ::GeoWorks::GeoTerms.VectorWork]
11
+ end
12
+
13
+ def vector_files
14
+ members.select(&:vector_file?)
15
+ end
16
+
17
+ def metadata_files
18
+ members.select(&:external_metadata_file?)
19
+ end
20
+
21
+ # Defines type by what it is and isn't
22
+ # @return [Boolean]
23
+ def image_work?
24
+ false
25
+ end
26
+
27
+ def image_file?
28
+ false
29
+ end
30
+
31
+ def raster_work?
32
+ false
33
+ end
34
+
35
+ def raster_file?
36
+ false
37
+ end
38
+
39
+ def vector_work?
40
+ true
41
+ end
42
+
43
+ def vector_file?
44
+ false
45
+ end
46
+
47
+ def external_metadata_file?
48
+ false
49
+ end
50
+
51
+ # Retrieve all Raster Works for which this Vector Work can be extracted
52
+ # @return [Array]
53
+ def raster_works
54
+ ordered_by.select do |parent|
55
+ parent.class.included_modules.include?(::GeoWorks::RasterWorkBehavior)
56
+ end
57
+ end
58
+
59
+ # Retrieve the only Raster Work for which feature extraction generates this Vector Work
60
+ # @return [GeoWorks::RasterWork]
61
+ def raster_work
62
+ raster_works.first
63
+ end
64
+
65
+ def to_solr(solr_doc = {})
66
+ super.tap do |doc|
67
+ doc[solr_name("ordered_by", :symbol)] ||= []
68
+ doc[solr_name("ordered_by", :symbol)] += send(:ordered_by_ids)
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def solr_name(*args)
75
+ ActiveFedora.index_field_mapper.solr_name(*args)
76
+ end
77
+ end
78
+ end