geo_combine 0.5.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +53 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +20 -0
- data/.rubocop_todo.yml +165 -0
- data/Gemfile +2 -1
- data/README.md +20 -2
- data/Rakefile +4 -2
- data/bin/geocombine +1 -0
- data/geo_combine.gemspec +6 -1
- data/lib/geo_combine/bounding_box.rb +7 -1
- data/lib/geo_combine/ckan_metadata.rb +10 -8
- data/lib/geo_combine/cli.rb +3 -1
- data/lib/geo_combine/esri_open_data.rb +2 -0
- data/lib/geo_combine/exceptions.rb +3 -0
- data/lib/geo_combine/fgdc.rb +2 -2
- data/lib/geo_combine/formats.rb +2 -0
- data/lib/geo_combine/formatting.rb +3 -1
- data/lib/geo_combine/geo_blacklight_harvester.rb +21 -13
- data/lib/geo_combine/geoblacklight.rb +20 -6
- data/lib/geo_combine/geometry_types.rb +2 -0
- data/lib/geo_combine/iso19139.rb +2 -1
- data/lib/geo_combine/ogp.rb +13 -11
- data/lib/geo_combine/railtie.rb +2 -0
- data/lib/geo_combine/subjects.rb +2 -0
- data/lib/geo_combine/version.rb +3 -1
- data/lib/geo_combine.rb +4 -3
- data/lib/tasks/geo_combine.rake +50 -29
- data/lib/xslt/fgdc2html.xsl +38 -9
- data/spec/features/fgdc2html_spec.rb +53 -1
- data/spec/features/iso2html_spec.rb +10 -1
- data/spec/fixtures/docs/princeton_fgdc.xml +374 -0
- data/spec/fixtures/docs/repos.json +3224 -0
- data/spec/fixtures/docs/simple_xml.xml +10 -0
- data/spec/fixtures/docs/simple_xslt.xsl +11 -0
- data/spec/fixtures/docs/stanford_iso.xml +652 -0
- data/spec/fixtures/docs/tufts_fgdc.xml +977 -0
- data/spec/fixtures/indexing/basic_geoblacklight.json +27 -0
- data/spec/fixtures/indexing/geoblacklight.json +33 -0
- data/spec/fixtures/indexing/layers.json +16119 -0
- data/spec/fixtures/indexing/test.txt +1 -0
- data/spec/fixtures/json_docs.rb +2 -0
- data/spec/fixtures/xml_docs.rb +9 -1659
- data/spec/helpers.rb +7 -7
- data/spec/lib/geo_combine/bounding_box_spec.rb +18 -0
- data/spec/lib/geo_combine/ckan_metadata_spec.rb +34 -11
- data/spec/lib/geo_combine/esri_open_data_spec.rb +23 -2
- data/spec/lib/geo_combine/fgdc_spec.rb +41 -10
- data/spec/lib/geo_combine/formatting_spec.rb +13 -5
- data/spec/lib/geo_combine/geo_blacklight_harvester_spec.rb +30 -26
- data/spec/lib/geo_combine/geoblacklight_spec.rb +41 -11
- data/spec/lib/geo_combine/iso19139_spec.rb +26 -14
- data/spec/lib/geo_combine/ogp_spec.rb +28 -8
- data/spec/lib/geo_combine_spec.rb +7 -4
- data/spec/lib/tasks/geo_combine_spec.rb +45 -0
- data/spec/spec_helper.rb +19 -84
- data/spec/support/fixtures.rb +9 -0
- metadata +116 -21
- data/.coveralls.yml +0 -1
- data/.travis.yml +0 -8
data/spec/helpers.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
|
3
5
|
module Helpers
|
4
6
|
# From https://gist.github.com/ascendbruce/7070951
|
5
7
|
def valid_json?(json)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
return false
|
11
|
-
end
|
8
|
+
JSON.parse(json)
|
9
|
+
true
|
10
|
+
rescue Exception => e
|
11
|
+
false
|
12
12
|
end
|
13
13
|
|
14
14
|
def trim(text)
|
15
|
-
|
15
|
+
/\A\s+#{text}\s+\Z/
|
16
16
|
end
|
17
17
|
end
|
@@ -1,58 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe GeoCombine::BoundingBox do
|
4
6
|
subject(:valid) do
|
5
7
|
described_class.new(west: -180, east: 180, north: 90, south: -90)
|
6
8
|
end
|
9
|
+
|
7
10
|
describe '#to_envelope' do
|
8
11
|
it 'returns a valid envelope syntax' do
|
9
12
|
expect(valid.to_envelope).to eq 'ENVELOPE(-180.0, 180.0, 90.0, -90.0)'
|
10
13
|
end
|
11
14
|
end
|
15
|
+
|
12
16
|
describe '#valid?' do
|
13
17
|
context 'when valid' do
|
14
18
|
it { valid.valid? }
|
15
19
|
end
|
20
|
+
|
16
21
|
context 'when south > north' do
|
17
22
|
subject(:invalid) do
|
18
23
|
described_class.new(west: -180, east: 180, north: 33, south: 34)
|
19
24
|
end
|
25
|
+
|
20
26
|
it { expect { invalid.valid? }.to raise_error GeoCombine::Exceptions::InvalidGeometry }
|
21
27
|
end
|
28
|
+
|
22
29
|
context 'when west > east' do
|
23
30
|
subject(:invalid) do
|
24
31
|
described_class.new(west: 10, east: -20, north: 90, south: -90)
|
25
32
|
end
|
33
|
+
|
26
34
|
it { expect { invalid.valid? }.to raise_error GeoCombine::Exceptions::InvalidGeometry }
|
27
35
|
end
|
36
|
+
|
28
37
|
context 'when west out of range' do
|
29
38
|
subject(:invalid) do
|
30
39
|
described_class.new(west: -181, east: 180, north: 90, south: -90)
|
31
40
|
end
|
41
|
+
|
32
42
|
it { expect { invalid.valid? }.to raise_error GeoCombine::Exceptions::InvalidGeometry }
|
33
43
|
end
|
44
|
+
|
34
45
|
context 'when east out of range' do
|
35
46
|
subject(:invalid) do
|
36
47
|
described_class.new(west: -180, east: 181, north: 90, south: -90)
|
37
48
|
end
|
49
|
+
|
38
50
|
it { expect { invalid.valid? }.to raise_error GeoCombine::Exceptions::InvalidGeometry }
|
39
51
|
end
|
52
|
+
|
40
53
|
context 'when north out of range' do
|
41
54
|
subject(:invalid) do
|
42
55
|
described_class.new(west: -180, east: 180, north: 91, south: -90)
|
43
56
|
end
|
57
|
+
|
44
58
|
it { expect { invalid.valid? }.to raise_error GeoCombine::Exceptions::InvalidGeometry }
|
45
59
|
end
|
60
|
+
|
46
61
|
context 'when south out of range' do
|
47
62
|
subject(:invalid) do
|
48
63
|
described_class.new(west: -180, east: 180, north: 90, south: -91)
|
49
64
|
end
|
65
|
+
|
50
66
|
it { expect { invalid.valid? }.to raise_error GeoCombine::Exceptions::InvalidGeometry }
|
51
67
|
end
|
52
68
|
end
|
69
|
+
|
53
70
|
describe '.from_envelope' do
|
54
71
|
it { expect(described_class.from_envelope(valid.to_envelope).to_envelope).to eq valid.to_envelope }
|
55
72
|
end
|
73
|
+
|
56
74
|
describe '.from_string_delimiter' do
|
57
75
|
it { expect(described_class.from_string_delimiter('-180, -90, 180, 90').to_envelope).to eq valid.to_envelope }
|
58
76
|
end
|
@@ -1,63 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe GeoCombine::CkanMetadata do
|
4
6
|
include JsonDocs
|
5
|
-
let(:ckan_sample) {
|
7
|
+
let(:ckan_sample) { described_class.new(ckan_metadata) }
|
8
|
+
|
6
9
|
describe '#to_geoblacklight' do
|
7
10
|
it 'returns a GeoCombine::Geoblacklight' do
|
8
11
|
expect(ckan_sample.to_geoblacklight).to be_an GeoCombine::Geoblacklight
|
9
12
|
end
|
10
13
|
end
|
14
|
+
|
11
15
|
describe '#geoblacklight_terms' do
|
12
16
|
describe 'builds a hash which maps metadata' do
|
13
17
|
let(:metadata) { ckan_sample.instance_variable_get(:@metadata) }
|
18
|
+
|
14
19
|
it 'with dc_identifier_s' do
|
15
20
|
expect(ckan_sample.geoblacklight_terms).to include(dc_identifier_s: metadata['id'])
|
16
21
|
end
|
22
|
+
|
17
23
|
it 'with dc_title_s' do
|
18
24
|
expect(ckan_sample.geoblacklight_terms).to include(dc_title_s: metadata['title'])
|
19
25
|
end
|
26
|
+
|
20
27
|
it 'with dc_rights_s' do
|
21
28
|
expect(ckan_sample.geoblacklight_terms).to include(dc_rights_s: 'Public')
|
22
29
|
end
|
30
|
+
|
23
31
|
it 'with dct_provenance_s' do
|
24
32
|
expect(ckan_sample.geoblacklight_terms).to include(dct_provenance_s: metadata['organization']['title'])
|
25
33
|
end
|
34
|
+
|
26
35
|
it 'with layer_slug_s' do
|
27
36
|
expect(ckan_sample.geoblacklight_terms).to include(layer_slug_s: metadata['name'])
|
28
37
|
end
|
38
|
+
|
29
39
|
it 'with solr_geom' do
|
30
40
|
expect(ckan_sample.geoblacklight_terms).to include(solr_geom: 'ENVELOPE(-158.2, -105.7, 59.2, 8.9)')
|
31
41
|
end
|
42
|
+
|
32
43
|
it 'with dc_subject_sm' do
|
33
44
|
expect(ckan_sample.geoblacklight_terms[:dc_subject_sm].length).to eq 63
|
34
45
|
end
|
46
|
+
|
35
47
|
context 'with no information resources' do
|
36
48
|
let(:ckan_sample) do
|
37
|
-
ckan =
|
49
|
+
ckan = described_class.new(ckan_metadata)
|
38
50
|
metadata = ckan.instance_variable_get('@metadata')
|
39
51
|
metadata['resources'].delete_if { |resource| resource['resource_locator_function'] == 'information' }
|
40
52
|
ckan
|
41
53
|
end
|
54
|
+
|
42
55
|
it 'has no url (home page) in dct_references_s' do
|
43
56
|
expect(JSON.parse(ckan_sample.geoblacklight_terms[:dct_references_s])).not_to include('http://schema.org/url')
|
44
57
|
end
|
45
58
|
end
|
59
|
+
|
46
60
|
context 'with no download resources' do
|
47
61
|
let(:ckan_sample) do
|
48
|
-
ckan =
|
62
|
+
ckan = described_class.new(ckan_metadata)
|
49
63
|
metadata = ckan.instance_variable_get('@metadata')
|
50
64
|
metadata['resources'].delete_if { |resource| resource['resource_locator_function'] == 'download' }
|
51
65
|
ckan
|
52
66
|
end
|
67
|
+
|
53
68
|
it 'has no downloadUrl in dct_references_s' do
|
54
|
-
expect(ckan_sample
|
69
|
+
expect(ckan_sample).not_to be_downloadable
|
55
70
|
expect(JSON.parse(ckan_sample.geoblacklight_terms[:dct_references_s])).not_to include('http://schema.org/downloadUrl')
|
56
71
|
end
|
57
72
|
end
|
73
|
+
|
58
74
|
context 'with a ZIP download' do
|
59
75
|
let(:ckan_sample) do
|
60
|
-
ckan =
|
76
|
+
ckan = described_class.new(ckan_metadata)
|
61
77
|
metadata = ckan.instance_variable_get('@metadata')
|
62
78
|
metadata['resources'] = [
|
63
79
|
{
|
@@ -68,43 +84,50 @@ RSpec.describe GeoCombine::CkanMetadata do
|
|
68
84
|
]
|
69
85
|
ckan
|
70
86
|
end
|
87
|
+
|
71
88
|
it 'has a format and a download URL' do
|
72
|
-
expect(ckan_sample
|
89
|
+
expect(ckan_sample).to be_downloadable
|
73
90
|
expect(ckan_sample.geoblacklight_terms).to include(dc_format_s: 'ZIP')
|
74
91
|
expect(JSON.parse(ckan_sample.geoblacklight_terms[:dct_references_s])).to include('http://schema.org/downloadUrl' => 'https://example.com/layer.zip')
|
75
92
|
end
|
76
93
|
end
|
94
|
+
|
77
95
|
context 'without any resources' do
|
78
96
|
let(:ckan_sample) do
|
79
|
-
ckan =
|
97
|
+
ckan = described_class.new(ckan_metadata)
|
80
98
|
metadata = ckan.instance_variable_get('@metadata')
|
81
99
|
metadata.delete('resources')
|
82
100
|
ckan
|
83
101
|
end
|
102
|
+
|
84
103
|
it 'has no urls in dct_references_s' do
|
85
|
-
expect(ckan_sample
|
104
|
+
expect(ckan_sample).not_to be_downloadable
|
86
105
|
expect(JSON.parse(ckan_sample.geoblacklight_terms[:dct_references_s])).not_to include('http://schema.org/url')
|
87
106
|
expect(JSON.parse(ckan_sample.geoblacklight_terms[:dct_references_s])).not_to include('http://schema.org/downloadUrl')
|
88
107
|
end
|
89
108
|
end
|
109
|
+
|
90
110
|
context 'with very long descriptions' do
|
91
111
|
let(:ckan_sample) do
|
92
|
-
ckan =
|
112
|
+
ckan = described_class.new(ckan_metadata)
|
93
113
|
metadata = ckan.instance_variable_get('@metadata')
|
94
|
-
metadata['notes'] = 'x' *
|
114
|
+
metadata['notes'] = 'x' * 50_000
|
95
115
|
ckan
|
96
116
|
end
|
117
|
+
|
97
118
|
it 'restricts the size' do
|
98
119
|
expect(ckan_sample.geoblacklight_terms[:dc_description_s].length).to eq GeoCombine::CkanMetadata::MAX_STRING_LENGTH + 1
|
99
120
|
end
|
100
121
|
end
|
122
|
+
|
101
123
|
context 'with no descriptions' do
|
102
124
|
let(:ckan_sample) do
|
103
|
-
ckan =
|
125
|
+
ckan = described_class.new(ckan_metadata)
|
104
126
|
metadata = ckan.instance_variable_get('@metadata')
|
105
127
|
metadata['notes'] = nil
|
106
128
|
ckan
|
107
129
|
end
|
130
|
+
|
108
131
|
it 'omits the description' do
|
109
132
|
expect(ckan_sample.geoblacklight_terms).not_to include(:dc_description_s)
|
110
133
|
end
|
@@ -1,83 +1,104 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe GeoCombine::EsriOpenData do
|
4
6
|
include JsonDocs
|
5
|
-
let(:esri_sample) {
|
7
|
+
let(:esri_sample) { described_class.new(esri_opendata_metadata) }
|
6
8
|
let(:metadata) { esri_sample.instance_variable_get(:@metadata) }
|
9
|
+
|
7
10
|
describe '#initialize' do
|
8
11
|
it 'parses metadata argument JSON to Hash' do
|
9
12
|
expect(esri_sample.instance_variable_get(:@metadata)).to be_an Hash
|
10
13
|
end
|
14
|
+
|
11
15
|
it 'puts extend data into @geometry' do
|
12
16
|
expect(esri_sample.instance_variable_get(:@geometry)).to be_an Array
|
13
17
|
end
|
14
18
|
end
|
19
|
+
|
15
20
|
describe '#to_geoblacklight' do
|
16
21
|
it 'calls geoblacklight_terms to create a GeoBlacklight object' do
|
17
22
|
expect(esri_sample).to receive(:geoblacklight_terms).and_return({})
|
18
23
|
expect(esri_sample.to_geoblacklight).to be_an GeoCombine::Geoblacklight
|
19
24
|
end
|
20
25
|
end
|
26
|
+
|
21
27
|
describe '#geoblacklight_terms' do
|
22
28
|
describe 'builds a hash which maps metadata' do
|
23
29
|
let(:metadata) { esri_sample.instance_variable_get(:@metadata) }
|
30
|
+
|
24
31
|
it 'with dc_identifier_s' do
|
25
32
|
expect(esri_sample.geoblacklight_terms).to include(dc_identifier_s: metadata['id'])
|
26
33
|
end
|
34
|
+
|
27
35
|
it 'with dc_title_s' do
|
28
36
|
expect(esri_sample.geoblacklight_terms).to include(dc_title_s: metadata['name'])
|
29
37
|
end
|
38
|
+
|
30
39
|
it 'with dc_description_s sanitized' do
|
31
40
|
expect(esri_sample).to receive(:sanitize_and_remove_lines).and_return 'sanitized'
|
32
41
|
expect(esri_sample.geoblacklight_terms).to include(dc_description_s: 'sanitized')
|
33
42
|
end
|
43
|
+
|
34
44
|
it 'with dc_rights_s' do
|
35
45
|
expect(esri_sample.geoblacklight_terms).to include(dc_rights_s: 'Public')
|
36
46
|
end
|
47
|
+
|
37
48
|
it 'with dct_provenance_s' do
|
38
49
|
expect(esri_sample.geoblacklight_terms).to include(dct_provenance_s: metadata['owner'])
|
39
50
|
end
|
51
|
+
|
40
52
|
it 'with dct_references_s' do
|
41
53
|
expect(esri_sample).to receive(:references).and_return ''
|
42
54
|
expect(esri_sample.geoblacklight_terms).to include(:dct_references_s)
|
43
55
|
end
|
56
|
+
|
44
57
|
it 'with layer_id_s that is blank' do
|
45
58
|
expect(esri_sample.geoblacklight_terms).to include(layer_id_s: '')
|
46
59
|
end
|
60
|
+
|
47
61
|
it 'with layer_geom_type_s' do
|
48
62
|
expect(esri_sample.geoblacklight_terms).to include(layer_geom_type_s: metadata['geometry_type'])
|
49
63
|
end
|
64
|
+
|
50
65
|
it 'with layer_modified_dt' do
|
51
66
|
expect(esri_sample.geoblacklight_terms).to include(layer_modified_dt: metadata['updated_at'])
|
52
67
|
end
|
68
|
+
|
53
69
|
it 'with layer_slug_s' do
|
54
70
|
expect(esri_sample.geoblacklight_terms).to include(layer_slug_s: metadata['id'])
|
55
71
|
end
|
72
|
+
|
56
73
|
it 'with solr_geom' do
|
57
74
|
expect(esri_sample).to receive(:envelope).and_return ''
|
58
75
|
expect(esri_sample.geoblacklight_terms).to include(solr_geom: '')
|
59
76
|
end
|
77
|
+
|
60
78
|
it 'with dc_subject_sm' do
|
61
79
|
expect(esri_sample.geoblacklight_terms).to include(dc_subject_sm: metadata['tags'])
|
62
80
|
end
|
63
81
|
end
|
64
82
|
end
|
83
|
+
|
65
84
|
describe '#references' do
|
66
85
|
it 'converts references to a JSON string' do
|
67
86
|
expect(esri_sample).to receive(:references_hash).and_return({})
|
68
87
|
expect(esri_sample.references).to be_an String
|
69
88
|
end
|
70
89
|
end
|
90
|
+
|
71
91
|
describe '#references_hash' do
|
72
92
|
it 'builds out references' do
|
73
93
|
expect(esri_sample.references_hash).to include('http://schema.org/url' => metadata['landing_page'])
|
74
94
|
expect(esri_sample.references_hash).to include('http://resources.arcgis.com/en/help/arcgis-rest-api' => metadata['url'])
|
75
95
|
end
|
76
96
|
end
|
97
|
+
|
77
98
|
describe '#envelope' do
|
78
99
|
it 'creates an envelope for use in Solr' do
|
79
100
|
expect(esri_sample.envelope).to be_an String
|
80
|
-
expect(esri_sample.envelope).to match
|
101
|
+
expect(esri_sample.envelope).to match(/ENVELOPE\(.+,.+,.+,.+\)/)
|
81
102
|
end
|
82
103
|
end
|
83
104
|
end
|
@@ -1,103 +1,134 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe GeoCombine::Fgdc do
|
4
6
|
include XmlDocs
|
5
|
-
let(:fgdc_object){
|
7
|
+
let(:fgdc_object) { described_class.new(tufts_fgdc) }
|
8
|
+
|
6
9
|
describe '#initialize' do
|
7
10
|
it 'returns an instantiated Fgdc object' do
|
8
|
-
expect(fgdc_object).to be_an
|
11
|
+
expect(fgdc_object).to be_an described_class
|
9
12
|
end
|
10
13
|
end
|
14
|
+
|
11
15
|
describe '#xsl_geoblacklight' do
|
12
|
-
it '
|
16
|
+
it 'is defined' do
|
13
17
|
expect(fgdc_object.xsl_geoblacklight).to be_an Nokogiri::XSLT::Stylesheet
|
14
18
|
end
|
15
19
|
end
|
16
|
-
|
17
|
-
|
20
|
+
|
21
|
+
describe '#xsl_html' do
|
22
|
+
it 'is defined' do
|
18
23
|
expect(fgdc_object.xsl_html).to be_an Nokogiri::XSLT::Stylesheet
|
19
24
|
end
|
20
25
|
end
|
26
|
+
|
21
27
|
describe '#to_geoblacklight' do
|
22
28
|
let(:fgdc_geobl) { fgdc_object.to_geoblacklight }
|
29
|
+
|
23
30
|
it 'returns a GeoCombine::Geoblacklight object' do
|
24
31
|
expect(fgdc_geobl).to be_an GeoCombine::Geoblacklight
|
25
32
|
end
|
33
|
+
|
26
34
|
it 'is not valid due to bad modification date but valid otherwise' do
|
27
35
|
expect { fgdc_geobl.valid? }.to raise_error(JSON::Schema::ValidationError, /layer_modified_dt/)
|
28
36
|
fgdc_geobl.metadata.delete 'layer_modified_dt'
|
29
|
-
expect(fgdc_geobl
|
37
|
+
expect(fgdc_geobl).to be_valid
|
30
38
|
end
|
39
|
+
|
31
40
|
describe 'with GeoBlacklight-Schema fields' do
|
32
41
|
it 'geoblacklight_version' do
|
33
42
|
expect(fgdc_geobl.metadata['geoblacklight_version']).to eq '1.0'
|
34
43
|
end
|
44
|
+
|
35
45
|
it 'dc_identifier_s' do
|
36
46
|
expect(fgdc_geobl.metadata['dc_identifier_s']).to eq 'http://www.geoportaligm.gob.ec/portal/'
|
37
47
|
end
|
48
|
+
|
38
49
|
it 'dc_title_s' do
|
39
50
|
expect(fgdc_geobl.metadata['dc_title_s']).to eq 'Drilling Towers 50k Scale Ecuador 2011'
|
40
51
|
end
|
52
|
+
|
41
53
|
it 'dc_description_s' do
|
42
|
-
expect(fgdc_geobl.metadata['dc_description_s']).to match
|
54
|
+
expect(fgdc_geobl.metadata['dc_description_s']).to match(/Ecuador created from/)
|
43
55
|
end
|
56
|
+
|
44
57
|
it 'dc_rights_s' do
|
45
58
|
expect(fgdc_geobl.metadata['dc_rights_s']).to eq 'Public'
|
46
59
|
end
|
60
|
+
|
47
61
|
it 'dct_provenance_s' do
|
48
62
|
expect(fgdc_geobl.metadata['dct_provenance_s']).to eq 'Tufts'
|
49
63
|
end
|
64
|
+
|
50
65
|
it 'layer_id_s' do
|
51
66
|
expect(fgdc_geobl.metadata['layer_id_s']).to eq 'urn:Ecuador50KDrillingTower11'
|
52
67
|
end
|
68
|
+
|
53
69
|
it 'layer_slug_s' do
|
54
70
|
expect(fgdc_geobl.metadata['layer_slug_s']).to eq 'Tufts-Ecuador50KDrillingTower11'
|
55
71
|
end
|
72
|
+
|
56
73
|
it 'layer_modified_dt' do
|
57
74
|
expect(fgdc_geobl.metadata['layer_modified_dt']).to eq '2013-08-13'
|
58
75
|
end
|
76
|
+
|
59
77
|
it 'dc_creator_sm' do
|
60
78
|
expect(fgdc_geobl.metadata['dc_creator_sm']).to be_an Array
|
61
79
|
expect(fgdc_geobl.metadata['dc_creator_sm']).to include 'Instituto Geografico Militar (Ecuador)'
|
62
80
|
end
|
81
|
+
|
63
82
|
it 'dc_format_s' do
|
64
83
|
expect(fgdc_geobl.metadata['dc_format_s']).to eq 'Shapefile'
|
65
84
|
end
|
85
|
+
|
66
86
|
it 'dc_language_s' do
|
67
87
|
expect(fgdc_geobl.metadata['dc_language_s']).to eq 'English'
|
68
88
|
end
|
89
|
+
|
69
90
|
it 'dc_type_s' do
|
70
91
|
expect(fgdc_geobl.metadata['dc_type_s']).to eq 'Dataset'
|
71
92
|
end
|
93
|
+
|
72
94
|
it 'dc_subject_sm' do
|
73
95
|
expect(fgdc_geobl.metadata['dc_subject_sm']).to be_an Array
|
74
|
-
expect(fgdc_geobl.metadata['dc_subject_sm']).to include 'point', 'structure', 'economy', 'Drilling platforms',
|
96
|
+
expect(fgdc_geobl.metadata['dc_subject_sm']).to include 'point', 'structure', 'economy', 'Drilling platforms',
|
97
|
+
'Oil well drilling'
|
75
98
|
end
|
99
|
+
|
76
100
|
it 'dc_spatial_sm' do
|
77
101
|
expect(fgdc_geobl.metadata['dc_spatial_sm']).to be_an Array
|
78
|
-
expect(fgdc_geobl.metadata['dc_spatial_sm']).to include 'Ecuador', 'República del Ecuador',
|
102
|
+
expect(fgdc_geobl.metadata['dc_spatial_sm']).to include 'Ecuador', 'República del Ecuador',
|
103
|
+
'Northern Hemisphere', 'Southern Hemisphere', 'Western Hemisphere', 'South America'
|
79
104
|
end
|
105
|
+
|
80
106
|
it 'dct_issued_s' do
|
81
107
|
expect(fgdc_geobl.metadata['dct_issued_s']).to eq '2011'
|
82
108
|
end
|
109
|
+
|
83
110
|
it 'dct_temporal_sm' do
|
84
111
|
expect(fgdc_geobl.metadata['dct_temporal_sm']).to be_an Array
|
85
112
|
expect(fgdc_geobl.metadata['dct_temporal_sm']).to include '2011'
|
86
113
|
end
|
114
|
+
|
87
115
|
it 'dct_isPartOf_sm' do
|
88
116
|
expect(fgdc_geobl.metadata['dct_isPartOf_sm']).to be_an Array
|
89
117
|
expect(fgdc_geobl.metadata['dct_isPartOf_sm']).to include 'Ecuador', 'Instituto Geografico Militar Data'
|
90
118
|
end
|
119
|
+
|
91
120
|
it 'solr_geom' do
|
92
121
|
expect(fgdc_geobl.metadata['solr_geom']).to eq 'ENVELOPE(-79.904768, -79.904768, -1.377743, -1.377743)'
|
93
122
|
end
|
123
|
+
|
94
124
|
it 'solr_year_i' do
|
95
125
|
expect(fgdc_geobl.metadata['solr_year_i']).to eq 2011
|
96
126
|
end
|
97
127
|
end
|
98
128
|
end
|
129
|
+
|
99
130
|
describe '#to_html' do
|
100
|
-
it '
|
131
|
+
it 'creates a transformation of the metadata as a String' do
|
101
132
|
expect(fgdc_object.to_html).to be_an String
|
102
133
|
end
|
103
134
|
end
|
@@ -1,26 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe GeoCombine::Formatting do
|
6
|
+
subject { Object.new.extend(described_class) }
|
7
|
+
|
4
8
|
let(:dirty) { "<p>paragraph</p> \n on a new line" }
|
5
|
-
|
9
|
+
|
6
10
|
describe '#sanitize' do
|
7
11
|
it 'sanitizes a fragment' do
|
8
|
-
expect(subject.sanitize(dirty)).
|
12
|
+
expect(subject.sanitize(dirty)).not_to match('<p>')
|
9
13
|
end
|
10
14
|
end
|
15
|
+
|
11
16
|
describe '#remove_lines' do
|
12
17
|
it 'removes new lines' do
|
13
|
-
expect(subject.remove_lines(dirty)).
|
18
|
+
expect(subject.remove_lines(dirty)).not_to match(/\n/)
|
14
19
|
end
|
15
20
|
end
|
21
|
+
|
16
22
|
describe '#sanitize_and_remove_lines' do
|
17
23
|
it 'returns a corrected string' do
|
18
|
-
expect(subject.sanitize_and_remove_lines(dirty)).
|
19
|
-
expect(subject.sanitize_and_remove_lines(dirty)).
|
24
|
+
expect(subject.sanitize_and_remove_lines(dirty)).not_to match('<p>')
|
25
|
+
expect(subject.sanitize_and_remove_lines(dirty)).not_to match(/\n/)
|
20
26
|
end
|
21
27
|
end
|
28
|
+
|
22
29
|
describe '#sluggify' do
|
23
30
|
let(:preslug) { 'HARVARD...Co_0l' }
|
31
|
+
|
24
32
|
it 'handles multiple . and _ and uppercase' do
|
25
33
|
expect(subject.sluggify(preslug)).to eq 'harvard-co-0l'
|
26
34
|
end
|