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,3 @@
1
+ //= require geo_works/relationships/related_works
2
+ //= require geo_works/relationships/child_works
3
+ //= require geo_works/relationships/parent_works
@@ -0,0 +1,20 @@
1
+ import RelatedWorks from 'geo_works/relationships/related_works';
2
+
3
+ /**
4
+ * Provides functionality to add and remove child works.
5
+ */
6
+ export default class ChildWorks extends RelatedWorks {
7
+ /**
8
+ * Builds form data string for ordered_member_ids.
9
+ * @param {Array} array of ordered member ids
10
+ */
11
+ buildFormData(ids) {
12
+ let data;
13
+ if (ids.length === 0) {
14
+ data = `${this.paramKey}[ordered_member_ids][]=`;
15
+ } else {
16
+ data = ids.map((id) => `${this.paramKey}[ordered_member_ids][]=${id}`).join('&');
17
+ }
18
+ return data;
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ import RelatedWorks from 'geo_works/relationships/related_works';
2
+
3
+ /**
4
+ * Provides functionality to add and remove parent works.
5
+ */
6
+ export default class ParentWorks extends RelatedWorks {
7
+ /**
8
+ * Builds form data string for in_works_ids.
9
+ * @param {Array} array of parent member ids
10
+ */
11
+ buildFormData(ids) {
12
+ let data;
13
+ if (ids.length === 0) {
14
+ data = `${this.paramKey}[in_works_ids][]=`;
15
+ } else {
16
+ data = ids.map((id) => `${this.paramKey}[in_works_ids][]=${id}`).join('&');
17
+ }
18
+ return data;
19
+ }
20
+ }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Provides basic functionality to add and remove member works.
3
+ * Adapted from the table.es6 module in https://github.com/projecthydra/sufia
4
+ */
5
+ export default class RelatedWorks {
6
+ constructor(element) {
7
+ this.element = $(element);
8
+ this.table = this.element.find('table');
9
+ this.query_url = this.table.data('query-url');
10
+ if (!this.query_url) {
11
+ return;
12
+ }
13
+ this.members = this.table.data('members');
14
+ this.works = this.table.find('tr');
15
+ this.workIds = Array.from(this.works.map((i) => this.works.eq(i).data('work-id')));
16
+ this.paramKey = this.table.data('param-key');
17
+ this.bindButtons();
18
+ }
19
+
20
+ /**
21
+ * Bind buttons to member works table.
22
+ */
23
+ bindButtons() {
24
+ const $this = this;
25
+ $this.bindAddButton();
26
+ $this.bindRemoveButton();
27
+ }
28
+
29
+ /**
30
+ * Handle click events by the "Add" button in the table, setting a warning
31
+ * message if the input is empty or calling the server to handle the request
32
+ */
33
+ bindAddButton() {
34
+ const $this = this;
35
+ $this.element.find('.btn-add-row').click(() => {
36
+ const $row = $this.element.find('.member-actions');
37
+ const memberId = $this.element.find('input').val();
38
+ const updatedMembers = $this.members.slice();
39
+ if (memberId === '') {
40
+ $this.setWarningMessage($row, 'ID cannot be empty.');
41
+ } else if ($.inArray(memberId, $this.workIds) > -1) {
42
+ $this.setWarningMessage($row, 'Work is already related.');
43
+ } else {
44
+ updatedMembers.push(memberId);
45
+ $this.hideWarningMessage($row);
46
+ $this.callAjax({
47
+ row: $row,
48
+ members: updatedMembers,
49
+ member: memberId,
50
+ url: $this.query_url,
51
+ data: $this.buildFormData(updatedMembers),
52
+ on_error: $this.handleError,
53
+ on_success: $this.handleAddRowSuccess,
54
+ });
55
+ }
56
+ });
57
+ }
58
+
59
+ /**
60
+ * Handle click events by the "Remove" buttons in the table, and calling the
61
+ * server to handle the request
62
+ */
63
+ bindRemoveButton() {
64
+ const $this = this;
65
+ $this.element.find('.btn-remove-row').click(function removeButton() {
66
+ const $row = $(this).parents('tr:first');
67
+ const memberId = $row.data('work-id');
68
+ const index = $this.members.indexOf(memberId);
69
+ const updatedMembers = $this.members.slice();
70
+ updatedMembers.splice(index, 1);
71
+ $this.callAjax({
72
+ row: $row,
73
+ members: updatedMembers,
74
+ member: memberId,
75
+ data: $this.buildFormData(updatedMembers),
76
+ url: $this.query_url,
77
+ on_error: $this.handleError,
78
+ on_success: $this.handleRemoveRowSuccess,
79
+ });
80
+ });
81
+ }
82
+
83
+ /**
84
+ * Builds form data strings.
85
+ * @param {Array} array of ids
86
+ */
87
+ buildFormData(ids) {
88
+ return ids;
89
+ }
90
+
91
+ /**
92
+ * Set the warning message related to the appropriate row in the table
93
+ * @param {jQuery} row the row containing the warning message to display
94
+ * @param {String} message the warning message text to set
95
+ */
96
+ setWarningMessage(row, message) {
97
+ const $this = this;
98
+ $this.element.find('.message.has-warning').text(message).removeClass('hidden');
99
+ }
100
+
101
+ /**
102
+ * Hide the warning message on the appropriate row
103
+ * @param {jQuery} row the row containing the warning message to hide
104
+ */
105
+ hideWarningMessage(row) {
106
+ const $this = this;
107
+ $this.element.find('.message.has-warning').addClass('hidden');
108
+ }
109
+
110
+ /**
111
+ * Call the server, then call the appropriate callbacks to handle success and errors
112
+ * @param {Object} args the table, row, input, url, and callbacks
113
+ */
114
+ callAjax(args) {
115
+ const $this = this;
116
+ $.ajax({
117
+ type: 'patch',
118
+ url: args.url,
119
+ dataType: 'json',
120
+ data: args.data,
121
+ })
122
+ .done(() => {
123
+ args.on_success.call($this, args);
124
+ })
125
+ .fail((jqxhr) => {
126
+ args.on_error.call($this, args, jqxhr);
127
+ });
128
+ }
129
+
130
+ /**
131
+ * Reloads the child works tables after ajax call for member work.
132
+ * Rebinds the add and remove buttons to the updated table.
133
+ */
134
+ reloadTable() {
135
+ const $this = this;
136
+ $this.element.load(`${$this.query_url} div#${this.element[0].id}`, () => {
137
+ $this.bindButtons();
138
+ });
139
+ }
140
+
141
+ /**
142
+ * Set a warning message to alert the user on an error
143
+ * @param {Object} args the table, row, input, url, and callbacks
144
+ * @param {Object} jqxhr the jQuery XHR response object
145
+ */
146
+ handleError(args, jqxhr) {
147
+ let message = jqxhr.statusText;
148
+ if (jqxhr.responseJSON) {
149
+ message = jqxhr.responseJSON.description;
150
+ }
151
+ this.setWarningMessage(args.row, message);
152
+ }
153
+
154
+ /**
155
+ * Update list of child work ids and list of members. Reload the
156
+ * table from the server.
157
+ * @param {Object} args the table, row, input, url, and callbacks
158
+ */
159
+ handleRemoveRowSuccess(args) {
160
+ // update list of child member works
161
+ const index = this.workIds.indexOf(args.member);
162
+ this.workIds.splice(index, 1);
163
+
164
+ // update master list of member works
165
+ this.members = args.members;
166
+
167
+ this.reloadTable();
168
+ }
169
+
170
+ /**
171
+ * Update list of child work ids and list of members.
172
+ * Clear the add row input and reload the table from the server.
173
+ * @param {Object} args the table, row, input, url, and callbacks
174
+ */
175
+ handleAddRowSuccess(args) {
176
+ // update list of child member works
177
+ this.workIds.push(args.member);
178
+
179
+ // update master list of member works
180
+ this.members = args.members;
181
+
182
+ // empty the "add" row input value
183
+ this.element.find('input').val('');
184
+
185
+ this.reloadTable();
186
+ }
187
+ }
@@ -0,0 +1,104 @@
1
+ .leaflet-control-geocoder {
2
+ background: white;
3
+ }
4
+
5
+ .leaflet-control-geocoder a, .leaflet-control-geocoder .leaflet-control-geocoder-icon {
6
+ border-bottom-left-radius: 4px;
7
+ border-bottom-right-radius: 4px;
8
+ border-bottom: none;
9
+ display: inline-block;
10
+ }
11
+
12
+ .leaflet-control-geocoder .leaflet-control-geocoder-alternatives a {
13
+ width: inherit;
14
+ height: inherit;
15
+ line-height: inherit;
16
+ }
17
+
18
+ .leaflet-control-geocoder a:hover, .leaflet-control-geocoder .leaflet-control-geocoder-icon:hover {
19
+ border-bottom: none;
20
+ display: inline-block;
21
+ }
22
+
23
+ .leaflet-control-geocoder-form {
24
+ display: none;
25
+ vertical-align: middle;
26
+ }
27
+ .leaflet-control-geocoder-expanded .leaflet-control-geocoder-form {
28
+ display: inline-block;
29
+ }
30
+ .leaflet-control-geocoder-form input {
31
+ font-size: 120%;
32
+ border: 0;
33
+ background-color: transparent;
34
+ width: 246px;
35
+ }
36
+ .leaflet-control-geocoder-icon {
37
+ background-image: url(image_path('geo_works/images/geocoder.png'));
38
+ background-repeat: no-repeat;
39
+ background-position: center;
40
+ }
41
+ .leaflet-control-geocoder-throbber .leaflet-control-geocoder-icon {
42
+ background-image: url(image_path('geo_works/images/throbber.gif'));
43
+ }
44
+
45
+ .leaflet-control-geocoder-form-no-error {
46
+ display: none;
47
+ }
48
+
49
+ .leaflet-control-geocoder-form input:focus {
50
+ outline: none;
51
+ }
52
+
53
+ .leaflet-control-geocoder-form button {
54
+ display: none;
55
+ }
56
+ .leaflet-control-geocoder-error {
57
+ margin-top: 8px;
58
+ margin-left: 8px;
59
+ display: block;
60
+ color: #444;
61
+ }
62
+ .leaflet-control-geocoder-alternatives {
63
+ display: block;
64
+ width: 272px;
65
+ list-style: none;
66
+ padding: 0;
67
+ margin: 0;
68
+ }
69
+
70
+ .leaflet-control-geocoder-alternatives-minimized {
71
+ display: none;
72
+ height: 0;
73
+ }
74
+ .leaflet-control-geocoder-alternatives li {
75
+ white-space: nowrap;
76
+ display: block;
77
+ overflow: hidden;
78
+ padding: 5px 8px;
79
+ text-overflow: ellipsis;
80
+ border-bottom: 1px solid #ccc;
81
+ cursor: pointer;
82
+ }
83
+
84
+ .leaflet-control-geocoder-alternatives li a, .leaflet-control-geocoder-alternatives li a:hover {
85
+ width: inherit;
86
+ height: inherit;
87
+ line-height: inherit;
88
+ background: inherit;
89
+ border-radius: inherit;
90
+ text-align: left;
91
+ }
92
+
93
+ .leaflet-control-geocoder-alternatives li:last-child {
94
+ border-bottom: none;
95
+ }
96
+ .leaflet-control-geocoder-alternatives li:hover, .leaflet-control-geocoder-selected {
97
+ background-color: #f5f5f5;
98
+ }
99
+ .leaflet-control-geocoder-address-detail {
100
+
101
+ }
102
+ .leaflet-control-geocoder-address-context {
103
+ color: #666;
104
+ }
@@ -0,0 +1,18 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require leaflet
14
+ *= require geo_works/leaflet-boundingbox
15
+ *= require geo_works/Control.Geocoder
16
+ *= require_tree .
17
+ *= require_self
18
+ */
@@ -0,0 +1,15 @@
1
+ #bbox {
2
+ height: 500px;
3
+ }
4
+
5
+ .leaflet-control-attribution {
6
+ display: none;
7
+ }
8
+
9
+ .bbox-inputs {
10
+ margin-top: 10px;
11
+ margin-bottom: 10px;
12
+ .input-group-addon div {
13
+ width: 30px;
14
+ }
15
+ }
@@ -0,0 +1,17 @@
1
+ div.leaflet-marker-icon.location-filter.resize-marker {
2
+ background: url(image_path('geo_works/images/resize-handle.png')) no-repeat;
3
+ cursor: move;
4
+ }
5
+ div.leaflet-marker-icon.location-filter.move-marker {
6
+ background: url(image_path('geo_works/images/move-handle.png')) no-repeat;
7
+ cursor: move;
8
+ }
9
+
10
+ div.location-filter.button-container {
11
+ background-color: white;
12
+ }
13
+ .leaflet-container div.location-filter.button-container a {
14
+ color: #6B6B6B;
15
+ font-size: 15px;
16
+ width: 90px;
17
+ }
@@ -0,0 +1,29 @@
1
+ #child-works, #parent-works {
2
+ table {
3
+ tbody {
4
+ td { border-top: none; }
5
+ tr { border-bottom: 1px solid #ddd; }
6
+ }
7
+ }
8
+ .panel { margin-bottom: 0px; }
9
+ .row { margin: 10px 0 10px 0; }
10
+ .message {
11
+ background-size: 40px 40px;
12
+ background-image: linear-gradient(135deg, rgba(255, 255, 255, .05) 25%, transparent 25%,
13
+ transparent 50%, rgba(255, 255, 255, .05) 50%, rgba(255, 255, 255, .05) 75%,
14
+ transparent 75%, transparent);
15
+ box-shadow: inset 0 -1px 0 rgba(255,255,255,.4);
16
+ width: 100%;
17
+ border: 1px solid;
18
+ color: #fff;
19
+ padding: 10px;
20
+ text-shadow: 0 1px 0 rgba(0,0,0,.5);
21
+ animation: animate-bg 5s linear infinite;
22
+ border-radius: 4px;
23
+ margin-top: 10px;
24
+ }
25
+ .has-warning{
26
+ background-color: #eaaf51;
27
+ border-color: #d99a36;
28
+ }
29
+ }
@@ -0,0 +1,13 @@
1
+ .thumbnail {
2
+ max-width: 200px;
3
+ border: none;
4
+ background-color: transparent;
5
+ a > img {
6
+ display: block;
7
+ height: auto;
8
+ margin-right: 0px;
9
+ margin-left: 0px;
10
+ max-height: 150px;
11
+ max-width: 200px;
12
+ }
13
+ }
@@ -0,0 +1,29 @@
1
+ module GeoWorks
2
+ module EventsBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ def destroy
6
+ geo_works_events_generator.record_deleted(geo_work)
7
+ super
8
+ end
9
+
10
+ def after_create_response
11
+ super
12
+ geo_works_events_generator.record_created(geo_work)
13
+ end
14
+
15
+ def after_update_response
16
+ super
17
+ geo_works_events_generator.record_updated(geo_work)
18
+ end
19
+
20
+ def geo_works_events_generator
21
+ @geo_works_events_generator ||= GeoWorks::EventsGenerator.new
22
+ end
23
+
24
+ def geo_work
25
+ doc = SolrDocument.new(curation_concern.to_solr)
26
+ show_presenter.new(doc, current_ability, request)
27
+ end
28
+ end
29
+ end