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,53 @@
1
+ module GeoWorks
2
+ module Discovery
3
+ class DocumentBuilder
4
+ class DateBuilder
5
+ attr_reader :geo_concern
6
+
7
+ def initialize(geo_concern)
8
+ @geo_concern = geo_concern
9
+ end
10
+
11
+ # Builds date fields such as layer year and modified date.
12
+ # @param [AbstractDocument] discovery document
13
+ def build(document)
14
+ document.layer_year = layer_year
15
+ document.layer_modified = layer_modified
16
+ document.issued = issued
17
+ end
18
+
19
+ private
20
+
21
+ # Returns a year associated with the layer. Taken from first
22
+ # value in temporal.
23
+ # @return [Integer] year
24
+ def layer_year
25
+ date = geo_concern.temporal.first
26
+ year = date.match(/(?<=\D|^)(\d{4})(?=\D|$)/)
27
+ year ? year[0].to_i : nil
28
+ rescue
29
+ ''
30
+ end
31
+
32
+ # Returns the date the work was modified.
33
+ # @return [String] date in XMLSchema format.
34
+ def layer_modified
35
+ datetime = geo_concern.layer_modified
36
+ # TODO: Rails 4 doesn't implement the timezone correctly -- it adds "+00:00" not "Z"
37
+ Rails::VERSION::MAJOR == 4 ? datetime.utc.strftime('%FT%TZ') : datetime.utc.xmlschema
38
+ end
39
+
40
+ # Returns the date the layer was issued.
41
+ # @return [String] date in XMLSchema format.
42
+ def issued
43
+ datetime = geo_concern.issued.first
44
+ datetime = DateTime.parse(datetime.to_s).utc
45
+ # TODO: Rails 4 doesn't implement the timezone correctly -- it adds "+00:00" not "Z"
46
+ Rails::VERSION::MAJOR == 4 ? datetime.utc.strftime('%FT%TZ') : datetime.utc.xmlschema
47
+ rescue
48
+ ''
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,10 @@
1
+ module GeoWorks
2
+ module Discovery
3
+ class DocumentBuilder
4
+ class DocumentHelper
5
+ include Rails.application.routes.url_helpers
6
+ include ActionDispatch::Routing::PolymorphicRoutes
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,91 @@
1
+ module GeoWorks
2
+ module Discovery
3
+ class DocumentBuilder
4
+ class DocumentPath
5
+ attr_reader :geo_concern
6
+ def initialize(geo_concern)
7
+ @geo_concern = geo_concern
8
+ end
9
+
10
+ # Returns url for geo concern show page.
11
+ # @return [String] geo concern show page url
12
+ def to_s
13
+ document_helper.polymorphic_url(geo_concern, host: host, protocol: protocol)
14
+ end
15
+
16
+ # Returns url for downloading the original file.
17
+ # @return [String] original file download url
18
+ def file_download
19
+ return unless file_set
20
+ hyrax_url_helpers.download_url(file_set, host: host, protocol: protocol)
21
+ end
22
+
23
+ # Returns url for downloading the metadata file.
24
+ # @param [String] metadata file format to download
25
+ # @return [String] metadata download url
26
+ def metadata_download(format)
27
+ return unless metadata_file_set
28
+ path = hyrax_url_helpers.download_url(metadata_file_set, host: host, protocol: protocol)
29
+ mime_type = metadata_file_set.solr_document[:geo_mime_type_ssim].first
30
+ path if MetadataFormatService.label(mime_type) == format
31
+ end
32
+
33
+ # Returns url for thumbnail image.
34
+ # @return [String] thumbnail url
35
+ def thumbnail
36
+ return unless file_download
37
+ "#{file_download}?file=thumbnail"
38
+ end
39
+
40
+ private
41
+
42
+ # Returns the first geo file set presenter attached to work.
43
+ # @return [FileSetPresenter] geo file set presenter
44
+ def file_set
45
+ return unless geo_concern.geo_file_set_presenters
46
+ geo_concern.geo_file_set_presenters.first
47
+ end
48
+
49
+ # Returns the first metadata file set presenter attached to work.
50
+ # @return [FileSetPresenter] metadata file set presenter
51
+ def metadata_file_set
52
+ return unless geo_concern.external_metadata_file_set_presenters
53
+ geo_concern.external_metadata_file_set_presenters.first
54
+ end
55
+
56
+ # Instantiates a DocumentHelper object.
57
+ # Used for access to rails url_helpers and poymorphic routes.
58
+ # @return [DocumentHelper] document helper
59
+ def document_helper
60
+ @helper ||= DocumentHelper.new
61
+ end
62
+
63
+ def hyrax_url_helpers
64
+ Hyrax::Engine.routes.url_helpers
65
+ end
66
+
67
+ # Indicates if the ssl is enabled.
68
+ # @return [Boolean] use ssl
69
+ def ssl?
70
+ geo_concern.request.protocol == 'https://'
71
+ end
72
+
73
+ # Returns protocol to use in url. Depends on ssl status.
74
+ # @return [Boolean] http protocol
75
+ def protocol
76
+ if ssl?
77
+ :https
78
+ else
79
+ :http
80
+ end
81
+ end
82
+
83
+ # Returns hostname (with port) to use in url.
84
+ # @return [String] hostname
85
+ def host
86
+ geo_concern.request.host_with_port
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,65 @@
1
+ module GeoWorks
2
+ module Discovery
3
+ class DocumentBuilder
4
+ class LayerInfoBuilder
5
+ attr_reader :geo_concern
6
+
7
+ def initialize(geo_concern)
8
+ @geo_concern = geo_concern
9
+ end
10
+
11
+ # Builds fields about the geospatial file such as geometry and format.
12
+ # @param [AbstractDocument] discovery document
13
+ def build(document)
14
+ document.geom_type = geom_type
15
+ document.format = format
16
+ end
17
+
18
+ private
19
+
20
+ # Uses parent work class to determine file geometry type.
21
+ # These geom types are used in geoblacklight documents.
22
+ # @return [String] file geometry type
23
+ def geom_type
24
+ case geo_concern.class.to_s
25
+ when /ImageWorkShowPresenter/
26
+ 'Scanned Map'
27
+ when /RasterWorkShowPresenter/
28
+ 'Raster'
29
+ when /VectorWorkShowPresenter/
30
+ vector_geom_type
31
+ end
32
+ end
33
+
34
+ # Uses file mime type to determine file format.
35
+ # @return [String] file format code
36
+ def format
37
+ if ImageFormatService.include? geo_mime_type
38
+ ImageFormatService.code(geo_mime_type)
39
+ elsif RasterFormatService.include? geo_mime_type
40
+ RasterFormatService.code(geo_mime_type)
41
+ elsif VectorFormatService.include? geo_mime_type
42
+ VectorFormatService.code(geo_mime_type)
43
+ end
44
+ end
45
+
46
+ # Returns the geometry for a vector file.
47
+ # @return [String] vector geometry
48
+ def vector_geom_type
49
+ # TODO: Get the geom type as part of a geo characterization service.
50
+ # "Point, Line, Polygon, Mixed"
51
+ 'Mixed'
52
+ end
53
+
54
+ # Returns the 'geo' mime type of the first file attached to the work.
55
+ # @return [String] file mime type
56
+ def geo_mime_type
57
+ file_sets = geo_concern.geo_file_set_presenters
58
+ return if file_sets.nil? || file_sets.empty?
59
+ return unless (mime_types = file_sets.first.solr_document[:geo_mime_type_ssim])
60
+ mime_types.first
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,101 @@
1
+ module GeoWorks
2
+ module Discovery
3
+ class DocumentBuilder
4
+ class ReferencesBuilder
5
+ attr_reader :geo_concern, :path
6
+
7
+ def initialize(geo_concern)
8
+ @geo_concern = geo_concern
9
+ @path = DocumentBuilder.root_path_class.new(geo_concern)
10
+ end
11
+
12
+ # Builds service reference fields such as thumbnail and download url.
13
+ # @param [AbstractDocument] discovery document
14
+ def build(document)
15
+ document.wxs_identifier = wxs_identifier
16
+ build_metadata_refs(document)
17
+ build_download_refs(document)
18
+ end
19
+
20
+ private
21
+
22
+ # Builds metadata file references.
23
+ # @param [AbstractDocument] discovery document
24
+ def build_metadata_refs(document)
25
+ document.fgdc = fgdc
26
+ document.iso19139 = iso19139
27
+ document.mods = mods
28
+ end
29
+
30
+ # Builds geospatial file download references.
31
+ # @param [AbstractDocument] discovery document
32
+ def build_download_refs(document)
33
+ document.download = download
34
+ document.url = url
35
+ document.thumbnail = thumbnail
36
+ document.wxs_identifier = wxs_identifier
37
+ document.wms_path = wms_path
38
+ document.wfs_path = wfs_path
39
+ end
40
+
41
+ # Returns the identifier to use with WMS/WFS/WCS services.
42
+ # @return [String] wxs indentifier
43
+ def wxs_identifier
44
+ wxs.identifier
45
+ end
46
+
47
+ # Returns the wms server url.
48
+ # @return [String] wms server url
49
+ def wms_path
50
+ wxs.wms_path
51
+ end
52
+
53
+ # Returns the wfs server url.
54
+ # @return [String] wfs server url
55
+ def wfs_path
56
+ wxs.wfs_path
57
+ end
58
+
59
+ # Returns a url to access further descriptive information.
60
+ # @return [String] work show page url
61
+ def url
62
+ path.to_s
63
+ end
64
+
65
+ # Returns a direct file download url
66
+ # @return [String] direct file url
67
+ def download
68
+ path.file_download
69
+ end
70
+
71
+ # Returns an FGDC metadata document download url
72
+ # @return [String] FGDC metadata document url
73
+ def fgdc
74
+ path.metadata_download('FGDC')
75
+ end
76
+
77
+ # Returns an ISO19139 metadata document download url
78
+ # @return [String] ISO19139 metadata document url
79
+ def iso19139
80
+ path.metadata_download('ISO19139')
81
+ end
82
+
83
+ # Returns an MODS metadata document download url
84
+ # @return [String] MODS metadata document url
85
+ def mods
86
+ path.metadata_download('MODS')
87
+ end
88
+
89
+ # Returns a thumbnail file url
90
+ # @return [String] thumbnail url
91
+ def thumbnail
92
+ path.thumbnail
93
+ end
94
+
95
+ def wxs
96
+ @wxs ||= Wxs.new(geo_concern)
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,24 @@
1
+ module GeoWorks
2
+ module Discovery
3
+ class DocumentBuilder
4
+ class SlugBuilder
5
+ attr_reader :geo_concern
6
+
7
+ def initialize(geo_concern)
8
+ @geo_concern = geo_concern
9
+ end
10
+
11
+ def build(document)
12
+ document.slug = slug
13
+ end
14
+
15
+ # Returns the document slug for use in discovery systems.
16
+ # @return [String] document slug
17
+ def slug
18
+ return geo_concern.id unless geo_concern.provenance
19
+ "#{geo_concern.provenance.parameterize}-#{geo_concern.id}"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ module GeoWorks
2
+ module Discovery
3
+ class DocumentBuilder
4
+ class SpatialBuilder
5
+ attr_reader :geo_concern
6
+
7
+ def initialize(geo_concern)
8
+ @geo_concern = geo_concern
9
+ end
10
+
11
+ # Builds spatial fields such as bounding box and solr geometry.
12
+ # @param [AbstractDocument] discovery document
13
+ def build(document)
14
+ document.solr_coverage = to_solr
15
+ end
16
+
17
+ private
18
+
19
+ # Parses coverage field from geo work and instantiates a coverage object.
20
+ # @return [GeoWorks::Coverage] coverage object
21
+ def coverage
22
+ @coverage ||= GeoWorks::Coverage.parse(geo_concern.coverage.first)
23
+ end
24
+
25
+ # Returns the coverage in solr format. For example:
26
+ # `ENVELOPE(minX, maxX, maxY, minY)`
27
+ # @see 'https://cwiki.apache.org/confluence/display/solr/Spatial+Search'
28
+ # @return [String] coverage in solr format
29
+ def to_solr
30
+ "ENVELOPE(#{coverage.w}, #{coverage.e}, #{coverage.n}, #{coverage.s})"
31
+ rescue
32
+ ''
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,76 @@
1
+ require 'active_support/core_ext/hash/indifferent_access'
2
+
3
+ module GeoWorks
4
+ module Discovery
5
+ class DocumentBuilder
6
+ class Wxs
7
+ attr_reader :geo_concern
8
+ def initialize(geo_concern)
9
+ @geo_concern = geo_concern
10
+ @config = GeoWorks::GeoServer.config[visibility].try(:with_indifferent_access)
11
+ end
12
+
13
+ # Returns the identifier to use with WMS/WFS/WCS services.
14
+ # @return [String] wxs indentifier
15
+ def identifier
16
+ return unless geo_file_set?
17
+ return file_set.id unless @config && visibility
18
+ "#{@config[:workspace]}:#{file_set.id}" if @config[:workspace]
19
+ end
20
+
21
+ # Returns the wms server url.
22
+ # @return [String] wms server url
23
+ def wms_path
24
+ return unless @config && visibility && geo_file_set?
25
+ "#{path}/#{@config[:workspace]}/wms"
26
+ end
27
+
28
+ # Returns the wfs server url.
29
+ # @return [String] wfs server url
30
+ def wfs_path
31
+ return unless @config && visibility && geo_file_set?
32
+ "#{path}/#{@config[:workspace]}/wfs"
33
+ end
34
+
35
+ private
36
+
37
+ # Gets the representative file set.
38
+ # @return [FileSet] representative file set
39
+ def file_set
40
+ @file_set ||= begin
41
+ representative_id = geo_concern.solr_document.representative_id
42
+ file_set_id = [representative_id]
43
+ geo_concern.member_presenters(file_set_id).first
44
+ end
45
+ end
46
+
47
+ # Tests if the file set is a geo file set.
48
+ # @return [Bool]
49
+ def geo_file_set?
50
+ return false unless file_set
51
+ @file_set_ids ||= geo_concern.geo_file_set_presenters.map(&:id)
52
+ @file_set_ids.include? file_set.id
53
+ end
54
+
55
+ # Returns the file set visibility if it's open and authenticated.
56
+ # @return [String] file set visibility
57
+ def visibility
58
+ return unless file_set
59
+ visibility = file_set.solr_document.visibility
60
+ visibility if valid_visibilities.include? visibility
61
+ end
62
+
63
+ def valid_visibilities
64
+ [Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC,
65
+ Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED]
66
+ end
67
+
68
+ # Geoserver base url.
69
+ # @return [String] geoserver base url
70
+ def path
71
+ @config[:url].chomp('/rest')
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end