defra_ruby_area 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|