validates_telephone 0.0.1

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/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour --format documentation
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.3@validates_telephone
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in validates_telephone.gemspec
4
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,19 @@
1
+ = ValidatesTelephone {<img src="https://secure.travis-ci.org/plribeiro3000/validates_telephone.png" />}[http://travis-ci.org/plribeiro3000/validates_telephone]
2
+
3
+ Rails gem to validate Telephone.
4
+
5
+ == Install
6
+
7
+ gem install validates_telephone
8
+
9
+ == Usage
10
+
11
+ Lets say you have a model with "telephone" string column that you want to be a valid telephone. Just add this to your model:
12
+
13
+ class User < ActiveRecord::Base
14
+ validates :telephone, :telephone => true
15
+ end
16
+
17
+ == Future
18
+
19
+ Add Support for other countries. For now it only supports Brazil telephones.
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ desc "Default Task"
7
+ task :default => [ :spec ]
@@ -0,0 +1,8 @@
1
+ require "active_model"
2
+ require "validates_telephone/telephone"
3
+
4
+ class TelephoneValidator < ActiveModel::EachValidator
5
+ def validate_each(record, attribute, value)
6
+ record.errors[attribute] << I18n.t("errors.messages.invalid") unless Telephone.new(value).valid?
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ class Telephone
2
+ def initialize(number)
3
+ @match = number =~ /^(\(?\d{2}\)?)(\d{4})-?(\d{4})$/
4
+ @number = number
5
+ @cleaned_number = $1.nil? ? nil : @number.gsub(/[\(\)-]/, "")
6
+ format_number! if @cleaned_number
7
+ end
8
+
9
+ def valid?
10
+ return false unless @number.nil? or @match
11
+ true
12
+ end
13
+
14
+ def number
15
+ @number
16
+ end
17
+
18
+ private
19
+
20
+ def format_number!
21
+ @cleaned_number =~ /^(\d{2})(\d{4})(\d{4})$/
22
+ @number = "(#{$1})#{$2}-#{$3}"
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module ValidatesTelephone
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,2 @@
1
+ class Admin < ActiveRecord::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class CreateAdmins < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :admins do |u|
4
+ u.string :telephone
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :admins
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :users do |u|
4
+ u.string :telephone
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :users
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ validates :telephone, :telephone => true
3
+ end
@@ -0,0 +1,11 @@
1
+ require "rubygems"
2
+ require "rspec"
3
+ require "active_record"
4
+
5
+ Dir.glob(File.dirname(__FILE__) + "/../lib/**/*.rb").each { |file| require file }
6
+ Dir.glob(File.dirname(__FILE__) + "/fake_app/**/*.rb").each { |file| require file }
7
+
8
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
9
+
10
+ CreateUsers.migrate(:up)
11
+ CreateAdmins.migrate(:up)
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Telephone do
4
+ context "should be invalid with" do
5
+ it "blank number" do
6
+ Telephone.new('').should_not be_valid
7
+ end
8
+
9
+ it "123456 as number" do
10
+ Telephone.new('123456').should_not be_valid
11
+ end
12
+
13
+ it "12345678910 as number" do
14
+ Telephone.new('12345678910').should_not be_valid
15
+ end
16
+ end
17
+
18
+ context "should be valid with" do
19
+ it "nil as number" do
20
+ Telephone.new(nil).should be_valid
21
+ end
22
+
23
+ it "1111111111 as number" do
24
+ Telephone.new('1111111111').should be_valid
25
+ end
26
+
27
+ it "(11)11111111 as number" do
28
+ Telephone.new('(11)11111111').should be_valid
29
+ end
30
+
31
+ it "111111-1111 as number" do
32
+ Telephone.new('111111-1111').should be_valid
33
+ end
34
+
35
+ it "(11)1111-1111 as number" do
36
+ Telephone.new('(11)1111-1111').should be_valid
37
+ end
38
+ end
39
+
40
+ context "with a valid value" do
41
+ it "should return it formatted" do
42
+ Telephone.new('1111111111').number.should == '(11)1111-1111'
43
+ end
44
+ end
45
+
46
+ context "with an invalid value" do
47
+ it "should return as it was" do
48
+ Telephone.new('123456').number.should == '123456'
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe TelephoneValidator do
4
+ context "when telephone is invalid" do
5
+ before :each do
6
+ @user = User.new(:telephone => "12345")
7
+ end
8
+
9
+ it "should set object as invalid" do
10
+ @user.valid?.should be_false
11
+ end
12
+
13
+ it "should set an error on attribute" do
14
+ @user.valid?
15
+ @user.errors[:telephone].should == ['is invalid']
16
+ end
17
+ end
18
+
19
+ context "when telephone is valid" do
20
+ before :each do
21
+ @user = User.new(:telephone => "(11)1111-1111")
22
+ end
23
+
24
+ it "should set object as valid" do
25
+ @user.valid?.should be_true
26
+ end
27
+
28
+ it "should not set an error on attribute" do
29
+ @user.valid?
30
+ @user.errors[:telephone].should be_blank
31
+ end
32
+ end
33
+
34
+ it "should accept a nil value" do
35
+ @user = User.new(:telephone => nil)
36
+ @user.valid?.should be_true
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "validates_telephone/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "validates_telephone"
7
+ s.version = ValidatesTelephone::VERSION
8
+ s.authors = ["Paulo Henrique Lopes Ribeiro"]
9
+ s.email = %q{plribeiro3000@gmail.com}
10
+ s.homepage = ""
11
+ s.summary = %q{Telephone Validation GEM}
12
+ s.description = %q{Validates Telephone and test it with macros in a simple way.}
13
+
14
+ s.add_dependency("activerecord", ">= 3.0.0")
15
+
16
+ s.rubyforge_project = "validates_cpf"
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = %w(lib)
22
+
23
+ s.add_development_dependency "rake"
24
+ s.add_development_dependency "rspec", ">= 2.0.0"
25
+ s.add_development_dependency "shoulda-matchers", ">= 1.0.0"
26
+ s.add_development_dependency "remarkable_activerecord", "= 4.0.0.alpha4"
27
+ s.add_development_dependency "sqlite3"
28
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: validates_telephone
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Paulo Henrique Lopes Ribeiro
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: &6997600 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *6997600
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &6996000 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *6996000
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &6995440 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 2.0.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *6995440
47
+ - !ruby/object:Gem::Dependency
48
+ name: shoulda-matchers
49
+ requirement: &6994920 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *6994920
58
+ - !ruby/object:Gem::Dependency
59
+ name: remarkable_activerecord
60
+ requirement: &6994420 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - =
64
+ - !ruby/object:Gem::Version
65
+ version: 4.0.0.alpha4
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *6994420
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: &6993960 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *6993960
80
+ description: Validates Telephone and test it with macros in a simple way.
81
+ email: plribeiro3000@gmail.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - .gitignore
87
+ - .rspec
88
+ - .rvmrc
89
+ - Gemfile
90
+ - README.rdoc
91
+ - Rakefile
92
+ - lib/validates_telephone.rb
93
+ - lib/validates_telephone/telephone.rb
94
+ - lib/validates_telephone/version.rb
95
+ - spec/fake_app/admin.rb
96
+ - spec/fake_app/db/create_admins.rb
97
+ - spec/fake_app/db/create_users.rb
98
+ - spec/fake_app/user.rb
99
+ - spec/spec_helper.rb
100
+ - spec/validates_telephone/telephone_spec.rb
101
+ - spec/validates_telephone_spec.rb
102
+ - validates_telephone.gemspec
103
+ homepage: ''
104
+ licenses: []
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project: validates_cpf
123
+ rubygems_version: 1.8.10
124
+ signing_key:
125
+ specification_version: 3
126
+ summary: Telephone Validation GEM
127
+ test_files: []