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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - ree
7
+ - rbx
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem 'rails', '3.1.0'
6
+ gem 'minitest', '2.10.0'
7
+
8
+ gem 'phone', '1.1'
9
+
10
+ group :active_record do
11
+ gem 'sqlite3-ruby', :require => 'sqlite3'
12
+ end
data/README.markdown ADDED
@@ -0,0 +1,47 @@
1
+ [![Build Status](https://secure.travis-ci.org/travisjeffery/validates_phone_number.png)](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,12 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ desc 'Run tests'
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << 'lib'
7
+ t.libs << 'test'
8
+ t.pattern = 'test/**/*_test.rb'
9
+ t.verbose = true
10
+ end
11
+
12
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ require 'phone'
2
+ Phoner::Phone.default_country_code = '1'
3
+ require_relative "validates_phone_number/version"
4
+ require_relative "validates_phone_number/message"
5
+ require_relative "validates_phone_number/validator"
@@ -0,0 +1,12 @@
1
+ module ValidatesPhoneNumber
2
+ module Message
3
+ DEFAULT_ERROR_MESSAGE = "%s is not a valid"
4
+
5
+ private
6
+
7
+ def error_message_for value
8
+ @message ||
9
+ DEFAULT_ERROR_MESSAGE % value
10
+ end
11
+ end
12
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module ValidatesPhoneNumber
2
+ VERSION = "0.1.4"
3
+ end
@@ -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