ea-area_lookup 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 548a57db3114a3cc09e50835c6aee5db409a7502
4
+ data.tar.gz: 65e4bf7c47eb3e67437bcf1561233a004358468d
5
+ SHA512:
6
+ metadata.gz: 94d7677a81b2fc5528a460b07c110bf61a56acd7184fec2771a9e93b402ae66a0514491ed8c9da9f2788e607f05a250597151928325d4d74ef3947cdcd1d1ec2
7
+ data.tar.gz: 2b8ac1b2bb67326f6dff100ba092841add29a9582323ae77a816eaa3aaefb65ae70b34d2c0ab7eb568d2ce79a407c0b84d182d1ceddb3dbf41b1ab621c3a0043
data/.codeclimate.yml ADDED
@@ -0,0 +1,22 @@
1
+ ---
2
+ engines:
3
+ duplication:
4
+ enabled: true
5
+ config:
6
+ languages:
7
+ - ruby
8
+ - javascript
9
+ fixme:
10
+ enabled: true
11
+ rubocop:
12
+ enabled: true
13
+ brakeman:
14
+ enabled: false
15
+ rubymotion:
16
+ enabled: true
17
+ ratings:
18
+ paths:
19
+ - "**.module"
20
+ - "**.rb"
21
+ exclude_paths:
22
+ - spec/
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ /.git-hooks/pre_commit/il8n_missing.rb
2
+ /.git-hooks/pre_commit/il8n_unused.rb
3
+ /.git-hooks/pre_commit/rspec_focus_check.rb
4
+ /.overcommit.yml
5
+ /.overcommit_gems.rb
6
+ /.overcommit_gems.rb.lock
7
+ /.rubocop.yml
8
+ /rubocop/gds-ruby-styleguide.yml
9
+ /rubocop/other-lint.yml
10
+ /rubocop/other-rails.yml
11
+ /rubocop/other-style.yml
12
+ /.bundle/
13
+ /.yardoc
14
+ /Gemfile.lock
15
+ /_yardoc/
16
+ /coverage/
17
+ /doc/
18
+ /pkg/
19
+ /spec/reports/
20
+ /tmp/
21
+ .DS_Store
22
+ .byebug_history
23
+ .rspec-local
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.simplecov ADDED
@@ -0,0 +1,8 @@
1
+ SimpleCov.start "rails" do
2
+ # any custom configs like groups and filters can be here at a central place
3
+
4
+ # The enrollment builder controller is just used to create dummy records when
5
+ # working in development as a time saver. We are happy there is no test coverage
6
+ # for it.
7
+ add_filter "lib/ea/area_lookup/version.rb"
8
+ end
data/.travis.yml ADDED
@@ -0,0 +1,25 @@
1
+ language: ruby
2
+ cache: bundler
3
+
4
+ rvm:
5
+ - 2.2.3
6
+
7
+ before_install: gem install bundler -v 1.11.2
8
+
9
+ # Have this option to stop travis-ci building twice. Currently we have travis set to build both
10
+ # PR's and pushes. However this means when we push to a PR we have to wait for Travis to finish
11
+ # 2 builds. If we unticked 'pushes' when the PR was finally merged that would not be built. The
12
+ # brute force approach would be to untick build PR's and just build all pushes. We instead have
13
+ # gone with the approach outlined here http://stackoverflow.com/a/31882307
14
+ branches:
15
+ only:
16
+ - master
17
+
18
+ # This section was added as per https://docs.travis-ci.com/user/code-climate/
19
+ # To protect our codeclimate stats rather than adding the Codeclimate API key for ea-area_lookup
20
+ # in the open we used this guide https://docs.travis-ci.com/user/encryption-keys/ to encryt the
21
+ # value. Essentially install travis gem, then run `travis encrypt <my_code_climate_api_key>`
22
+ addons:
23
+ code_climate:
24
+ repo_token:
25
+ secure: "DsWI1kzx5RIfB/QQysErQTW94FF6v512q3vqFChSXaAViJA6LgU9coBRiLtZ3RyE0YcvPzu0B1q/fqR4sDq4xG1L6VMY2PlF4ZI57AaPa1WFmzT9mCAhYCbpYKXuMySCoS4YvoHrHgwd30M0RYmiRtZY75Olmbd1PsbbZGfnIGwcEchujHb6oQ6WKgEAqq6zvHHf5QM18oSm4ZCFSYijGU7BvxMsLTToFuPnndGomWHCfMDSyBkC2wt5pmfdsjbirrsPPnFbYxCOCxGk77WWw9G+swUZclgUiUn1q2tSFgri27zufbFuGknDWf9HMiMqzgfCO8kut/78CqRjt5BtUm2otJLEhlpmL4t9rqDUKl/hmc+asxfoj04qP1cNRmjZf0QYbT4rFlsFlcNgYNcZcLf66ry9c8WXcpV6qvKukaT9Xyj1/KAVXDqO1EUd1oEBIoKnILW7H4Zhbjhu6lq2ga47Wux0IrMdtHE2RwjdtCxwfhkuUcblfnPpjW8tXeDND0nE/Se45rXZ/YwojZSeqyZCvZbcXMOvggzRQeAgi02sruw33oZU6W/f8VOjC5VrB1KEHm4j0n21dI6ENu0D+tbjBIW0TvI47hAuV/R1v7kHJVbSIcAedtxWt87mSdyQkOukCVSYHMOKJHY6T1EtZlK5V9RHDrHD8KIMeJV/Dx0="
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+ ruby "2.2.3"
3
+
4
+ # Specify your gem's dependencies in gemspec
5
+ gemspec
6
+
7
+ # Required to enable codeclimate's test coverage functionality
8
+ gem "codeclimate-test-reporter", group: :test, require: nil
data/LICENSE ADDED
@@ -0,0 +1,8 @@
1
+ The Open Government Licence (OGL) Version 3
2
+
3
+ Copyright (c) 2014 Environment Agency
4
+
5
+ This source code is licensed under the Open Government Licence v3.0. To view this
6
+ licence, visit www.nationalarchives.gov.uk/doc/open-government-licence/version/3
7
+ or write to the Information Policy Team, The National Archives, Kew, Richmond,
8
+ Surrey, TW9 4DU.
data/README.md ADDED
@@ -0,0 +1,73 @@
1
+ # EA::AreaLookup
2
+
3
+ [![Build Status](https://travis-ci.org/EnvironmentAgency/ea-area_lookup.svg?branch=master)](https://travis-ci.org/EnvironmentAgency/ea-area_lookup)
4
+ [![Code Climate](https://codeclimate.com/github/EnvironmentAgency/ea-area_lookup/badges/gpa.svg)](https://codeclimate.com/github/EnvironmentAgency/ea-area_lookup)
5
+ [![Test Coverage](https://codeclimate.com/github/EnvironmentAgency/ea-area_lookup/badges/coverage.svg)](https://codeclimate.com/github/EnvironmentAgency/ea-area_lookup/coverage)
6
+
7
+ This ruby gem provides a means of looking up the Environment Agency Administrative Area (e.g. 'Wessex')
8
+ for a given easting and northing. It wraps an API designed for this purpose.
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile
13
+
14
+ ```ruby
15
+ gem 'ea-area_lookup'
16
+ ```
17
+
18
+ And then update your dependencies by calling
19
+
20
+ ```bash
21
+ bundle install
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ ### Rails
27
+
28
+ Create an intializer e.g. `config/initializers/area_lookup.rb`
29
+
30
+ ```ruby
31
+ EA::AreaLookup.configure do |config|
32
+ config.administrative_area_api_url = "http://admin-area-api-base-url"
33
+ end
34
+ ```
35
+
36
+ Now you can do the following
37
+
38
+ ```ruby
39
+ coords = EA::AreaLookup::Coordinates.new(easting: 123, northing: 456)
40
+ (or EA::AreaLookup::Coordinates.new(x: 123, y: 456))
41
+ result = EA::AreaLookup.find_by_coordinates(coords)
42
+ p result
43
+ => {:area_id=>"XX", :code=>"WESSEX", :area_name=>"Wessex", :short_name=>"Wessex", :long_name=>"Wessex"}
44
+ ```
45
+
46
+ Note that the `Coordinates` class accepts x and y synonymously with easting and northing.
47
+
48
+ ## Development
49
+
50
+ After checking out the repo, run `bin/setup` to install dependencies.
51
+ Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
52
+
53
+ ## Contributing to this project
54
+
55
+ If you have an idea you'd like to contribute please log an issue.
56
+
57
+ All contributions should be submitted via a pull request.
58
+
59
+ ## License
60
+
61
+ THIS INFORMATION IS LICENSED UNDER THE CONDITIONS OF THE OPEN GOVERNMENT LICENCE found at:
62
+
63
+ http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3
64
+
65
+ The following attribution statement MUST be cited in your products and applications when using this information.
66
+
67
+ >Contains public sector information licensed under the Open Government license v3
68
+
69
+ ### About the license
70
+
71
+ The Open Government Licence (OGL) was developed by the Controller of Her Majesty's Stationery Office (HMSO) to enable information providers in the public sector to license the use and re-use of their information under a common open licence.
72
+
73
+ It is designed to encourage use and re-use of information freely and flexibly, with only a few conditions.
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "ea/area_lookup"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "ea/area_lookup/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ea-area_lookup"
8
+ spec.version = EA::AreaLookup::VERSION
9
+ spec.authors = ["Digital Services Team, EnvironmentAgency"]
10
+ spec.email = ["dst@environment-agency.gov.uk"]
11
+
12
+ spec.summary = "Provides a means of looking-up Environment Agency administrative areas."
13
+ spec.description = "Provides a means of looking-up an Environment Agency administrative area "\
14
+ "using the co-ordinates of any point in England."
15
+ spec.homepage = "https://github.com/EnvironmentAgency"
16
+ spec.license = "The Open Government Licence (OGL) Version 3"
17
+
18
+ spec.required_ruby_version = '>= 2.2'
19
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_dependency "nokogiri", "~> 1.3"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.11"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "byebug"
30
+ spec.add_development_dependency "vcr", "~> 3.0"
31
+ spec.add_development_dependency "webmock", "~> 1.24"
32
+ spec.add_development_dependency "shoulda-matchers", "~> 3.1"
33
+ spec.add_development_dependency "simplecov"
34
+ end
@@ -0,0 +1,12 @@
1
+ require "ea/area_lookup/version"
2
+ require "ea/area_lookup/configuration"
3
+ require "ea/area_lookup/errors"
4
+ require "ea/area_lookup/logger"
5
+ require "ea/area_lookup/coordinates"
6
+ require "ea/area_lookup/finders"
7
+
8
+ module EA
9
+ module AreaLookup
10
+ extend Finders
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ module EA
2
+ module AreaLookup
3
+ class Configuration
4
+ attr_accessor :administrative_area_api_url
5
+ end
6
+
7
+ def self.config
8
+ @config ||= Configuration.new
9
+ end
10
+
11
+ def self.configure
12
+ yield config
13
+ end
14
+
15
+ def self.reset
16
+ @config = Configuration.new
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ module EA
2
+ module AreaLookup
3
+ class Coordinates
4
+ attr_accessor :easting, :northing
5
+ alias x easting
6
+ alias y northing
7
+
8
+ def initialize(easting:, northing:)
9
+ @easting = easting
10
+ @northing = northing
11
+ end
12
+
13
+ def valid?
14
+ easting && northing
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module EA
2
+ module AreaLookup
3
+ class ApiConnectionError < StandardError; end
4
+ class ApiInvalidRequestError < StandardError; end
5
+ class InvalidConfigError < StandardError; end
6
+ end
7
+ end
@@ -0,0 +1,71 @@
1
+ require "nokogiri"
2
+ require "open-uri"
3
+
4
+ module EA
5
+ module AreaLookup
6
+ module Finders
7
+ def find_by_coordinates(coords)
8
+ validate_config!
9
+ return nil unless coords && coords.valid?
10
+ xml = fetch_admin_area_from_api(coords)
11
+ parse_xml(xml)
12
+ end
13
+
14
+ private
15
+
16
+ DEFAULT_API_PARAMS = {
17
+ SERVICE: "WFS",
18
+ INTERFACE: "ENVIRONMENTWFS",
19
+ VERSION: "1.1.0",
20
+ REQUEST: "GetFeature",
21
+ MSVER: 6,
22
+ SRS: "EPSG:27700",
23
+ TYPENAME: "ea-wfs-area_public_face_inspire",
24
+ propertyName: "long_name,short_name,code,area_id,area_name",
25
+ Filter: ""
26
+ }.freeze
27
+
28
+ def api_url
29
+ EA::AreaLookup.config.administrative_area_api_url
30
+ end
31
+
32
+ def validate_config!
33
+ return if api_url
34
+ raise EA::AreaLookup::InvalidConfigError, "Missing administrative_area_api_url"
35
+ end
36
+
37
+ def fetch_admin_area_from_api(coords)
38
+ params = DEFAULT_API_PARAMS.merge(Filter: "(#{filter_xml(coords)})")
39
+ full_url = %(#{api_url}?#{params.map { |k, v| "#{k}=#{v}" }.join('&')})
40
+ open full_url, proxy: ENV["http_proxy"]
41
+ rescue => e
42
+ raise EA::AreaLookup::ApiConnectionError,
43
+ "Failed with error #{e.inspect} trying to GET #{full_url}"
44
+ end
45
+
46
+ def filter_xml(coords)
47
+ "<Filter><Intersects>" \
48
+ "<PropertyName>Geometry</PropertyName>" \
49
+ "<gml:Point><gml:coordinates>#{coords.easting},#{coords.northing}</gml:coordinates></gml:Point>" \
50
+ "</Intersects></Filter>"
51
+ end
52
+
53
+ def parse_xml(response)
54
+ xml = Nokogiri::XML response
55
+ validate_xml(xml)
56
+
57
+ result = %i(area_id code area_name short_name long_name).each_with_object({}) do |path, hash|
58
+ hash[path] = xml.xpath("//gml:featureMember/ms:ea-wfs-area_public_face_inspire/ms:#{path}").text
59
+ end
60
+ result.tap { |h| EA::AreaLookup.logger.debug(h) }
61
+ end
62
+
63
+ def validate_xml(xml)
64
+ if xml.namespaces["xmlns:ows"] && xml.xpath("//ows:Exception").count > 0
65
+ raise EA::AreaLookup::ApiInvalidRequestError,
66
+ "API returned an exception: #{xml.text && xml.text.strip}"
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,21 @@
1
+ # A consumer can hook into logging like so:
2
+ # EA::AreaLookup.logger = Rails.logger
3
+ # or to silence logging unless there are errors for example:
4
+ # EA::AreaLookup.logger.level = Logger::ERROR
5
+ #
6
+ require "logger"
7
+
8
+ module EA
9
+ module AreaLookup
10
+ class << self
11
+ attr_writer :logger
12
+
13
+ def logger
14
+ @logger ||= Logger.new($stdout).tap do |log|
15
+ log.progname = name
16
+ log.level = Logger::DEBUG
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ module EA
2
+ module AreaLookup
3
+ VERSION = "0.1.0".freeze
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ea-area_lookup
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Digital Services Team, EnvironmentAgency
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-05-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.11'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.11'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: vcr
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.24'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.24'
111
+ - !ruby/object:Gem::Dependency
112
+ name: shoulda-matchers
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.1'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Provides a means of looking-up an Environment Agency administrative area
140
+ using the co-ordinates of any point in England.
141
+ email:
142
+ - dst@environment-agency.gov.uk
143
+ executables: []
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".codeclimate.yml"
148
+ - ".gitignore"
149
+ - ".rspec"
150
+ - ".simplecov"
151
+ - ".travis.yml"
152
+ - Gemfile
153
+ - LICENSE
154
+ - README.md
155
+ - Rakefile
156
+ - bin/console
157
+ - bin/setup
158
+ - ea-area_lookup.gemspec
159
+ - lib/ea/area_lookup.rb
160
+ - lib/ea/area_lookup/configuration.rb
161
+ - lib/ea/area_lookup/coordinates.rb
162
+ - lib/ea/area_lookup/errors.rb
163
+ - lib/ea/area_lookup/finders.rb
164
+ - lib/ea/area_lookup/logger.rb
165
+ - lib/ea/area_lookup/version.rb
166
+ homepage: https://github.com/EnvironmentAgency
167
+ licenses:
168
+ - The Open Government Licence (OGL) Version 3
169
+ metadata: {}
170
+ post_install_message:
171
+ rdoc_options: []
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '2.2'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 2.4.8
187
+ signing_key:
188
+ specification_version: 4
189
+ summary: Provides a means of looking-up Environment Agency administrative areas.
190
+ test_files: []