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,115 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::BaseGeoProcessor do
4
+ before do
5
+ class TestProcessor
6
+ include GeoWorks::Processors::BaseGeoProcessor
7
+ include GeoWorks::Processors::Gdal
8
+ def directives
9
+ end
10
+
11
+ def source_path
12
+ end
13
+ end
14
+
15
+ allow(subject).to receive(:directives).and_return(directives)
16
+ allow(subject).to receive(:source_path).and_return(file_name)
17
+ end
18
+
19
+ after { Object.send(:remove_const, :TestProcessor) }
20
+
21
+ subject { TestProcessor.new }
22
+
23
+ let(:directives) { { format: 'png', size: '200x400' } }
24
+ let(:output_file_jpg) { 'output/geo.jpg' }
25
+ let(:output_file_png) { 'output/geo.png' }
26
+ let(:output_file) { output_file_png }
27
+ let(:file_name) { 'files/geo.tif' }
28
+ let(:options) { { output_size: '150 150' } }
29
+
30
+ describe '#run_commands' do
31
+ let(:method_queue) { [:translate, :warp, :compress] }
32
+ it 'calls the methods in the queue and cleans up temp files' do
33
+ expect(subject.class).to receive(:translate)
34
+ expect(subject.class).to receive(:warp)
35
+ expect(subject.class).to receive(:compress)
36
+ expect(FileUtils).to receive(:rm_rf).twice
37
+ subject.class.run_commands(file_name, output_file, method_queue, options)
38
+ end
39
+ end
40
+
41
+ describe '#temp_path' do
42
+ it 'returns a path to a temporary file based on the input file' do
43
+ expect(subject.class.temp_path(output_file))
44
+ .to match(%r{output/geo_\d+})
45
+ end
46
+ end
47
+
48
+ describe '#label' do
49
+ context 'when directives hash has a label value' do
50
+ let(:directives) { { label: :thumbnail } }
51
+ it 'returns the label' do
52
+ expect(subject.label).to eq(:thumbnail)
53
+ end
54
+ end
55
+
56
+ context 'when directives hash does not have label value' do
57
+ it 'returns an empty string' do
58
+ expect(subject.label).to eq('')
59
+ end
60
+ end
61
+ end
62
+
63
+ describe '#output_size' do
64
+ context 'when given a size string with an x' do
65
+ it 'returns a size string with a space instead' do
66
+ expect(subject.output_size).to eq('200 400')
67
+ end
68
+ end
69
+ end
70
+
71
+ describe '#output_srid' do
72
+ context 'when directives hash has an srid value' do
73
+ let(:directives) { { srid: 'EPSG:26918' } }
74
+ it 'returns that value' do
75
+ expect(subject.output_srid).to eq('EPSG:26918')
76
+ end
77
+ end
78
+
79
+ context 'when directives hash does not have an srid value' do
80
+ it 'returns that the default srid' do
81
+ expect(subject.output_srid).to eq('EPSG:4326')
82
+ end
83
+ end
84
+ end
85
+
86
+ describe '#id' do
87
+ context 'when directives hash has an id value' do
88
+ let(:directives) { { id: '123456' } }
89
+ it 'returns that value' do
90
+ expect(subject.id).to eq('123456')
91
+ end
92
+ end
93
+
94
+ context 'when directives hash does not have an id value' do
95
+ it 'returns nil' do
96
+ expect(subject.id).to be_nil
97
+ end
98
+ end
99
+ end
100
+
101
+ describe '#basename' do
102
+ it 'returns the base file name of the source file' do
103
+ expect(subject.basename).to eq('geo')
104
+ end
105
+ end
106
+
107
+ describe '#options_for' do
108
+ it 'returns a hash that includes output size and format' do
109
+ expect(subject.options_for("a")).to include(:output_size,
110
+ :label,
111
+ :output_srid,
112
+ :basename)
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::BaseGeoProcessor do
4
+ before do
5
+ class TestProcessor
6
+ include Hydra::Derivatives::Processors::ShellBasedProcessor
7
+ include GeoWorks::Processors::Gdal
8
+ def directives
9
+ end
10
+
11
+ def source_path
12
+ end
13
+ end
14
+
15
+ allow(subject).to receive(:directives).and_return(directives)
16
+ allow(subject).to receive(:source_path).and_return(file_name)
17
+ end
18
+
19
+ after { Object.send(:remove_const, :TestProcessor) }
20
+
21
+ subject { TestProcessor.new }
22
+
23
+ let(:directives) { { format: 'png', size: '200x400' } }
24
+ let(:output_file) { 'output/geo.png' }
25
+ let(:file_name) { 'files/geo.tif' }
26
+ let(:options) { { output_size: '150 150', output_srid: 'EPSG:4326' } }
27
+
28
+ describe '#translate' do
29
+ it 'executes a gdal_translate command' do
30
+ command = "gdal_translate -q -ot Byte -of GTiff \"files/geo.tif\" output/geo.png"
31
+ expect(subject.class).to receive(:execute).with command
32
+ subject.class.translate(file_name, output_file, options)
33
+ end
34
+ end
35
+
36
+ describe '#warp' do
37
+ it 'executes a reproject command' do
38
+ command = "gdalwarp -q -r bilinear -t_srs EPSG:4326 files/geo.tif output/geo.png -co 'COMPRESS=NONE'"
39
+ expect(subject.class).to receive(:execute).with command
40
+ subject.class.warp(file_name, output_file, options)
41
+ end
42
+ end
43
+
44
+ describe '#compress' do
45
+ it 'returns a gdal_translate command with a compress option' do
46
+ command = "gdal_translate -q -ot Byte -a_srs EPSG:4326 files/geo.tif output/geo.png -co 'COMPRESS=LZW'"
47
+ expect(subject.class).to receive(:execute).with command
48
+ subject.class.compress(file_name, output_file, options)
49
+ end
50
+ end
51
+
52
+ describe '#rasterize' do
53
+ it 'executes a rasterize command' do
54
+ command = "gdal_rasterize -q -burn 0 -init 255 -ot Byte -ts 150 150 -of GTiff files/geo.tif output/geo.png"
55
+ expect(subject.class).to receive(:execute).with command
56
+ subject.class.rasterize(file_name, output_file, options)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::Image do
4
+ before do
5
+ class TestProcessor
6
+ include GeoWorks::Processors::Image
7
+ end
8
+ end
9
+
10
+ after { Object.send(:remove_const, :TestProcessor) }
11
+
12
+ subject { TestProcessor.new }
13
+
14
+ let(:shell) { double }
15
+ let(:output_file_png) { 'output/geo.png' }
16
+ let(:output_file) { output_file_png }
17
+ let(:file_name) { 'files/geo.tif' }
18
+ let(:options) { { output_size: '150 150' } }
19
+
20
+ describe '#convert' do
21
+ let(:args) {
22
+ [['convert', 'files/geo.tif', '-resize', '150x150', '-extent',
23
+ '150x150', '-background', 'white', '-gravity', 'center',
24
+ 'output/geo.png'], { whiny: false, stderr: false }]
25
+ }
26
+
27
+ before do
28
+ allow(MiniMagick::Shell).to receive(:new).and_return(shell)
29
+ end
30
+
31
+ it 'transforms the image and saves it as a PNG' do
32
+ expect(shell).to receive(:run).with(*args).and_return('output message')
33
+ subject.class.convert(file_name, output_file_png, options)
34
+ end
35
+ end
36
+
37
+ describe '#trim' do
38
+ let(:args) { [['convert', 'files/geo.tif', '-trim', 'output/geo.png'], { whiny: true }] }
39
+
40
+ before do
41
+ allow(MiniMagick::Shell).to receive(:new).and_return(shell)
42
+ end
43
+ it 'transforms the image and saves it as a PNG' do
44
+ expect(shell).to receive(:run).with(*args).and_return('output message')
45
+ subject.class.trim(file_name, output_file_png, options)
46
+ end
47
+ end
48
+
49
+ describe '#center' do
50
+ let(:args) {
51
+ [['convert', '-size', '150x150', 'xc:white', 'files/geo.tif',
52
+ '-gravity', 'center', '-composite', 'output/geo.png'],
53
+ { whiny: true }]
54
+ }
55
+
56
+ before do
57
+ allow(MiniMagick::Shell).to receive(:new).and_return(shell)
58
+ end
59
+ it 'transforms the image and saves it as a PNG' do
60
+ expect(shell).to receive(:run).with(*args).and_return('output message')
61
+ subject.class.center(file_name, output_file_png, options)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::BaseGeoProcessor do
4
+ before do
5
+ class TestProcessor
6
+ include Hydra::Derivatives::Processors::ShellBasedProcessor
7
+ include GeoWorks::Processors::Ogr
8
+ def directives
9
+ end
10
+
11
+ def source_path
12
+ end
13
+ end
14
+
15
+ allow(subject).to receive(:directives).and_return(directives)
16
+ allow(subject).to receive(:source_path).and_return(file_name)
17
+ end
18
+
19
+ after { Object.send(:remove_const, :TestProcessor) }
20
+
21
+ subject { TestProcessor.new }
22
+
23
+ let(:directives) { { format: 'png', size: '200x400' } }
24
+ let(:output_file) { 'output/geo.png' }
25
+ let(:file_name) { 'files/geo.zip' }
26
+ let(:options) { { output_size: '150 150', output_srid: 'EPSG:4326' } }
27
+
28
+ describe '#reproject' do
29
+ it 'executes a reproject command' do
30
+ command = "env SHAPE_ENCODING= ogr2ogr -q -nln -f 'ESRI Shapefile' "\
31
+ "-t_srs EPSG:4326 -preserve_fid 'output/geo.png' 'files/geo.zip'"
32
+ expect(subject.class).to receive(:execute).with command
33
+ subject.class.reproject(file_name, output_file, options)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::Raster::Aig do
4
+ let(:output_file) { 'output/geo.png' }
5
+ let(:file_name) { 'files/aig.zip' }
6
+ let(:options) { { output_size: '150 150',
7
+ min_max: '2.054 11.717',
8
+ label: :thumbnail }
9
+ }
10
+
11
+ subject { described_class.new(file_name, {}) }
12
+
13
+ describe '#translate' do
14
+ it 'executes a gdal_translate command with scaling' do
15
+ command = "gdal_translate -scale 2.054 11.717 255 0 -q -ot Byte -of "\
16
+ "GTiff \"files/aig.zip\" output/geo.png"
17
+ expect(subject.class).to receive(:execute).with command
18
+ subject.class.translate(file_name, output_file, options)
19
+ end
20
+ end
21
+
22
+ describe '#reproject_queue' do
23
+ it 'returns an array of command name symbols' do
24
+ expect(subject.class.reproject_queue).to include :warp
25
+ end
26
+ end
27
+
28
+ describe '#encode' do
29
+ it 'wraps encode_raster in an unzip block' do
30
+ allow(subject.class).to receive(:unzip).and_yield(file_name)
31
+ expect(subject.class).to receive(:encode_raster)
32
+ subject.class.encode(file_name, options, output_file)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::Raster::Base do
4
+ let(:output_file) { 'output/geo.png' }
5
+ let(:file_name) { 'files/geo.tif' }
6
+ let(:label) {}
7
+ let(:options) { { output_size: '150 150', label: label } }
8
+
9
+ subject { described_class.new(file_name, {}) }
10
+
11
+ describe '#encode' do
12
+ context 'when output label is thumbnail' do
13
+ let(:label) { :thumbnail }
14
+ it 'calls the encode_raster method' do
15
+ expect(subject.class).to receive(:encode_raster)
16
+ subject.class.encode(file_name, options, output_file)
17
+ end
18
+ end
19
+
20
+ context 'when output label is display_raster' do
21
+ let(:label) { :display_raster }
22
+ it 'calls the reproject_raster method' do
23
+ expect(subject.class).to receive(:reproject_raster)
24
+ subject.class.encode(file_name, options, output_file)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe '#encode_queue' do
30
+ it 'returns an array of command name symbols' do
31
+ expect(subject.class.encode_queue).to include :translate
32
+ end
33
+ end
34
+
35
+ describe '#reproject_queue' do
36
+ it 'returns an array of command name symbols' do
37
+ expect(subject.class.reproject_queue).to include :warp
38
+ end
39
+ end
40
+
41
+ describe '#encode_raster' do
42
+ it 'runs commands to encode the raster thumbnail' do
43
+ expect(subject.class).to receive(:run_commands)
44
+ subject.class.encode_raster(file_name, options, output_file)
45
+ end
46
+ end
47
+
48
+ describe '#reproject_raster' do
49
+ it 'runs commands to reproject the raster' do
50
+ expect(subject.class).to receive(:run_commands)
51
+ subject.class.reproject_raster(file_name, options, output_file)
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::Raster::Dem do
4
+ let(:output_file) { 'output/geo.png' }
5
+ let(:file_name) { 'files/geo.dem' }
6
+ let(:options) { { output_size: '150 150', label: :thumbnail }
7
+ }
8
+
9
+ subject { described_class.new(file_name, {}) }
10
+
11
+ describe '#encode_queue' do
12
+ it 'returns an array of command name symbols' do
13
+ expect(subject.class.encode_queue).to include :hillshade
14
+ end
15
+ end
16
+
17
+ describe '#reproject_queue' do
18
+ it 'returns an array of command name symbols' do
19
+ expect(subject.class.reproject_queue).to include :hillshade
20
+ end
21
+ end
22
+
23
+ describe '#hillshade' do
24
+ it 'executes a gdal hillshade command' do
25
+ command = "gdaldem hillshade -q -of GTiff \"files/geo.dem\" output/geo.png"
26
+ expect(subject.class).to receive(:execute).with command
27
+ subject.class.hillshade(file_name, output_file, options)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'open3'
3
+
4
+ describe GeoWorks::Processors::Raster::Info do
5
+ let(:path) { 'test.tif' }
6
+ let(:info_doc) { read_test_data_fixture('gdalinfo.txt') }
7
+
8
+ subject { described_class.new(path) }
9
+
10
+ context 'when initializing a new info class' do
11
+ it 'shells out to gdalinfo and sets the doc variable to the output string' do
12
+ expect(Open3).to receive(:capture3).with("gdalinfo -mm #{path}")
13
+ .and_return([info_doc, '', ''])
14
+ expect(subject.doc).to eq(info_doc)
15
+ end
16
+ end
17
+
18
+ context 'after intialization' do
19
+ before do
20
+ allow(subject).to receive(:doc).and_return(info_doc)
21
+ end
22
+
23
+ describe '#min_max' do
24
+ it 'returns with min and max values' do
25
+ expect(subject.min_max).to eq('354.000 900.000')
26
+ end
27
+ end
28
+
29
+ describe '#size' do
30
+ it 'returns raster size' do
31
+ expect(subject.size).to eq('310 266')
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoWorks::Processors::Raster::Processor do
4
+ subject { described_class.new(file_name, directives) }
5
+ let(:processor) { double }
6
+
7
+ context 'when a usgs ascii dem format type is passed' do
8
+ let(:file_name) { 'files/geo.dem' }
9
+ let(:directives) { { input_format: 'text/plain; gdal-format=USGSDEM' } }
10
+
11
+ it 'calls the DEM processor' do
12
+ expect(GeoWorks::Processors::Raster::Dem).to receive(:new).and_return(processor)
13
+ expect(processor).to receive(:process)
14
+ subject.process
15
+ end
16
+ end
17
+
18
+ context 'when an Arc/Info Binary Grid format type is passed' do
19
+ let(:file_name) { 'files/aig.zip' }
20
+ let(:directives) { { input_format: 'application/octet-stream; gdal-format=AIG' } }
21
+
22
+ it 'calls the AIG processor' do
23
+ expect(GeoWorks::Processors::Raster::Aig).to receive(:new).and_return(processor)
24
+ expect(processor).to receive(:process)
25
+ subject.process
26
+ end
27
+ end
28
+
29
+ context 'when a GeoTIFF format type is passed' do
30
+ let(:file_name) { 'files/geo.tif' }
31
+ let(:directives) { { input_format: 'image/tiff; gdal-format=GTiff' } }
32
+
33
+ it 'calls the base raster processor' do
34
+ expect(GeoWorks::Processors::Raster::Base).to receive(:new).and_return(processor)
35
+ expect(processor).to receive(:process)
36
+ subject.process
37
+ end
38
+ end
39
+ end