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,22 @@
1
+ <% if can? :edit, @presenter.id %>
2
+ <% if @presenter.valid_child_concerns.length > 0 %>
3
+ <div class="row member-actions">
4
+ <div class="col-sm-5">
5
+ <div class="input-group">
6
+ <input class="related_works_ids work_child_members_ids form-control" id="work_child_members_ids" value="" aria-labelledby="work_child_members_ids_label" type="text" placeholder="Existing child id...">
7
+ <span class="input-group-btn">
8
+ <a class="btn btn-primary btn-add-row">Attach</a>
9
+ </span>
10
+ </div>
11
+ <div class="message has-warning hidden"></div>
12
+ </div>
13
+ <div class="col-sm-7">
14
+ <div class="btn-group">
15
+ <% @presenter.valid_child_concerns.each do |concern| %>
16
+ <%= link_to "Attach New #{concern.human_readable_type}", polymorphic_path([main_app, :new, :hyrax, :parent, concern.model_name.singular], parent_id: @presenter.id), class: 'btn btn-default' %>
17
+ <% end %>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <% end %>
22
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <% if can? :edit, @presenter.id %>
2
+ <div class="row member-actions">
3
+ <div class="col-sm-5">
4
+ <div class="input-group">
5
+ <input class="related_works_ids work_parent_members_ids form-control" id="work_parent_members_ids" value="" aria-labelledby="work_parent_members_ids_label" type="text" placeholder="Existing parent id...">
6
+ <span class="input-group-btn">
7
+ <a class="btn btn-primary btn-add-row">Attach</a>
8
+ </span>
9
+ </div>
10
+ <div class="message has-warning hidden"></div>
11
+ </div>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <tr class="attributes" data-work-id="<%= parent_member.id %>">
2
+ <td class="thumbnail" style="margin-bottom: 0px">
3
+ <%= render_thumbnail_tag parent_member.solr_document %>
4
+ </td>
5
+ <td>
6
+ <%= link_to parent_member.title.first, polymorphic_path([main_app, parent_member]) %>
7
+ </td>
8
+ <td>
9
+ <% if can?(:edit, parent_member.id) %>
10
+ <a class="btn btn-danger btn-remove-row">Remove</a>
11
+ <% end %>
12
+ </td>
13
+ </tr>
@@ -0,0 +1,22 @@
1
+ <div class="panel panel-default" id="parent-works">
2
+ <div class="panel-heading">
3
+ <h2>Parent Works</h2>
4
+ </div>
5
+ <table class="table table-striped" data-query-url="<%= polymorphic_path([main_app, :hyrax, presenter.model_name.singular], id: @presenter.id) %>" data-members="<%= @presenter.parent_work_presenters.map(&:id) %>" data-param-key="<%= @presenter.model_name.param_key %>">
6
+ <thead>
7
+ <% if presenter.parent_work_presenters.present? %>
8
+ <tr>
9
+ <th class="col-xs-3"></th>
10
+ <th>Work Name</th>
11
+ <th>Actions</th>
12
+ </tr>
13
+ <% end %>
14
+ </thead>
15
+ <tbody>
16
+ <% if presenter.parent_work_presenters.present? %>
17
+ <%= render partial: 'geo_works/related/parent_member', collection: @presenter.parent_work_presenters %>
18
+ <% end %>
19
+ </tbody>
20
+ </table>
21
+ <%= render partial: 'geo_works/related/new_parent_member' %>
22
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="show-actions">
2
+ <% if presenter.editor? %>
3
+ <% if presenter.member_presenters.size > 1 %>
4
+ <%= link_to t("hyrax.file_manager.link_text"), polymorphic_path([main_app, :file_manager, presenter]), class: 'btn btn-default' %>
5
+ <% end %>
6
+ <%= render 'image_actions', document: @presenter %>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1,16 @@
1
+ <%= simple_form_for [main_app, @form], html: { multipart: true } do |f| %>
2
+ <% unless f.object.persisted? %>
3
+ <% content_for :metadata_tab do %>
4
+ <p class="switch-upload-type">To create a separate work for each of the files, go to <%= link_to "Batch upload", hyrax.new_batch_upload_path %></p>
5
+ <% end %>
6
+ <% end %>
7
+ <%= render 'geo_works/guts4form', f: f %>
8
+ <% end %>
9
+
10
+ <script type="text/javascript">
11
+ Blacklight.onLoad(function() {
12
+ <%# This causes the page to switch back to the default template if they've
13
+ previously visited the batch download page in this Turbolinks session %>
14
+ $("#fileupload").fileupload('option', 'downloadTemplateId', 'template-download')
15
+ });
16
+ </script>
@@ -0,0 +1,11 @@
1
+ <div class="btn-group">
2
+ <button class="btn btn-default btn-small dropdown-toggle" data-toggle="dropdown" href="#"> Attach File <span class="caret"></span></button>
3
+ <ul class="dropdown-menu">
4
+ <li>
5
+ <%= link_to "Attach Image", main_app.new_hyrax_file_set_path(@presenter, type: 'image-data') %>
6
+ </li>
7
+ <li>
8
+ <%= link_to "Attach Metadata", main_app.new_hyrax_file_set_path(@presenter, type: 'metadata') %>
9
+ </li>
10
+ </ul>
11
+ </div>
@@ -0,0 +1,2 @@
1
+ <%# This is a search result view %>
2
+ <%= render 'catalog/document', document: image_work, document_counter: image_work_counter %>
@@ -0,0 +1,22 @@
1
+ <div class="show-actions">
2
+ <% if Hyrax.config.analytics? %>
3
+ <%= link_to "Analytics", presenter.stats_path, id: 'stats', class: 'btn btn-default' %>
4
+ <% end %>
5
+ <% if presenter.editor? %>
6
+ <%= link_to "Edit Work", edit_polymorphic_path([main_app, presenter]), class: 'btn btn-default' %>
7
+ <%= link_to "Delete", [main_app, presenter], class: 'btn btn-danger', data: { confirm: "Delete this #{presenter.human_readable_type}?" }, method: :delete %>
8
+ <% end %>
9
+
10
+ <% if presenter.work_featurable? %>
11
+ <%= link_to "Feature", hyrax.featured_work_path(presenter, format: :json),
12
+ data: { behavior: 'feature' },
13
+ class: presenter.display_unfeature_link? ? 'btn btn-default collapse' : 'btn btn-default' %>
14
+
15
+ <%= link_to "Unfeature", hyrax.featured_work_path(presenter, format: :json),
16
+ data: { behavior: 'unfeature' },
17
+ class: presenter.display_feature_link? ? 'btn btn-default collapse' : 'btn btn-default' %>
18
+ <% end %>
19
+
20
+ <!-- COinS hook for Zotero -->
21
+ <span class="Z3988" title="<%= export_as_openurl_ctx_kev(presenter) %>"></span>
22
+ </div>
@@ -0,0 +1,31 @@
1
+ <% provide :page_title, @presenter.page_title %>
2
+ <div itemscope itemtype="http://schema.org/CreativeWork" class="row">
3
+ <div class="col-xs-12">
4
+ <header>
5
+ <%= render 'work_title', presenter: @presenter %>
6
+ </header>
7
+
8
+ <span class="state state-<%= @presenter.workflow.state %>"><%= @presenter.workflow.state_label %></span>
9
+ </div>
10
+ <div class="col-sm-8">
11
+ <%= render 'work_description', presenter: @presenter %>
12
+ <%= render 'geo_works/metadata', presenter: @presenter %>
13
+ <%= render 'geo_works/relationships', presenter: @presenter %>
14
+ </div>
15
+ <div class="col-sm-4">
16
+ <%= render "show_actions", presenter: @presenter %>
17
+ <%= render "file_actions", presenter: @presenter %>
18
+ <%= t('.last_modified', value: @presenter.date_modified) %>
19
+ <%= render 'geo_works/representative_media', presenter: @presenter %>
20
+ <%= render 'social_media' %>
21
+ <%= render 'citations', presenter: @presenter %>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="row">
26
+ <div class="col-sm-12">
27
+ <%= render 'geo_works/related/geo_files', presenter: @presenter %>
28
+ <%= render 'geo_works/related/external_metadata_files', presenter: @presenter %>
29
+ <%= render 'workflow_actions_widget', presenter: @presenter %>
30
+ </div>
31
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="show-actions">
2
+ <% if presenter.editor? %>
3
+ <% if presenter.member_presenters.size > 1 %>
4
+ <%= link_to t("hyrax.file_manager.link_text"), polymorphic_path([main_app, :file_manager, presenter]), class: 'btn btn-default' %>
5
+ <% end %>
6
+ <%= render 'raster_actions', document: @presenter %>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1,16 @@
1
+ <%= simple_form_for [main_app, @form], html: { multipart: true } do |f| %>
2
+ <% unless f.object.persisted? %>
3
+ <% content_for :metadata_tab do %>
4
+ <p class="switch-upload-type">To create a separate work for each of the files, go to <%= link_to "Batch upload", hyrax.new_batch_upload_path %></p>
5
+ <% end %>
6
+ <% end %>
7
+ <%= render 'geo_works/guts4form', f: f %>
8
+ <% end %>
9
+
10
+ <script type="text/javascript">
11
+ Blacklight.onLoad(function() {
12
+ <%# This causes the page to switch back to the default template if they've
13
+ previously visited the batch download page in this Turbolinks session %>
14
+ $("#fileupload").fileupload('option', 'downloadTemplateId', 'template-download')
15
+ });
16
+ </script>
@@ -0,0 +1,11 @@
1
+ <div class="btn-group">
2
+ <button class="btn btn-default btn-small dropdown-toggle" data-toggle="dropdown" href="#"> Attach File <span class="caret"></span></button>
3
+ <ul class="dropdown-menu">
4
+ <li>
5
+ <%= link_to "Attach Raster", main_app.new_hyrax_file_set_path(@presenter, type: 'raster-data') %>
6
+ </li>
7
+ <li>
8
+ <%= link_to "Attach Metadata", main_app.new_hyrax_file_set_path(@presenter, type: 'metadata') %>
9
+ </li>
10
+ </ul>
11
+ </div>
@@ -0,0 +1,2 @@
1
+ <%# This is a search result view %>
2
+ <%= render 'catalog/document', document: raster_work, document_counter: raster_work_counter %>
@@ -0,0 +1,22 @@
1
+ <div class="show-actions">
2
+ <% if Hyrax.config.analytics? %>
3
+ <%= link_to "Analytics", presenter.stats_path, id: 'stats', class: 'btn btn-default' %>
4
+ <% end %>
5
+ <% if presenter.editor? %>
6
+ <%= link_to "Edit Work", edit_polymorphic_path([main_app, presenter]), class: 'btn btn-default' %>
7
+ <%= link_to "Delete", [main_app, presenter], class: 'btn btn-danger', data: { confirm: "Delete this #{presenter.human_readable_type}?" }, method: :delete %>
8
+ <% end %>
9
+
10
+ <% if presenter.work_featurable? %>
11
+ <%= link_to "Feature", hyrax.featured_work_path(presenter, format: :json),
12
+ data: { behavior: 'feature' },
13
+ class: presenter.display_unfeature_link? ? 'btn btn-default collapse' : 'btn btn-default' %>
14
+
15
+ <%= link_to "Unfeature", hyrax.featured_work_path(presenter, format: :json),
16
+ data: { behavior: 'unfeature' },
17
+ class: presenter.display_feature_link? ? 'btn btn-default collapse' : 'btn btn-default' %>
18
+ <% end %>
19
+
20
+ <!-- COinS hook for Zotero -->
21
+ <span class="Z3988" title="<%= export_as_openurl_ctx_kev(presenter) %>"></span>
22
+ </div>
@@ -0,0 +1,31 @@
1
+ <% provide :page_title, @presenter.page_title %>
2
+ <div itemscope itemtype="http://schema.org/CreativeWork" class="row">
3
+ <div class="col-xs-12">
4
+ <header>
5
+ <%= render 'work_title', presenter: @presenter %>
6
+ </header>
7
+
8
+ <span class="state state-<%= @presenter.workflow.state %>"><%= @presenter.workflow.state_label %></span>
9
+ </div>
10
+ <div class="col-sm-8">
11
+ <%= render 'work_description', presenter: @presenter %>
12
+ <%= render 'geo_works/metadata', presenter: @presenter %>
13
+ <%= render 'geo_works/relationships', presenter: @presenter %>
14
+ </div>
15
+ <div class="col-sm-4">
16
+ <%= render "show_actions", presenter: @presenter %>
17
+ <%= render "file_actions", presenter: @presenter %>
18
+ <%= t('.last_modified', value: @presenter.date_modified) %>
19
+ <%= render 'geo_works/representative_media', presenter: @presenter %>
20
+ <%= render 'social_media' %>
21
+ <%= render 'citations', presenter: @presenter %>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="row">
26
+ <div class="col-sm-12">
27
+ <%= render 'geo_works/related/geo_files', presenter: @presenter %>
28
+ <%= render 'geo_works/related/external_metadata_files', presenter: @presenter %>
29
+ <%= render 'workflow_actions_widget', presenter: @presenter %>
30
+ </div>
31
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="show-actions">
2
+ <% if presenter.editor? %>
3
+ <% if presenter.member_presenters.size > 1 %>
4
+ <%= link_to t("hyrax.file_manager.link_text"), polymorphic_path([main_app, :file_manager, presenter]), class: 'btn btn-default' %>
5
+ <% end %>
6
+ <%= render 'vector_actions', document: @presenter %>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1,16 @@
1
+ <%= simple_form_for [main_app, @form], html: { multipart: true } do |f| %>
2
+ <% unless f.object.persisted? %>
3
+ <% content_for :metadata_tab do %>
4
+ <p class="switch-upload-type">To create a separate work for each of the files, go to <%= link_to "Batch upload", hyrax.new_batch_upload_path %></p>
5
+ <% end %>
6
+ <% end %>
7
+ <%= render 'geo_works/guts4form', f: f %>
8
+ <% end %>
9
+
10
+ <script type="text/javascript">
11
+ Blacklight.onLoad(function() {
12
+ <%# This causes the page to switch back to the default template if they've
13
+ previously visited the batch download page in this Turbolinks session %>
14
+ $("#fileupload").fileupload('option', 'downloadTemplateId', 'template-download')
15
+ });
16
+ </script>
@@ -0,0 +1,22 @@
1
+ <div class="show-actions">
2
+ <% if Hyrax.config.analytics? %>
3
+ <%= link_to "Analytics", presenter.stats_path, id: 'stats', class: 'btn btn-default' %>
4
+ <% end %>
5
+ <% if presenter.editor? %>
6
+ <%= link_to "Edit Work", edit_polymorphic_path([main_app, presenter]), class: 'btn btn-default' %>
7
+ <%= link_to "Delete", [main_app, presenter], class: 'btn btn-danger', data: { confirm: "Delete this #{presenter.human_readable_type}?" }, method: :delete %>
8
+ <% end %>
9
+
10
+ <% if presenter.work_featurable? %>
11
+ <%= link_to "Feature", hyrax.featured_work_path(presenter, format: :json),
12
+ data: { behavior: 'feature' },
13
+ class: presenter.display_unfeature_link? ? 'btn btn-default collapse' : 'btn btn-default' %>
14
+
15
+ <%= link_to "Unfeature", hyrax.featured_work_path(presenter, format: :json),
16
+ data: { behavior: 'unfeature' },
17
+ class: presenter.display_feature_link? ? 'btn btn-default collapse' : 'btn btn-default' %>
18
+ <% end %>
19
+
20
+ <!-- COinS hook for Zotero -->
21
+ <span class="Z3988" title="<%= export_as_openurl_ctx_kev(presenter) %>"></span>
22
+ </div>
@@ -0,0 +1,11 @@
1
+ <div class="btn-group">
2
+ <button class="btn btn-default btn-small dropdown-toggle" data-toggle="dropdown" href="#"> Attach File <span class="caret"></span></button>
3
+ <ul class="dropdown-menu">
4
+ <li>
5
+ <%= link_to "Attach Vector", main_app.new_hyrax_file_set_path(@presenter, type: 'vector-data') %>
6
+ </li>
7
+ <li>
8
+ <%= link_to "Attach Metadata", main_app.new_hyrax_file_set_path(@presenter, type: 'metadata') %>
9
+ </li>
10
+ </ul>
11
+ </div>
@@ -0,0 +1,2 @@
1
+ <%# This is a search result view %>
2
+ <%= render 'catalog/document', document: vector_work, document_counter: vector_work_counter %>
@@ -0,0 +1,31 @@
1
+ <% provide :page_title, @presenter.page_title %>
2
+ <div itemscope itemtype="http://schema.org/CreativeWork" class="row">
3
+ <div class="col-xs-12">
4
+ <header>
5
+ <%= render 'work_title', presenter: @presenter %>
6
+ </header>
7
+
8
+ <span class="state state-<%= @presenter.workflow.state %>"><%= @presenter.workflow.state_label %></span>
9
+ </div>
10
+ <div class="col-sm-8">
11
+ <%= render 'work_description', presenter: @presenter %>
12
+ <%= render 'geo_works/metadata', presenter: @presenter %>
13
+ <%= render 'geo_works/relationships', presenter: @presenter %>
14
+ </div>
15
+ <div class="col-sm-4">
16
+ <%= render "show_actions", presenter: @presenter %>
17
+ <%= render "file_actions", presenter: @presenter %>
18
+ <%= t('.last_modified', value: @presenter.date_modified) %>
19
+ <%= render 'geo_works/representative_media', presenter: @presenter %>
20
+ <%= render 'social_media' %>
21
+ <%= render 'citations', presenter: @presenter %>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="row">
26
+ <div class="col-sm-12">
27
+ <%= render 'geo_works/related/geo_files', presenter: @presenter %>
28
+ <%= render 'geo_works/related/external_metadata_files', presenter: @presenter %>
29
+ <%= render 'workflow_actions_widget', presenter: @presenter %>
30
+ </div>
31
+ </div>
@@ -0,0 +1,3 @@
1
+ <legend>Add Location</legend>
2
+ <%= f.input :coverage, as: :hidden, label: false %>
3
+ <%= bbox(:coverage) %>
@@ -0,0 +1,10 @@
1
+ <% unless curation_concern.new_record? %>
2
+ <div class="row with-headroom">
3
+ <div class="col-md-12">
4
+ <fieldset id="set-populate-metadata">
5
+ <legend>Automatically Populate Metadata</legend>
6
+ <%= f.input :should_populate_metadata, as: :select, input_html: { class: 'form-control' }, label: 'Populate Metadata from External Metadata File', selected: false, include_blank: true, label_method: lambda { |x| x.label }, collection: external_metadata_file_presenters %>
7
+ </fieldset>
8
+ </div>
9
+ </div>
10
+ <% end %>
@@ -0,0 +1,12 @@
1
+ require 'rdf'
2
+ module GeoWorks
3
+ class GeoTerms < RDF::Vocabulary('http://projecthydra.org/GeoWorks/models#')
4
+ term :ImageWork
5
+ term :RasterWork
6
+ term :VectorWork
7
+ term :ImageFile
8
+ term :RasterFile
9
+ term :VectorFile
10
+ term :ExternalMetadataFile
11
+ end
12
+ end
@@ -0,0 +1,214 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "description": "Schema for GeoBlacklight. See https://github.com/geoblacklight/geoblacklight/wiki/Schema for more details.",
4
+ "id": "http://geoblacklight.org/v1.0/schema",
5
+ "title": "GeoBlacklight Schema",
6
+ "definitions": {
7
+ "layer": {
8
+ "title": "layer",
9
+ "description": "A GIS data layer. See [this example](https://github.com/OpenGeoMetadata/edu.stanford.purl/blob/master/bb/099/zb/1450/geoblacklight.json) metadata layer.",
10
+ "type": "object",
11
+ "required": [
12
+ "dc_title_s",
13
+ "dc_identifier_s",
14
+ "dc_rights_s",
15
+ "dct_provenance_s",
16
+ "layer_slug_s",
17
+ "solr_geom"
18
+ ],
19
+ "properties": {
20
+ "uuid": {
21
+ "type": "string",
22
+ "description": "*DEPRECATED* (use `dc_identifier_s`): Unique identifier for layer that is globally unique.",
23
+ "example": "http://purl.stanford.edu/vr593vj7147"
24
+ },
25
+ "dc_identifier_s": {
26
+ "type": "string",
27
+ "description": "Unique identifier for layer as a URI. It should be globally unique across all institutions, assumed not to be end-user visible, and is usually of the form `http://institution/id`. See https://github.com/geoblacklight/geoblacklight/wiki/Schema for more detailed documentation.",
28
+ "example": "http://purl.stanford.edu/vr593vj7147"
29
+ },
30
+ "dc_title_s": {
31
+ "type": "string",
32
+ "description": "Title for the layer.",
33
+ "example": "My Title"
34
+ },
35
+ "dc_description_s": {
36
+ "type": "string",
37
+ "description": "Description for the layer. *Optional*",
38
+ "example": "My Description"
39
+ },
40
+ "dc_rights_s": {
41
+ "type": "string",
42
+ "enum": [
43
+ "Public",
44
+ "Restricted"
45
+ ],
46
+ "description": "Access rights for the layer."
47
+ },
48
+ "dct_provenance_s": {
49
+ "type": "string",
50
+ "description": "Institution who holds the layer.",
51
+ "example": "Stanford"
52
+ },
53
+ "dct_references_s": {
54
+ "type": "string",
55
+ "description": "External resources that are available for the layer. The value is a JSON hash where each key is a URI for the protocol or format, and the value is the URL to the external resource. See `dct_references_s` [detailed documentation](http://geoblacklight.org/tutorial/2015/02/09/geoblacklight-overview.html). *Optional*",
56
+ "pattern": "\\{.*\\}",
57
+ "example": "{ ... }"
58
+ },
59
+ "georss_box_s": {
60
+ "type": "string",
61
+ "description": "*DEPRECATED* (use `solr_geom`): Bounding box for the layer, as maximum values for S W N E.",
62
+ "example": "12.6 -119.4 19.9 84.8"
63
+ },
64
+ "layer_id_s": {
65
+ "type": "string",
66
+ "description": "The complete identifier for the layer via WMS/WFS/WCS protocol. *Optional*",
67
+ "example": "druid:vr593vj7147"
68
+ },
69
+ "layer_geom_type_s": {
70
+ "type": "string",
71
+ "enum": [
72
+ "Point",
73
+ "Line",
74
+ "Polygon",
75
+ "Raster",
76
+ "Scanned Map",
77
+ "Image",
78
+ "Mixed"
79
+ ],
80
+ "description": "Geometry type for layer data, using controlled vocabulary. *Optional*"
81
+ },
82
+ "layer_modified_dt": {
83
+ "type": "string",
84
+ "format": "date-time",
85
+ "description": "Last modification date for the metadata record, using XML Schema dateTime format (YYYY-MM-DDThh:mm:ssZ). *Optional*"
86
+ },
87
+ "layer_slug_s": {
88
+ "type": "string",
89
+ "description": "Identifies a layer in human-readable keywords. Note this value is visible to the user, and used for Permalinks. The value should be alpha-numeric characters separated by dashes, and is typically of the form `institution-keyword1-keyword2`. It should also be globally unique across all institutions in *your* GeoBlacklight index. See https://github.com/geoblacklight/geoblacklight/wiki/Schema for more detailed documentation.",
90
+ "pattern": "^[-a-zA-Z0-9]+$",
91
+ "example": "stanford-andhra-pradesh-village-boundaries"
92
+ },
93
+ "solr_geom": {
94
+ "type": "string",
95
+ "pattern": "ENVELOPE(.*,.*,.*,.*)",
96
+ "description": "Bounding box of the layer as a ENVELOPE WKT (from the CQL standard) using coordinates in (West, East, North, South) order. Note that this field is indexed as a Solr spatial (RPT) field.",
97
+ "example": "ENVELOPE(76.76, 84.76, 19.91, 12.62)"
98
+ },
99
+ "solr_year_i": {
100
+ "type": "integer",
101
+ "description": "*DEPRECATED* (only used by the Blacklight range plugin, not core GeoBlacklight, and generally you want a multi-valued field here): *Derived from* `dct_temporal_sm`. Year for which layer is valid and only a single value. Note that this field is indexed as a Solr numeric field.",
102
+ "example": "1989"
103
+ },
104
+ "dc_creator_sm": {
105
+ "type": "array",
106
+ "items": {
107
+ "type": "string"
108
+ },
109
+ "description": "Author(s) of the layer. *Optional*",
110
+ "example": "George Washington, Thomas Jefferson"
111
+ },
112
+ "dc_format_s": {
113
+ "type": "string",
114
+ "description": "File format for the layer, ideally using a controlled vocabulary. *Optional*",
115
+ "example": "Shapefile, GeoTIFF, ArcGRID"
116
+ },
117
+ "dc_language_s": {
118
+ "type": "string",
119
+ "description": "Language for the layer. *Optional*. Note that future versions of the schema may make this a multi-valued field.",
120
+ "example": "English"
121
+ },
122
+ "dc_publisher_s": {
123
+ "type": "string",
124
+ "description": "Publisher of the layer. *Optional*",
125
+ "example": "ML InfoMap"
126
+ },
127
+ "dc_subject_sm": {
128
+ "type": "array",
129
+ "items": {
130
+ "type": "string"
131
+ },
132
+ "description": "Subjects for the layer, preferrably in a controlled vocabulary. *Optional*",
133
+ "example": "Census, Human settlements"
134
+ },
135
+ "dc_type_s": {
136
+ "type": "string",
137
+ "enum": [
138
+ "Dataset",
139
+ "Image",
140
+ "PhysicalObject"
141
+ ],
142
+ "description": "Resource type of the layer, using DCMI Type Vocabulary, usually a `Dataset`. *Optional*"
143
+ },
144
+ "dct_spatial_sm": {
145
+ "type": "array",
146
+ "items": {
147
+ "type": "string"
148
+ },
149
+ "description": "Spatial coverage and place names for the layer, preferrably in a controlled vocabulary. *Optional*",
150
+ "example": "Paris, San Francisco"
151
+ },
152
+ "dct_temporal_sm": {
153
+ "type": "array",
154
+ "items": {
155
+ "type": "string"
156
+ },
157
+ "description": "Temporal coverage for the layer, typically years or dates. Note that this field is not in a specific date format. *Optional*",
158
+ "example": "1989, circa 2010, 2007-2009"
159
+ },
160
+ "dct_issued_dt": {
161
+ "type": "string",
162
+ "format": "date-time",
163
+ "description": "Issued date for the layer, using XML Schema dateTime format (YYYY-MM-DDThh:mm:ssZ). *Optional*"
164
+ },
165
+ "dct_isPartOf_sm": {
166
+ "type": "array",
167
+ "items": {
168
+ "type": "string"
169
+ },
170
+ "description": "Holding entity for the layer, such as the title of a collection. *Optional*",
171
+ "example": "Village Maps of India"
172
+ },
173
+ "georss_point_s": {
174
+ "type": "string",
175
+ "description": "*DEPRECATED* (use `georss_box_s`): Point representation for layer as y, x - i.e., centroid",
176
+ "example": "12.6 -119.4"
177
+ },
178
+ "dc_relation_sm": {
179
+ "type": "array",
180
+ "items": {
181
+ "type": "string"
182
+ },
183
+ "description": "*DEPRECATED* (use `dct_isPartOf_sm`). A reference to a related resource for this layer. *Optional*",
184
+ "example": "http://purl.stanford.edu/vr593vj7147"
185
+ },
186
+ "dc_source_sm": {
187
+ "type": "array",
188
+ "items": {
189
+ "type": "string"
190
+ },
191
+ "description": "The identity of a layer from which this layer's data was derived. *Optional*",
192
+ "example": "stanford-vr593vj7147"
193
+ },
194
+ "geoblacklight_version": {
195
+ "type": "string",
196
+ "description": "The version of the GeoBlacklight Schema to which this metadata record conforms.",
197
+ "enum": [
198
+ "1.0"
199
+ ]
200
+ }
201
+ }
202
+ }
203
+ },
204
+ "anyOf": [
205
+ {
206
+ "$ref": "#/definitions/layer"
207
+ }, {
208
+ "type": "array",
209
+ "items": {
210
+ "$ref": "#/definitions/layer"
211
+ }
212
+ }
213
+ ]
214
+ }