validates_phone_number 0.1.4
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.
- data/.gitignore +4 -0
- data/.travis.yml +7 -0
- data/Gemfile +12 -0
- data/README.markdown +47 -0
- data/Rakefile +12 -0
- data/lib/validates_phone_number.rb +5 -0
- data/lib/validates_phone_number/message.rb +12 -0
- data/lib/validates_phone_number/validator.rb +25 -0
- data/lib/validates_phone_number/version.rb +3 -0
- data/test/test_helper.rb +34 -0
- data/test/validates_phone_number/validator_test.rb +58 -0
- data/validates_phone_number.gemspec +26 -0
- metadata +103 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
[](http://travis-ci.org/travisjeffery/validates_phone_number)
|
2
|
+
|
3
|
+
# Validates Phone Number
|
4
|
+
|
5
|
+
`validates_phone_number` adds validation methods to ActiveModel for validating
|
6
|
+
phone numbers.
|
7
|
+
|
8
|
+
### Basic Usage
|
9
|
+
|
10
|
+
Given a User model with a phone number attribute of `phone number`
|
11
|
+
that's a string, see if a given record has a valid phone number like so:
|
12
|
+
|
13
|
+
```
|
14
|
+
class Person < ActiveRecord::Base
|
15
|
+
validates :mobile, :phone_number => true
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
### Message
|
20
|
+
|
21
|
+
Specify the message that's added to the errors collection by using the
|
22
|
+
`message` option:
|
23
|
+
|
24
|
+
```
|
25
|
+
class Person < ActiveRecord::Base
|
26
|
+
validates :mobile, :phone_number => {:message => "invalid and can only be attributable to human error"}
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
### Format/Match by Regular Expression
|
31
|
+
|
32
|
+
You can specify that a number matches a regular expression by using the
|
33
|
+
`format` option:
|
34
|
+
|
35
|
+
```
|
36
|
+
class Person < ActiveRecord::Base
|
37
|
+
validates :mobile, :phone_number => {:format => /\d{3}-\d{3}-\d{4}/}
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
### Allow Nil
|
42
|
+
|
43
|
+
```
|
44
|
+
class Person < ActiveRecord::Base
|
45
|
+
validates :mobile, :phone_number => {:allow_nil => true}
|
46
|
+
end
|
47
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'active_model/validator'
|
2
|
+
|
3
|
+
module ValidatesPhoneNumber
|
4
|
+
class Validator < ActiveModel::EachValidator
|
5
|
+
include ValidatesPhoneNumber::Message
|
6
|
+
|
7
|
+
def initialize options
|
8
|
+
@type = options.delete(:type) || :string
|
9
|
+
@allow_nil = options.delete(:allow_nil)
|
10
|
+
@format = options.delete(:format)
|
11
|
+
@message = options.delete(:message)
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def validate_each record, attr_name, value
|
16
|
+
return if @allow_nil && value.nil?
|
17
|
+
return if Phoner::Phone.valid? value
|
18
|
+
return if value =~ @format
|
19
|
+
message = error_message_for value
|
20
|
+
record.errors.add attr_name, message
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
ActiveModel::Validations::PhoneNumberValidator = ValidatesPhoneNumber::Validator
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
unless Kernel.respond_to?(:require_relative)
|
2
|
+
module Kernel
|
3
|
+
def require_relative(path)
|
4
|
+
require File.join(File.dirname(caller[0]), path.to_str)
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
ENV['RAILS_ENV'] = 'minitest'
|
10
|
+
begin
|
11
|
+
require 'minitest/autorun'
|
12
|
+
rescue LoadError
|
13
|
+
require 'rubygems'
|
14
|
+
require 'minitest/unit'
|
15
|
+
MiniTest::Unit.autorun
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'active_model'
|
19
|
+
require 'active_model/validations'
|
20
|
+
require 'active_record'
|
21
|
+
require 'action_view'
|
22
|
+
|
23
|
+
require_relative '../lib/validates_phone_number'
|
24
|
+
|
25
|
+
ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:'})
|
26
|
+
ActiveRecord::Migration.verbose = false
|
27
|
+
ActiveRecord::Schema.define(:version => 1) do
|
28
|
+
create_table :people, :force => true do |t|
|
29
|
+
t.string :phone_number, :allow_nil => true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Person < ActiveRecord::Base
|
34
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestValidator < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
Person.reset_callbacks(:validate)
|
6
|
+
Person._validators.clear
|
7
|
+
@person = Person.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_model_validates_with_phone_number_option
|
11
|
+
Person.validates :phone_number, :phone_number => true
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_invalid_record_if_invalid_phone_number
|
15
|
+
Person.validates :phone_number, :phone_number => true
|
16
|
+
@person.phone_number = "423432432452"
|
17
|
+
assert !@person.valid?
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_valid_record_if_valid_phone_number
|
21
|
+
Person.validates :phone_number, :phone_number => true
|
22
|
+
@person.phone_number = "555-565-5703"
|
23
|
+
assert @person.valid?
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_allow_nil_option_defaults_to_false
|
27
|
+
Person.validates :phone_number, :phone_number => true
|
28
|
+
@person.phone_number = nil
|
29
|
+
assert !@person.valid?
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_nil_is_record_record_if_allow_nil
|
33
|
+
Person.validates :phone_number, :phone_number => {:allow_nil => true}
|
34
|
+
@person.phone_number = nil
|
35
|
+
assert @person.valid?
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_invalid_record_by_format_option
|
39
|
+
Person.validates :phone_number, :phone_number => true
|
40
|
+
@person.phone_number = "555^555^555^5555"
|
41
|
+
assert !@person.valid?
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_valid_record_by_format_option
|
45
|
+
Person.validates :phone_number, :phone_number => {:format => /(\d+\^){3}\d+/}
|
46
|
+
@person.phone_number = "555^555^555^5555"
|
47
|
+
assert @person.valid?
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_specify_message
|
51
|
+
Person.validates :phone_number, :phone_number => {:message => "invalid and can only be attributable to human error"}
|
52
|
+
@person.phone_number = nil
|
53
|
+
@person.valid?
|
54
|
+
assert_equal 1, @person.errors.size
|
55
|
+
assert_match /invalid and can only be attributable to human error/, @person.errors.full_messages.first
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "validates_phone_number/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "validates_phone_number"
|
7
|
+
s.version = ValidatesPhoneNumber::VERSION
|
8
|
+
s.authors = ["Travis Jeffery"]
|
9
|
+
s.email = ["t@travisjeffery.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Adds validation methods to ActiveModel for validating phone numbers.}
|
12
|
+
s.description = %q{Adds validation methods to ActiveModel for validating phone numbers.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "validates_phone_number"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_development_dependency "minitest", '2.10.0'
|
22
|
+
s.add_development_dependency "rails", '3.1.0'
|
23
|
+
s.add_development_dependency "phone", '1.1'
|
24
|
+
|
25
|
+
s.add_runtime_dependency "phone", '1.1'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: validates_phone_number
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.4
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Travis Jeffery
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-03 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: minitest
|
16
|
+
requirement: &70167044806360 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.10.0
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70167044806360
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rails
|
27
|
+
requirement: &70167044805800 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - =
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.1.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70167044805800
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: phone
|
38
|
+
requirement: &70167044805240 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - =
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '1.1'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70167044805240
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: phone
|
49
|
+
requirement: &70167044804780 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - =
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.1'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70167044804780
|
58
|
+
description: Adds validation methods to ActiveModel for validating phone numbers.
|
59
|
+
email:
|
60
|
+
- t@travisjeffery.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- .travis.yml
|
67
|
+
- Gemfile
|
68
|
+
- README.markdown
|
69
|
+
- Rakefile
|
70
|
+
- lib/validates_phone_number.rb
|
71
|
+
- lib/validates_phone_number/message.rb
|
72
|
+
- lib/validates_phone_number/validator.rb
|
73
|
+
- lib/validates_phone_number/version.rb
|
74
|
+
- test/test_helper.rb
|
75
|
+
- test/validates_phone_number/validator_test.rb
|
76
|
+
- validates_phone_number.gemspec
|
77
|
+
homepage: ''
|
78
|
+
licenses: []
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project: validates_phone_number
|
97
|
+
rubygems_version: 1.8.10
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: Adds validation methods to ActiveModel for validating phone numbers.
|
101
|
+
test_files:
|
102
|
+
- test/test_helper.rb
|
103
|
+
- test/validates_phone_number/validator_test.rb
|