geo_concerns 0.0.1

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 (220) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rubocop.yml +101 -0
  4. data/.travis.yml +17 -0
  5. data/Gemfile +46 -0
  6. data/LICENSE +202 -0
  7. data/README.md +46 -0
  8. data/Rakefile +21 -0
  9. data/app/actors/geo_concerns/file_actor.rb +20 -0
  10. data/app/actors/geo_concerns/file_set_actor.rb +7 -0
  11. data/app/assets/images/geo_concerns/.keep +0 -0
  12. data/app/assets/images/geo_concerns/images/geocoder.png +0 -0
  13. data/app/assets/images/geo_concerns/images/throbber.gif +0 -0
  14. data/app/assets/images/geo_concerns/img/filter-icon.png +0 -0
  15. data/app/assets/images/geo_concerns/img/move-handle.png +0 -0
  16. data/app/assets/images/geo_concerns/img/resize-handle.png +0 -0
  17. data/app/assets/javascripts/geo_concerns/Control.Geocoder.js +1056 -0
  18. data/app/assets/javascripts/geo_concerns/application.js +5 -0
  19. data/app/assets/javascripts/geo_concerns/bounding_box_selector.js +100 -0
  20. data/app/assets/javascripts/geo_concerns/leaflet-boundingbox.js +467 -0
  21. data/app/assets/stylesheets/geo_concerns/Control.Geocoder.css +104 -0
  22. data/app/assets/stylesheets/geo_concerns/application.css +18 -0
  23. data/app/assets/stylesheets/geo_concerns/bounding_box.scss +7 -0
  24. data/app/assets/stylesheets/geo_concerns/leaflet-boundingbox.css +17 -0
  25. data/app/controllers/concerns/geo_concerns/file_sets_controller_behavior.rb +19 -0
  26. data/app/controllers/concerns/geo_concerns/image_works_controller_behavior.rb +13 -0
  27. data/app/controllers/concerns/geo_concerns/raster_works_controller_behavior.rb +23 -0
  28. data/app/controllers/concerns/geo_concerns/vector_works_controller_behavior.rb +23 -0
  29. data/app/forms/geo_concerns/basic_geo_metadata_form.rb +8 -0
  30. data/app/forms/geo_concerns/external_metadata_file_form.rb +8 -0
  31. data/app/forms/geo_concerns/georeferenced_form.rb +9 -0
  32. data/app/forms/geo_concerns/image_work_form.rb +9 -0
  33. data/app/forms/geo_concerns/raster_work_form.rb +8 -0
  34. data/app/forms/geo_concerns/vector_work_form.rb +8 -0
  35. data/app/helpers/bounding_box_helper.rb +24 -0
  36. data/app/helpers/geo_concerns/application_helper.rb +4 -0
  37. data/app/models/concerns/geo_concerns/basic_geo_metadata.rb +21 -0
  38. data/app/models/concerns/geo_concerns/external_metadata_file_behavior.rb +31 -0
  39. data/app/models/concerns/geo_concerns/extractors/fgdc_helper.rb +9 -0
  40. data/app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb +114 -0
  41. data/app/models/concerns/geo_concerns/extractors/iso19139_helper.rb +50 -0
  42. data/app/models/concerns/geo_concerns/extractors/mods_helper.rb +15 -0
  43. data/app/models/concerns/geo_concerns/file_set/derivatives.rb +60 -0
  44. data/app/models/concerns/geo_concerns/file_set_presenter_behavior.rb +7 -0
  45. data/app/models/concerns/geo_concerns/geo_file_format_behavior.rb +37 -0
  46. data/app/models/concerns/geo_concerns/geo_file_set_behavior.rb +11 -0
  47. data/app/models/concerns/geo_concerns/georeferenced_behavior.rb +18 -0
  48. data/app/models/concerns/geo_concerns/image_file_behavior.rb +14 -0
  49. data/app/models/concerns/geo_concerns/image_work_behavior.rb +69 -0
  50. data/app/models/concerns/geo_concerns/metadata_extraction_helper.rb +28 -0
  51. data/app/models/concerns/geo_concerns/raster_file_behavior.rb +14 -0
  52. data/app/models/concerns/geo_concerns/raster_work_behavior.rb +82 -0
  53. data/app/models/concerns/geo_concerns/solr_document_behavior.rb +25 -0
  54. data/app/models/concerns/geo_concerns/vector_file_behavior.rb +14 -0
  55. data/app/models/concerns/geo_concerns/vector_work_behavior.rb +78 -0
  56. data/app/presenters/geo_concerns/geo_concerns_show_presenter.rb +30 -0
  57. data/app/presenters/geo_concerns/image_work_show_presenter.rb +18 -0
  58. data/app/presenters/geo_concerns/raster_work_show_presenter.rb +18 -0
  59. data/app/presenters/geo_concerns/vector_work_show_presenter.rb +10 -0
  60. data/app/processors/geo_concerns/processors/base_geo_processor.rb +86 -0
  61. data/app/processors/geo_concerns/processors/raster.rb +11 -0
  62. data/app/processors/geo_concerns/processors/raster/aig.rb +44 -0
  63. data/app/processors/geo_concerns/processors/raster/base.rb +74 -0
  64. data/app/processors/geo_concerns/processors/raster/dem.rb +46 -0
  65. data/app/processors/geo_concerns/processors/raster/processor.rb +27 -0
  66. data/app/processors/geo_concerns/processors/vector.rb +11 -0
  67. data/app/processors/geo_concerns/processors/vector/base.rb +68 -0
  68. data/app/processors/geo_concerns/processors/vector/processor.rb +25 -0
  69. data/app/processors/geo_concerns/processors/vector/shapefile.rb +20 -0
  70. data/app/processors/geo_concerns/processors/zip.rb +31 -0
  71. data/app/renderers/coverage_renderer.rb +34 -0
  72. data/app/runners/geo_concerns/runners/raster_derivatives.rb +9 -0
  73. data/app/runners/geo_concerns/runners/vector_derivatives.rb +9 -0
  74. data/app/schemas/geo_concerns/basic_geo_metadata_optional.rb +39 -0
  75. data/app/schemas/geo_concerns/basic_geo_metadata_required.rb +25 -0
  76. data/app/services/authority_service.rb +23 -0
  77. data/app/services/geo_concerns/derivative_path.rb +16 -0
  78. data/app/services/image_format_service.rb +4 -0
  79. data/app/services/metadata_format_service.rb +4 -0
  80. data/app/services/raster_format_service.rb +4 -0
  81. data/app/services/vector_format_service.rb +4 -0
  82. data/app/values/geo_concerns/coverage.rb +36 -0
  83. data/app/values/geo_concerns/time_period.rb +31 -0
  84. data/app/views/curation_concerns/file_sets/_form.html.erb +48 -0
  85. data/app/views/curation_concerns/image_works/_form.html.erb +23 -0
  86. data/app/views/curation_concerns/image_works/_image_work.html.erb +2 -0
  87. data/app/views/curation_concerns/image_works/_members.html.erb +30 -0
  88. data/app/views/curation_concerns/image_works/_related_image_files.html.erb +24 -0
  89. data/app/views/curation_concerns/image_works/_show_actions.html.erb +16 -0
  90. data/app/views/curation_concerns/image_works/show.html.erb +17 -0
  91. data/app/views/curation_concerns/raster_works/_form.html.erb +25 -0
  92. data/app/views/curation_concerns/raster_works/_members.html.erb +30 -0
  93. data/app/views/curation_concerns/raster_works/_raster_work.html.erb +2 -0
  94. data/app/views/curation_concerns/raster_works/_related_raster_files.html.erb +24 -0
  95. data/app/views/curation_concerns/raster_works/_show_actions.html.erb +16 -0
  96. data/app/views/curation_concerns/raster_works/show.html.erb +17 -0
  97. data/app/views/curation_concerns/vector_works/_form.html.erb +25 -0
  98. data/app/views/curation_concerns/vector_works/_related_vector_files.html.erb +24 -0
  99. data/app/views/curation_concerns/vector_works/_show_actions.html.erb +15 -0
  100. data/app/views/curation_concerns/vector_works/_vector_work.html.erb +2 -0
  101. data/app/views/curation_concerns/vector_works/show.html.erb +15 -0
  102. data/app/views/geo_concerns/_attribute_rows.html.erb +11 -0
  103. data/app/views/geo_concerns/_attributes.html.erb +13 -0
  104. data/app/views/geo_concerns/_form_additional_information.html.erb +11 -0
  105. data/app/views/geo_concerns/_form_bounding_box.html.erb +9 -0
  106. data/app/views/geo_concerns/_form_descriptive_fields.html.erb +9 -0
  107. data/app/views/geo_concerns/_form_files_and_links.html.erb +0 -0
  108. data/app/views/geo_concerns/_form_populate_metadata.html.erb +8 -0
  109. data/app/views/geo_concerns/_form_required_information.html.erb +12 -0
  110. data/app/views/geo_concerns/_form_supplementary_fields.html.erb +15 -0
  111. data/app/views/geo_concerns/_related_external_metadata_files.html.erb +24 -0
  112. data/app/vocabs/geo_concerns/geo_terms.rb +12 -0
  113. data/bin/rails +12 -0
  114. data/config/routes.rb +6 -0
  115. data/geo_concerns.gemspec +36 -0
  116. data/lib/generators/geo_concerns/install_generator.rb +119 -0
  117. data/lib/generators/geo_concerns/templates/actors/curation_concerns/image_work_actor.rb +4 -0
  118. data/lib/generators/geo_concerns/templates/actors/curation_concerns/raster_work_actor.rb +4 -0
  119. data/lib/generators/geo_concerns/templates/actors/curation_concerns/vector_work_actor.rb +4 -0
  120. data/lib/generators/geo_concerns/templates/config/authorities/image_formats.yml +5 -0
  121. data/lib/generators/geo_concerns/templates/config/authorities/metadata_formats.yml +7 -0
  122. data/lib/generators/geo_concerns/templates/config/authorities/raster_formats.yml +9 -0
  123. data/lib/generators/geo_concerns/templates/config/authorities/vector_formats.yml +5 -0
  124. data/lib/generators/geo_concerns/templates/controllers/curation_concerns/file_sets_controller.rb +6 -0
  125. data/lib/generators/geo_concerns/templates/controllers/curation_concerns/image_works_controller.rb +5 -0
  126. data/lib/generators/geo_concerns/templates/controllers/curation_concerns/raster_works_controller.rb +6 -0
  127. data/lib/generators/geo_concerns/templates/controllers/curation_concerns/vector_works_controller.rb +6 -0
  128. data/lib/generators/geo_concerns/templates/geo_concerns.js +1 -0
  129. data/lib/generators/geo_concerns/templates/geo_concerns.scss +3 -0
  130. data/lib/generators/geo_concerns/templates/jobs/characterize_job.rb +12 -0
  131. data/lib/generators/geo_concerns/templates/models/file_set.rb +4 -0
  132. data/lib/generators/geo_concerns/templates/models/image_work.rb +6 -0
  133. data/lib/generators/geo_concerns/templates/models/raster_work.rb +7 -0
  134. data/lib/generators/geo_concerns/templates/models/vector_work.rb +7 -0
  135. data/lib/generators/geo_concerns/templates/presenters/file_set_presenter.rb +3 -0
  136. data/lib/generators/geo_concerns/templates/spec/actor_spec.rb.erb +9 -0
  137. data/lib/generators/geo_concerns/templates/spec/controller_spec.rb.erb +9 -0
  138. data/lib/generators/geo_concerns/templates/spec/model_spec.rb.erb +9 -0
  139. data/lib/geo_concerns.rb +6 -0
  140. data/lib/geo_concerns/engine.rb +4 -0
  141. data/lib/geo_concerns/version.rb +3 -0
  142. data/lib/tasks/geo_concerns_tasks.rake +4 -0
  143. data/solr/config/_rest_managed.json +3 -0
  144. data/solr/config/admin-extra.html +31 -0
  145. data/solr/config/elevate.xml +36 -0
  146. data/solr/config/mapping-ISOLatin1Accent.txt +246 -0
  147. data/solr/config/protwords.txt +21 -0
  148. data/solr/config/schema.xml +372 -0
  149. data/solr/config/scripts.conf +24 -0
  150. data/solr/config/solrconfig.xml +312 -0
  151. data/solr/config/spellings.txt +2 -0
  152. data/solr/config/stopwords.txt +58 -0
  153. data/solr/config/stopwords_en.txt +58 -0
  154. data/solr/config/synonyms.txt +31 -0
  155. data/solr/config/xslt/example.xsl +132 -0
  156. data/solr/config/xslt/example_atom.xsl +67 -0
  157. data/solr/config/xslt/example_rss.xsl +66 -0
  158. data/solr/config/xslt/luke.xsl +337 -0
  159. data/spec/actors/geo_concerns/file_actor_spec.rb +26 -0
  160. data/spec/controllers/image_works_controller_spec.rb +25 -0
  161. data/spec/controllers/raster_works_controller_spec.rb +50 -0
  162. data/spec/controllers/vector_works_controller_spec.rb +50 -0
  163. data/spec/factories/external_metadata_files.rb +20 -0
  164. data/spec/factories/image_files.rb +32 -0
  165. data/spec/factories/image_works.rb +68 -0
  166. data/spec/factories/raster_files.rb +35 -0
  167. data/spec/factories/raster_works.rb +86 -0
  168. data/spec/factories/users.rb +26 -0
  169. data/spec/factories/vector_files.rb +31 -0
  170. data/spec/factories/vector_works.rb +83 -0
  171. data/spec/features/create_raster_work_spec.rb +49 -0
  172. data/spec/forms/geo_concerns/basic_geo_metadata_form_spec.rb +27 -0
  173. data/spec/forms/geo_concerns/external_metadata_file_form_spec.rb +27 -0
  174. data/spec/forms/geo_concerns/georeferenced_form_spec.rb +29 -0
  175. data/spec/forms/geo_concerns/image_work_form_spec.rb +11 -0
  176. data/spec/forms/geo_concerns/raster_work_form_spec.rb +15 -0
  177. data/spec/forms/geo_concerns/vector_work_form_spec.rb +15 -0
  178. data/spec/helpers/bounding_box_helper_spec.rb +34 -0
  179. data/spec/models/concerns/basic_geo_metadata_spec.rb +21 -0
  180. data/spec/models/concerns/geo_concerns/file_set/derivatives_spec.rb +108 -0
  181. data/spec/models/concerns/geo_concerns/file_set/geo_file_format_behavior_spec.rb +56 -0
  182. data/spec/models/external_metadata_file_spec.rb +118 -0
  183. data/spec/models/file_set_spec.rb +9 -0
  184. data/spec/models/image_file_spec.rb +48 -0
  185. data/spec/models/image_work_spec.rb +71 -0
  186. data/spec/models/raster_file_spec.rb +48 -0
  187. data/spec/models/raster_work_spec.rb +122 -0
  188. data/spec/models/solr_document_spec.rb +35 -0
  189. data/spec/models/vector_file_spec.rb +48 -0
  190. data/spec/models/vector_work_spec.rb +113 -0
  191. data/spec/presenters/file_set_presenter_spec.rb +13 -0
  192. data/spec/presenters/geo_concerns_show_presenter_spec.rb +56 -0
  193. data/spec/presenters/image_work_show_presenter_spec.rb +52 -0
  194. data/spec/presenters/raster_work_show_presenter_spec.rb +52 -0
  195. data/spec/presenters/vector_work_show_presenter_spec.rb +41 -0
  196. data/spec/processors/geo_concerns/processors/base_geo_processor_spec.rb +109 -0
  197. data/spec/processors/geo_concerns/processors/raster/aig_spec.rb +28 -0
  198. data/spec/processors/geo_concerns/processors/raster/base_spec.rb +86 -0
  199. data/spec/processors/geo_concerns/processors/raster/dem_spec.rb +26 -0
  200. data/spec/processors/geo_concerns/processors/raster/processor_spec.rb +39 -0
  201. data/spec/processors/geo_concerns/processors/vector/base_spec.rb +67 -0
  202. data/spec/processors/geo_concerns/processors/vector/processor_spec.rb +28 -0
  203. data/spec/processors/geo_concerns/processors/vector/shapefile_spec.rb +17 -0
  204. data/spec/processors/geo_concerns/processors/zip_spec.rb +39 -0
  205. data/spec/renderers/coverage_renderer_spec.rb +21 -0
  206. data/spec/services/derivative_path_spec.rb +12 -0
  207. data/spec/services/raster_format_service_spec.rb +13 -0
  208. data/spec/spec_helper.rb +34 -0
  209. data/spec/support/controllers/engine_helpers.rb +7 -0
  210. data/spec/support/database_cleaner.rb +18 -0
  211. data/spec/support/devise.rb +10 -0
  212. data/spec/support/devise_helpers.rb +6 -0
  213. data/spec/support/factory_girl.rb +3 -0
  214. data/spec/support/features.rb +14 -0
  215. data/spec/support/features/session_helpers.rb +40 -0
  216. data/spec/support/fixture_reader.rb +7 -0
  217. data/spec/test_app_templates/lib/generators/test_app_generator.rb +20 -0
  218. data/spec/values/coverage_spec.rb +40 -0
  219. data/tasks/ci.rake +49 -0
  220. metadata +527 -0
@@ -0,0 +1,83 @@
1
+ FactoryGirl.define do
2
+ factory :vector_work, aliases: [:private_vector_work], class: VectorWork do
3
+ transient do
4
+ user { FactoryGirl.create(:user) }
5
+
6
+ visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
7
+ end
8
+
9
+ after(:build) do |vector_work, evaluator|
10
+ vector_work.apply_depositor_metadata(evaluator.user.user_key)
11
+ end
12
+
13
+ factory :public_vector_work do
14
+ before(:create) do |vector_work, _evaluator|
15
+ vector_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
16
+ end
17
+ end
18
+
19
+ factory :vector_work_with_one_file do
20
+ before(:create) do |vector_work, evaluator|
21
+ vector_work.ordered_members << FactoryGirl.create(:vector_file, user: evaluator.user, title: ['A shapefile'], filename: 'filename.zip')
22
+ end
23
+ end
24
+
25
+ factory :vector_work_with_files do
26
+ before(:create) do |vector_work, evaluator|
27
+ 2.times { vector_work.ordered_members << FactoryGirl.create(:vector_file, user: evaluator.user) }
28
+ end
29
+ end
30
+
31
+ factory :vector_work_with_raster_works do
32
+ before(:create) do |vector_work, evaluator|
33
+ 2.times do
34
+ raster = FactoryGirl.create(:raster, user: evaluator.user)
35
+ raster.ordered_members << vector_work
36
+ end
37
+ end
38
+ end
39
+
40
+ factory :vector_work_with_one_metadata_file do
41
+ after(:create) do |vector_work, evaluator|
42
+ 1.times { vector_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user) }
43
+ end
44
+ end
45
+
46
+ factory :vector_work_with_metadata_files do
47
+ after(:create) do |vector_work, evaluator|
48
+ 2.times { vector_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user) }
49
+ end
50
+ end
51
+
52
+ factory :vector_work_with_vector_and_metadata_files do
53
+ before(:create) do |vector_work, evaluator|
54
+ 2.times { vector_work.ordered_members << FactoryGirl.create(:vector_file, user: evaluator.user) }
55
+ 2.times { vector_work.ordered_members << FactoryGirl.create(:external_metadata_file, user: evaluator.user) }
56
+ end
57
+ end
58
+
59
+ factory :vector_work_with_embargo_date do
60
+ transient do
61
+ embargo_date { Date.tomorrow.to_s }
62
+ end
63
+
64
+ factory :embargoed_vector_work do
65
+ after(:build) { |vector_work, evaluator| vector_work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
66
+ end
67
+
68
+ factory :embargoed_vector_work_with_files do
69
+ after(:build) { |vector_work, evaluator| vector_work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
70
+ after(:create) { |vector_work, evaluator| 2.times { vector_work.ordered_members << FactoryGirl.create(:vector_file, user: evaluator.user) } }
71
+ end
72
+
73
+ factory :leased_vector_work do
74
+ after(:build) { |vector_work, evaluator| vector_work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
75
+ end
76
+
77
+ factory :leased_vector_work_with_files do
78
+ after(:build) { |vector_work, evaluator| vector_work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
79
+ after(:create) { |vector_work, evaluator| 2.times { vector_work.ordered_members << FactoryGirl.create(:vector_file, user: evaluator.user) } }
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.feature 'RasterWorkController', type: :feature do
4
+ let(:user) { FactoryGirl.create(:admin) }
5
+ let(:fgdc_file) { test_data_fixture_path('zipcodes_fgdc.xml') }
6
+
7
+ context "an authorized user" do
8
+ before do
9
+ expect(CharacterizeJob).to receive(:perform_later)
10
+ sign_in user
11
+ end
12
+
13
+ scenario "creating a raster work and attaching a vector work" do
14
+ visit new_curation_concerns_raster_work_path
15
+ expect(page).not_to have_text 'Add Your Content'
16
+ fill_in 'raster_work_title', with: 'Raster Title'
17
+ fill_in 'raster_work_temporal', with: '1989'
18
+ choose 'raster_work_visibility_open'
19
+ select 'Attribution 3.0 United States', from: 'raster_work[rights]'
20
+ click_button 'Create Raster work'
21
+
22
+ expect(page).to have_text 'Raster Title'
23
+ expect(page).to have_text '1989'
24
+ expect(page).to have_text 'Open Access'
25
+ expect(page).to have_link 'Attribution 3.0 United States', href: 'http://creativecommons.org/licenses/by/3.0/us/'
26
+
27
+ click_link 'Attach a Vector Work'
28
+ expect(page).not_to have_text 'Add Your Content'
29
+ fill_in 'vector_work_title', with: 'Vector Title'
30
+ fill_in 'vector_work_temporal', with: '1990'
31
+ choose 'vector_work_visibility_authenticated'
32
+ select 'Attribution-ShareAlike 3.0 United States', from: 'vector_work[rights]'
33
+ click_button 'Create Vector work'
34
+
35
+ expect(page).to have_text 'Vector Title'
36
+ expect(page).to have_text '1990'
37
+ expect(page).to have_text 'Institution Name'
38
+ expect(page).to have_link 'Attribution-ShareAlike 3.0 United States', href: 'http://creativecommons.org/licenses/by-sa/3.0/us/'
39
+
40
+ click_link 'Attach a Metadata File'
41
+ fill_in 'file_set[title][]', with: 'File Title'
42
+ select 'FGDC', from: 'file_set_mime_type'
43
+ attach_file 'file_set[files][]', fgdc_file
44
+ click_button 'Attach to Vector Work'
45
+
46
+ expect(page).to have_text 'zipcodes_fgdc.xml'
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoConcerns::BasicGeoMetadataForm do
4
+ before do
5
+ class TestModel < ActiveFedora::Base
6
+ property :coverage, predicate: ::RDF::Vocab::DC11.coverage, multiple: false
7
+ end
8
+
9
+ class TestForm < CurationConcerns::Forms::WorkForm
10
+ include GeoConcerns::BasicGeoMetadataForm
11
+ self.model_class = TestModel
12
+ end
13
+ end
14
+
15
+ after do
16
+ Object.send(:remove_const, :TestForm)
17
+ Object.send(:remove_const, :TestModel)
18
+ end
19
+
20
+ let(:object) { TestModel.new(coverage: GeoConcerns::Coverage.new(43.039, -69.856, 42.943, -71.032).to_s) }
21
+ let(:form) { TestForm.new(object, nil) }
22
+
23
+ describe '.terms' do
24
+ subject { form.terms }
25
+ it { is_expected.to include(:coverage) }
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoConcerns::ExternalMetadataFileForm do
4
+ before do
5
+ class TestModel < ActiveFedora::Base
6
+ end
7
+
8
+ class TestForm < CurationConcerns::Forms::WorkForm
9
+ include GeoConcerns::ExternalMetadataFileForm
10
+ self.model_class = TestModel
11
+ end
12
+ end
13
+
14
+ after do
15
+ Object.send(:remove_const, :TestForm)
16
+ Object.send(:remove_const, :TestModel)
17
+ end
18
+
19
+ let(:object) { TestModel.new }
20
+ let(:form) { TestForm.new(object, nil) }
21
+
22
+ describe '.triggers' do
23
+ it 'has should_populate_metadata trigger attribute' do
24
+ expect(form.respond_to?(:should_populate_metadata)).to be_truthy
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoConcerns::GeoreferencedForm do
4
+ before do
5
+ class TestModel < ActiveFedora::Base
6
+ property :cartographic_projection,
7
+ predicate: ::RDF::URI.new('http://bibframe.org/vocab/cartographicProjection'),
8
+ multiple: false
9
+ end
10
+
11
+ class TestForm < CurationConcerns::Forms::WorkForm
12
+ include GeoConcerns::GeoreferencedForm
13
+ self.model_class = TestModel
14
+ end
15
+ end
16
+
17
+ after do
18
+ Object.send(:remove_const, :TestForm)
19
+ Object.send(:remove_const, :TestModel)
20
+ end
21
+
22
+ let(:object) { TestModel.new(cartographic_projection: 'urn:ogc:def:crs:EPSG:6.3:26986') }
23
+ let(:form) { TestForm.new(object, nil) }
24
+
25
+ describe '.terms' do
26
+ subject { form.terms }
27
+ it { is_expected.to include(:cartographic_projection) }
28
+ end
29
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoConcerns::ImageWorkForm do
4
+ let(:coverage) { GeoConcerns::Coverage.new(43.039, -69.856, 42.943, -71.032) }
5
+ let(:raw_attributes) { ActionController::Parameters.new(coverage: coverage.to_s) }
6
+
7
+ describe ".model_attributes" do
8
+ subject { described_class.model_attributes(raw_attributes) }
9
+ it { is_expected.to eq('coverage' => coverage.to_s) }
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoConcerns::RasterWorkForm do
4
+ let(:coverage) { GeoConcerns::Coverage.new(43.039, -69.856, 42.943, -71.032) }
5
+ let(:raw_attributes) { ActionController::Parameters.new(
6
+ coverage: coverage.to_s,
7
+ cartographic_projection: 'urn:ogc:def:crs:EPSG:6.3:26986')
8
+ }
9
+
10
+ describe '.model_attributes' do
11
+ subject { described_class.model_attributes(raw_attributes) }
12
+ it { is_expected.to include('coverage' => coverage.to_s) }
13
+ it { is_expected.to include('cartographic_projection' => 'urn:ogc:def:crs:EPSG:6.3:26986') }
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoConcerns::VectorWorkForm do
4
+ let(:coverage) { GeoConcerns::Coverage.new(43.039, -69.856, 42.943, -71.032) }
5
+ let(:raw_attributes) { ActionController::Parameters.new(
6
+ coverage: coverage.to_s,
7
+ cartographic_projection: 'urn:ogc:def:crs:EPSG:6.3:26986')
8
+ }
9
+
10
+ describe '.model_attributes' do
11
+ subject { described_class.model_attributes(raw_attributes) }
12
+ it { is_expected.to include('coverage' => coverage.to_s) }
13
+ it { is_expected.to include('cartographic_projection' => 'urn:ogc:def:crs:EPSG:6.3:26986') }
14
+ end
15
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe BoundingBoxHelper do
4
+ let(:property) { :coverage }
5
+ let(:helper) { TestingHelper.new }
6
+ before do
7
+ class TestingHelper
8
+ include BoundingBoxHelper
9
+
10
+ def curation_concern
11
+ end
12
+ end
13
+ end
14
+ after do
15
+ Object.send(:remove_const, :TestingHelper)
16
+ end
17
+
18
+ before do
19
+ vector_work = instance_double('vector_work', class: VectorWork)
20
+ allow(helper).to receive(:curation_concern).and_return(vector_work)
21
+ end
22
+
23
+ describe '#bbox' do
24
+ it 'builds bounding box selector' do
25
+ expect(helper.bbox(property)).to include("{inputId: vector_work_coverage})")
26
+ end
27
+ end
28
+
29
+ describe '#base_input_id' do
30
+ it 'returns the id of the bounding box input element' do
31
+ expect(helper.bbox_input_id(property)).to eq('vector_work_coverage')
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe GeoConcerns::BasicGeoMetadata do
4
+ subject { VectorWork.new }
5
+
6
+ it 'inherits the specified properties' do
7
+ %w(title date_uploaded date_modified contributor creator date_created
8
+ description identifier language part_of publisher resource_type
9
+ rights source subject tag).map(&:to_sym).each do |p|
10
+ expect(subject.respond_to?(p)).to be_truthy
11
+ expect(subject.respond_to?("#{p}=".to_sym)).to be_truthy
12
+ end
13
+ end
14
+
15
+ it 'defines the specified properties' do
16
+ %w(coverage provenance spatial temporal issued).map(&:to_sym).each do |p|
17
+ expect(subject.respond_to?(p)).to be_truthy
18
+ expect(subject.respond_to?("#{p}=".to_sym)).to be_truthy
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,108 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples 'a set of raster derivatives' do
4
+ it 'makes a thumbnail' do
5
+ new_thumb = "#{Rails.root}/tmp/derivatives/#{file_set.id}/thumbnail.thumbnail"
6
+ expect {
7
+ file_set.create_derivatives(file_name)
8
+ }.to change { Dir[new_thumb].empty? }
9
+ .from(true).to(false)
10
+ end
11
+
12
+ it 'makes a display raster' do
13
+ new_thumb = "#{Rails.root}/tmp/derivatives/#{file_set.id}/display_raster.display_raster"
14
+ expect {
15
+ file_set.create_derivatives(file_name)
16
+ }.to change { Dir[new_thumb].empty? }
17
+ .from(true).to(false)
18
+ end
19
+ end
20
+
21
+ shared_examples 'a set of vector derivatives' do
22
+ it 'makes a thumbnail' do
23
+ new_thumb = "#{Rails.root}/tmp/derivatives/#{file_set.id}/thumbnail.thumbnail"
24
+ expect {
25
+ file_set.create_derivatives(file_name)
26
+ }.to change { Dir[new_thumb].empty? }
27
+ .from(true).to(false)
28
+ end
29
+
30
+ it 'makes a display vector' do
31
+ new_thumb = "#{Rails.root}/tmp/derivatives/#{file_set.id}/display_vector.display_vector"
32
+ expect {
33
+ file_set.create_derivatives(file_name)
34
+ }.to change { Dir[new_thumb].empty? }
35
+ .from(true).to(false)
36
+ end
37
+ end
38
+
39
+ shared_examples 'a set of image derivatives' do
40
+ it 'makes a thumbnail' do
41
+ new_thumb = "#{Rails.root}/tmp/derivatives/#{file_set.id}/thumbnail.thumbnail"
42
+ expect {
43
+ file_set.create_derivatives(file_name)
44
+ }.to change { Dir[new_thumb].empty? }
45
+ .from(true).to(false)
46
+ end
47
+ end
48
+
49
+ describe CurationConcerns::FileSet do
50
+ let(:file_set) { FileSet.create { |gf| gf.apply_depositor_metadata('geonerd@example.com') } }
51
+
52
+ before do
53
+ allow(file_set).to receive(:mime_type).and_return(mime_type)
54
+
55
+ allow(CurationConcerns::DerivativePath).to receive(:derivative_path_for_reference) do |object, key|
56
+ "#{Rails.root}/tmp/derivatives/#{object.id}/#{key}.#{key}"
57
+ end
58
+ end
59
+
60
+ after do
61
+ dir = File.join(CurationConcerns.config.derivatives_path, file_set.id)
62
+ FileUtils.rm_r(dir) if File.directory?(dir)
63
+ end
64
+
65
+ describe 'geo derivatives' do
66
+ describe 'image processing' do
67
+ context 'with a jpeg' do
68
+ let(:mime_type) { 'image/jpeg' }
69
+ let(:file_name) { File.join(fixture_path, 'files', 'americas.jpg') }
70
+ it_behaves_like 'a set of image derivatives'
71
+ end
72
+ end
73
+
74
+ describe 'vector processing' do
75
+ context 'with a shapefile' do
76
+ let(:mime_type) { 'application/zip; ogr-format="ESRI Shapefile"' }
77
+ let(:file_name) { File.join(fixture_path, 'files', 'tufts-cambridgegrid100-04.zip') }
78
+ it_behaves_like 'a set of vector derivatives'
79
+ end
80
+
81
+ context 'with a geojson file' do
82
+ let(:mime_type) { 'application/vnd.geo+json' }
83
+ let(:file_name) { File.join(fixture_path, 'files', 'mercer.json') }
84
+ it_behaves_like 'a set of vector derivatives'
85
+ end
86
+ end
87
+
88
+ describe 'raster processing' do
89
+ context 'with a geo tiff file' do
90
+ let(:mime_type) { 'image/tiff; gdal-format=GTiff' }
91
+ let(:file_name) { File.join(fixture_path, 'files', 'S_566_1914_clip.tif') }
92
+ it_behaves_like 'a set of raster derivatives'
93
+ end
94
+
95
+ context 'with a usgs ascii dem file' do
96
+ let(:mime_type) { 'text/plain; gdal-format=USGSDEM' }
97
+ let(:file_name) { File.join(fixture_path, 'files', 'shandaken_clip.dem') }
98
+ it_behaves_like 'a set of raster derivatives'
99
+ end
100
+
101
+ context 'with an arc/info binary grid file' do
102
+ let(:mime_type) { 'application/octet-stream; gdal-format=AIG' }
103
+ let(:file_name) { File.join(fixture_path, 'files', 'precipitation.zip') }
104
+ it_behaves_like 'a set of raster derivatives'
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe GeoConcerns::GeoFileFormatBehavior do
4
+ subject { FileSet.new }
5
+
6
+ describe '#image_file?' do
7
+ before do
8
+ allow(subject).to receive(:mime_type).and_return('image/tiff')
9
+ end
10
+ it 'is true' do
11
+ expect(subject.image_file?).to be true
12
+ end
13
+ end
14
+
15
+ describe '#raster_file?' do
16
+ before do
17
+ allow(subject).to receive(:mime_type).and_return('image/tiff; gdal-format=GTiff')
18
+ end
19
+ it 'is true' do
20
+ expect(subject.raster_file?).to be true
21
+ end
22
+ end
23
+
24
+ describe '#vector_file?' do
25
+ before do
26
+ allow(subject).to receive(:mime_type).and_return('application/zip; ogr-format="ESRI Shapefile"')
27
+ end
28
+ it 'is true' do
29
+ expect(subject.vector_file?).to be true
30
+ end
31
+ end
32
+
33
+ describe '#external_metadata_file?' do
34
+ before do
35
+ allow(subject).to receive(:mime_type).and_return('application/xml; schema=iso19139')
36
+ end
37
+ it 'is true' do
38
+ expect(subject.external_metadata_file?).to be true
39
+ end
40
+ end
41
+
42
+ describe '#geo_file_format?' do
43
+ before do
44
+ allow(subject).to receive(:mime_type).and_return('image/tiff; gdal-format=GTiff')
45
+ end
46
+ it 'is true' do
47
+ expect(subject.geo_file_format?).to be true
48
+ end
49
+ end
50
+
51
+ describe '#image_work?' do
52
+ it 'is false' do
53
+ expect(subject.image_work?).to be false
54
+ end
55
+ end
56
+ end