rails_validation 0.0.1 → 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.
- checksums.yaml +4 -4
- data/config/locales/en.yml +10 -0
- data/config/locales/zh-CN.yml +10 -0
- data/lib/rails_validation.rb +4 -1
- data/lib/validations/email_validator.rb +22 -0
- data/lib/validations/phone_validator.rb +16 -0
- data/lib/validations/qq_validator.rb +16 -0
- data/lib/validations/url_name_validator.rb +16 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/validations/email_spec.rb +48 -0
- metadata +72 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a6430d0457190675c4c8b225d4d27d96f3dd968
|
4
|
+
data.tar.gz: bf919202e41dd1af795a2fc11af48951ae7f89da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f533787c7776c1d5eca670be4b9b82089b30813086b3d904cb839fca35f50675ab8d52ebafc1b3abc271b7d7109c132e724b35ca13ef71b730e3be121a111038
|
7
|
+
data.tar.gz: 5b079f2626f910d8b119caf1a78f534d11125fa9512ad671170d26d06f32efb0670b13ec62e75ec612e68988661f919ccdd027ba1bf9c3936ae2a63a441970c4
|
data/lib/rails_validation.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'validations/email_validator'
|
2
|
+
require 'validations/phone_validator'
|
3
|
+
require 'validations/qq_validator'
|
4
|
+
require 'validations/url_name_validator'
|
2
5
|
I18n.load_path += Dir["#{File.dirname(__FILE__)}/../config/locales/*.yml"]
|
3
6
|
module RailsValidations
|
4
7
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Validate email, works with UTF-8
|
2
|
+
# The validation is intentionally simply, you can never be sure an email is
|
3
|
+
# valid anyway (a user can mistype gmail as gmaill, for example).
|
4
|
+
#
|
5
|
+
# - User part: one or more alphabet character or number or _ or -.
|
6
|
+
# - Domain part: one or more alphabet character or number or _ or -.
|
7
|
+
# - tld part: 2 or more alphabet characters, numbers, or -
|
8
|
+
class EmailValidator < ActiveModel::EachValidator
|
9
|
+
REGEXP = /^([a-zA-Z0-9_-])+@(([a-zA-Z0-9_-])+)((\.([a-zA-Z0-9_-])+)*)((\.[a-zA-Z0-9_-]{2,3}){1,2})$/
|
10
|
+
def validate_each(record, attribute, value)
|
11
|
+
record.errors.add attribute, (options[:message] || I18n.t('rails_validation.email.invalid')) unless value =~ REGEXP
|
12
|
+
end
|
13
|
+
end
|
14
|
+
module ActiveModel
|
15
|
+
module Validations
|
16
|
+
module HelperMethods
|
17
|
+
def validates_email_of(*attr_names)
|
18
|
+
validates_with EmailValidator, _merge_attributes(attr_names)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# basic phone format validator
|
2
|
+
class PhoneValidator < ActiveModel::EachValidator
|
3
|
+
REGEXP = /^1\d{10}$/
|
4
|
+
def validate_each(record, attribute, value)
|
5
|
+
record.errors.add attribute, (options[:message] || I18n.t('rails_validation.phone.invalid')) unless value =~ REGEXP
|
6
|
+
end
|
7
|
+
end
|
8
|
+
module ActiveModel
|
9
|
+
module Validations
|
10
|
+
module HelperMethods
|
11
|
+
def validates_phone_of(*attr_names)
|
12
|
+
validates_with PhoneValidator, _merge_attributes(attr_names)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# qq format validation, works with qq format
|
2
|
+
class QqValidator < ActiveModel::EachValidator
|
3
|
+
REGEXP = /^[1-9]*[1-9][0-9]*$/
|
4
|
+
def validate_each(record, attribute, value)
|
5
|
+
record.errors.add attribute, (options[:message] || I18n.t('rails_validation.qq.invalid')) unless value =~ REGEXP
|
6
|
+
end
|
7
|
+
end
|
8
|
+
module ActiveModel
|
9
|
+
module Validations
|
10
|
+
module HelperMethods
|
11
|
+
def validates_qq_of(*attr_names)
|
12
|
+
validates_with QqValidator, _merge_attributes(attr_names)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#zhe800 url_name validator
|
2
|
+
class UrlNameValidator < ActiveModel::EachValidator
|
3
|
+
REGEXP = /^\w+_\d+$/
|
4
|
+
def validate_each(record, attribute, value)
|
5
|
+
record.errors.add attribute, (options[:message] || I18n.t('rails_validation.url_name.invalid')) unless value =~ REGEXP
|
6
|
+
end
|
7
|
+
end
|
8
|
+
module ActiveModel
|
9
|
+
module Validations
|
10
|
+
module HelperMethods
|
11
|
+
def validates_url_name_of(*attr_names)
|
12
|
+
validates_with UrlNameValidator, _merge_attributes(attr_names)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
ENV["RAILS_ENV"] ||= 'test'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler/setup'
|
4
|
+
|
5
|
+
require 'action_controller'
|
6
|
+
require 'action_dispatch'
|
7
|
+
require 'action_pack'
|
8
|
+
require 'action_view'
|
9
|
+
require 'active_model'
|
10
|
+
require 'active_record'
|
11
|
+
require 'active_support'
|
12
|
+
require 'active_support/all'
|
13
|
+
|
14
|
+
|
15
|
+
# Include our validators
|
16
|
+
Dir["#{File.dirname(__FILE__)}/../lib/**/*.rb"].sort.each { |f| require f }
|
17
|
+
|
18
|
+
# Make sure I18N works
|
19
|
+
I18n.enforce_available_locales = false if I18n.respond_to?(:enforce_available_locales)
|
20
|
+
I18n.load_path += Dir["#{File.dirname(__FILE__)}/../config/locales/*.yml"]
|
21
|
+
|
22
|
+
|
23
|
+
module ValidationsSpecHelper
|
24
|
+
include ActiveSupport
|
25
|
+
include ActionPack
|
26
|
+
include ActionView::Context if defined?(ActionView::Context)
|
27
|
+
include ActionController::RecordIdentifier if defined?(ActionController::RecordIdentifier)
|
28
|
+
include ActionView::RecordIdentifier if defined?(ActionView::RecordIdentifier)
|
29
|
+
|
30
|
+
|
31
|
+
class Record
|
32
|
+
extend ActiveModel::Naming
|
33
|
+
include ActiveModel::Conversion
|
34
|
+
include ActiveModel::Validations
|
35
|
+
|
36
|
+
def initialize attr={}
|
37
|
+
attr.each { |k, v| send("#{k}=", v) }
|
38
|
+
super()
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def v; @value end
|
43
|
+
def v= v; @value = v end
|
44
|
+
def v2; @value2 end
|
45
|
+
def v2= v; @value2 = v end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def model v, v2=nil
|
50
|
+
described_class.new v: v, v2: v2
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
def model_errors v
|
55
|
+
m = model v
|
56
|
+
m.valid?
|
57
|
+
return m.errors[:v]
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
def with_validation validate_string
|
62
|
+
described_class.clear_validators!
|
63
|
+
described_class.class_eval "validates :v, #{validate_string}"
|
64
|
+
|
65
|
+
yield
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
RSpec::Matchers.define :be_valid do
|
71
|
+
match { |record | record.valid? == true && record.errors.blank? }
|
72
|
+
end
|
73
|
+
|
74
|
+
RSpec::Matchers.define :be_invalid do |i18n_key, i18n_params={}|
|
75
|
+
match do |record|
|
76
|
+
record.valid? == false &&
|
77
|
+
record.errors.first.present? &&
|
78
|
+
record.errors.first[1] == I18n.t("rails_validation.#{i18n_key}", **i18n_params)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
shared_examples :validation do |validation|
|
84
|
+
it 'accepts a custom error message' do
|
85
|
+
with_validation "#{validation}: { message: 'foobar' }" do
|
86
|
+
m = described_class.new v: 'not even remotely valid'
|
87
|
+
expect(m.valid?).to eq(false)
|
88
|
+
expect(m.errors[:v].first).to eq('foobar')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ValidationsSpecHelper
|
4
|
+
class Email < ValidationsSpecHelper::Record
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
describe ValidationsSpecHelper::Email do
|
10
|
+
include ValidationsSpecHelper
|
11
|
+
|
12
|
+
it_behaves_like :validation, 'email'
|
13
|
+
|
14
|
+
it 'gives an error on invalid emails' do
|
15
|
+
with_validation 'email: true' do
|
16
|
+
%w{
|
17
|
+
not\ valid
|
18
|
+
invalid@example.
|
19
|
+
invalid@@example.com
|
20
|
+
invalid@example..com
|
21
|
+
@example.com
|
22
|
+
invalid@.com
|
23
|
+
invalid@example.c
|
24
|
+
in\ valid@example.com
|
25
|
+
invalid@exam\ ple.com
|
26
|
+
}.each do |v|
|
27
|
+
expect(model(v)).to be_invalid('email.invalid')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
it 'works for valid emails' do
|
34
|
+
with_validation 'email: true' do
|
35
|
+
%w{
|
36
|
+
valid@example.com
|
37
|
+
valid112@example.com
|
38
|
+
valid-example@example.com
|
39
|
+
valid_address@example.com
|
40
|
+
valid@more.than.one.example.com
|
41
|
+
valid@example.anewtld.com
|
42
|
+
}.each do |v|
|
43
|
+
expect(model(v)).to be_valid
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
metadata
CHANGED
@@ -1,22 +1,86 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_validation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clark King
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
-
dependencies:
|
13
|
-
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: actionpack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: iban-tools
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
description: A Rails model validation, my first gem, just a practice work
|
14
70
|
email: wskongdesheng@gmail.com
|
15
71
|
executables: []
|
16
72
|
extensions: []
|
17
73
|
extra_rdoc_files: []
|
18
74
|
files:
|
75
|
+
- config/locales/en.yml
|
76
|
+
- config/locales/zh-CN.yml
|
19
77
|
- lib/rails_validation.rb
|
78
|
+
- lib/validations/email_validator.rb
|
79
|
+
- lib/validations/phone_validator.rb
|
80
|
+
- lib/validations/qq_validator.rb
|
81
|
+
- lib/validations/url_name_validator.rb
|
82
|
+
- spec/spec_helper.rb
|
83
|
+
- spec/validations/email_spec.rb
|
20
84
|
homepage: https://github.com/wskongdesheng/rails_validation
|
21
85
|
licenses:
|
22
86
|
- MIT
|
@@ -40,5 +104,7 @@ rubyforge_project:
|
|
40
104
|
rubygems_version: 2.2.2
|
41
105
|
signing_key:
|
42
106
|
specification_version: 4
|
43
|
-
summary: Rails
|
44
|
-
test_files:
|
107
|
+
summary: Rails validation
|
108
|
+
test_files:
|
109
|
+
- spec/validations/email_spec.rb
|
110
|
+
- spec/spec_helper.rb
|