geo_combine 0.5.0 → 0.7.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.
- 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
|