New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

pre

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pre

  • 0.0.2
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

Pretty Reliable Email

=====================

Why?

Regexes are not enough sometimes. We should go all the way and fully parse the email and knock on the server's door to see if they really have a mailbox.

How?

Basics

require 'pre'
validator = Pre::Validator.new
validator.valid? "me@apple.com"

With basic config

Pre by default has built in validators for RFC2822 and DNS MX record verification. Validators can be passed through the :validators option.

require 'pre'
# validate with no domain validation
validator = Pre::Validator.new :validators => :format
validator.valid? "foo@nonexistent201233.com" # => true

Advanced config

Pre can take blocks for custom validators

require 'pre'
no_gmail = lambda do |address|
	address !~ /gmail.com$/
end
validator = Pre::Validator.new :validators => [:format, no_gmail]
validator.valid? "foo@gmail.com" # => false

Pre can take any object that implements the valid? method

require 'pre'
class ComplexValidator
	def valid? address
		return true unless address =~ /gmail.com$/
		# do not allow user+label@gmail.com 
		address !~ /\+.+@/
	end
end
validator = Pre::Validator.new :validators => [:domain, ComplexValidator.new]
validator.valid? "john+spam@gmail.com" # => false

Pre can also take alternate configuration for a single address

require 'pre'
validator = Pre::Validator.new :validators => :format
validator.valid? "john@example.co.uk", :validators => lambda { |address|
  address =~ /example.co.nz$/
} # => false

Caching

Certain strategies may be more "intense" than others. MX Record lookup and other expensive operations can benefit from providing Pre with a cache store. A cache store must respond to :write(key, val) and :read(key) methods. The cache abstraction layer provided by Rails' ActiveSupport::Cache::Store fits this interface.

require 'pre'
memcache = ActiveSupport::Cache::MemCacheStore.new("localhost", "server-downstairs.localnetwork:8229")
validator = Pre::Validator.new :cache_store => memcache
validator.valid? "foo@gmail.com" # => true

Contributing

  1. Fork
  2. Make tests
  3. Make changes to lib
  4. Ensure tests pass on 1.8/1.9
  5. Submit request
  6. Smile

Roadmap

  • ActiveModel, Mongoid::Document, etc.. integration
  • DSL for configuring Pre validation configuration sets

Ack

The RFC treetop grammars are pulled from the fantastic mail gem.

FAQs

Package last updated on 19 Sep 2012

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc