data_validator 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 +4 -0
- data/.travis.yml +7 -0
- data/Gemfile +11 -0
- data/MIT-LICENSE +20 -0
- data/README.md +35 -0
- data/Rakefile +12 -0
- data/data_validator.gemspec +27 -0
- data/lib/data_validator/version.rb +3 -0
- data/lib/data_validator.rb +53 -0
- data/lib/validations/acceptance.rb +25 -0
- data/lib/validations/base.rb +41 -0
- data/lib/validations/confirmation.rb +13 -0
- data/lib/validations/format.rb +32 -0
- data/lib/validations/inclusion.rb +32 -0
- data/lib/validations/length.rb +53 -0
- data/lib/validations/numericality.rb +65 -0
- data/lib/validations/presence.rb +12 -0
- data/spec/data_validator_spec.rb +56 -0
- data/spec/locale/en.yml +24 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/validations/acceptance_spec.rb +40 -0
- data/spec/validations/base_spec.rb +45 -0
- data/spec/validations/confirmation_spec.rb +39 -0
- data/spec/validations/format_spec.rb +81 -0
- data/spec/validations/inclusion_spec.rb +45 -0
- data/spec/validations/length_validation_spec.rb +122 -0
- data/spec/validations/numericality_spec.rb +140 -0
- data/spec/validations/presence_validation_spec.rb +24 -0
- metadata +109 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012- HARUYAMA Makoto - http://github.com/SpringMT
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# DataValidator [](https://travis-ci.org/SpringMT/data_validator)
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
Add this line to your application's Gemfile:
|
6
|
+
|
7
|
+
gem 'data_validator'
|
8
|
+
|
9
|
+
And then execute:
|
10
|
+
|
11
|
+
$ bundle
|
12
|
+
|
13
|
+
Or install it yourself as:
|
14
|
+
|
15
|
+
$ gem install data_validator
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
require 'data_validator'
|
20
|
+
|
21
|
+
## Contributing
|
22
|
+
|
23
|
+
1. Fork it
|
24
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
25
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
26
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
27
|
+
5. Create new Pull Request
|
28
|
+
|
29
|
+
## Copyright
|
30
|
+
|
31
|
+
Copyright (c) 2012- HARUAYMA Makoto (SpringMT)
|
32
|
+
|
33
|
+
## License
|
34
|
+
MIT (see MIT-LICENSE)
|
35
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require 'data_validator/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'data_validator'
|
7
|
+
s.version = DataValidator::VERSION
|
8
|
+
s.authors = ['Spring_MT']
|
9
|
+
s.email = ['today.is.sky.blue.sky@gmail.com']
|
10
|
+
s.homepage = 'https://github.com/SpringMT/data_validator'
|
11
|
+
s.summary = %q{DataValidator is validation anywhere}
|
12
|
+
|
13
|
+
s.rubyforge_project = 'data_validator'
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_dependency 'active_support', '~> 3.0.0'
|
21
|
+
s.add_dependency 'i18n', '~> 0.6.1'
|
22
|
+
|
23
|
+
s.description = <<description
|
24
|
+
DataValidator has almost active_recorde validation methods.
|
25
|
+
description
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'data_validator/version'
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
require 'validations/base'
|
6
|
+
|
7
|
+
module DataValidator
|
8
|
+
class Validator
|
9
|
+
attr_accessor :errors
|
10
|
+
|
11
|
+
def initialize(params, rules)
|
12
|
+
@params = params
|
13
|
+
@rules = rules
|
14
|
+
@errors = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def valid?
|
18
|
+
@rules.each_pair do |key, rule|
|
19
|
+
is_allow_nil = rule.delete :allow_nil
|
20
|
+
is_allow_blank = rule.delete :allow_blank
|
21
|
+
next if @params[key].nil? && is_allow_nil
|
22
|
+
next if @params[key].blank? && is_allow_blank
|
23
|
+
|
24
|
+
rule.each_pair do |validator, options|
|
25
|
+
klass = "#{validator.capitalize}Validator"
|
26
|
+
constant = Object
|
27
|
+
constant = constant.const_get "DataValidator"
|
28
|
+
validation = constant.const_get(klass).new(key, @params[key], options, errors)
|
29
|
+
validation.check_validity!
|
30
|
+
validation.validate
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if error?
|
35
|
+
return false
|
36
|
+
else
|
37
|
+
return true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def error?
|
42
|
+
errors.present?
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
Dir[File.dirname(__FILE__) + "/validations/*.rb"].sort.each do |path|
|
49
|
+
filename = File.basename(path)
|
50
|
+
require "validations/#{filename}"
|
51
|
+
end
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module DataValidator
|
4
|
+
class AcceptanceValidator < BaseValidator
|
5
|
+
def initialize(name, value, options, errors)
|
6
|
+
raise ArgumentError, "options must define" unless options
|
7
|
+
case options
|
8
|
+
when Hash
|
9
|
+
options_base = options
|
10
|
+
else
|
11
|
+
options_base = {}
|
12
|
+
end
|
13
|
+
super(name, value, options_base.reverse_merge(:allow_nil => true, :accept => "1"), errors)
|
14
|
+
end
|
15
|
+
|
16
|
+
def validate
|
17
|
+
unless value == options[:accept]
|
18
|
+
error_add :accepted
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'i18n'
|
4
|
+
|
5
|
+
module DataValidator
|
6
|
+
class BaseValidator
|
7
|
+
attr_accessor :name, :value, :options, :errors
|
8
|
+
|
9
|
+
def initialize(name, value, options, errors)
|
10
|
+
raise ArgumentError, "Options must define" if options.blank?
|
11
|
+
|
12
|
+
case options
|
13
|
+
when Hash
|
14
|
+
@options = options
|
15
|
+
else
|
16
|
+
@options = {}
|
17
|
+
end
|
18
|
+
|
19
|
+
@name = name
|
20
|
+
@value = value
|
21
|
+
@errors = errors
|
22
|
+
end
|
23
|
+
|
24
|
+
def check_validity!
|
25
|
+
end
|
26
|
+
|
27
|
+
def validate
|
28
|
+
raise ArgumentError, "Validate method is necessary"
|
29
|
+
end
|
30
|
+
|
31
|
+
def error_add(error_message_key, message_args = {})
|
32
|
+
if errors.key? name
|
33
|
+
errors[name] << I18n.t("errors.messages.#{error_message_key.to_s}", message_args)
|
34
|
+
else
|
35
|
+
errors[name] = [I18n.t("errors.messages.#{error_message_key.to_s}", message_args)]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module DataValidator
|
4
|
+
class FormatValidator < BaseValidator
|
5
|
+
def check_validity!
|
6
|
+
unless options.include?(:with) ^ options.include?(:without) # ^ == xor, or "exclusive or"
|
7
|
+
raise ArgumentError, "Either :with or :without must be supplied (but not both)"
|
8
|
+
end
|
9
|
+
check_options_validity(options, :with)
|
10
|
+
check_options_validity(options, :without)
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate
|
14
|
+
if regexp = options[:with]
|
15
|
+
error_add :invalid if value.to_s !~ regexp
|
16
|
+
elsif regexp = options[:without]
|
17
|
+
error_add :invalid if value.to_s =~ regexp
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def check_options_validity(options, name)
|
23
|
+
option = options[name]
|
24
|
+
if option && !option.is_a?(Regexp) && !option.respond_to?(:call)
|
25
|
+
raise ArgumentError, "A regular expression or a proc or lambda must be supplied as :#{name}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module DataValidator
|
4
|
+
class InclusionValidator < BaseValidator
|
5
|
+
ERROR_MESSAGE = "An object with the method #include? or a proc or lambda is required, " <<
|
6
|
+
"and must be supplied as the :in option of the configuration hash"
|
7
|
+
|
8
|
+
def check_validity!
|
9
|
+
unless [:include?, :call].any?{ |method| options[:in].respond_to?(method) }
|
10
|
+
raise ArgumentError, ERROR_MESSAGE
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def validate
|
15
|
+
delimiter = options[:in]
|
16
|
+
unless delimiter.send(inclusion_method(delimiter), value)
|
17
|
+
error_add :inclusion, value: value
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
# In Ruby 1.9 <tt>Range#include?</tt> on non-numeric ranges checks all possible values in the
|
23
|
+
# range for equality, so it may be slow for large ranges. The new <tt>Range#cover?</tt>
|
24
|
+
# uses the previous logic of comparing a value with the range endpoints.
|
25
|
+
def inclusion_method(enumerable)
|
26
|
+
enumerable.is_a?(Range) ? :cover? : :include?
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module DataValidator
|
4
|
+
class LengthValidator < BaseValidator
|
5
|
+
MESSAGES = { :is => :wrong_length, :minimum => :too_short, :maximum => :too_long }.freeze
|
6
|
+
CHECKS = { :is => :==, :minimum => :>=, :maximum => :<= }.freeze
|
7
|
+
|
8
|
+
def check_validity!
|
9
|
+
if range = (options.delete(:in) || options.delete(:within))
|
10
|
+
raise ArgumentError, ":in and :within must be a Range" unless range.is_a?(Range)
|
11
|
+
options[:minimum], options[:maximum] = range.begin, range.end
|
12
|
+
options[:maximum] -= 1 if range.exclude_end?
|
13
|
+
end
|
14
|
+
|
15
|
+
keys = CHECKS.keys & options.keys
|
16
|
+
if keys.empty?
|
17
|
+
raise ArgumentError, 'Range unspecified. Specify the :in, :within, :maximum, :minimum, or :is option.'
|
18
|
+
end
|
19
|
+
|
20
|
+
keys.each do |key|
|
21
|
+
option_value = options[key]
|
22
|
+
unless option_value.is_a?(Integer) && option_value >= 0
|
23
|
+
raise ArgumentError, ":#{key} must be a nonnegative Integer"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate
|
29
|
+
tokenized_value = tokenize value
|
30
|
+
value_length = tokenized_value.respond_to?(:length) ? tokenized_value.length : tokenized_value.to_s.length
|
31
|
+
|
32
|
+
CHECKS.each do |key, validity_check|
|
33
|
+
next unless check_value = options[key]
|
34
|
+
next if value_length.send(validity_check, check_value)
|
35
|
+
error_add MESSAGES[key], count: check_value
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def tokenize(value)
|
41
|
+
if value.kind_of?(String)
|
42
|
+
if options[:tokenizer]
|
43
|
+
options[:tokenizer].call(value)
|
44
|
+
elsif !value.encoding_aware?
|
45
|
+
value.mb_chars
|
46
|
+
end
|
47
|
+
end || value
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module DataValidator
|
4
|
+
class NumericalityValidator < BaseValidator
|
5
|
+
CHECKS = { :greater_than => :>, :greater_than_or_equal_to => :>=,
|
6
|
+
:equal_to => :==, :less_than => :<, :less_than_or_equal_to => :<=,
|
7
|
+
:odd => :odd?, :even => :even? }.freeze
|
8
|
+
|
9
|
+
def check_validity!
|
10
|
+
keys = CHECKS.keys - [:odd, :even]
|
11
|
+
options.slice(*keys).each do |option, option_value|
|
12
|
+
next if option_value.is_a?(Numeric) || option_value.is_a?(Proc)
|
13
|
+
raise ArgumentError, ":#{option} must be a number, a symbol or a proc"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def validate
|
18
|
+
unless checked_value = parse_raw_value_as_a_number(value)
|
19
|
+
error_add :not_a_number
|
20
|
+
return
|
21
|
+
end
|
22
|
+
|
23
|
+
if options[:only_integer]
|
24
|
+
unless checked_value = parse_raw_value_as_an_integer(value)
|
25
|
+
error_add :not_an_integer
|
26
|
+
return
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
options.slice(*CHECKS.keys).each do |option, option_value|
|
31
|
+
case option
|
32
|
+
when :odd, :even
|
33
|
+
unless checked_value.to_i.send(CHECKS[option])
|
34
|
+
error_add option
|
35
|
+
end
|
36
|
+
else
|
37
|
+
option_value = option_value.call(record) if option_value.is_a?(Proc)
|
38
|
+
unless checked_value.send(CHECKS[option], option_value)
|
39
|
+
error_add option, count: option_value
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
def parse_raw_value_as_a_number(value)
|
47
|
+
case value
|
48
|
+
when /\A0[xX]/
|
49
|
+
nil
|
50
|
+
else
|
51
|
+
begin
|
52
|
+
Kernel.Float(value)
|
53
|
+
rescue ArgumentError, TypeError
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def parse_raw_value_as_an_integer(value)
|
60
|
+
value.to_i if value.to_s =~ /\A[+-]?\d+\Z/
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
5
|
+
|
6
|
+
module DataValidator
|
7
|
+
class DummyValidator
|
8
|
+
attr_accessor :name, :value, :options, :errors
|
9
|
+
def initialize(name, value, options, errors)
|
10
|
+
@name = name; @value = value; @options = options; @errors = errors;
|
11
|
+
end
|
12
|
+
def check_validity!
|
13
|
+
end
|
14
|
+
def validate
|
15
|
+
unless options
|
16
|
+
errors[name] = 'dummy error'
|
17
|
+
end
|
18
|
+
options
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe DataValidator::Validator do
|
24
|
+
describe :valid? do
|
25
|
+
context 'allow_nil with nil params' do
|
26
|
+
subject { DataValidator::Validator.new({name: nil}, {name: {dummy: true, allow_nil: true}}).valid? }
|
27
|
+
it { should be_true }
|
28
|
+
end
|
29
|
+
context 'allow_nil with blank params' do
|
30
|
+
subject { DataValidator::Validator.new({name: ""}, {name: {dummy: false, allow_nil: true}}).valid? }
|
31
|
+
it {should be_false}
|
32
|
+
end
|
33
|
+
context 'allow_blank with blank params' do
|
34
|
+
subject { DataValidator::Validator.new({name: ""}, {name: {dummy: true, allow_blank: true}}).valid? }
|
35
|
+
it { should be_true }
|
36
|
+
end
|
37
|
+
context 'undefied validatior' do
|
38
|
+
it { expect { DataValidator::Validator.new({name: 'dummy'}, {name: {test: true}}).valid? }.to raise_error(NameError) }
|
39
|
+
end
|
40
|
+
context 'validation true' do
|
41
|
+
subject { DataValidator::Validator.new({name: 'dummy'}, {name: {dummy: true}}).valid? }
|
42
|
+
it { should be_true }
|
43
|
+
end
|
44
|
+
context 'validation false' do
|
45
|
+
let(:obj) { DataValidator::Validator.new({name: 'dummy'}, {name: {dummy: false}}) }
|
46
|
+
it { obj.valid?.should be_false }
|
47
|
+
it do
|
48
|
+
obj.valid?
|
49
|
+
obj.errors[:name].should be_eql 'dummy error'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
data/spec/locale/en.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
en:
|
2
|
+
errors:
|
3
|
+
messages:
|
4
|
+
inclusion: "is not included in the list"
|
5
|
+
exclusion: "is reserved"
|
6
|
+
invalid: "is invalid"
|
7
|
+
confirmation: "doesn't match confirmation"
|
8
|
+
accepted: "must be accepted"
|
9
|
+
empty: "can't be empty"
|
10
|
+
blank: "can't be blank"
|
11
|
+
too_long: "is too long (maximum is %{count} characters)"
|
12
|
+
too_short: "is too short (minimum is %{count} characters)"
|
13
|
+
wrong_length: "is the wrong length (should be %{count} characters)"
|
14
|
+
taken: "has already been taken"
|
15
|
+
not_a_number: "is not a number"
|
16
|
+
not_an_integer: "is not an integer"
|
17
|
+
greater_than: "must be greater than %{count}"
|
18
|
+
greater_than_or_equal_to: "must be greater than or equal to %{count}"
|
19
|
+
equal_to: "must be equal to %{count}"
|
20
|
+
less_than: "must be less than %{count}"
|
21
|
+
less_than_or_equal_to: "must be less than or equal to %{count}"
|
22
|
+
odd: "must be odd"
|
23
|
+
even: "must be even"
|
24
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
Bundler.setup(:default, :test)
|
6
|
+
Bundler.require(:default, :test)
|
7
|
+
|
8
|
+
require 'rspec'
|
9
|
+
|
10
|
+
$TESTING=true
|
11
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
12
|
+
require 'data_validator'
|
13
|
+
|
14
|
+
I18n.load_path += Dir[File.join(File.dirname(__FILE__), 'locale', '*.{rb,yml}')]
|
15
|
+
|
16
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::AcceptanceValidator do
|
7
|
+
context 'validation true' do
|
8
|
+
subject do
|
9
|
+
DataValidator::Validator.new(
|
10
|
+
{terms_of_service: '1'},
|
11
|
+
{terms_of_service: {acceptance: true}}
|
12
|
+
).valid?
|
13
|
+
end
|
14
|
+
it { should be_true }
|
15
|
+
end
|
16
|
+
context 'validation true with different accept' do
|
17
|
+
subject do
|
18
|
+
DataValidator::Validator.new(
|
19
|
+
{terms_of_service: 'yes'},
|
20
|
+
{terms_of_service: {acceptance: {accept: 'yes'}}}
|
21
|
+
).valid?
|
22
|
+
end
|
23
|
+
it { should be_true }
|
24
|
+
end
|
25
|
+
context 'validation false' do
|
26
|
+
before do
|
27
|
+
@obj = DataValidator::Validator.new(
|
28
|
+
{terms_of_service: '0'},
|
29
|
+
{terms_of_service: {acceptance: true}}
|
30
|
+
)
|
31
|
+
end
|
32
|
+
it { @obj.valid?.should be_false }
|
33
|
+
it do
|
34
|
+
@obj.valid?
|
35
|
+
@obj.errors.should eql({terms_of_service: ["must be accepted"]})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::BaseValidator do
|
7
|
+
describe :initialize do
|
8
|
+
context 'options is blank' do
|
9
|
+
it { expect{ DataValidator::BaseValidator.new(:name, 'value', '', {}) }.to raise_error(ArgumentError) }
|
10
|
+
end
|
11
|
+
context 'options is true' do
|
12
|
+
subject { DataValidator::BaseValidator.new(:name, 'value', true, {}) }
|
13
|
+
it { subject.options.should be_eql({}) }
|
14
|
+
end
|
15
|
+
context 'options is hash' do
|
16
|
+
subject { DataValidator::BaseValidator.new(:name, 'value', {test: 'test'}, {}) }
|
17
|
+
it { subject.options.should be_eql({test: 'test'}) }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe :validate do
|
22
|
+
context 'validate method is override' do
|
23
|
+
it { expect{ DataValidator::BaseValidator.new(:name, 'value', true, {}).validate }.to raise_error(ArgumentError) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe :error_add do
|
28
|
+
before { @obj = DataValidator::BaseValidator.new(:name, 'value', true, {}) }
|
29
|
+
context 'add an error first' do
|
30
|
+
it do
|
31
|
+
@obj.error_add(:blank)
|
32
|
+
@obj.errors.should eql({name: ["can't be blank"]})
|
33
|
+
end
|
34
|
+
end
|
35
|
+
context 'add an errors secondly' do
|
36
|
+
it do
|
37
|
+
@obj.error_add(:blank)
|
38
|
+
@obj.error_add(:invalid)
|
39
|
+
@obj.errors.should eql({name: ["can't be blank", "is invalid"]})
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::AcceptanceValidator do
|
7
|
+
context 'validation true' do
|
8
|
+
subject do
|
9
|
+
params = {password: "password", password_confirmation: "password"}
|
10
|
+
DataValidator::Validator.new(
|
11
|
+
params,
|
12
|
+
{
|
13
|
+
password: {confirmation: {criterion: params[:password_confirmation]}},
|
14
|
+
password_confirmation: {presence: true}
|
15
|
+
}
|
16
|
+
).valid?
|
17
|
+
end
|
18
|
+
it { should be_true }
|
19
|
+
end
|
20
|
+
context 'validation false' do
|
21
|
+
before do
|
22
|
+
params = {password: "password", password_confirmation: "hoge"}
|
23
|
+
@obj = DataValidator::Validator.new(
|
24
|
+
params,
|
25
|
+
{
|
26
|
+
password: {confirmation: {criterion: params[:password_confirmation]}},
|
27
|
+
password_confirmation: {presence: true}
|
28
|
+
}
|
29
|
+
)
|
30
|
+
end
|
31
|
+
it { @obj.valid?.should be_false }
|
32
|
+
it do
|
33
|
+
@obj.valid?
|
34
|
+
@obj.errors.should eql({password: ["doesn't match confirmation"]})
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::FormatValidator do
|
7
|
+
context 'validation true' do
|
8
|
+
context 'with' do
|
9
|
+
subject do
|
10
|
+
DataValidator::Validator.new(
|
11
|
+
{name: "abc"},
|
12
|
+
{name: {format: {with: /\A[a-zA-Z]+\z/}}}
|
13
|
+
).valid?
|
14
|
+
end
|
15
|
+
it { should be_true }
|
16
|
+
end
|
17
|
+
context 'without' do
|
18
|
+
subject do
|
19
|
+
DataValidator::Validator.new(
|
20
|
+
{name: "123"},
|
21
|
+
{name: {format: {without: /\A[a-zA-Z]+\z/}}}
|
22
|
+
).valid?
|
23
|
+
end
|
24
|
+
it { should be_true }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'validation false' do
|
29
|
+
context 'with' do
|
30
|
+
before do
|
31
|
+
@obj = DataValidator::Validator.new(
|
32
|
+
{name: "123"},
|
33
|
+
{name: {format: {with: /\A[a-zA-Z]+\z/}}}
|
34
|
+
)
|
35
|
+
end
|
36
|
+
it { @obj.valid?.should be_false }
|
37
|
+
it do
|
38
|
+
@obj.valid?
|
39
|
+
@obj.errors.should eql({name: ["is invalid"]})
|
40
|
+
end
|
41
|
+
end
|
42
|
+
context 'without' do
|
43
|
+
before do
|
44
|
+
@obj = DataValidator::Validator.new(
|
45
|
+
{name: "abc"},
|
46
|
+
{name: {format: {without: /\A[a-zA-Z]+\z/}}}
|
47
|
+
)
|
48
|
+
end
|
49
|
+
it { @obj.valid?.should be_false }
|
50
|
+
it do
|
51
|
+
@obj.valid?
|
52
|
+
@obj.errors.should eql({name: ["is invalid"]})
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'invalid optiosn' do
|
58
|
+
context 'with and without both' do
|
59
|
+
it do
|
60
|
+
expect do
|
61
|
+
DataValidator::Validator.new(
|
62
|
+
{name: "123"},
|
63
|
+
{name: {format: {with: /\d+/, without: /\A[a-zA-Z]+\z/}}}
|
64
|
+
).valid?
|
65
|
+
end.to raise_error(ArgumentError)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
context 'a regular expression nor proc' do
|
69
|
+
it do
|
70
|
+
expect do
|
71
|
+
DataValidator::Validator.new(
|
72
|
+
{name: "123"},
|
73
|
+
{name: {format: {with: "test"}}}
|
74
|
+
).valid?
|
75
|
+
end.to raise_error(ArgumentError)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::InclusionValidator do
|
7
|
+
context 'validation true' do
|
8
|
+
context 'in' do
|
9
|
+
subject do
|
10
|
+
DataValidator::Validator.new(
|
11
|
+
{name: 'name'},
|
12
|
+
{name: {inclusion: {in: ['name', 'bar']}}}
|
13
|
+
).valid?
|
14
|
+
end
|
15
|
+
it { should be_true }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'validation false' do
|
20
|
+
before do
|
21
|
+
@obj = DataValidator::Validator.new(
|
22
|
+
{name: 'name'},
|
23
|
+
{name: {inclusion: {in: ['foo', 'bar']}}}
|
24
|
+
)
|
25
|
+
end
|
26
|
+
it {@obj.valid?.should be_false}
|
27
|
+
it do
|
28
|
+
@obj.valid?
|
29
|
+
@obj.errors.should eql({name: ["is not included in the list"]})
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'invalid options' do
|
34
|
+
it do
|
35
|
+
expect do
|
36
|
+
DataValidator::Validator.new(
|
37
|
+
{name: "123"},
|
38
|
+
{name: {inclusion: {in: 123}}}
|
39
|
+
).valid?
|
40
|
+
end.to raise_error(ArgumentError)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
@@ -0,0 +1,122 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::LengthValidator do
|
7
|
+
context 'validation true' do
|
8
|
+
context 'is' do
|
9
|
+
subject do
|
10
|
+
DataValidator::Validator.new(
|
11
|
+
{name: 'name'},
|
12
|
+
{name: {length: {is: 4}}}
|
13
|
+
).valid?
|
14
|
+
end
|
15
|
+
it { should be_true }
|
16
|
+
end
|
17
|
+
context 'is with token' do
|
18
|
+
subject do
|
19
|
+
DataValidator::Validator.new(
|
20
|
+
{name: 'i am test name'},
|
21
|
+
{name: {length: {is: 4, tokenizer: lambda { |str| str.scan(/\w+/) }}}}
|
22
|
+
).valid?
|
23
|
+
end
|
24
|
+
it { should be_true }
|
25
|
+
end
|
26
|
+
context 'maximum and minimum' do
|
27
|
+
subject do
|
28
|
+
DataValidator::Validator.new(
|
29
|
+
{name: 'name'},
|
30
|
+
{name: {length: {maximum: 100, minimum: 2}}}
|
31
|
+
).valid?
|
32
|
+
end
|
33
|
+
it { should be_true }
|
34
|
+
end
|
35
|
+
context 'in' do
|
36
|
+
subject do
|
37
|
+
DataValidator::Validator.new(
|
38
|
+
{name: 'name'},
|
39
|
+
{name: {length: {in: 3..7}}}
|
40
|
+
).valid?
|
41
|
+
end
|
42
|
+
it { should be_true }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'validation false' do
|
47
|
+
context 'is' do
|
48
|
+
before do
|
49
|
+
@obj = DataValidator::Validator.new(
|
50
|
+
{name: 'name'},
|
51
|
+
{name: {length: {is: 5}}}
|
52
|
+
)
|
53
|
+
end
|
54
|
+
it { @obj.valid?.should be_false }
|
55
|
+
it do
|
56
|
+
@obj.valid?
|
57
|
+
@obj.errors.should eql({name: ["is the wrong length (should be 5 characters)"]})
|
58
|
+
end
|
59
|
+
end
|
60
|
+
context 'maximum' do
|
61
|
+
before do
|
62
|
+
@obj = DataValidator::Validator.new(
|
63
|
+
{name: 'name'},
|
64
|
+
{name: {length: {maximum: 2}}}
|
65
|
+
)
|
66
|
+
end
|
67
|
+
it { @obj.valid?.should be_false }
|
68
|
+
it do
|
69
|
+
@obj.valid?
|
70
|
+
@obj.errors.should eql({name: ["is too long (maximum is 2 characters)"]})
|
71
|
+
end
|
72
|
+
end
|
73
|
+
context 'minimum' do
|
74
|
+
before do
|
75
|
+
@obj = DataValidator::Validator.new(
|
76
|
+
{name: 'name'},
|
77
|
+
{name: {length: {minimum: 5}}}
|
78
|
+
)
|
79
|
+
end
|
80
|
+
it { @obj.valid?.should be_false }
|
81
|
+
it do
|
82
|
+
@obj.valid?
|
83
|
+
@obj.errors.should eql({name: ["is too short (minimum is 5 characters)"]})
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'invalid options' do
|
89
|
+
context 'not Range with in:' do
|
90
|
+
it do
|
91
|
+
expect do
|
92
|
+
DataValidator::Validator.new(
|
93
|
+
{name: 'name'},
|
94
|
+
{name: {length: {in: 123}}}
|
95
|
+
).valid?
|
96
|
+
end.to raise_error(ArgumentError)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
context 'unexist options' do
|
100
|
+
it do
|
101
|
+
expect do
|
102
|
+
DataValidator::Validator.new(
|
103
|
+
{name: 'name'},
|
104
|
+
{name: {length: {test: 123}}}
|
105
|
+
).valid?
|
106
|
+
end.to raise_error(ArgumentError)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
context 'negative Integer' do
|
110
|
+
it do
|
111
|
+
expect do
|
112
|
+
DataValidator::Validator.new(
|
113
|
+
{name: 'name'},
|
114
|
+
{name: {length: {minimum: -1}}}
|
115
|
+
).valid?
|
116
|
+
end.to raise_error(ArgumentError)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
@@ -0,0 +1,140 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::LengthValidator do
|
7
|
+
shared_examples_for :validtion_true do |params, rule|
|
8
|
+
subject do
|
9
|
+
DataValidator::Validator.new(
|
10
|
+
params,
|
11
|
+
rule
|
12
|
+
).valid?
|
13
|
+
end
|
14
|
+
it { should be_true }
|
15
|
+
end
|
16
|
+
shared_examples_for :validtion_false do |params, rule, name, message|
|
17
|
+
before do
|
18
|
+
@obj = DataValidator::Validator.new(
|
19
|
+
params,
|
20
|
+
rule
|
21
|
+
)
|
22
|
+
end
|
23
|
+
it { @obj.valid?.should be_false }
|
24
|
+
it do
|
25
|
+
@obj.valid?
|
26
|
+
@obj.errors.should eql({name => [message]})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'validtion true' do
|
31
|
+
context 'only numeric check' do
|
32
|
+
it_behaves_like :validtion_true, {num: "001"}, {num: {numericality: true}}
|
33
|
+
end
|
34
|
+
context 'greater_than' do
|
35
|
+
it_behaves_like :validtion_true, {num: "100.1"}, {num: {numericality: {greater_than: 100}}}
|
36
|
+
end
|
37
|
+
context 'greater_than_or_equal_to' do
|
38
|
+
it_behaves_like :validtion_true, {num: "100"}, {num: {numericality: {greater_than_or_equal_to: 100}}}
|
39
|
+
end
|
40
|
+
context 'equal_to' do
|
41
|
+
it_behaves_like :validtion_true, {num: "100"}, {num: {numericality: {equal_to: 100}}}
|
42
|
+
end
|
43
|
+
context 'less_than' do
|
44
|
+
it_behaves_like :validtion_true, {num: "99.9"}, {num: {numericality: {less_than: 100}}}
|
45
|
+
end
|
46
|
+
context 'less_than_or_equal_to' do
|
47
|
+
it_behaves_like :validtion_true, {num: "100"}, {num: {numericality: {less_than_or_equal_to: 100}}}
|
48
|
+
end
|
49
|
+
context 'odd' do
|
50
|
+
it_behaves_like :validtion_true, {num: "101"}, {num: {numericality: {odd: true}}}
|
51
|
+
end
|
52
|
+
context 'even' do
|
53
|
+
it_behaves_like :validtion_true, {num: "100"}, {num: {numericality: {even: true}}}
|
54
|
+
end
|
55
|
+
context 'only_integer' do
|
56
|
+
it_behaves_like :validtion_true, {num: "-1"}, {num: {numericality: {only_integer: true}}}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'validtion true' do
|
61
|
+
context 'only numeric check' do
|
62
|
+
it_behaves_like :validtion_false,
|
63
|
+
{num: "test"},
|
64
|
+
{num: {numericality: true}},
|
65
|
+
:num,
|
66
|
+
"is not a number"
|
67
|
+
end
|
68
|
+
context 'greater_than' do
|
69
|
+
it_behaves_like :validtion_false,
|
70
|
+
{num: "100"},
|
71
|
+
{num: {numericality: {greater_than: 100}}},
|
72
|
+
:num,
|
73
|
+
"must be greater than 100"
|
74
|
+
end
|
75
|
+
context 'greater_than_or_equal_to' do
|
76
|
+
it_behaves_like :validtion_false,
|
77
|
+
{num: "99.9"},
|
78
|
+
{num: {numericality: {greater_than_or_equal_to: 100}}},
|
79
|
+
:num,
|
80
|
+
"must be greater than or equal to 100"
|
81
|
+
end
|
82
|
+
context 'equal_to' do
|
83
|
+
it_behaves_like :validtion_false,
|
84
|
+
{num: "99"},
|
85
|
+
{num: {numericality: {equal_to: 100}}},
|
86
|
+
:num,
|
87
|
+
"must be equal to 100"
|
88
|
+
end
|
89
|
+
context 'less_than' do
|
90
|
+
it_behaves_like :validtion_false,
|
91
|
+
{num: "100"},
|
92
|
+
{num: {numericality: {less_than: 100}}},
|
93
|
+
:num,
|
94
|
+
"must be less than 100"
|
95
|
+
end
|
96
|
+
context 'less_than_or_equal_to' do
|
97
|
+
it_behaves_like :validtion_false,
|
98
|
+
{num: "100.1"},
|
99
|
+
{num: {numericality: {less_than_or_equal_to: 100}}},
|
100
|
+
:num,
|
101
|
+
"must be less than or equal to 100"
|
102
|
+
end
|
103
|
+
context 'odd' do
|
104
|
+
it_behaves_like :validtion_false,
|
105
|
+
{num: "100"},
|
106
|
+
{num: {numericality: {odd: true}}},
|
107
|
+
:num,
|
108
|
+
"must be odd"
|
109
|
+
end
|
110
|
+
context 'even' do
|
111
|
+
it_behaves_like :validtion_false,
|
112
|
+
{num: "101"},
|
113
|
+
{num: {numericality: {even: true}}},
|
114
|
+
:num,
|
115
|
+
"must be even"
|
116
|
+
end
|
117
|
+
context 'only_integer' do
|
118
|
+
it_behaves_like :validtion_false,
|
119
|
+
{num: "1.001"},
|
120
|
+
{num: {numericality: {only_integer: true}}},
|
121
|
+
:num,
|
122
|
+
"is not an integer"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'invalid options' do
|
127
|
+
context 'option_value is not Numeric' do
|
128
|
+
it do
|
129
|
+
expect do
|
130
|
+
DataValidator::Validator.new(
|
131
|
+
{num: "100"},
|
132
|
+
{num: {numericality: {greater_than: "aaaa"}}},
|
133
|
+
).valid?
|
134
|
+
end.to raise_error(ArgumentError)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..' ,'spec_helper')
|
5
|
+
|
6
|
+
describe DataValidator::PresenceValidator do
|
7
|
+
context 'validtion true' do
|
8
|
+
subject do
|
9
|
+
DataValidator::Validator.new(
|
10
|
+
{name: 'name'},
|
11
|
+
{name: {presence: true}}
|
12
|
+
).valid?
|
13
|
+
end
|
14
|
+
it { should be_true }
|
15
|
+
end
|
16
|
+
context 'validation false' do
|
17
|
+
before { @obj = DataValidator::Validator.new({name: ''}, {name: {presence: true}}) }
|
18
|
+
it { @obj.valid?.should be_false }
|
19
|
+
it do
|
20
|
+
@obj.valid?
|
21
|
+
@obj.errors.should eql({name: ["can't be blank"]})
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: data_validator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Spring_MT
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: active_support
|
16
|
+
requirement: &70098909584760 !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: *70098909584760
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: i18n
|
27
|
+
requirement: &70098909582200 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.6.1
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70098909582200
|
36
|
+
description: ! ' DataValidator has almost active_recorde validation methods.
|
37
|
+
|
38
|
+
'
|
39
|
+
email:
|
40
|
+
- today.is.sky.blue.sky@gmail.com
|
41
|
+
executables: []
|
42
|
+
extensions: []
|
43
|
+
extra_rdoc_files: []
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- .travis.yml
|
47
|
+
- Gemfile
|
48
|
+
- MIT-LICENSE
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
51
|
+
- data_validator.gemspec
|
52
|
+
- lib/data_validator.rb
|
53
|
+
- lib/data_validator/version.rb
|
54
|
+
- lib/validations/acceptance.rb
|
55
|
+
- lib/validations/base.rb
|
56
|
+
- lib/validations/confirmation.rb
|
57
|
+
- lib/validations/format.rb
|
58
|
+
- lib/validations/inclusion.rb
|
59
|
+
- lib/validations/length.rb
|
60
|
+
- lib/validations/numericality.rb
|
61
|
+
- lib/validations/presence.rb
|
62
|
+
- spec/data_validator_spec.rb
|
63
|
+
- spec/locale/en.yml
|
64
|
+
- spec/spec_helper.rb
|
65
|
+
- spec/validations/acceptance_spec.rb
|
66
|
+
- spec/validations/base_spec.rb
|
67
|
+
- spec/validations/confirmation_spec.rb
|
68
|
+
- spec/validations/format_spec.rb
|
69
|
+
- spec/validations/inclusion_spec.rb
|
70
|
+
- spec/validations/length_validation_spec.rb
|
71
|
+
- spec/validations/numericality_spec.rb
|
72
|
+
- spec/validations/presence_validation_spec.rb
|
73
|
+
homepage: https://github.com/SpringMT/data_validator
|
74
|
+
licenses: []
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
requirements: []
|
92
|
+
rubyforge_project: data_validator
|
93
|
+
rubygems_version: 1.8.11
|
94
|
+
signing_key:
|
95
|
+
specification_version: 3
|
96
|
+
summary: DataValidator is validation anywhere
|
97
|
+
test_files:
|
98
|
+
- spec/data_validator_spec.rb
|
99
|
+
- spec/locale/en.yml
|
100
|
+
- spec/spec_helper.rb
|
101
|
+
- spec/validations/acceptance_spec.rb
|
102
|
+
- spec/validations/base_spec.rb
|
103
|
+
- spec/validations/confirmation_spec.rb
|
104
|
+
- spec/validations/format_spec.rb
|
105
|
+
- spec/validations/inclusion_spec.rb
|
106
|
+
- spec/validations/length_validation_spec.rb
|
107
|
+
- spec/validations/numericality_spec.rb
|
108
|
+
- spec/validations/presence_validation_spec.rb
|
109
|
+
has_rdoc:
|