loqate 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fff6b4e7b798fed1a00eb2acfa53ffd3997820f815e1ef780ab46d4e8efbb68b
4
- data.tar.gz: d442998133eaafc167db8a823b87703021bbf72c061237cac7a0dbb659d9a271
3
+ metadata.gz: 1480f53219de60b29e6137f502c3b5c09af4fc0b9f8737a8248d2e71704b391a
4
+ data.tar.gz: 7842ed023231d338d31ede50f77e87e3ddcfcf78131754539bb55e3d9744722f
5
5
  SHA512:
6
- metadata.gz: d57781e89b7743e9c315d97e821cb31d56b0a1b2458cf1d2a640908e9d6e9bd45f8d64f155b63ccd2b704fa1b1b9b71bf700acd7c10ac08afcdf3c1e99e62020
7
- data.tar.gz: 794e2d39014cc609fb708989785c74c551ad895bff4565b2f00cc67351353587b2bf3974c91fec54b53e02a7fb44668529c79058318444e8f5bbd00ba1985edd
6
+ metadata.gz: 8e65821f932b0e0c2c910e0e92c02c4ab68cbde159db6e50ae645931c0497d3b87f0f4b37ada680f56feadb6a1302b3ea6d118fd4fbfa7c828b8484ad68b1aaf
7
+ data.tar.gz: a56f36319aa424b4fb368defd2bb03b76770d66faec41ebe5ac6efe8f9ffaef5edee87595c437a6f85269a7841a083adfc3ff6872d59500996021d0452143bc3
data/.yardstick.yml CHANGED
@@ -41,6 +41,18 @@ rules:
41
41
  - Loqate::Gateway#config
42
42
  - Loqate::Gateway#initialize
43
43
  - Loqate::Gateway#address
44
+ - Loqate::Gateway#phone
45
+ - Loqate::PhoneGateway#initialize
46
+ - Loqate::PhoneNumberValidation#phone_number
47
+ - Loqate::PhoneNumberValidation#request_processed
48
+ - Loqate::PhoneNumberValidation#is_valid
49
+ - Loqate::PhoneNumberValidation#network_code
50
+ - Loqate::PhoneNumberValidation#network_name
51
+ - Loqate::PhoneNumberValidation#network_country
52
+ - Loqate::PhoneNumberValidation#national_format
53
+ - Loqate::PhoneNumberValidation#country_prefix
54
+ - Loqate::PhoneNumberValidation#number_type
55
+ - Loqate::PhoneNumberValidation#valid?
44
56
  - Loqate::Result::Success#success?
45
57
  - Loqate::Result::Success#failure?
46
58
  - Loqate::Result::Failure#success?
@@ -67,6 +79,7 @@ rules:
67
79
  - Loqate::Client#configuration
68
80
  - Loqate::Client#authenticate_params
69
81
  - Loqate::Client#format_params
82
+ - Loqate::Client#headers
70
83
  - Loqate::DetailedAddress#==
71
84
  - Loqate::Util.camelize
72
85
  - Loqate::Util#camelize
@@ -74,6 +87,11 @@ rules:
74
87
  - Loqate::Util#underscore
75
88
  - Loqate::Error#attributes
76
89
  - Loqate::Gateway#client
90
+ - Loqate::PhoneGateway#mapper
91
+ - Loqate::PhoneGateway#error_mapper
92
+ - Loqate::PhoneGateway#client
93
+ - Loqate::PhoneGateway#build_error_from
94
+ - Loqate::PhoneGateway#build_phone_validation_from
77
95
  - Loqate::Result::Failure#error
78
96
  Summary::Presence:
79
97
  enabled: true
@@ -94,10 +112,16 @@ rules:
94
112
  - Loqate::Client#configuration
95
113
  - Loqate::Client#authenticate_params
96
114
  - Loqate::Client#format_params
115
+ - Loqate::Client#headers
97
116
  - Loqate::DetailedAddress#initialize
98
117
  - Loqate::DetailedAddress#==
99
118
  - Loqate::Error#attributes
100
119
  - Loqate::Gateway#client
120
+ - Loqate::PhoneGateway#mapper
121
+ - Loqate::PhoneGateway#error_mapper
122
+ - Loqate::PhoneGateway#client
123
+ - Loqate::PhoneGateway#build_error_from
124
+ - Loqate::PhoneGateway#build_phone_validation_from
101
125
  - Loqate::Result::Failure#error
102
126
  Summary::Length:
103
127
  enabled: false
data/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.4.0] - 2018-11-14
8
+ ### Changed
9
+ - Updated the gem `HTTP` to version `4.0.0`
10
+ - Added the header `Accept: application/json` to every request
11
+ - Simplified the Value Objects with Dry-Struct
12
+
13
+ ## Added
14
+ - A License (MIT)
15
+ - Phone API
16
+
7
17
  ## [0.3.0] - 2018-11-10
8
18
  ### Changed
9
19
  - `address.retrieve` and `address.find` return a single error, not an array with a single item
@@ -35,5 +45,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
35
45
  - Initial core functionality
36
46
  - Codebase maintenance tools
37
47
 
48
+ [0.4.0]: https://github.com/wilsonsilva/loqate/compare/v0.3.0...v0.4.0
38
49
  [0.3.0]: https://github.com/wilsonsilva/loqate/compare/v0.2.0...v0.3.0
39
50
  [0.2.0]: https://github.com/wilsonsilva/loqate/compare/v0.1.0...v0.2.0
data/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Wilson Silva
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -9,6 +9,22 @@
9
9
 
10
10
  Client to address verification, postcode lookup, & data quality services from Loqate.
11
11
 
12
+ ## Table of contents
13
+ - [Installation](#installation)
14
+ - [Usage](#usage)
15
+ - [Getting started](#getting-started)
16
+ - [Bang methods](#bang-methods)
17
+ - [Example of using non-bang method](#example-of-using-non-bang-method)
18
+ - [Example of using bang method](#example-of-using-bang-method)
19
+ - [Address API](#address-api)
20
+ - [Finding addresses](#finding-addresses)
21
+ - [Retrieving the details of an address](#retrieving-the-details-of-an-address)
22
+ - [Phone API](#phone-api)
23
+ - [Validating a phone number](#validating-a-phone-number)
24
+ - [Development](#development)
25
+ - [Contributing](#contributing)
26
+ - [License](#license)
27
+
12
28
  ## Installation
13
29
 
14
30
  Add this line to your application's Gemfile:
@@ -38,7 +54,7 @@ To get started, initialize an API gateway with [your API key](https://account.lo
38
54
  gateway = Loqate::Gateway.new(api_key: '<YOUR_API_KEY>')
39
55
  ```
40
56
 
41
- ### Bang Methods
57
+ ### Bang methods
42
58
 
43
59
  Most methods have a bang and a non-bang version (e.g. `gateway.address.find` and `gateway.address.find!`).
44
60
  The non-bang version will either return a `Loqate::Success` or an `Loqate::Failure`. The bang version will
@@ -88,21 +104,42 @@ selection.
88
104
  #### Finding addresses
89
105
 
90
106
  ```ruby
91
- result = gateway.address.find(text: 'EC1Y 8AF', country: 'GB', limit: 5)
107
+ addresses = gateway.address.find!(text: 'EC1Y 8AF', country: 'GB', limit: 5)
92
108
 
93
- addresses = result.value
94
109
  addresses.first.id # => 'GB|RM|B|8144611'
95
110
  ```
96
111
 
97
112
  #### Retrieving the details of an address
98
113
 
99
114
  ```ruby
100
- result = gateway.address.retrieve(id: 'GB|RM|B|8144611')
115
+ address = gateway.address.retrieve!(id: 'GB|RM|B|8144611')
116
+
117
+ address.city # 'London'
118
+ address.line1 # '148 Warner Road'
119
+ address.postal_code # 'E17 7EA'
120
+ ```
121
+
122
+ ### Phone API
101
123
 
102
- address = result.value
103
- address.city # 'London'
104
- address.line1 # '148 Warner Road'
105
- address.postal_code # 'E17 7EA'
124
+ The Phone API consists of a single API request:
125
+ [Validate](https://www.loqate.com/resources/support/apis/PhoneNumberValidation/Interactive/Validate/2.2/) which starts
126
+ a new phone number validation request.
127
+
128
+ #### Validating a phone number
129
+
130
+ ```ruby
131
+ phone_validation = gateway.phone.validate!(phone: '+447440029210', country: 'GB')
132
+
133
+ phone_validation.phone_number # => '+447440029210'
134
+ phone_validation.request_processed # => true
135
+ phone_validation.is_valid # => 'Yes' -> This is how Loqate defines validity
136
+ phone_validation.valid? # => true
137
+ phone_validation.network_code # => '26'
138
+ phone_validation.network_name # => 'Telefonica UK'
139
+ phone_validation.network_country # => 'GB'
140
+ phone_validation.national_format # => '07440 029210'
141
+ phone_validation.country_prefix # => 44
142
+ phone_validation.number_type # => 'Mobile'
106
143
  ```
107
144
 
108
145
  ## Development
@@ -131,3 +168,7 @@ rake yardstick_measure # Measure docs in lib/**/*.rb with yardstick
131
168
  ## Contributing
132
169
 
133
170
  Bug reports and pull requests are welcome on GitHub at https://github.com/wilsonsilva/loqate.
171
+
172
+ ## License
173
+
174
+ See [LICENSE](https://github.com/wilsonsilva/loqate/blob/master/LICENSE).
data/ROADMAP.md CHANGED
@@ -7,7 +7,7 @@
7
7
  - [ ] Logging
8
8
  - [x] Domain error handling
9
9
  - [x] Configuration
10
- - [ ] Unwrap request results
10
+ - [x] Unwrap request results
11
11
  - [ ] Validate request parameters
12
12
  - [ ] API/Service versioning
13
13
  - [ ] Integration with RSpec
@@ -18,7 +18,7 @@
18
18
  - [ ] Geocode
19
19
  - [ ] Data Cleanse
20
20
  - [ ] Email Verification
21
- - [ ] Phone Verification
21
+ - [x] Phone Verification
22
22
  - [ ] Bank Verification
23
23
 
24
24
  ## Formats
data/lib/loqate.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'loqate/types'
3
4
  require 'loqate/version'
4
5
  require 'loqate/gateway'
5
6
 
@@ -1,71 +1,35 @@
1
1
  module Loqate
2
2
  # A result from the address find service.
3
- class Address
3
+ class Address < Dry::Struct::Value
4
4
  # An address ID or a container ID for further results
5
5
  #
6
6
  # @return [String]
7
7
  #
8
- attr_reader :id
8
+ attribute :id, Types::Strict::String
9
9
 
10
10
  # If the Type is 'Address' then the ID can be passed to the Retrieve service.
11
11
  # Any other ID should be passed as the Container to a further Find request to get more results.
12
12
  #
13
13
  # @return [String]
14
14
  #
15
- attr_reader :type
15
+ attribute :type, Types::Strict::String
16
16
 
17
17
  # The name of the result
18
18
  #
19
19
  # @return [String]
20
20
  #
21
- attr_reader :text
21
+ attribute :text, Types::Strict::String
22
22
 
23
23
  # A list of number ranges identifying the matched characters in the Text and Description
24
24
  #
25
25
  # @return [String]
26
26
  #
27
- attr_reader :highlight
27
+ attribute :highlight, Types::Strict::String
28
28
 
29
29
  # Descriptive information about the result
30
30
  #
31
31
  # @return [String]
32
32
  #
33
- attr_reader :description
34
-
35
- # Creates an address
36
- #
37
- # @param [String] id An address ID or a container ID for further results
38
- # @param [String] type If the Type is 'Address' then the ID can be passed to the Retrieve service.
39
- # Any other ID should be passed as the Container to a further Find request to get more results.
40
- # @param [String] text The name of the result
41
- # @param [String] highlight A list of number ranges identifying the matched characters in the Text and Description
42
- # @param [String] description Descriptive information about the result
43
- #
44
- def initialize(id:, type:, text:, highlight:, description:)
45
- @id = id
46
- @type = type
47
- @text = text
48
- @highlight = highlight
49
- @description = description
50
- end
51
-
52
- # @!visibility private
53
- # @api private
54
- def ==(other)
55
- attributes == other.send(:attributes)
56
- end
57
-
58
- private
59
-
60
- # @api private
61
- def attributes
62
- @attributes ||= {
63
- id: id,
64
- type: type,
65
- text: text,
66
- highlight: highlight,
67
- description: description
68
- }
69
- end
33
+ attribute :description, Types::Strict::String
70
34
  end
71
35
  end
data/lib/loqate/client.rb CHANGED
@@ -36,7 +36,7 @@ module Loqate
36
36
  authenticated_params = authenticate_params(params)
37
37
  formatted_params = format_params(authenticated_params)
38
38
 
39
- response = HTTP.get(configuration.host + endpoint, params: formatted_params)
39
+ response = HTTP.headers(headers).get(configuration.host + endpoint, params: formatted_params)
40
40
 
41
41
  body = JSON.parse(response.body)
42
42
  APIResult.new(body.fetch('Items'))
@@ -56,5 +56,10 @@ module Loqate
56
56
  def format_params(params)
57
57
  params.transform_keys { |key| Util.camelize(key) }
58
58
  end
59
+
60
+ # @api private
61
+ def headers
62
+ { accept: 'application/json' }
63
+ end
59
64
  end
60
65
  end
@@ -1,4 +1,5 @@
1
1
  require 'loqate/address_gateway'
2
+ require 'loqate/phone_gateway'
2
3
 
3
4
  module Loqate
4
5
  # Acts as a single point of entry for a defined group of API's.
@@ -31,6 +32,14 @@ module Loqate
31
32
  @address ||= AddressGateway.new(client)
32
33
  end
33
34
 
35
+ # Gateway to the Phone number API.
36
+ #
37
+ # @return [PhoneGateway] An instance of a phone gateway.
38
+ #
39
+ def phone
40
+ @phone ||= PhoneGateway.new(client)
41
+ end
42
+
34
43
  private
35
44
 
36
45
  # @api private
@@ -0,0 +1,82 @@
1
+ require 'loqate/client'
2
+ require 'loqate/result'
3
+ require 'loqate/mappers/error_mapper'
4
+ require 'loqate/mappers/generic_mapper'
5
+ require 'loqate/phone_number_validation'
6
+
7
+ module Loqate
8
+ # Starts a new phone number validation request.
9
+ #
10
+ class PhoneGateway
11
+ VALIDATE_ENDPOINT = '/PhoneNumberValidation/Interactive/Validate/v2.20/json3.ws'.freeze
12
+
13
+ include Result::Mixin
14
+
15
+ # Creates a phone gateway
16
+ #
17
+ # @param [Client] client The client responsible for the HTTP interactions
18
+ #
19
+ def initialize(client)
20
+ @client = client
21
+ @mapper = Mappers::GenericMapper.new
22
+ @error_mapper = Mappers::ErrorMapper.new
23
+ end
24
+
25
+ # Validates phone numbers.
26
+ #
27
+ # @param [Hash] options The options to validate a phone number.
28
+ # @option options [String] :phone The mobile/cell phone number to verify. This must be in international format
29
+ # (+447528471411 or 447528471411) if no country code is provided or national format with a Country parameter
30
+ # provided (07528471411 and GB as the Country parameter).
31
+ # @option options [String] :country The ISO2 country code of the number you are trying to validate
32
+ # (if provided in national format).
33
+ #
34
+ # @example
35
+ # phone_validation = phone_gateway.validate(phone: '447440019210', country: 'GB')
36
+ #
37
+ # @return [Result] A result wrapping a phone number validation
38
+ #
39
+ def validate(options)
40
+ response = client.get(VALIDATE_ENDPOINT, options)
41
+
42
+ response.errors? && build_error_from(response.items.first) || build_phone_validation_from(response.items.first)
43
+ end
44
+
45
+ # Validates phone numbers.
46
+ #
47
+ # @param [Hash] options The options to validate a phone number.
48
+ # @option options [String] :phone The mobile/cell phone number to verify. This must be in international format
49
+ # (+447528471411 or 447528471411) if no country code is provided or national format with a Country parameter
50
+ # provided (07528471411 and GB as the Country parameter).
51
+ # @option options [String] :country The ISO2 country code of the number you are trying to validate
52
+ # (if provided in national format).
53
+ #
54
+ # @example
55
+ # phone_validation = phone_gateway.validate(phone: '447440019210', country: 'GB')
56
+ #
57
+ # @raise [Error] If the result is not a success
58
+ #
59
+ # @return [PhoneNumberValidation> A phone number validation
60
+ #
61
+ def validate!(options)
62
+ unwrap_result_or_raise { validate(options) }
63
+ end
64
+
65
+ private
66
+
67
+ # @api private
68
+ attr_reader :client, :mapper, :error_mapper
69
+
70
+ # @api private
71
+ def build_error_from(item)
72
+ error = error_mapper.map_one(item)
73
+ Failure(error)
74
+ end
75
+
76
+ # @api private
77
+ def build_phone_validation_from(item)
78
+ phone_number_validation = mapper.map_one(item, PhoneNumberValidation)
79
+ Success(phone_number_validation)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,67 @@
1
+ module Loqate
2
+ # Result of a phone number validation.
3
+ class PhoneNumberValidation < Dry::Struct::Value
4
+ IsValid = Types::Strict::String.enum('Yes', 'No', 'Unknown')
5
+ NumberType = Types::Strict::String.enum('Mobile', 'Landline', 'Voip', 'Unknown')
6
+
7
+ # The recipient phone number in international format.
8
+ #
9
+ # @return [String]
10
+ #
11
+ attribute :phone_number, Types::Strict::String
12
+
13
+ # Returns true if we managed to process the request on the network or false if the validation
14
+ # attempt was unsuccessful.
15
+ #
16
+ # @return [Boolean]
17
+ #
18
+ attribute :request_processed, Types::Strict::Bool
19
+
20
+ # Whether the number is valid or not (Unknown returned if validation wasn't possible).
21
+ #
22
+ # @return [String]
23
+ #
24
+ attribute :is_valid, IsValid
25
+
26
+ # The current operator serving the supplied number.
27
+ #
28
+ # @return [String]
29
+ #
30
+ attribute :network_code, Types::Strict::String
31
+
32
+ # The name of the current operator serving the supplied number.
33
+ #
34
+ # @return [String]
35
+ #
36
+ attribute :network_name, Types::Strict::String
37
+
38
+ # The country code of the operator.
39
+ #
40
+ # @return [String]
41
+ #
42
+ attribute :network_country, Types::Strict::String
43
+
44
+ # The domestic network format (useful for dialling from within the same country).
45
+ #
46
+ # @return [String]
47
+ #
48
+ attribute :national_format, Types::Strict::String
49
+
50
+ # The country prefix that must be prepended to the number when dialling internationally.
51
+ #
52
+ # @return [Integer]
53
+ #
54
+ attribute :country_prefix, Types::Coercible::Integer
55
+
56
+ # The type of number that was detected in the request (Mobile, Landline, VOIP or Unknown).
57
+ #
58
+ # @return [String]
59
+ #
60
+ attribute :number_type, NumberType
61
+
62
+ # Whether the validation was successful or not.
63
+ def valid?
64
+ is_valid == 'Yes'
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,9 @@
1
+ require 'dry/types'
2
+ require 'dry/struct'
3
+
4
+ module Loqate
5
+ # Dry-types container.
6
+ module Types
7
+ include Dry::Types.module
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Loqate
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
data/loqate.gemspec CHANGED
@@ -24,7 +24,8 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ['lib']
26
26
 
27
- spec.add_runtime_dependency 'http', '~> 3.3.0'
27
+ spec.add_runtime_dependency 'dry-struct', '~> 0.6.0'
28
+ spec.add_runtime_dependency 'http', '~> 4.0.0'
28
29
 
29
30
  spec.add_development_dependency 'bundler', '~> 1.16'
30
31
  spec.add_development_dependency 'bundler-audit', '~> 0.6'
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loqate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wilson Silva
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-10 00:00:00.000000000 Z
11
+ date: 2018-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-struct
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.6.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.6.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: http
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: 3.3.0
33
+ version: 4.0.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: 3.3.0
40
+ version: 4.0.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -323,6 +337,7 @@ files:
323
337
  - CHANGELOG.md
324
338
  - Gemfile
325
339
  - Guardfile
340
+ - LICENSE.md
326
341
  - README.md
327
342
  - ROADMAP.md
328
343
  - Rakefile
@@ -339,7 +354,10 @@ files:
339
354
  - lib/loqate/gateway.rb
340
355
  - lib/loqate/mappers/error_mapper.rb
341
356
  - lib/loqate/mappers/generic_mapper.rb
357
+ - lib/loqate/phone_gateway.rb
358
+ - lib/loqate/phone_number_validation.rb
342
359
  - lib/loqate/result.rb
360
+ - lib/loqate/types.rb
343
361
  - lib/loqate/util.rb
344
362
  - lib/loqate/version.rb
345
363
  - loqate.gemspec