matthewrudy-regexpert 0.0.2

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.
Files changed (4) hide show
  1. data/README +18 -0
  2. data/Rakefile +23 -0
  3. data/lib/regexpert.rb +76 -0
  4. metadata +56 -0
data/README ADDED
@@ -0,0 +1,18 @@
1
+ Regexpert
2
+ =========
3
+
4
+ Regexpert is an attempt to remove the need to worry about which regular expression to use for validating an email, a postcode, or a social security number.
5
+ Its inspired by the django.contrib.localflavor libraries and Datamapper dm-more's dm-validations module.
6
+
7
+ Example
8
+ =======
9
+
10
+ Instead of googling "email regexp", and then coming up with numerous arguments about the right regexp to use,
11
+ just use Regexpert
12
+
13
+ validates_format_of :email, :with => Regexpert::Format::EmailAddress
14
+
15
+ BOOM!!!
16
+ no work, no worries.
17
+
18
+ Copyright (c) 2008 [Matthew Rudy Jacobs], released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the regexpert plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.libs << 'test'
12
+ t.pattern = 'test/**/*_test.rb'
13
+ t.verbose = true
14
+ end
15
+
16
+ desc 'Generate documentation for the regexpert plugin.'
17
+ Rake::RDocTask.new(:rdoc) do |rdoc|
18
+ rdoc.rdoc_dir = 'rdoc'
19
+ rdoc.title = 'Regexpert'
20
+ rdoc.options << '--line-numbers' << '--inline-source'
21
+ rdoc.rdoc_files.include('README')
22
+ rdoc.rdoc_files.include('lib/**/*.rb')
23
+ end
data/lib/regexpert.rb ADDED
@@ -0,0 +1,76 @@
1
+ module Regexpert
2
+ module Format
3
+ # This is taken from dm-more - http://github.com/sam/dm-more/tree/master/dm-validations/lib/dm-validations/formats/email.rb
4
+ # RFC2822 (No attribution reference available)
5
+ #
6
+ # doctest: email_address
7
+ # >> "MatthewRudyJacobs@gmail.com" =~ Regexpert::Format::EmailAddress
8
+ # => 0
9
+ #
10
+ # >> "dev@" =~ Regexpert::Format::EmailAddress
11
+ # => nil
12
+ #
13
+ EmailAddress = begin
14
+ alpha = "a-zA-Z"
15
+ digit = "0-9"
16
+ atext = "[#{alpha}#{digit}\!\#\$\%\&\'\*+\/\=\?\^\_\`\{\|\}\~\-]"
17
+ dot_atom_text = "#{atext}+([.]#{atext}*)*"
18
+ dot_atom = "#{dot_atom_text}"
19
+ qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
20
+ text = "[\\x01-\\x09\\x11\\x12\\x14-\\x7f]"
21
+ quoted_pair = "(\\x5c#{text})"
22
+ qcontent = "(?:#{qtext}|#{quoted_pair})"
23
+ quoted_string = "[\"]#{qcontent}+[\"]"
24
+ atom = "#{atext}+"
25
+ word = "(?:#{atom}|#{quoted_string})"
26
+ obs_local_part = "#{word}([.]#{word})*"
27
+ local_part = "(?:#{dot_atom}|#{quoted_string}|#{obs_local_part})"
28
+ no_ws_ctl = "\\x01-\\x08\\x11\\x12\\x14-\\x1f\\x7f"
29
+ dtext = "[#{no_ws_ctl}\\x21-\\x5a\\x5e-\\x7e]"
30
+ dcontent = "(?:#{dtext}|#{quoted_pair})"
31
+ domain_literal = "\\[#{dcontent}+\\]"
32
+ obs_domain = "#{atom}([.]#{atom})*"
33
+ domain = "(?:#{dot_atom}|#{domain_literal}|#{obs_domain})"
34
+ addr_spec = "#{local_part}\@#{domain}"
35
+ pattern = /^#{addr_spec}$/
36
+ end
37
+
38
+ # This is taken from dm-more http://github.com/sam/dm-more/tree/master/dm-validations/lib/dm-validations/formats/url.rb
39
+ # Regex from http://www.igvita.com/2006/09/07/validating-url-in-ruby-on-rails/
40
+ #
41
+ # doctest: url # examples from Rails auto_link tests
42
+ # >> "http://www.rubyonrails.com/contact;new" =~ Regexpert::Format::Url
43
+ # => 0
44
+ # >> "http://maps.google.co.uk/maps?f=q&q=the+london+eye&ie=UTF8&ll=51.503373,-0.11939&spn=0.007052,0.012767&z=16&iwloc=A" =~ Regexpert::Format::Url
45
+ # => 0
46
+ # >> "http://en.wikipedia.org/wiki/Sprite_(computer_graphics)" =~ Regexpert::Format::Url
47
+ # => 0
48
+ # TODO: think of a good example of a bad url
49
+ Url = begin
50
+ /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix
51
+ end
52
+
53
+ # This is taken from Django.Contrib.Localflavor.uk
54
+ # The regular expression used is sourced from the schema for British Standard
55
+ # BS7666 address types: http://www.govtalk.gov.uk/gdsc/schemas/bs7666-v2-0.xsd
56
+ #
57
+ # doctest: ukpostcode
58
+ # >> "GIR 0AA" =~ Regexpert::Format::UKPostcode # GIR 0AA is a special GIRO postcode
59
+ # => 0
60
+ # >> "AL40XB" =~ Regexpert::Format::UKPostcode
61
+ # => 0
62
+ # >> "CB4 1TL" =~ Regexpert::Format::UKPostcode
63
+ # => 0
64
+ #
65
+ # >> "AL44 NOP" =~ Regexpert::Format::UKPostcode
66
+ # => nil
67
+ # >> "CB4-1TL" =~ Regexpert::Format::UKPostcode
68
+ # => nil
69
+ #
70
+ UKPostcode = begin
71
+ outcode_pattern = '[A-PR-UWYZ]([0-9]{1,2}|([A-HIK-Y][0-9](|[0-9]|[ABEHMNPRVWXY]))|[0-9][A-HJKSTUW])'
72
+ incode_pattern = '[0-9][ABD-HJLNP-UW-Z]{2}'
73
+ postcode_regex = Regexp.new("^(GIR *0AA|#{outcode_pattern} *#{incode_pattern})$", Regexp::IGNORECASE)
74
+ end
75
+ end
76
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: matthewrudy-regexpert
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Matthew Rudy Jacobs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-07 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Regular expressions bundled into a single place, so you dont have to think anymore about what email regexp to use.
17
+ email: MatthewRudyJacobs@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - README
26
+ - Rakefile
27
+ - lib/regexpert.rb
28
+ has_rdoc: true
29
+ homepage: http://github.com/matthewrudy/regexpert
30
+ post_install_message:
31
+ rdoc_options:
32
+ - --main
33
+ - README
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.2.0
52
+ signing_key:
53
+ specification_version: 2
54
+ summary: A bunch of useful Regular expressions
55
+ test_files: []
56
+