diff --git a/lib/emailable/email_validator.rb b/lib/emailable/email_validator.rb index 22e14e7..a430bd0 100644 --- a/lib/emailable/email_validator.rb +++ b/lib/emailable/email_validator.rb @@ -51,7 +51,12 @@ def validate_each(record, attribute, value) error ||= :disposable if ev.disposable? && !disposable error ||= :accept_all if ev.accept_all? && !accept_all - record.errors.add(attribute, error) if error + if error + error_options = options.except( + :smtp, :states, :free, :role, :disposable, :accept_all, :timeout + ) + record.errors.add(attribute, error, **error_options) + end rescue Emailable::Error # silence errors end diff --git a/test/email_validator_test.rb b/test/email_validator_test.rb index 3ec0422..ad1db36 100644 --- a/test/email_validator_test.rb +++ b/test/email_validator_test.rb @@ -5,7 +5,7 @@ class EmailValidatorTest < Minitest::Test def user_class( smtp: true, states: %i[deliverable risky unknown], free: true, role: true, - accept_all: true, disposable: true, timeout: 3 + accept_all: true, disposable: true, timeout: 3, **options ) Class.new do include ActiveModel::Model @@ -15,7 +15,7 @@ def user_class( smtp: smtp, states: states, free: free, role: role, disposable: disposable, accept_all: accept_all, timeout: timeout - } + }.merge(options) def self.name 'TestClass' @@ -83,4 +83,16 @@ def test_timeout_option assert_raises(ArgumentError) { invalid_user2.valid? } end + def test_custom_option + message = 'invalid message' + invalid_user = user_class(message: message, reportable: true).new( + email: 'undeliverable@example.com' + ) + + refute invalid_user.valid? + assert invalid_user.errors[:email].present? + assert_equal message, invalid_user.errors[:email].first + assert invalid_user.errors.where(:email, reportable: true).present? + end + end