emailable 4.1.0 → 4.2.1
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/.github/dependabot.yml +12 -0
- data/.github/workflows/ci.yml +42 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +2 -0
- data/.ruby-version +1 -1
- data/Gemfile +1 -1
- data/README.md +17 -14
- data/emailable.gemspec +5 -5
- data/lib/emailable/batch.rb +1 -1
- data/lib/emailable/client.rb +16 -10
- data/lib/emailable/email_validator.rb +8 -3
- data/lib/emailable/resources/api_resource.rb +2 -2
- data/lib/emailable/resources/verification.rb +4 -4
- data/lib/emailable/version.rb +1 -1
- data/lib/emailable.rb +3 -3
- data/test/authentication_test.rb +33 -0
- data/test/email_validator_test.rb +60 -54
- data/test/emailable/batch_test.rb +0 -2
- data/test/emailable/resources/api_resource_test.rb +1 -1
- data/test/emailable_test.rb +35 -25
- data/test/test_helper.rb +1 -1
- metadata +22 -22
- data/.travis.yml +0 -7
- data/Gemfile.lock +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40abf56d12f29b5dbabe69dd9d31f6ec584678d87a077fe3ffb738cf1ee29179
|
4
|
+
data.tar.gz: 351bde8b6f16f1f9c6cbba03f44c9b4c54aa84a6bd0bfbee8a6a83908d4191c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f65147217f29eaaa10aa7c6c5884095f801954bc2de35243a63d1265ae0cb939d7d85e0ee66995a65c209be0e44d55dbc83583fa0fdc3898c894d1010f03e8e3
|
7
|
+
data.tar.gz: b609bcf9d5960e3546b126e7aec4c1b878ee5488957df8b20d2a822a8f2a89608f38a19397ba98e95be2c379cdc59b62c684d2f0cf94e0f46ce91b0757bd9a23
|
@@ -0,0 +1,42 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ 'master' ]
|
6
|
+
pull_request:
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
tests:
|
10
|
+
name: Tests
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2', '3.3', '3.4']
|
15
|
+
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v4
|
18
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
19
|
+
uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
bundler-cache: true
|
23
|
+
|
24
|
+
- name: Run tests
|
25
|
+
run: bundle exec rake
|
26
|
+
|
27
|
+
linters:
|
28
|
+
name: Linters
|
29
|
+
runs-on: ubuntu-latest
|
30
|
+
|
31
|
+
steps:
|
32
|
+
- name: Checkout code
|
33
|
+
uses: actions/checkout@v4
|
34
|
+
|
35
|
+
- name: Set up Ruby
|
36
|
+
uses: ruby/setup-ruby@v1
|
37
|
+
with:
|
38
|
+
bundler-cache: true
|
39
|
+
|
40
|
+
- name: RuboCop
|
41
|
+
run: bundle exec rubocop --parallel
|
42
|
+
if: always()
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.4.4
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Emailable Ruby Library
|
2
2
|
|
3
3
|
[](https://rubygems.org/gems/emailable)
|
4
|
-
|
4
|
+

|
5
5
|
[](https://codeclimate.com/github/emailable/emailable-ruby/maintainability)
|
6
6
|
|
7
7
|
This is the official ruby wrapper for the Emailable API.
|
@@ -30,17 +30,26 @@ Or install it yourself as:
|
|
30
30
|
|
31
31
|
## Usage
|
32
32
|
|
33
|
-
|
34
|
-
available in your [Emailable Dashboard](https://app.emailable.com/api). Set
|
35
|
-
`Emailable.api_key` to its value:
|
33
|
+
### Authentication
|
36
34
|
|
37
|
-
|
35
|
+
The Emailable API requires either an API key or an access token for
|
36
|
+
authentication. API keys can be created and managed in the
|
37
|
+
[Emailable Dashboard](https://app.emailable.com/api).
|
38
|
+
|
39
|
+
An API key can be set globally for the Emailable client:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
Emailable.api_key = 'your_api_key'
|
43
|
+
```
|
44
|
+
|
45
|
+
Or, you can specify an `api_key` or an `access_token` with each request:
|
38
46
|
|
39
47
|
```ruby
|
40
|
-
|
48
|
+
# set api_key at request time
|
49
|
+
Emailable.verify(api_key: 'your_api_key')
|
41
50
|
|
42
|
-
# set
|
43
|
-
Emailable.
|
51
|
+
# set access_token at request time
|
52
|
+
Emailable.verify(access_token: 'your_access_token')
|
44
53
|
```
|
45
54
|
|
46
55
|
### Verification
|
@@ -145,12 +154,6 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
145
154
|
`rake test` to run the tests. You can also run `bin/console` for an interactive
|
146
155
|
prompt that will allow you to experiment.
|
147
156
|
|
148
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To
|
149
|
-
release a new version, update the version number in `version.rb`, and then run
|
150
|
-
`bundle exec rake release`, which will create a git tag for the version, push
|
151
|
-
git commits and tags, and push the `.gem` file to
|
152
|
-
[rubygems.org](https://rubygems.org).
|
153
|
-
|
154
157
|
## Contributing
|
155
158
|
|
156
159
|
Bug reports and pull requests are welcome on GitHub at
|
data/emailable.gemspec
CHANGED
@@ -15,9 +15,9 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.email = 'support@emailable.com'
|
16
16
|
s.license = 'MIT'
|
17
17
|
s.metadata = {
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
'bug_tracker_uri' => 'https://github.com/emailable/emailable-ruby/issues',
|
19
|
+
'documentation_uri' => 'https://emailable.com/docs/api/?ruby',
|
20
|
+
'source_code_uri' => 'https://github.com/emailable/emailable-ruby'
|
21
21
|
}
|
22
22
|
|
23
23
|
s.files = `git ls-files`.split("\n")
|
@@ -29,9 +29,9 @@ Gem::Specification.new do |s|
|
|
29
29
|
|
30
30
|
s.add_development_dependency 'bundler'
|
31
31
|
s.add_development_dependency 'rake', '~> 13.0'
|
32
|
-
s.add_development_dependency '
|
33
|
-
s.add_development_dependency 'awesome_print'
|
32
|
+
s.add_development_dependency 'amazing_print'
|
34
33
|
s.add_development_dependency 'minitest', '~> 5.0'
|
35
34
|
s.add_development_dependency 'minitest-reporters'
|
36
35
|
s.add_development_dependency 'activemodel'
|
36
|
+
s.add_development_dependency 'rubocop-cache-ventures'
|
37
37
|
end
|
data/lib/emailable/batch.rb
CHANGED
data/lib/emailable/client.rb
CHANGED
@@ -17,25 +17,31 @@ module Emailable
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def request(method, endpoint, params = {})
|
20
|
-
|
21
|
-
|
20
|
+
api_key = params.delete(:api_key)
|
21
|
+
access_token = params.delete(:access_token)
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
uri = URI("#{@base_url}/#{endpoint}")
|
24
|
+
headers = {
|
25
|
+
'Authorization': "Bearer #{api_key || access_token || Emailable.api_key}",
|
26
|
+
'Content-Type': 'application/json'
|
27
|
+
}
|
25
28
|
|
29
|
+
begin
|
30
|
+
tries ||= 3
|
26
31
|
http_response =
|
27
32
|
if method == :get
|
28
|
-
uri.query = URI.encode_www_form(params)
|
29
|
-
|
33
|
+
uri.query = URI.encode_www_form(params) unless params.empty?
|
34
|
+
request = Net::HTTP::Get.new(uri, headers)
|
35
|
+
@connection.request(request)
|
30
36
|
elsif method == :post
|
31
|
-
request = Net::HTTP::Post.new(uri,
|
37
|
+
request = Net::HTTP::Post.new(uri, headers)
|
32
38
|
request.body = params.to_json
|
33
39
|
@connection.request(request)
|
34
40
|
end
|
35
41
|
|
36
42
|
response = Response.new(http_response)
|
37
43
|
rescue => e
|
38
|
-
retry if (tries -= 1) > 0 &&
|
44
|
+
retry if (tries -= 1) > 0 && should_retry?(e, tries)
|
39
45
|
|
40
46
|
raise e
|
41
47
|
end
|
@@ -65,12 +71,12 @@ module Emailable
|
|
65
71
|
if connection.respond_to?(:write_timeout=)
|
66
72
|
connection.write_timeout = Emailable.write_timeout
|
67
73
|
end
|
68
|
-
connection.use_ssl = uri.scheme ==
|
74
|
+
connection.use_ssl = uri.scheme == 'https'
|
69
75
|
|
70
76
|
connection
|
71
77
|
end
|
72
78
|
|
73
|
-
def
|
79
|
+
def should_retry?(error, num_retries)
|
74
80
|
return false if num_retries >= Emailable.max_network_retries
|
75
81
|
|
76
82
|
case error
|
@@ -18,7 +18,7 @@ class EmailValidator < ActiveModel::EachValidator
|
|
18
18
|
states = options.fetch(:states, %i(deliverable risky unknown))
|
19
19
|
allowed_states = %i[deliverable undeliverable risky unknown]
|
20
20
|
unless (states - allowed_states).empty?
|
21
|
-
raise ArgumentError,
|
21
|
+
raise ArgumentError, ':states must be an array of symbols containing '\
|
22
22
|
"any or all of :#{allowed_states.join(', :')}"
|
23
23
|
end
|
24
24
|
|
@@ -29,7 +29,7 @@ class EmailValidator < ActiveModel::EachValidator
|
|
29
29
|
|
30
30
|
timeout = options.fetch(:timeout, 3)
|
31
31
|
unless timeout.is_a?(Integer) && timeout > 1
|
32
|
-
raise ArgumentError,
|
32
|
+
raise ArgumentError, ':timeout must be an Integer greater than 1'
|
33
33
|
end
|
34
34
|
|
35
35
|
return if record.errors[attribute].present?
|
@@ -51,7 +51,12 @@ class EmailValidator < ActiveModel::EachValidator
|
|
51
51
|
error ||= :disposable if ev.disposable? && !disposable
|
52
52
|
error ||= :accept_all if ev.accept_all? && !accept_all
|
53
53
|
|
54
|
-
|
54
|
+
if error
|
55
|
+
error_options = options.except(
|
56
|
+
:smtp, :states, :free, :role, :disposable, :accept_all, :timeout
|
57
|
+
)
|
58
|
+
record.errors.add(attribute, error, **error_options)
|
59
|
+
end
|
55
60
|
rescue Emailable::Error
|
56
61
|
# silence errors
|
57
62
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Emailable
|
2
2
|
class Verification < APIResource
|
3
3
|
attr_accessor :accept_all, :did_you_mean, :disposable, :domain, :duration,
|
4
|
-
:email, :free, :
|
5
|
-
:
|
6
|
-
:full_name, :gender
|
4
|
+
:email, :free, :mailbox_full, :mx_record, :no_reply, :reason,
|
5
|
+
:role, :score, :smtp_provider, :state, :tag, :user,
|
6
|
+
:first_name, :last_name, :full_name, :gender
|
7
7
|
|
8
|
-
%w(accept_all disposable free role).each do |method|
|
8
|
+
%w(accept_all disposable free role mailbox_full no_reply).each do |method|
|
9
9
|
define_method("#{method}?") do
|
10
10
|
instance_variable_get "@#{method}"
|
11
11
|
end
|
data/lib/emailable/version.rb
CHANGED
data/lib/emailable.rb
CHANGED
@@ -32,7 +32,7 @@ module Emailable
|
|
32
32
|
parameters[:email] = email
|
33
33
|
|
34
34
|
client = Emailable::Client.new
|
35
|
-
response = client.request(:
|
35
|
+
response = client.request(:post, 'verify', parameters)
|
36
36
|
|
37
37
|
if response.status == 249
|
38
38
|
raise Emailable::TimeoutError.new(response.body)
|
@@ -41,9 +41,9 @@ module Emailable
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def account
|
44
|
+
def account(parameters = {})
|
45
45
|
client = Emailable::Client.new
|
46
|
-
response = client.request(:get, 'account')
|
46
|
+
response = client.request(:get, 'account', parameters)
|
47
47
|
Account.new(response.body)
|
48
48
|
end
|
49
49
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class AuthenticationTest < Minitest::Test
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@api_key = 'test_7aff7fc0142c65f86a00'
|
7
|
+
@email = 'jarrett@emailable.com'
|
8
|
+
@emails = ['jarrett@emailable.com', 'support@emailable.com']
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_global_api_key_authentication
|
12
|
+
Emailable.api_key = @api_key
|
13
|
+
|
14
|
+
refute_nil Emailable.verify(@email).domain
|
15
|
+
refute_nil Emailable.account.owner_email
|
16
|
+
refute_nil bid = Emailable::Batch.new(@emails).verify
|
17
|
+
refute_nil Emailable::Batch.new(bid).status.id
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_request_time_api_key_authentication
|
21
|
+
refute_nil Emailable.verify(@email, api_key: @api_key).domain
|
22
|
+
refute_nil Emailable.account(api_key: @api_key).owner_email
|
23
|
+
refute_nil bid = Emailable::Batch.new(@emails).verify(api_key: @api_key)
|
24
|
+
refute_nil Emailable::Batch.new(bid).status(api_key: @api_key).id
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_request_time_authentication_takes_priority_over_global
|
28
|
+
Emailable.api_key = 'invalid_api_key'
|
29
|
+
|
30
|
+
refute_nil Emailable.verify(@email, api_key: @api_key).domain
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -1,86 +1,92 @@
|
|
1
|
-
require 'active_model'
|
2
1
|
require 'test_helper'
|
3
2
|
|
4
3
|
class EmailValidatorTest < Minitest::Test
|
5
4
|
|
6
|
-
def user_class(
|
7
|
-
smtp: true, states: %i[deliverable risky unknown], free: true, role: true,
|
8
|
-
accept_all: true, disposable: true, timeout: 3
|
9
|
-
)
|
10
|
-
Class.new do
|
11
|
-
include ActiveModel::Model
|
12
|
-
attr_accessor :email, :email_verification_result
|
13
|
-
|
14
|
-
validates :email, presence: true, email: {
|
15
|
-
smtp: smtp, states: states,
|
16
|
-
free: free, role: role, disposable: disposable, accept_all: accept_all,
|
17
|
-
timeout: timeout
|
18
|
-
}
|
19
|
-
|
20
|
-
def self.name
|
21
|
-
'TestClass'
|
22
|
-
end
|
23
|
-
|
24
|
-
# stub changes to always be true
|
25
|
-
def changes
|
26
|
-
{ email: true }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
5
|
def setup
|
32
6
|
Emailable.api_key = 'test_7aff7fc0142c65f86a00'
|
33
|
-
sleep(0.25)
|
34
7
|
end
|
35
8
|
|
36
9
|
def test_valid
|
37
|
-
|
10
|
+
valid_user = user_class.new(email: 'deliverable@example.com')
|
38
11
|
|
39
|
-
assert
|
40
|
-
assert
|
12
|
+
assert valid_user.valid?
|
13
|
+
assert valid_user.errors.empty?
|
41
14
|
end
|
42
15
|
|
43
16
|
def test_invalid
|
44
|
-
|
17
|
+
invalid_user = user_class.new(email: 'undeliverable@example.com')
|
45
18
|
|
46
|
-
|
47
|
-
assert
|
19
|
+
refute invalid_user.valid?
|
20
|
+
assert invalid_user.errors[:email].present?
|
48
21
|
end
|
49
22
|
|
50
23
|
def test_verification_result
|
51
|
-
|
52
|
-
|
24
|
+
invalid_user = user_class.new(email: 'undeliverable@example.com')
|
25
|
+
invalid_user.valid?
|
53
26
|
|
54
|
-
refute_nil
|
55
|
-
|
27
|
+
refute_nil invalid_user.email_verification_result
|
28
|
+
assert_equal 'undeliverable', invalid_user.email_verification_result.state
|
56
29
|
end
|
57
30
|
|
58
|
-
def
|
31
|
+
def test_boolean_options_with_invalid_value
|
59
32
|
%i[smtp free role disposable accept_all].each do |option|
|
60
|
-
|
61
|
-
valid_user = user_class.new
|
33
|
+
invalid_options = user_class(option => 'string').new
|
62
34
|
|
63
|
-
|
64
|
-
assert_raises(ArgumentError) { invalid_user.valid? }
|
35
|
+
assert_raises(ArgumentError) { invalid_options.valid? }
|
65
36
|
end
|
66
37
|
end
|
67
38
|
|
68
|
-
def
|
69
|
-
|
70
|
-
|
39
|
+
def test_states_option_with_invalid_value
|
40
|
+
invalid_options = user_class(states: %i[invalid_state]).new
|
41
|
+
|
42
|
+
assert_raises(ArgumentError) { invalid_options.valid? }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_timeout_option_with_invalid_value
|
46
|
+
invalid_options1 = user_class(timeout: 'string').new
|
47
|
+
invalid_options2 = user_class(timeout: 1).new
|
48
|
+
|
49
|
+
assert_raises(ArgumentError) { invalid_options1.valid? }
|
50
|
+
assert_raises(ArgumentError) { invalid_options2.valid? }
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_custom_option
|
54
|
+
message = 'invalid message'
|
55
|
+
valid_options = user_class(message: message, reportable: true).new(
|
56
|
+
email: 'undeliverable@example.com'
|
57
|
+
)
|
71
58
|
|
72
|
-
|
73
|
-
|
59
|
+
refute valid_options.valid?
|
60
|
+
assert valid_options.errors[:email].present?
|
61
|
+
assert_equal message, valid_options.errors[:email].first
|
62
|
+
assert valid_options.errors.where(:email, reportable: true).present?
|
74
63
|
end
|
75
64
|
|
76
|
-
|
77
|
-
invalid_user1 = user_class(timeout: 'string').new
|
78
|
-
invalid_user2 = user_class(timeout: 1).new
|
79
|
-
valid_user = user_class.new
|
65
|
+
private
|
80
66
|
|
81
|
-
|
82
|
-
|
83
|
-
|
67
|
+
def user_class(
|
68
|
+
smtp: true, states: %i[deliverable risky unknown], free: true, role: true,
|
69
|
+
accept_all: true, disposable: true, timeout: 3, **options
|
70
|
+
)
|
71
|
+
Class.new do
|
72
|
+
include ActiveModel::Model
|
73
|
+
attr_accessor :email, :email_verification_result
|
74
|
+
|
75
|
+
validates :email, presence: true, email: {
|
76
|
+
smtp: smtp, states: states,
|
77
|
+
free: free, role: role, disposable: disposable, accept_all: accept_all,
|
78
|
+
timeout: timeout
|
79
|
+
}.merge(options)
|
80
|
+
|
81
|
+
def self.name
|
82
|
+
'TestClass'
|
83
|
+
end
|
84
|
+
|
85
|
+
# stub changes to always be true
|
86
|
+
def changes
|
87
|
+
{ email: true }
|
88
|
+
end
|
89
|
+
end
|
84
90
|
end
|
85
91
|
|
86
92
|
end
|
@@ -4,12 +4,10 @@ module Emailable
|
|
4
4
|
class BatchTest < Minitest::Test
|
5
5
|
|
6
6
|
def setup
|
7
|
-
sleep(1)
|
8
7
|
Emailable.api_key = 'test_7aff7fc0142c65f86a00'
|
9
8
|
@emails = ['jarrett@emailable.com', 'support@emailable.com']
|
10
9
|
@batch = Emailable::Batch.new(@emails)
|
11
10
|
@batch_id ||= @batch.verify
|
12
|
-
sleep(1)
|
13
11
|
end
|
14
12
|
|
15
13
|
def test_start_batch
|
data/test/emailable_test.rb
CHANGED
@@ -4,45 +4,31 @@ class EmailableTest < Minitest::Test
|
|
4
4
|
|
5
5
|
def setup
|
6
6
|
Emailable.api_key = 'test_7aff7fc0142c65f86a00'
|
7
|
-
@result ||= Emailable.verify('jarrett@emailable.com')
|
8
|
-
sleep(0.25)
|
9
7
|
end
|
10
8
|
|
11
9
|
def test_verification
|
12
|
-
|
13
|
-
refute_nil
|
14
|
-
refute_nil
|
15
|
-
refute_nil
|
16
|
-
refute_nil
|
17
|
-
refute_nil
|
18
|
-
refute_nil
|
10
|
+
result = Emailable.verify('jarrett@emailable.com')
|
11
|
+
refute_nil result.domain
|
12
|
+
refute_nil result.email
|
13
|
+
refute_nil result.reason
|
14
|
+
refute_nil result.score
|
15
|
+
refute_nil result.state
|
16
|
+
refute_nil result.user
|
17
|
+
refute_nil result.duration
|
19
18
|
end
|
20
19
|
|
21
20
|
def test_verification_state
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
def test_verification_role
|
26
|
-
result = Emailable.verify('support@emailable.com')
|
27
|
-
assert result.role?
|
28
|
-
refute @result.role?
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_verification_did_you_mean
|
32
|
-
result1 = Emailable.verify('jarrett@gmali.com')
|
33
|
-
result2 = Emailable.verify('jarrett@gmail.com')
|
34
|
-
assert result1.did_you_mean, 'jarrett@gmail.com'
|
35
|
-
assert_nil result2.did_you_mean
|
21
|
+
result = Emailable.verify('jarrett@emailable.com')
|
22
|
+
assert %w(deliverable undeliverable risky unknown).include?(result.state)
|
36
23
|
end
|
37
24
|
|
38
25
|
def test_verification_tag
|
39
26
|
result = Emailable.verify('jarrett+marketing@emailable.com')
|
40
|
-
|
27
|
+
assert_equal 'marketing', result.tag
|
41
28
|
end
|
42
29
|
|
43
30
|
def test_account
|
44
31
|
account = Emailable.account
|
45
|
-
|
46
32
|
refute_nil account.owner_email
|
47
33
|
refute_nil account.available_credits
|
48
34
|
end
|
@@ -62,6 +48,30 @@ class EmailableTest < Minitest::Test
|
|
62
48
|
end
|
63
49
|
end
|
64
50
|
|
51
|
+
def test_accept_all?
|
52
|
+
assert Emailable.verify('accept-all@example.com').accept_all?
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_disposable?
|
56
|
+
assert Emailable.verify('disposable@example.com').disposable?
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_free?
|
60
|
+
assert Emailable.verify('free@example.com').free?
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_role?
|
64
|
+
assert Emailable.verify('role@example.com').role?
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_mailbox_full?
|
68
|
+
assert Emailable.verify('mailbox-full@example.com').mailbox_full?
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_no_reply?
|
72
|
+
assert Emailable.verify('no-reply@example.com').no_reply?
|
73
|
+
end
|
74
|
+
|
65
75
|
def test_slow_verification
|
66
76
|
assert_raises(Emailable::TimeoutError) do
|
67
77
|
Emailable.verify('slow@example.com')
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emailable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1
|
4
|
+
version: 4.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emailable
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bundler
|
@@ -39,7 +38,7 @@ dependencies:
|
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: '13.0'
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
41
|
+
name: amazing_print
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
44
|
- - ">="
|
@@ -53,35 +52,35 @@ dependencies:
|
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '0'
|
55
54
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
55
|
+
name: minitest
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
|
-
- - "
|
58
|
+
- - "~>"
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
60
|
+
version: '5.0'
|
62
61
|
type: :development
|
63
62
|
prerelease: false
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
|
-
- - "
|
65
|
+
- - "~>"
|
67
66
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
67
|
+
version: '5.0'
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: minitest
|
69
|
+
name: minitest-reporters
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
72
71
|
requirements:
|
73
|
-
- - "
|
72
|
+
- - ">="
|
74
73
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
74
|
+
version: '0'
|
76
75
|
type: :development
|
77
76
|
prerelease: false
|
78
77
|
version_requirements: !ruby/object:Gem::Requirement
|
79
78
|
requirements:
|
80
|
-
- - "
|
79
|
+
- - ">="
|
81
80
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
81
|
+
version: '0'
|
83
82
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
83
|
+
name: activemodel
|
85
84
|
requirement: !ruby/object:Gem::Requirement
|
86
85
|
requirements:
|
87
86
|
- - ">="
|
@@ -95,7 +94,7 @@ dependencies:
|
|
95
94
|
- !ruby/object:Gem::Version
|
96
95
|
version: '0'
|
97
96
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
97
|
+
name: rubocop-cache-ventures
|
99
98
|
requirement: !ruby/object:Gem::Requirement
|
100
99
|
requirements:
|
101
100
|
- - ">="
|
@@ -117,12 +116,13 @@ executables:
|
|
117
116
|
extensions: []
|
118
117
|
extra_rdoc_files: []
|
119
118
|
files:
|
119
|
+
- ".github/dependabot.yml"
|
120
|
+
- ".github/workflows/ci.yml"
|
120
121
|
- ".gitignore"
|
122
|
+
- ".rubocop.yml"
|
121
123
|
- ".ruby-gemset"
|
122
124
|
- ".ruby-version"
|
123
|
-
- ".travis.yml"
|
124
125
|
- Gemfile
|
125
|
-
- Gemfile.lock
|
126
126
|
- LICENSE.txt
|
127
127
|
- README.md
|
128
128
|
- Rakefile
|
@@ -141,6 +141,7 @@ files:
|
|
141
141
|
- lib/emailable/resources/verification.rb
|
142
142
|
- lib/emailable/response.rb
|
143
143
|
- lib/emailable/version.rb
|
144
|
+
- test/authentication_test.rb
|
144
145
|
- test/email_validator_test.rb
|
145
146
|
- test/emailable/batch_test.rb
|
146
147
|
- test/emailable/resources/api_resource_test.rb
|
@@ -151,9 +152,8 @@ licenses:
|
|
151
152
|
- MIT
|
152
153
|
metadata:
|
153
154
|
bug_tracker_uri: https://github.com/emailable/emailable-ruby/issues
|
154
|
-
documentation_uri: https://
|
155
|
+
documentation_uri: https://emailable.com/docs/api/?ruby
|
155
156
|
source_code_uri: https://github.com/emailable/emailable-ruby
|
156
|
-
post_install_message:
|
157
157
|
rdoc_options: []
|
158
158
|
require_paths:
|
159
159
|
- lib
|
@@ -168,11 +168,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
168
|
- !ruby/object:Gem::Version
|
169
169
|
version: '0'
|
170
170
|
requirements: []
|
171
|
-
rubygems_version: 3.
|
172
|
-
signing_key:
|
171
|
+
rubygems_version: 3.6.7
|
173
172
|
specification_version: 4
|
174
173
|
summary: Ruby bindings for the Emailable API
|
175
174
|
test_files:
|
175
|
+
- test/authentication_test.rb
|
176
176
|
- test/email_validator_test.rb
|
177
177
|
- test/emailable/batch_test.rb
|
178
178
|
- test/emailable/resources/api_resource_test.rb
|
data/.travis.yml
DELETED
data/Gemfile.lock
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
emailable (4.0.1)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
activemodel (6.0.3.4)
|
10
|
-
activesupport (= 6.0.3.4)
|
11
|
-
activesupport (6.0.3.4)
|
12
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
|
-
i18n (>= 0.7, < 2)
|
14
|
-
minitest (~> 5.1)
|
15
|
-
tzinfo (~> 1.1)
|
16
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
17
|
-
ansi (1.5.0)
|
18
|
-
awesome_print (1.8.0)
|
19
|
-
builder (3.2.3)
|
20
|
-
coderay (1.1.3)
|
21
|
-
concurrent-ruby (1.1.7)
|
22
|
-
i18n (1.8.5)
|
23
|
-
concurrent-ruby (~> 1.0)
|
24
|
-
method_source (1.0.0)
|
25
|
-
minitest (5.11.3)
|
26
|
-
minitest-reporters (1.3.6)
|
27
|
-
ansi
|
28
|
-
builder
|
29
|
-
minitest (>= 5.0)
|
30
|
-
ruby-progressbar
|
31
|
-
pry (0.14.1)
|
32
|
-
coderay (~> 1.1)
|
33
|
-
method_source (~> 1.0)
|
34
|
-
rake (13.0.1)
|
35
|
-
ruby-progressbar (1.10.1)
|
36
|
-
thread_safe (0.3.6)
|
37
|
-
tzinfo (1.2.10)
|
38
|
-
thread_safe (~> 0.1)
|
39
|
-
zeitwerk (2.4.1)
|
40
|
-
|
41
|
-
PLATFORMS
|
42
|
-
ruby
|
43
|
-
|
44
|
-
DEPENDENCIES
|
45
|
-
activemodel
|
46
|
-
awesome_print
|
47
|
-
bundler
|
48
|
-
emailable!
|
49
|
-
minitest (~> 5.0)
|
50
|
-
minitest-reporters
|
51
|
-
pry
|
52
|
-
rake (~> 13.0)
|
53
|
-
|
54
|
-
BUNDLED WITH
|
55
|
-
2.1.4
|