russian_phone 0.2.4 → 0.3.0
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/README.md +1 -1
- data/lib/russian_phone/field.rb +7 -1
- data/lib/russian_phone/format_validator.rb +13 -0
- data/lib/russian_phone/presence_validator.rb +13 -0
- data/lib/russian_phone/version.rb +1 -1
- data/lib/russian_phone.rb +5 -4
- data/spec/phone_spec.rb +24 -0
- data/spec/support/user_with_required.rb +7 -0
- metadata +6 -3
- data/lib/russian_phone/validator.rb +0 -11
data/README.md
CHANGED
|
@@ -58,7 +58,7 @@ Or install it yourself as:
|
|
|
58
58
|
|
|
59
59
|
class User
|
|
60
60
|
include Mongoid::Document
|
|
61
|
-
field :phone, type: RussianPhone.field(default_country: 7, allowed_cities: [495]), validate: true
|
|
61
|
+
field :phone, type: RussianPhone.field(default_country: 7, allowed_cities: [495]), validate: true, required: true
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
# u = User.new(phone: '495 1111111')
|
data/lib/russian_phone/field.rb
CHANGED
|
@@ -10,7 +10,13 @@ module RussianPhone
|
|
|
10
10
|
|
|
11
11
|
::Mongoid::Fields.option :validate do |model, field, value|
|
|
12
12
|
if value
|
|
13
|
-
model.validates_with(RussianPhone::
|
|
13
|
+
model.validates_with(RussianPhone::FormatValidator, fields: [field.name])
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
::Mongoid::Fields.option :required do |model, field, value|
|
|
18
|
+
if value
|
|
19
|
+
model.validates_with(RussianPhone::PresenceValidator, fields: [field.name])
|
|
14
20
|
end
|
|
15
21
|
end
|
|
16
22
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
module RussianPhone
|
|
4
|
+
class FormatValidator < ActiveModel::Validator
|
|
5
|
+
def validate(record)
|
|
6
|
+
options[:fields].each do |field|
|
|
7
|
+
unless record.send(field).phone.blank?
|
|
8
|
+
record.errors[field] << 'Неверный телефонный номер' unless record.send(field).valid? && record.send(field).city_allowed?
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
module RussianPhone
|
|
4
|
+
class PresenceValidator < ActiveModel::Validator
|
|
5
|
+
def validate(record)
|
|
6
|
+
options[:fields].each do |field|
|
|
7
|
+
if record.send(field).phone.blank?
|
|
8
|
+
record.errors[field] << 'Необходимо заполнить'
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/russian_phone.rb
CHANGED
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
require "russian_phone/version"
|
|
4
4
|
|
|
5
5
|
module RussianPhone
|
|
6
|
-
autoload :Field,
|
|
7
|
-
autoload :Number,
|
|
8
|
-
autoload :Codes,
|
|
9
|
-
autoload :
|
|
6
|
+
autoload :Field, 'russian_phone/field'
|
|
7
|
+
autoload :Number, 'russian_phone/number'
|
|
8
|
+
autoload :Codes, 'russian_phone/codes'
|
|
9
|
+
autoload :PresenceValidator, 'russian_phone/presence_validator'
|
|
10
|
+
autoload :FormatValidator, 'russian_phone/format_validator'
|
|
10
11
|
|
|
11
12
|
def self.field(options = {})
|
|
12
13
|
RussianPhone::Field.new(options)
|
data/spec/phone_spec.rb
CHANGED
|
@@ -505,6 +505,30 @@ describe RussianPhone do
|
|
|
505
505
|
u.valid?.should be_true
|
|
506
506
|
u.save.should be_true
|
|
507
507
|
end
|
|
508
|
+
|
|
509
|
+
it 'should pass validation when required but not validated' do
|
|
510
|
+
u = UserWithRequired.new(phone: '906 121 11 11')
|
|
511
|
+
|
|
512
|
+
u.valid?.should be_true
|
|
513
|
+
u.save.should be_true
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
it 'should pass validation when required but not validated' do
|
|
517
|
+
u = UserWithRequired.new(phone: '11 11')
|
|
518
|
+
|
|
519
|
+
u.valid?.should be_true
|
|
520
|
+
u.save.should be_true
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
it 'should fail validation when required and not present' do
|
|
524
|
+
u = UserWithRequired.new()
|
|
525
|
+
u.valid?.should be_false
|
|
526
|
+
u.save.should be_false
|
|
527
|
+
|
|
528
|
+
u = UserWithRequired.new(phone: '')
|
|
529
|
+
u.valid?.should be_false
|
|
530
|
+
u.save.should be_false
|
|
531
|
+
end
|
|
508
532
|
end
|
|
509
533
|
|
|
510
534
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: russian_phone
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-02-
|
|
12
|
+
date: 2013-02-05 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: mongoid
|
|
@@ -107,14 +107,16 @@ files:
|
|
|
107
107
|
- lib/russian_phone.rb
|
|
108
108
|
- lib/russian_phone/codes.rb
|
|
109
109
|
- lib/russian_phone/field.rb
|
|
110
|
+
- lib/russian_phone/format_validator.rb
|
|
110
111
|
- lib/russian_phone/number.rb
|
|
111
|
-
- lib/russian_phone/
|
|
112
|
+
- lib/russian_phone/presence_validator.rb
|
|
112
113
|
- lib/russian_phone/version.rb
|
|
113
114
|
- russian_phone.gemspec
|
|
114
115
|
- spec/phone_spec.rb
|
|
115
116
|
- spec/spec_helper.rb
|
|
116
117
|
- spec/support/user.rb
|
|
117
118
|
- spec/support/user_with_any_code.rb
|
|
119
|
+
- spec/support/user_with_required.rb
|
|
118
120
|
- spec/support/user_with_validation.rb
|
|
119
121
|
- spec/support/user_without_validation.rb
|
|
120
122
|
- validate.sh
|
|
@@ -147,5 +149,6 @@ test_files:
|
|
|
147
149
|
- spec/spec_helper.rb
|
|
148
150
|
- spec/support/user.rb
|
|
149
151
|
- spec/support/user_with_any_code.rb
|
|
152
|
+
- spec/support/user_with_required.rb
|
|
150
153
|
- spec/support/user_with_validation.rb
|
|
151
154
|
- spec/support/user_without_validation.rb
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
|
-
|
|
3
|
-
module RussianPhone
|
|
4
|
-
class Validator < ActiveModel::Validator
|
|
5
|
-
def validate(record)
|
|
6
|
-
options[:fields].each do |field|
|
|
7
|
-
record.errors[field] << 'Неверный телефонный номер' unless record.send(field).valid? && record.send(field).city_allowed?
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|