defra_ruby_area 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/defra_ruby/area/area.rb +38 -6
- data/lib/defra_ruby/area/services/base_area_service.rb +10 -19
- data/lib/defra_ruby/area/version.rb +1 -1
- data/spec/cassettes/public_face_area_invalid_blank.yml +3 -3
- data/spec/cassettes/public_face_area_invalid_coords.yml +3 -3
- data/spec/cassettes/public_face_area_valid.yml +3 -3
- data/spec/cassettes/water_management_area_invalid_blank.yml +3 -3
- data/spec/cassettes/water_management_area_invalid_coords.yml +3 -3
- data/spec/cassettes/water_management_area_valid.yml +6 -4
- data/spec/defra_ruby/area/area_spec.rb +93 -8
- data/spec/defra_ruby/area/response_spec.rb +7 -3
- data/spec/examples.txt +29 -21
- data/spec/fixtures/no_match.xml +8 -0
- data/spec/fixtures/valid.xml +20 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3eb4a2d30e01743dfd2ae40c2ee664e9e0ac763
|
4
|
+
data.tar.gz: d1b991b186aeef08dc521ec3edc39b5c63ece0be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69a76107b6789950ffa4c022f3d604826c70964e831511e2cda325f0f18ffc9eb085c796c6f37b416b7c7a20d9d0b4e42dcd96349fc095c93ab168c204b6cb29
|
7
|
+
data.tar.gz: 3f6e75ffbce0fcb9f8d95f8d107167cf20e5affaa73b2c9d338546f5c67697f7f4b6d122d869aa0cf55949b75dc8739837efeaa773425a26c11e9bedd3f2c420
|
data/README.md
CHANGED
@@ -40,7 +40,7 @@ response.error
|
|
40
40
|
If the call is successful (the query did not error and a match was found) then
|
41
41
|
|
42
42
|
- `successful?()` will be `true`
|
43
|
-
- `area` will contain an instance of `DefraRuby::Area::Area`. It contains the code, short name and long name of the matching administrative boundary
|
43
|
+
- `area` will contain an instance of `DefraRuby::Area::Area`. It contains the area ID, area name, code, short name and long name of the matching administrative boundary
|
44
44
|
- `error` will be `nil`
|
45
45
|
|
46
46
|
If the call is unsuccessful (the query errored or no match was found) then
|
data/lib/defra_ruby/area/area.rb
CHANGED
@@ -1,18 +1,50 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "nokogiri"
|
4
|
+
|
3
5
|
module DefraRuby
|
4
6
|
module Area
|
5
7
|
class Area
|
6
|
-
attr_reader :code, :long_name, :short_name
|
8
|
+
attr_reader :area_id, :area_name, :code, :long_name, :short_name
|
9
|
+
|
10
|
+
def initialize(type_name, wfs_xml_response)
|
11
|
+
@type_name = type_name
|
12
|
+
@xml = wfs_xml_response
|
7
13
|
|
8
|
-
|
9
|
-
|
10
|
-
@long_name = long_name
|
11
|
-
@short_name = short_name
|
14
|
+
validate
|
15
|
+
parse_xml
|
12
16
|
end
|
13
17
|
|
14
18
|
def matched?
|
15
|
-
"#{@code}#{@long_name}#{@short_name}" != ""
|
19
|
+
"#{@area_name}#{@code}#{@long_name}#{@short_name}" != ""
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def validate
|
25
|
+
validate_type_name
|
26
|
+
validate_xml
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_type_name
|
30
|
+
raise(ArgumentError, "type_name is invalid") unless @type_name && @type_name != ""
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate_xml
|
34
|
+
raise(ArgumentError, "wfs_xml_response is invalid") unless @xml&.is_a?(Nokogiri::XML::Document)
|
35
|
+
end
|
36
|
+
|
37
|
+
def parse_xml
|
38
|
+
@area_id = @xml.xpath(response_xml_path(:area_id)).text.to_i
|
39
|
+
@area_name = @xml.xpath(response_xml_path(:area_name)).text
|
40
|
+
@code = @xml.xpath(response_xml_path(:code)).text
|
41
|
+
@long_name = @xml.xpath(response_xml_path(:long_name)).text
|
42
|
+
@short_name = @xml.xpath(response_xml_path(:short_name)).text
|
43
|
+
end
|
44
|
+
|
45
|
+
# XML path to the value we wish to extract in the WFS query response.
|
46
|
+
def response_xml_path(property)
|
47
|
+
"//wfs:FeatureCollection/gml:featureMember/#{@type_name}/ms:#{property}"
|
16
48
|
end
|
17
49
|
|
18
50
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "nokogiri"
|
4
3
|
require "rest-client"
|
5
4
|
|
6
5
|
module DefraRuby
|
@@ -31,7 +30,7 @@ module DefraRuby
|
|
31
30
|
url: url,
|
32
31
|
timeout: DefraRuby::Area.configuration.timeout
|
33
32
|
)
|
34
|
-
area =
|
33
|
+
area = Area.new(type_name, Nokogiri::XML(response))
|
35
34
|
raise NoMatchError unless area.matched?
|
36
35
|
|
37
36
|
{ area: area }
|
@@ -42,20 +41,6 @@ module DefraRuby
|
|
42
41
|
"#{domain}/spatialdata/#{dataset}/wfs?#{url_params}"
|
43
42
|
end
|
44
43
|
|
45
|
-
def parse_xml(response)
|
46
|
-
xml = Nokogiri::XML(response)
|
47
|
-
Area.new(
|
48
|
-
xml.xpath(response_xml_path(:code)).text,
|
49
|
-
xml.xpath(response_xml_path(:long_name)).text,
|
50
|
-
xml.xpath(response_xml_path(:short_name)).text
|
51
|
-
)
|
52
|
-
end
|
53
|
-
|
54
|
-
# XML path to the value we wish to extract in the WFS query response.
|
55
|
-
def response_xml_path(property)
|
56
|
-
"//wfs:FeatureCollection/gml:featureMember/#{type_name}/ms:#{property}"
|
57
|
-
end
|
58
|
-
|
59
44
|
# Domain where the WFS is hosted
|
60
45
|
def domain
|
61
46
|
"https://environment.data.gov.uk"
|
@@ -130,10 +115,16 @@ module DefraRuby
|
|
130
115
|
# https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType
|
131
116
|
#
|
132
117
|
# In our case the administrative boundary features contain a number of
|
133
|
-
# properties, but we are only interested in
|
134
|
-
#
|
118
|
+
# properties, but we are only interested in
|
119
|
+
#
|
120
|
+
# - +area_id+
|
121
|
+
# - +area_name+
|
122
|
+
# - +code+
|
123
|
+
# - +long_name+
|
124
|
+
# - +short_name+
|
125
|
+
#
|
135
126
|
def property_name
|
136
|
-
"code,long_name,short_name"
|
127
|
+
"area_id,area_name,code,long_name,short_name"
|
137
128
|
end
|
138
129
|
|
139
130
|
# SRS stands for Spatial Reference System. It can also be known as a
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-environment-agency-and-natural-england-public-face-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E,%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=code,long_name,short_name&typeName=ms:Administrative_Boundaries_Environment_Agency_and_Natural_England_Public_Face_Areas
|
5
|
+
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-environment-agency-and-natural-england-public-face-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E,%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=area_id,area_name,code,long_name,short_name&typeName=ms:Administrative_Boundaries_Environment_Agency_and_Natural_England_Public_Face_Areas
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -23,7 +23,7 @@ http_interactions:
|
|
23
23
|
Server:
|
24
24
|
- nginx
|
25
25
|
Date:
|
26
|
-
-
|
26
|
+
- Sun, 11 Aug 2019 15:53:34 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/xml
|
29
29
|
Content-Length:
|
@@ -45,5 +45,5 @@ http_interactions:
|
|
45
45
|
<ogc:ServiceException><![CDATA[Operator 'Intersects' can't parse geometry.]]></ogc:ServiceException>
|
46
46
|
</ogc:ServiceExceptionReport>
|
47
47
|
http_version:
|
48
|
-
recorded_at:
|
48
|
+
recorded_at: Sun, 11 Aug 2019 15:53:34 GMT
|
49
49
|
recorded_with: VCR 4.0.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-environment-agency-and-natural-england-public-face-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E301233.0,221592.0%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=code,long_name,short_name&typeName=ms:Administrative_Boundaries_Environment_Agency_and_Natural_England_Public_Face_Areas
|
5
|
+
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-environment-agency-and-natural-england-public-face-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E301233.0,221592.0%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=area_id,area_name,code,long_name,short_name&typeName=ms:Administrative_Boundaries_Environment_Agency_and_Natural_England_Public_Face_Areas
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -23,7 +23,7 @@ http_interactions:
|
|
23
23
|
Server:
|
24
24
|
- nginx
|
25
25
|
Date:
|
26
|
-
-
|
26
|
+
- Sun, 11 Aug 2019 15:53:33 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/xml
|
29
29
|
Content-Length:
|
@@ -48,5 +48,5 @@ http_interactions:
|
|
48
48
|
</gml:boundedBy>
|
49
49
|
</wfs:FeatureCollection>
|
50
50
|
http_version:
|
51
|
-
recorded_at:
|
51
|
+
recorded_at: Sun, 11 Aug 2019 15:53:34 GMT
|
52
52
|
recorded_with: VCR 4.0.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-environment-agency-and-natural-england-public-face-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E408602.61,257535.31%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=code,long_name,short_name&typeName=ms:Administrative_Boundaries_Environment_Agency_and_Natural_England_Public_Face_Areas
|
5
|
+
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-environment-agency-and-natural-england-public-face-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E408602.61,257535.31%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=area_id,area_name,code,long_name,short_name&typeName=ms:Administrative_Boundaries_Environment_Agency_and_Natural_England_Public_Face_Areas
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -23,7 +23,7 @@ http_interactions:
|
|
23
23
|
Server:
|
24
24
|
- nginx
|
25
25
|
Date:
|
26
|
-
-
|
26
|
+
- Sun, 11 Aug 2019 15:53:27 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/xml
|
29
29
|
Content-Length:
|
@@ -58,5 +58,5 @@ http_interactions:
|
|
58
58
|
</gml:featureMember>
|
59
59
|
</wfs:FeatureCollection>
|
60
60
|
http_version:
|
61
|
-
recorded_at:
|
61
|
+
recorded_at: Sun, 11 Aug 2019 15:53:28 GMT
|
62
62
|
recorded_with: VCR 4.0.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E,%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=code,long_name,short_name&typeName=ms:Administrative_Boundaries_Water_Management_Areas
|
5
|
+
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E,%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=area_id,area_name,code,long_name,short_name&typeName=ms:Administrative_Boundaries_Water_Management_Areas
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -23,7 +23,7 @@ http_interactions:
|
|
23
23
|
Server:
|
24
24
|
- nginx
|
25
25
|
Date:
|
26
|
-
-
|
26
|
+
- Sun, 11 Aug 2019 15:53:35 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/xml
|
29
29
|
Content-Length:
|
@@ -45,5 +45,5 @@ http_interactions:
|
|
45
45
|
<ogc:ServiceException><![CDATA[Operator 'Intersects' can't parse geometry.]]></ogc:ServiceException>
|
46
46
|
</ogc:ServiceExceptionReport>
|
47
47
|
http_version:
|
48
|
-
recorded_at:
|
48
|
+
recorded_at: Sun, 11 Aug 2019 15:53:35 GMT
|
49
49
|
recorded_with: VCR 4.0.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E301233.0,221592.0%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=code,long_name,short_name&typeName=ms:Administrative_Boundaries_Water_Management_Areas
|
5
|
+
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E301233.0,221592.0%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=area_id,area_name,code,long_name,short_name&typeName=ms:Administrative_Boundaries_Water_Management_Areas
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -23,7 +23,7 @@ http_interactions:
|
|
23
23
|
Server:
|
24
24
|
- nginx
|
25
25
|
Date:
|
26
|
-
-
|
26
|
+
- Sun, 11 Aug 2019 15:53:34 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/xml
|
29
29
|
Content-Length:
|
@@ -48,5 +48,5 @@ http_interactions:
|
|
48
48
|
</gml:boundedBy>
|
49
49
|
</wfs:FeatureCollection>
|
50
50
|
http_version:
|
51
|
-
recorded_at:
|
51
|
+
recorded_at: Sun, 11 Aug 2019 15:53:34 GMT
|
52
52
|
recorded_with: VCR 4.0.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E408602.61,257535.31%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=code,long_name,short_name&typeName=ms:Administrative_Boundaries_Water_Management_Areas
|
5
|
+
uri: https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?Filter=(%3CFilter%3E%3CIntersects%3E%3CPropertyName%3ESHAPE%3C/PropertyName%3E%3Cgml:Point%3E%3Cgml:coordinates%3E408602.61,257535.31%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E)&REQUEST=GetFeature&SERVICE=WFS&SRSName=EPSG:27700&VERSION=1.0.0&propertyName=area_id,area_name,code,long_name,short_name&typeName=ms:Administrative_Boundaries_Water_Management_Areas
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -23,11 +23,11 @@ http_interactions:
|
|
23
23
|
Server:
|
24
24
|
- nginx
|
25
25
|
Date:
|
26
|
-
-
|
26
|
+
- Sun, 11 Aug 2019 15:53:41 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/xml
|
29
29
|
Content-Length:
|
30
|
-
- '
|
30
|
+
- '1607'
|
31
31
|
Connection:
|
32
32
|
- keep-alive
|
33
33
|
Cache-Control:
|
@@ -52,11 +52,13 @@ http_interactions:
|
|
52
52
|
<ms:long_name>Staffordshire Warwickshire and West Midlands</ms:long_name>
|
53
53
|
<ms:short_name>Staffs Warks and West Mids</ms:short_name>
|
54
54
|
<ms:code>STWKWM</ms:code>
|
55
|
+
<ms:area_id>29</ms:area_id>
|
56
|
+
<ms:area_name>Central</ms:area_name>
|
55
57
|
<ms:st_area_shape_>6460280400.1</ms:st_area_shape_>
|
56
58
|
<ms:st_perimeter_shape_>759189.708848595</ms:st_perimeter_shape_>
|
57
59
|
</ms:Administrative_Boundaries_Water_Management_Areas>
|
58
60
|
</gml:featureMember>
|
59
61
|
</wfs:FeatureCollection>
|
60
62
|
http_version:
|
61
|
-
recorded_at:
|
63
|
+
recorded_at: Sun, 11 Aug 2019 15:53:41 GMT
|
62
64
|
recorded_with: VCR 4.0.0
|
@@ -1,26 +1,111 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require "nokogiri"
|
4
5
|
|
5
6
|
module DefraRuby
|
6
7
|
module Area
|
7
8
|
RSpec.describe Area do
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
let(:valid_type_name) { "ms:Administrative_Boundaries_Water_Management_Areas" }
|
10
|
+
let(:invalid_type_name) { "////" }
|
11
|
+
let(:no_match_type_name) { "ms:Marvel_Cinematic_Universe_Areas" }
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
let(:valid_xml) { File.open("spec/fixtures/valid.xml") { |f| Nokogiri::XML(f) } }
|
14
|
+
let(:invalid_xml) { "foo" }
|
15
|
+
let(:no_match_xml) { File.open("spec/fixtures/no_match.xml") { |f| Nokogiri::XML(f) } }
|
16
|
+
|
17
|
+
let(:no_match_area) { described_class.new(valid_type_name, no_match_xml) }
|
18
|
+
let(:matched_area) { described_class.new(valid_type_name, valid_xml) }
|
19
|
+
|
20
|
+
describe "#initialize" do
|
21
|
+
context "when arguments are missing" do
|
22
|
+
|
23
|
+
context "and both arguments are missing" do
|
24
|
+
it "raises an ArgumentError" do
|
25
|
+
expect { described_class.new(nil, nil) }.to raise_error(ArgumentError, "type_name is invalid")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "and `type_name` is missing" do
|
30
|
+
it "raises an ArgumentError" do
|
31
|
+
expect { described_class.new(nil, valid_xml) }.to raise_error(ArgumentError, "type_name is invalid")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "and `wfs_xml_response` is missing" do
|
36
|
+
it "raises an ArgumentError" do
|
37
|
+
expect { described_class.new(valid_type_name, nil) }.to raise_error(ArgumentError, "wfs_xml_response is invalid")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "when arguments are invalid" do
|
43
|
+
|
44
|
+
context "and passed an invalid Nokogiri::XML::Documentation instance" do
|
45
|
+
it "raises an error" do
|
46
|
+
expect { described_class.new(valid_type_name, invalid_xml) }.to raise_error(ArgumentError, "wfs_xml_response is invalid")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "and passed an invalid type name" do
|
51
|
+
it "raises an error" do
|
52
|
+
expect { described_class.new(invalid_type_name, valid_xml) }.to raise_error(Nokogiri::XML::XPath::SyntaxError)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when passed valid arguments" do
|
58
|
+
|
59
|
+
context "and type name is recognised and there was a match" do
|
60
|
+
it "populates all an Area's attributes" do
|
61
|
+
subject = described_class.new(valid_type_name, valid_xml)
|
62
|
+
|
63
|
+
expect(subject.area_id).to eq(29)
|
64
|
+
expect(subject.area_name).to eq("Central")
|
65
|
+
expect(subject.code).to eq("STWKWM")
|
66
|
+
expect(subject.short_name).to eq("Staffs Warks and West Mids")
|
67
|
+
expect(subject.long_name).to eq("Staffordshire Warwickshire and West Midlands")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "and type name does not match the xml" do
|
72
|
+
it "does not populate an Area's attributes" do
|
73
|
+
subject = described_class.new(no_match_type_name, valid_xml)
|
74
|
+
|
75
|
+
expect(subject.area_id).to eq(0)
|
76
|
+
expect(subject.area_name).to eq("")
|
77
|
+
expect(subject.code).to eq("")
|
78
|
+
expect(subject.short_name).to eq("")
|
79
|
+
expect(subject.long_name).to eq("")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "and the WFS responded with no match" do
|
84
|
+
it "does not populate an Area's attributes" do
|
85
|
+
subject = described_class.new(valid_type_name, no_match_xml)
|
86
|
+
|
87
|
+
expect(subject.area_id).to eq(0)
|
88
|
+
expect(subject.area_name).to eq("")
|
89
|
+
expect(subject.code).to eq("")
|
90
|
+
expect(subject.short_name).to eq("")
|
91
|
+
expect(subject.long_name).to eq("")
|
92
|
+
end
|
14
93
|
end
|
15
94
|
end
|
16
95
|
end
|
17
96
|
|
18
97
|
describe "#matched?" do
|
19
|
-
context "when
|
20
|
-
|
98
|
+
context "when no match was found" do
|
99
|
+
|
100
|
+
it "returns false" do
|
101
|
+
expect(no_match_area.matched?).to eq(false)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when a match was found" do
|
21
106
|
|
22
107
|
it "returns true" do
|
23
|
-
expect(
|
108
|
+
expect(matched_area.matched?).to eq(true)
|
24
109
|
end
|
25
110
|
end
|
26
111
|
end
|
@@ -6,7 +6,11 @@ module DefraRuby
|
|
6
6
|
module Area
|
7
7
|
RSpec.describe Response do
|
8
8
|
subject(:response) { described_class.new(response_exe) }
|
9
|
-
|
9
|
+
|
10
|
+
let(:valid_type_name) { "ms:Administrative_Boundaries_Water_Management_Areas" }
|
11
|
+
let(:valid_xml) { File.open("spec/fixtures/valid.xml") { |f| Nokogiri::XML(f) } }
|
12
|
+
|
13
|
+
let(:successful) { -> { { area: Area.new(valid_type_name, valid_xml) } } }
|
10
14
|
let(:errored) { -> { raise "Boom!" } }
|
11
15
|
|
12
16
|
describe "#successful?" do
|
@@ -18,7 +22,7 @@ module DefraRuby
|
|
18
22
|
end
|
19
23
|
end
|
20
24
|
|
21
|
-
context "when the response
|
25
|
+
context "when the response doesn't throw an error" do
|
22
26
|
let(:response_exe) { successful }
|
23
27
|
|
24
28
|
it "returns true" do
|
@@ -41,7 +45,7 @@ module DefraRuby
|
|
41
45
|
|
42
46
|
it "returns an area" do
|
43
47
|
expect(response.area).to be_instance_of(Area)
|
44
|
-
expect(response.area.short_name).to eq("
|
48
|
+
expect(response.area.short_name).to eq("Staffs Warks and West Mids")
|
45
49
|
end
|
46
50
|
end
|
47
51
|
end
|
data/spec/examples.txt
CHANGED
@@ -1,24 +1,32 @@
|
|
1
1
|
example_id | status | run_time |
|
2
2
|
-------------------------------------------------------------------------------- | ------ | --------------- |
|
3
|
-
./spec/defra_ruby/area/area_spec.rb[1:1:1:1]
|
4
|
-
./spec/defra_ruby/area/area_spec.rb[1:
|
5
|
-
./spec/defra_ruby/area/
|
6
|
-
./spec/defra_ruby/area/
|
7
|
-
./spec/defra_ruby/area/
|
3
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:1:1:1] | passed | 0.00032 seconds |
|
4
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:1:2:1] | passed | 0.00916 seconds |
|
5
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:1:3:1] | passed | 0.00064 seconds |
|
6
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:2:1:1] | passed | 0.0003 seconds |
|
7
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:2:2:1] | passed | 0.00063 seconds |
|
8
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:3:1:1] | passed | 0.00196 seconds |
|
9
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:3:2:1] | passed | 0.00152 seconds |
|
10
|
+
./spec/defra_ruby/area/area_spec.rb[1:1:3:3:1] | passed | 0.00145 seconds |
|
11
|
+
./spec/defra_ruby/area/area_spec.rb[1:2:1:1] | passed | 0.001 seconds |
|
12
|
+
./spec/defra_ruby/area/area_spec.rb[1:2:2:1] | passed | 0.00297 seconds |
|
13
|
+
./spec/defra_ruby/area/configuration_spec.rb[1:1] | passed | 0.00014 seconds |
|
14
|
+
./spec/defra_ruby/area/response_spec.rb[1:1:1:1] | passed | 0.00019 seconds |
|
15
|
+
./spec/defra_ruby/area/response_spec.rb[1:1:2:1] | passed | 0.00102 seconds |
|
8
16
|
./spec/defra_ruby/area/response_spec.rb[1:2:1:1] | passed | 0.00017 seconds |
|
9
|
-
./spec/defra_ruby/area/response_spec.rb[1:2:2:1] | passed | 0.
|
10
|
-
./spec/defra_ruby/area/response_spec.rb[1:3:1:1] | passed | 0.
|
11
|
-
./spec/defra_ruby/area/response_spec.rb[1:3:2:1] | passed | 0.
|
12
|
-
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:1:1] | passed |
|
13
|
-
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:2:1:1] | passed | 0.
|
14
|
-
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:2:2:1] | passed |
|
15
|
-
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:3:1:1] | passed | 0.
|
16
|
-
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:3:2:1] | passed | 0.
|
17
|
-
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:1:1] | passed |
|
18
|
-
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:2:1:1] | passed | 0.
|
19
|
-
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:2:2:1] | passed | 0.
|
20
|
-
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:3:1:1] | passed | 0.
|
21
|
-
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:3:2:1] | passed | 0.
|
22
|
-
./spec/defra_ruby/area_spec.rb[1:1:1] | passed | 0.
|
23
|
-
./spec/defra_ruby/area_spec.rb[1:2:1:1] | passed | 0.
|
24
|
-
./spec/defra_ruby/area_spec.rb[1:2:2:1] | passed | 0.
|
17
|
+
./spec/defra_ruby/area/response_spec.rb[1:2:2:1] | passed | 0.00153 seconds |
|
18
|
+
./spec/defra_ruby/area/response_spec.rb[1:3:1:1] | passed | 0.00015 seconds |
|
19
|
+
./spec/defra_ruby/area/response_spec.rb[1:3:2:1] | passed | 0.001 seconds |
|
20
|
+
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:1:1] | passed | 7.1 seconds |
|
21
|
+
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:2:1:1] | passed | 0.18395 seconds |
|
22
|
+
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:2:2:1] | passed | 6.23 seconds |
|
23
|
+
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:3:1:1] | passed | 0.03068 seconds |
|
24
|
+
./spec/defra_ruby/area/services/public_face_area_service_spec.rb[1:1:3:2:1] | passed | 0.03346 seconds |
|
25
|
+
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:1:1] | passed | 5.59 seconds |
|
26
|
+
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:2:1:1] | passed | 0.4264 seconds |
|
27
|
+
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:2:2:1] | passed | 0.39163 seconds |
|
28
|
+
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:3:1:1] | passed | 0.03075 seconds |
|
29
|
+
./spec/defra_ruby/area/services/water_management_area_service_spec.rb[1:1:3:2:1] | passed | 0.04335 seconds |
|
30
|
+
./spec/defra_ruby/area_spec.rb[1:1:1] | passed | 0.01054 seconds |
|
31
|
+
./spec/defra_ruby/area_spec.rb[1:2:1:1] | passed | 0.00278 seconds |
|
32
|
+
./spec/defra_ruby/area_spec.rb[1:2:2:1] | passed | 0.00334 seconds |
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<wfs:FeatureCollection xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:ms="https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?service=wfs%26version=1.0.0%26request=DescribeFeatureType">
|
3
|
+
<gml:boundedBy>
|
4
|
+
<gml:Box srsName="EPSG:27700">
|
5
|
+
<gml:coordinates>0,0,0,0</gml:coordinates>
|
6
|
+
</gml:Box>
|
7
|
+
</gml:boundedBy>
|
8
|
+
</wfs:FeatureCollection>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<wfs:FeatureCollection xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:ms="https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs https://environment.data.gov.uk/spatialdata/administrative-boundaries-water-management-areas/wfs?service=wfs%26version=1.0.0%26request=DescribeFeatureType">
|
3
|
+
<gml:boundedBy>
|
4
|
+
<gml:Box srsName="EPSG:27700">
|
5
|
+
<gml:coordinates>0,0,0,0</gml:coordinates>
|
6
|
+
</gml:Box>
|
7
|
+
</gml:boundedBy>
|
8
|
+
<gml:featureMember>
|
9
|
+
<ms:Administrative_Boundaries_Water_Management_Areas fid="Administrative_Boundaries_Water_Management_Areas.15">
|
10
|
+
<ms:OBJECTID>15</ms:OBJECTID>
|
11
|
+
<ms:long_name>Staffordshire Warwickshire and West Midlands</ms:long_name>
|
12
|
+
<ms:short_name>Staffs Warks and West Mids</ms:short_name>
|
13
|
+
<ms:code>STWKWM</ms:code>
|
14
|
+
<ms:area_id>29</ms:area_id>
|
15
|
+
<ms:area_name>Central</ms:area_name>
|
16
|
+
<ms:st_area_shape_>6460280400.1</ms:st_area_shape_>
|
17
|
+
<ms:st_perimeter_shape_>759189.708848595</ms:st_perimeter_shape_>
|
18
|
+
</ms:Administrative_Boundaries_Water_Management_Areas>
|
19
|
+
</gml:featureMember>
|
20
|
+
</wfs:FeatureCollection>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: defra_ruby_area
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Defra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -214,6 +214,8 @@ files:
|
|
214
214
|
- spec/defra_ruby/area/services/water_management_area_service_spec.rb
|
215
215
|
- spec/defra_ruby/area_spec.rb
|
216
216
|
- spec/examples.txt
|
217
|
+
- spec/fixtures/no_match.xml
|
218
|
+
- spec/fixtures/valid.xml
|
217
219
|
- spec/spec_helper.rb
|
218
220
|
- spec/support/defra_ruby_area.rb
|
219
221
|
- spec/support/dotenv.rb
|
@@ -267,3 +269,5 @@ test_files:
|
|
267
269
|
- spec/support/pry.rb
|
268
270
|
- spec/support/dotenv.rb
|
269
271
|
- spec/support/shared_examples/handle_request_errors.rb
|
272
|
+
- spec/fixtures/no_match.xml
|
273
|
+
- spec/fixtures/valid.xml
|