anodator 1.0.0.pre1 → 1.0.0.pre2
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 +5 -5
- data/.codeclimate.yml +3 -0
- data/.gitignore +3 -0
- data/.travis.yml +11 -0
- data/Gemfile +2 -2
- data/README.md +9 -4
- data/Rakefile +3 -3
- data/anodator.gemspec +17 -14
- data/bin/console +3 -3
- data/bin/console-on-docker +4 -0
- data/bin/docker-console +2 -0
- data/bin/docker-prompt +2 -0
- data/bin/prompt-on-docker +4 -0
- data/bin/setup +0 -0
- data/example/example_01.rb +88 -61
- data/lib/anodator.rb +3 -2
- data/lib/anodator/anodator_error.rb +1 -1
- data/lib/anodator/check_result.rb +7 -7
- data/lib/anodator/checker.rb +33 -26
- data/lib/anodator/common.rb +15 -0
- data/lib/anodator/data_source.rb +87 -0
- data/lib/anodator/data_source_set.rb +36 -0
- data/lib/anodator/input_spec.rb +105 -111
- data/lib/anodator/input_spec_item.rb +8 -8
- data/lib/anodator/message.rb +14 -14
- data/lib/anodator/output_spec.rb +40 -43
- data/lib/anodator/rule.rb +26 -32
- data/lib/anodator/rule_set.rb +6 -12
- data/lib/anodator/utils.rb +36 -42
- data/lib/anodator/validator.rb +9 -9
- data/lib/anodator/validator/base.rb +44 -27
- data/lib/anodator/validator/blank_validator.rb +2 -2
- data/lib/anodator/validator/complex_validator.rb +12 -12
- data/lib/anodator/validator/configuration_error.rb +1 -2
- data/lib/anodator/validator/date_validator.rb +93 -103
- data/lib/anodator/validator/format_validator.rb +8 -11
- data/lib/anodator/validator/inclusion_validator.rb +3 -3
- data/lib/anodator/validator/length_validator.rb +6 -6
- data/lib/anodator/validator/numeric_validator.rb +13 -13
- data/lib/anodator/validator/presence_validator.rb +2 -2
- data/lib/anodator/validator/value_proxy.rb +31 -9
- data/lib/anodator/version.rb +1 -1
- metadata +41 -6
- data/VERSION +0 -1
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'anodator/validator/base'
|
2
|
+
require 'anodator/validator/configuration_error'
|
3
3
|
|
4
4
|
module Anodator
|
5
5
|
module Validator
|
@@ -7,29 +7,26 @@ module Anodator
|
|
7
7
|
ALL_ZENKAKU_REGEXP = /(?:[\xEF\xBD\xA1-\xEF\xBD\xBF]|[\xEF\xBE\x80-\xEF\xBE\x9F])|[\x20-\x7E]/
|
8
8
|
|
9
9
|
valid_option_keys :format, :all_zenkaku
|
10
|
-
default_options :
|
10
|
+
default_options all_zenkaku: false
|
11
11
|
|
12
|
-
def initialize(target_expression, options = {
|
12
|
+
def initialize(target_expression, options = {})
|
13
13
|
super(target_expression, options)
|
14
14
|
|
15
15
|
if @options[:format].is_a? String
|
16
|
-
@options[:format] = Regexp.new(
|
16
|
+
@options[:format] = Regexp.new((@options[:format]).to_s)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
def validate
|
21
21
|
if target_value.split(//).size.zero?
|
22
|
-
if allow_blank?
|
23
|
-
return true
|
24
|
-
end
|
22
|
+
return true if allow_blank?
|
25
23
|
end
|
26
24
|
|
27
|
-
|
28
25
|
if @options[:all_zenkaku]
|
29
26
|
return target_value !~ ALL_ZENKAKU_REGEXP
|
30
27
|
else
|
31
28
|
unless @options[:format].is_a? Regexp
|
32
|
-
raise ConfigurationError
|
29
|
+
raise ConfigurationError, ':format option must be Regexp object'
|
33
30
|
end
|
34
31
|
|
35
32
|
if @options[:format].match target_value
|
@@ -41,7 +38,7 @@ module Anodator
|
|
41
38
|
end
|
42
39
|
|
43
40
|
def format
|
44
|
-
|
41
|
+
@options[:format].dup
|
45
42
|
end
|
46
43
|
end
|
47
44
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'anodator/validator/base'
|
2
2
|
|
3
3
|
module Anodator
|
4
4
|
module Validator
|
@@ -11,10 +11,10 @@ module Anodator
|
|
11
11
|
end
|
12
12
|
|
13
13
|
unless @options[:in].respond_to? :include?
|
14
|
-
raise ConfigurationError
|
14
|
+
raise ConfigurationError, ':in option must be responed_to include?'
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
@options[:in].include?(target_value)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'anodator/validator/base'
|
2
|
+
require 'anodator/validator/configuration_error'
|
3
3
|
|
4
4
|
module Anodator
|
5
5
|
module Validator
|
6
6
|
class LengthValidator < Base
|
7
7
|
valid_option_keys :in, :maximum, :minimum, :is
|
8
8
|
|
9
|
-
def initialize(target_expression, options = {
|
9
|
+
def initialize(target_expression, options = {})
|
10
10
|
super(target_expression, options)
|
11
11
|
|
12
|
-
[
|
12
|
+
%i[maximum minimum is].each do |key|
|
13
13
|
@options[key] = proxy_value(@options[key]) unless @options[key].nil?
|
14
14
|
end
|
15
15
|
end
|
@@ -27,7 +27,7 @@ module Anodator
|
|
27
27
|
if configuration.is_a? Range
|
28
28
|
return false unless configuration.include?(length)
|
29
29
|
else
|
30
|
-
raise ConfigurationError
|
30
|
+
raise ConfigurationError, ':in option value must be Range object'
|
31
31
|
end
|
32
32
|
when :maximum
|
33
33
|
return false if length > configuration.value.to_i
|
@@ -38,7 +38,7 @@ module Anodator
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
true
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'anodator/validator/base'
|
2
|
+
require 'bigdecimal'
|
3
3
|
|
4
4
|
module Anodator
|
5
5
|
module Validator
|
6
6
|
class NumericValidator < Base
|
7
7
|
valid_option_keys :only_integer, :greater_than, :greater_than_or_equal_to
|
8
8
|
valid_option_keys :less_than, :less_than_or_equal_to, :equal_to, :not_equal_to
|
9
|
-
default_options :
|
9
|
+
default_options only_integer: false
|
10
10
|
|
11
|
-
def initialize(target_expression, options = {
|
11
|
+
def initialize(target_expression, options = {})
|
12
12
|
super(target_expression, options)
|
13
13
|
|
14
|
-
[
|
15
|
-
|
16
|
-
|
14
|
+
%i[greater_than greater_than_or_equal_to
|
15
|
+
less_than less_than_or_equal_to
|
16
|
+
equal_to not_equal_to].each do |key|
|
17
17
|
@options[key] = proxy_value(@options[key]) unless @options[key].nil?
|
18
18
|
end
|
19
19
|
end
|
@@ -24,11 +24,11 @@ module Anodator
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# check format
|
27
|
-
if @options[:only_integer]
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
regexp = if @options[:only_integer]
|
28
|
+
/^-?\d+$/
|
29
|
+
else
|
30
|
+
/^-?\d+(\.\d+)?$/
|
31
|
+
end
|
32
32
|
return false unless regexp.match target_value
|
33
33
|
|
34
34
|
# convert BigDecimal value
|
@@ -51,7 +51,7 @@ module Anodator
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
|
54
|
+
true
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'anodator/validator/base'
|
2
2
|
|
3
3
|
module Anodator
|
4
4
|
module Validator
|
@@ -7,7 +7,7 @@ module Anodator
|
|
7
7
|
# This is the Validator to validate whether the value is present.
|
8
8
|
class PresenceValidator < Base
|
9
9
|
def validate
|
10
|
-
|
10
|
+
!target_value.split(//).size.zero?
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -2,39 +2,61 @@ module Anodator
|
|
2
2
|
module Validator
|
3
3
|
class ValueProxy
|
4
4
|
REGEXP_INDIRECT = /\A\[\[([^\]]+)\]\]\Z/
|
5
|
+
REGEXP_DATA_SOURCE = /\A\{\{([^\}]+)\}\}\Z/
|
5
6
|
|
6
7
|
def initialize(value, validator)
|
7
8
|
@value = value
|
8
9
|
@validator = validator
|
9
10
|
@indirect = false
|
11
|
+
@data_source = false
|
10
12
|
|
11
13
|
if matched = REGEXP_INDIRECT.match(@value.to_s)
|
12
14
|
@indirect = true
|
13
15
|
@value = matched[1]
|
14
16
|
end
|
17
|
+
|
18
|
+
if matched = REGEXP_DATA_SOURCE.match(@value.to_s)
|
19
|
+
@indirect = true
|
20
|
+
@data_source = true
|
21
|
+
@value = matched[1].split(':', 3).map do |v|
|
22
|
+
ValueProxy.new(v, validator)
|
23
|
+
end
|
24
|
+
end
|
15
25
|
end
|
16
26
|
|
17
27
|
def indirect?
|
18
|
-
|
28
|
+
@indirect
|
19
29
|
end
|
20
30
|
|
21
31
|
def direct?
|
22
|
-
|
32
|
+
!@indirect
|
33
|
+
end
|
34
|
+
|
35
|
+
def data_source?
|
36
|
+
@data_source
|
23
37
|
end
|
24
38
|
|
25
39
|
def value
|
26
|
-
if
|
27
|
-
|
28
|
-
|
29
|
-
|
40
|
+
if indirect?
|
41
|
+
if data_source?
|
42
|
+
@validator.data_source_at(@value[0].value,
|
43
|
+
@value[1].value,
|
44
|
+
@value[2].value)
|
45
|
+
else
|
46
|
+
@validator.argument_value_at(@value)
|
47
|
+
end
|
48
|
+
else # if direct?
|
49
|
+
@value
|
30
50
|
end
|
31
51
|
end
|
32
52
|
|
33
53
|
def to_s
|
34
|
-
if
|
35
|
-
|
54
|
+
if indirect?
|
55
|
+
"#{@value}(Indirect)"
|
56
|
+
elsif data_source?
|
57
|
+
@value.map { |v| v.to_s }.join(':') + '(DataSource)'
|
36
58
|
else
|
37
|
-
|
59
|
+
@value.to_s
|
38
60
|
end
|
39
61
|
end
|
40
62
|
end
|
data/lib/anodator/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anodator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tetsuhisa MAKINO
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
description:
|
56
84
|
email:
|
57
85
|
- tim.makino at gmail.com
|
@@ -59,6 +87,7 @@ executables: []
|
|
59
87
|
extensions: []
|
60
88
|
extra_rdoc_files: []
|
61
89
|
files:
|
90
|
+
- ".codeclimate.yml"
|
62
91
|
- ".document"
|
63
92
|
- ".gitignore"
|
64
93
|
- ".rspec"
|
@@ -68,15 +97,21 @@ files:
|
|
68
97
|
- README.ja.md
|
69
98
|
- README.md
|
70
99
|
- Rakefile
|
71
|
-
- VERSION
|
72
100
|
- anodator.gemspec
|
73
101
|
- bin/console
|
102
|
+
- bin/console-on-docker
|
103
|
+
- bin/docker-console
|
104
|
+
- bin/docker-prompt
|
105
|
+
- bin/prompt-on-docker
|
74
106
|
- bin/setup
|
75
107
|
- example/example_01.rb
|
76
108
|
- lib/anodator.rb
|
77
109
|
- lib/anodator/anodator_error.rb
|
78
110
|
- lib/anodator/check_result.rb
|
79
111
|
- lib/anodator/checker.rb
|
112
|
+
- lib/anodator/common.rb
|
113
|
+
- lib/anodator/data_source.rb
|
114
|
+
- lib/anodator/data_source_set.rb
|
80
115
|
- lib/anodator/input_spec.rb
|
81
116
|
- lib/anodator/input_spec_item.rb
|
82
117
|
- lib/anodator/message.rb
|
@@ -107,9 +142,9 @@ require_paths:
|
|
107
142
|
- lib
|
108
143
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
144
|
requirements:
|
110
|
-
- - "
|
145
|
+
- - "~>"
|
111
146
|
- !ruby/object:Gem::Version
|
112
|
-
version: '
|
147
|
+
version: '2.4'
|
113
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
149
|
requirements:
|
115
150
|
- - ">"
|
@@ -117,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
152
|
version: 1.3.1
|
118
153
|
requirements: []
|
119
154
|
rubyforge_project:
|
120
|
-
rubygems_version: 2.
|
155
|
+
rubygems_version: 2.7.3
|
121
156
|
signing_key:
|
122
157
|
specification_version: 4
|
123
158
|
summary: anodator is Anonymous Data Validator.
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.5
|