loqate 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,83 +0,0 @@
1
- module Loqate
2
- # A result from the address retrieve service.
3
- class DetailedAddress
4
- # For the first version, this will be a flat structure, exactly as it is defined in Loqate's API.
5
- # But this many attributes is too much for a single object to hold.
6
- #
7
- # @api private
8
- #
9
- ATTRIBUTES = %i[
10
- admin_area_code
11
- admin_area_name
12
- barcode
13
- block
14
- building_name
15
- building_number
16
- city
17
- company
18
- country_iso2
19
- country_iso3
20
- country_iso_number
21
- country_name
22
- data_level
23
- department
24
- district
25
- domestic_id
26
- field1
27
- field2
28
- field3
29
- field4
30
- field5
31
- field6
32
- field7
33
- field8
34
- field9
35
- field10
36
- field11
37
- field12
38
- field13
39
- field14
40
- field15
41
- field16
42
- field17
43
- field18
44
- field19
45
- field20
46
- id
47
- label
48
- language
49
- language_alternatives
50
- line1
51
- line2
52
- line3
53
- line4
54
- line5
55
- neighbourhood
56
- po_box_number
57
- postal_code
58
- province
59
- province_code
60
- province_name
61
- secondary_street
62
- sorting_number1
63
- sorting_number2
64
- street
65
- sub_building
66
- type
67
- ].freeze
68
-
69
- ATTRIBUTES.each do |attribute|
70
- attr_reader attribute
71
- end
72
-
73
- def initialize(options = {})
74
- options.each_pair do |key, value|
75
- instance_variable_set("@#{key}", value) if ATTRIBUTES.include?(key)
76
- end
77
- end
78
-
79
- def ==(other)
80
- other.is_a?(DetailedAddress) && id == other.id
81
- end
82
- end
83
- end
@@ -1,122 +0,0 @@
1
- require 'loqate/client'
2
- require 'loqate/result'
3
- require 'loqate/email_validation'
4
- require 'loqate/batch_email_validation'
5
- require 'loqate/mappers/error_mapper'
6
- require 'loqate/mappers/generic_mapper'
7
-
8
- module Loqate
9
- # Validates the existence of email addresses.
10
- #
11
- class EmailGateway
12
- BATCH_VALIDATE_ENDPOINT = '/EmailValidation/Batch/Validate/v1.20/json3.ws'.freeze
13
- VALIDATE_ENDPOINT = '/EmailValidation/Interactive/Validate/v2.00/json3.ws'.freeze
14
-
15
- include Result::Mixin
16
-
17
- # Creates an email gateway.
18
- #
19
- # @param [Client] client The client responsible for the HTTP interactions
20
- #
21
- def initialize(client)
22
- @client = client
23
- @mapper = Mappers::GenericMapper.new
24
- @error_mapper = Mappers::ErrorMapper.new
25
- end
26
-
27
- # Verifies the existence of an email address.
28
- #
29
- # @param [Hash] options The options to validate an email address.
30
- # @option options [String] :email The email address to verify.
31
- # @option options [Integer] :timeout The time (in milliseconds) you want to give for the validation attempt to be
32
- # executed within. Value must be between 1 and 15000 (values outside of these ranges will fallback to the
33
- # default of 15000).
34
- #
35
- # @example
36
- # email_validation = email_gateway.validate(email: 'spam@example.com')
37
- #
38
- # @return [Result] A result wrapping an email address validation
39
- #
40
- def validate(options)
41
- response = client.get(VALIDATE_ENDPOINT, options)
42
-
43
- response.errors? && build_error_from(response.items.first) || build_email_validation_from(response.items.first)
44
- end
45
-
46
- # Verifies the existence of an email address.
47
- #
48
- # @param [Hash] options The options to validate an email address.
49
- # @option options [String] :email The email address to verify.
50
- # @option options [Integer] :timeout The time (in milliseconds) you want to give for the validation attempt to be
51
- # executed within. Value must be between 1 and 15000 (values outside of these ranges will fallback to the
52
- # default of 15000).
53
- #
54
- # @example
55
- # email_validation = email_gateway.validate!(email: 'spam@example.com')
56
- #
57
- # @raise [Error] If the result is not a success
58
- #
59
- # @return [EmailValidation> An email address validation
60
- #
61
- def validate!(options)
62
- unwrap_result_or_raise { validate(options) }
63
- end
64
-
65
- # Verifies up to 100 emails per batch.
66
- #
67
- # @param [Hash] options The options to validate an email address.
68
- # @option options [Array<String>] :emails The email addresses to verify. Maximum 100 records.
69
- #
70
- # @example
71
- # result = email_gateway.batch_validate(emails: %w[spam@example.com example@example.com])
72
- # result.value # => [#<Loqate::BatchEmailValidation status="Invalid" ...]
73
- #
74
- # @return [Result] A result wrapping a list of email address validations
75
- #
76
- def batch_validate(options)
77
- options[:emails] = options[:emails].join(',') if options[:emails]
78
- response = client.get(BATCH_VALIDATE_ENDPOINT, options)
79
-
80
- response.errors? && build_error_from(response.items.first) || build_email_validations_from(response.items)
81
- end
82
-
83
- # Verifies up to 100 emails per batch.
84
- #
85
- # @param [Hash] options The options to validate an email address.
86
- # @option options [Array<String>] :emails The email addresses to verify. Maximum 100 records.
87
- #
88
- # @example
89
- # email_validations = email_gateway.batch_validate!(emails: %w[spam@example.com example@example.com])
90
- #
91
- # @raise [Error] If the result is not a success
92
- #
93
- # @return [Array<BatchEmailValidation>] A list of email address validations
94
- #
95
- def batch_validate!(options)
96
- unwrap_result_or_raise { batch_validate(options) }
97
- end
98
-
99
- private
100
-
101
- # @api private
102
- attr_reader :client, :mapper, :error_mapper
103
-
104
- # @api private
105
- def build_error_from(item)
106
- error = error_mapper.map_one(item)
107
- Failure(error)
108
- end
109
-
110
- # @api private
111
- def build_email_validation_from(item)
112
- email_validation = mapper.map_one(item, EmailValidation)
113
- Success(email_validation)
114
- end
115
-
116
- # @api private
117
- def build_email_validations_from(item)
118
- email_validation = mapper.map(item, BatchEmailValidation)
119
- Success(email_validation)
120
- end
121
- end
122
- end
@@ -1,81 +0,0 @@
1
- module Loqate
2
- # Result of a email address validation.
3
- class EmailValidation < Dry::Struct::Value
4
- ResponseCode = Types::Strict::String.enum('Valid', 'Valid_CatchAll', 'Invalid', 'Timeout')
5
-
6
- # Valid - The email address has been fully validated (including the account portion)
7
- # Valid_CatchAll - The domain has been validated but the account could not be validated
8
- # Invalid - The email address is invalid and shouldn't be accepted
9
- # Timeout - The validation could not be completed within the timeout specified (try increasing the timeout value)
10
- #
11
- # @return ['Valid', 'Valid_CatchAll', 'Invalid', 'Timeout']
12
- #
13
- attribute :response_code, ResponseCode
14
-
15
- # A textual description of the ResponseCode returned
16
- #
17
- # @return [String]
18
- #
19
- attribute :response_message, Types::Strict::String
20
-
21
- # The email address that verification was attempted on.
22
- #
23
- # @return [String]
24
- #
25
- attribute :email_address, Types::Strict::String
26
-
27
- # The account portion of the email address provided.
28
- #
29
- # @return [String
30
- #
31
- attribute :user_account, Types::Strict::String
32
-
33
- # The domain portion of the email address provided.
34
- #
35
- # @return [String]
36
- #
37
- attribute :domain, Types::Strict::String
38
-
39
- # Whether the email address provided is a disposable mailbox (some companies create temporary mailboxes
40
- # which shouldn't be used for marketing communications).
41
- #
42
- # @return [Boolean]
43
- #
44
- attribute :is_disposable_or_temporary, Types::Strict::Bool
45
-
46
- # True if we recognise the email address against known lists of complainers and/or the email address has been
47
- # used to defraud.
48
- #
49
- # @return [Boolean]
50
- #
51
- attribute :is_complainer_or_fraud_risk, Types::Strict::Bool
52
-
53
- # The duration (in seconds) that the email validation took (maximum timeout enforced at 15 seconds).
54
- # We recommend a high timeout (at least 5 seconds) value as it will minimise the number of "Timeout"
55
- # responses returned.
56
- #
57
- # @return [Float]
58
- #
59
- attribute :duration, Types::Strict::Float
60
-
61
- # Whether the email was fully validated (including the account portion).
62
- def valid?
63
- response_code == 'Valid'
64
- end
65
-
66
- # Whether the domain has been validated but the account hasn't.
67
- def valid_domain?
68
- response_code == 'Valid' || response_code == 'Valid_CatchAll'
69
- end
70
-
71
- # Whether the email is invalid and shouldn't be accepted.
72
- def invalid?
73
- response_code == 'Invalid'
74
- end
75
-
76
- # Whether the validation could not be completed within the timeout specified.
77
- def timeout?
78
- response_code == 'Timeout'
79
- end
80
- end
81
- end
@@ -1,82 +0,0 @@
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
@@ -1,67 +0,0 @@
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