anodator 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -5,7 +5,7 @@ require File.join(File.dirname(__FILE__), "..", "lib", "anodator")
5
5
  include Anodator
6
6
 
7
7
  ### target data columns
8
- # ID, Family name, First name, Sex, Phone number, Birthday, Blood type
8
+ # ID, Family name, First name, Sex, Phone number, Birthday, Blood type, Regist date
9
9
  input_spec_array_definition =
10
10
  [
11
11
  { :number => "1", :name => "ID", },
@@ -15,6 +15,7 @@ input_spec_array_definition =
15
15
  { :number => "5", :name => "Phone number", },
16
16
  { :number => "6", :name => "Birthday", },
17
17
  { :number => "7", :name => "Blood type", },
18
+ { :number => "8", :name => "Regist date", },
18
19
  ]
19
20
  input_spec = InputSpec.new(input_spec_array_definition)
20
21
 
@@ -87,6 +88,20 @@ rule_set << Rule.new("7",
87
88
  Message.new("[[7::name]] must be 'A', 'B', 'O' or 'AB'.(([[7::value]]))"),
88
89
  validator)
89
90
 
91
+ ## Regist date
92
+ # Regist date must be YYYY-MM-DD format
93
+ validator = Validator::DateValidator.new("8")
94
+ rule_set << Rule.new("8",
95
+ Message.new("[[8::name]] must be date expression.([[8::value]])"),
96
+ validator)
97
+
98
+ ## Complex rule
99
+ # Birthday < Regist date
100
+ validator = Validator::DateValidator.new("6", :to => "[[8]]")
101
+ rule_set << Rule.new("6",
102
+ Message.new("[[6::name]] must be less than [[8::name]].([[6::value]] < [[8::value]])"),
103
+ validator)
104
+
90
105
  ### output spec
91
106
  ## error list
92
107
  items =
@@ -106,16 +121,16 @@ checker = Checker.new(input_spec, rule_set, output_spec)
106
121
  ### target datas
107
122
  datas =
108
123
  [
109
- ["1", "Murayama", "Honoka","F","08050967141","1971-10-01","B"],
110
- ["2", "Izawa", "Kazuma", "M", "09070028635", "1968-03-24","O"],
111
- ["3", "Hasebe", "Miyu", "F", "08087224562", "1991-01-21", "A"],
112
- ["4", "Furusawa", "Eri", "F", "08017372898","1965-02-14", "O"],
113
- ["5", "Hiramoto", "Yutaka", "M", "", "1986-09-14", "AB"],
114
- ["6", "Matsuzaki", "Runa", "F", "", "1960-03-27", "O"],
115
- ["7", "Inagaki", "Kouichi", "M", "", "1961-01-04", "B"],
116
- ["8", "Kase", "Sueji", "", "", "1969-03-19", "B"],
117
- ["9", "Kawanishi", "Hinako", "F", "08029628506", "1970-05-29", "B"],
118
- ["10", "Sakurai", "Eijirou", "M", "", "1988-13-16", "A"],
124
+ ["1", "Murayama", "Honoka","F","08050967141","1971-10-01","B", "2014-12-31"],
125
+ ["2", "Izawa", "Kazuma", "M", "09070028635", "1968-03-24","O", "2014-12-31"],
126
+ ["3", "Hasebe", "Miyu", "F", "08087224562", "1991-01-21", "A", "2014-12-31"],
127
+ ["4", "Furusawa", "Eri", "F", "08017372898","1965-02-14", "O", "2014-12-31"],
128
+ ["5", "Hiramoto", "Yutaka", "M", "", "1986-09-14", "AB", "2014-12-31"],
129
+ ["6", "Matsuzaki", "Runa", "F", "", "1960-03-27", "O", "2014-12-31"],
130
+ ["7", "Inagaki", "Kouichi", "M", "", "1961-01-04", "B", "2014-12-31"],
131
+ ["8", "Kase", "Sueji", "", "", "1969-03-19", "B", "2014-12-31"],
132
+ ["9", "Kawanishi", "Hinako", "F", "08029628506", "1970-05-29", "B", "2014-12-31"],
133
+ ["10", "Sakurai", "Eijirou", "M", "", "2015-01-01", "A", "2014-12-31"],
119
134
  ]
120
135
 
121
136
  ### run check for all datas
@@ -1,3 +1,5 @@
1
+ require "anodator/validator/value_proxy"
2
+
1
3
  module Anodator
2
4
  module Validator
3
5
  # +Validator::Base+ is basic class for validations
@@ -146,6 +148,10 @@ module Anodator
146
148
  return @@values[target].to_s
147
149
  end
148
150
 
151
+ def argument_value_at(name_or_index)
152
+ return @@values[name_or_index].to_s
153
+ end
154
+
149
155
  def allow_blank?
150
156
  return @options[:allow_blank]
151
157
  end
@@ -154,6 +160,11 @@ module Anodator
154
160
  return @options[:description]
155
161
  end
156
162
 
163
+ def proxy_value(target)
164
+ ValueProxy.new(target, self)
165
+ end
166
+ private :proxy_value
167
+
157
168
  def to_s(level = 4, step = 2)
158
169
  (" " * level) + "- #{self.class}(#{self.description})"
159
170
  end
@@ -15,21 +15,17 @@ module Anodator
15
15
  # format check
16
16
  date_regexp_holders
17
17
 
18
- if !@options[:from].nil? && !@options[:from].is_a?(Date)
19
- date = parse_date(@options[:from].to_s)
20
- if date.nil?
21
- raise ArgumentError.new("Invalid date expression '#{@options[:from]}'")
22
- else
23
- @options[:from] = date
24
- end
25
- end
26
-
27
- if !@options[:to].nil? && !@options[:to].is_a?(Date)
28
- date = parse_date(@options[:to].to_s)
29
- if date.nil?
30
- raise ArgumentError.new("Invalid date expression '#{@options[:to]}'")
31
- else
32
- @options[:to] = date
18
+ [:from, :to].each do |key|
19
+ if !@options[key].nil?
20
+ @options[key] = proxy_value(@options[key])
21
+ if @options[key].direct? && !@options[key].value.is_a?(Date)
22
+ date = parse_date(@options[key].value.to_s)
23
+ if date.nil?
24
+ raise ArgumentError.new("Invalid date expression '#{@options[key].value}'")
25
+ else
26
+ @options[key] = proxy_value(date)
27
+ end
28
+ end
33
29
  end
34
30
  end
35
31
  end
@@ -47,9 +43,9 @@ module Anodator
47
43
  @options.each do |option, configuration|
48
44
  case option
49
45
  when :from
50
- return false if configuration > date
46
+ return false if parse_date(configuration.value) > date
51
47
  when :to
52
- return false if configuration < date
48
+ return false if parse_date(configuration.value) < date
53
49
  end
54
50
  end
55
51
 
@@ -84,6 +80,7 @@ module Anodator
84
80
  #
85
81
  # not matched return nil
86
82
  def parse_date(date_expression)
83
+ return date_expression if date_expression.is_a? Date
87
84
  return nil unless match_data = date_regexp.match(date_expression)
88
85
 
89
86
  index = 0
@@ -6,6 +6,14 @@ module Anodator
6
6
  class LengthValidator < Base
7
7
  valid_option_keys :in, :maximum, :minimum, :is
8
8
 
9
+ def initialize(target_expression, options = { })
10
+ super(target_expression, options)
11
+
12
+ [:maximum, :minimum, :is].each do |key|
13
+ @options[key] = proxy_value(@options[key]) unless @options[key].nil?
14
+ end
15
+ end
16
+
9
17
  def validate
10
18
  length = target_value.split(//).size
11
19
 
@@ -22,11 +30,11 @@ module Anodator
22
30
  raise ConfigurationError.new(":in option value must be Range object")
23
31
  end
24
32
  when :maximum
25
- return false if length > configuration.to_i
33
+ return false if length > configuration.value.to_i
26
34
  when :minimum
27
- return false if length < configuration.to_i
35
+ return false if length < configuration.value.to_i
28
36
  when :is
29
- return false if length != configuration.to_i
37
+ return false if length != configuration.value.to_i
30
38
  end
31
39
  end
32
40
 
@@ -8,6 +8,16 @@ module Anodator
8
8
  valid_option_keys :less_than, :less_than_or_equal_to, :equal_to, :not_equal_to
9
9
  default_options :only_integer => false
10
10
 
11
+ def initialize(target_expression, options = { })
12
+ super(target_expression, options)
13
+
14
+ [: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
+ @options[key] = proxy_value(@options[key]) unless @options[key].nil?
18
+ end
19
+ end
20
+
11
21
  def validate
12
22
  if allow_blank?
13
23
  return true if target_value.split(//).size.zero?
@@ -27,17 +37,17 @@ module Anodator
27
37
  @options.each do |option, configuration|
28
38
  case option
29
39
  when :greater_than
30
- return false unless value > BigDecimal.new(configuration.to_s)
40
+ return false unless value > BigDecimal.new(configuration.value.to_s)
31
41
  when :greater_than_or_equal_to
32
- return false unless value >= BigDecimal.new(configuration.to_s)
42
+ return false unless value >= BigDecimal.new(configuration.value.to_s)
33
43
  when :less_than
34
- return false unless value < BigDecimal.new(configuration.to_s)
44
+ return false unless value < BigDecimal.new(configuration.value.to_s)
35
45
  when :less_than_or_equal_to
36
- return false unless value <= BigDecimal.new(configuration.to_s)
46
+ return false unless value <= BigDecimal.new(configuration.value.to_s)
37
47
  when :equal_to
38
- return false unless value == BigDecimal.new(configuration.to_s)
48
+ return false unless value == BigDecimal.new(configuration.value.to_s)
39
49
  when :not_equal_to
40
- return false unless value != BigDecimal.new(configuration.to_s)
50
+ return false unless value != BigDecimal.new(configuration.value.to_s)
41
51
  end
42
52
  end
43
53
 
@@ -0,0 +1,42 @@
1
+ module Anodator
2
+ module Validator
3
+ class ValueProxy
4
+ REGEXP_INDIRECT = /\A\[\[([^\]]+)\]\]\Z/
5
+
6
+ def initialize(value, validator)
7
+ @value = value
8
+ @validator = validator
9
+ @indirect = false
10
+
11
+ if matched = REGEXP_INDIRECT.match(@value.to_s)
12
+ @indirect = true
13
+ @value = matched[1]
14
+ end
15
+ end
16
+
17
+ def indirect?
18
+ return @indirect
19
+ end
20
+
21
+ def direct?
22
+ return !@indirect
23
+ end
24
+
25
+ def value
26
+ if direct?
27
+ return @value
28
+ else
29
+ return @validator.argument_value_at(@value)
30
+ end
31
+ end
32
+
33
+ def to_s
34
+ if direct?
35
+ return @value.to_s
36
+ else
37
+ return "#{@value}(Indirect)"
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -91,11 +91,11 @@ describe DateValidator, ".new" do
91
91
  end
92
92
 
93
93
  it "#from should be 1980-01-25" do
94
- @new_proc.call.from.should == Date.new(1980, 1, 25)
94
+ @new_proc.call.from.value.should == Date.new(1980, 1, 25)
95
95
  end
96
96
 
97
97
  it "#to should be 2011-01-01" do
98
- @new_proc.call.to.should == Date.new(2011, 1, 1)
98
+ @new_proc.call.to.value.should == Date.new(2011, 1, 1)
99
99
  end
100
100
  end
101
101
  end
@@ -112,7 +112,7 @@ describe DateValidator, ".new" do
112
112
  end
113
113
 
114
114
  it "#from should be date object" do
115
- @new_proc.call.from.should be_a Date
115
+ @new_proc.call.from.value.should be_a Date
116
116
  end
117
117
  end
118
118
 
@@ -128,11 +128,11 @@ describe DateValidator, ".new" do
128
128
  end
129
129
 
130
130
  it "#from should be date object" do
131
- @new_proc.call.from.should be_a Date
131
+ @new_proc.call.from.value.should be_a Date
132
132
  end
133
133
 
134
134
  it "#from should be same date for string expression" do
135
- @new_proc.call.from.should == Date.new(2011, 1, 1)
135
+ @new_proc.call.from.value.should == Date.new(2011, 1, 1)
136
136
  end
137
137
  end
138
138
 
@@ -160,7 +160,7 @@ describe DateValidator, ".new" do
160
160
  end
161
161
 
162
162
  it "#to should be date object" do
163
- @new_proc.call.to.should be_a Date
163
+ @new_proc.call.to.value.should be_a Date
164
164
  end
165
165
  end
166
166
 
@@ -176,11 +176,11 @@ describe DateValidator, ".new" do
176
176
  end
177
177
 
178
178
  it "#to should be date object" do
179
- @new_proc.call.to.should be_a Date
179
+ @new_proc.call.to.value.should be_a Date
180
180
  end
181
181
 
182
182
  it "#to should be same date for string expression" do
183
- @new_proc.call.to.should == Date.new(2011, 1, 1)
183
+ @new_proc.call.to.value.should == Date.new(2011, 1, 1)
184
184
  end
185
185
  end
186
186
 
@@ -35,7 +35,7 @@ describe LengthValidator, ".new" do
35
35
 
36
36
  it "should have :maximum option value" do
37
37
  validator = @new_proc.call
38
- validator.options[:maximum].should == 10
38
+ validator.options[:maximum].value.should == 10
39
39
  end
40
40
  end
41
41
 
@@ -52,7 +52,7 @@ describe LengthValidator, ".new" do
52
52
 
53
53
  it "should have :minimum option value" do
54
54
  validator = @new_proc.call
55
- validator.options[:minimum].should == 10
55
+ validator.options[:minimum].value.should == 10
56
56
  end
57
57
  end
58
58
 
@@ -69,7 +69,7 @@ describe LengthValidator, ".new" do
69
69
 
70
70
  it "should have :is option value" do
71
71
  validator = @new_proc.call
72
- validator.options[:is].should == 10
72
+ validator.options[:is].value.should == 10
73
73
  end
74
74
  end
75
75
 
@@ -58,7 +58,7 @@ describe NumericValidator, ".new" do
58
58
  end
59
59
 
60
60
  it ":greater_than option must be exists" do
61
- @new_proc.call.options[:greater_than].should == 10
61
+ @new_proc.call.options[:greater_than].value.should == 10
62
62
  end
63
63
  end
64
64
 
@@ -74,7 +74,7 @@ describe NumericValidator, ".new" do
74
74
  end
75
75
 
76
76
  it ":greater_than_or_equal_to option must be exists" do
77
- @new_proc.call.options[:greater_than_or_equal_to].should == 10
77
+ @new_proc.call.options[:greater_than_or_equal_to].value.should == 10
78
78
  end
79
79
  end
80
80
 
@@ -90,7 +90,7 @@ describe NumericValidator, ".new" do
90
90
  end
91
91
 
92
92
  it ":less_than option must be exists" do
93
- @new_proc.call.options[:less_than].should == 10
93
+ @new_proc.call.options[:less_than].value.should == 10
94
94
  end
95
95
  end
96
96
 
@@ -106,7 +106,7 @@ describe NumericValidator, ".new" do
106
106
  end
107
107
 
108
108
  it ":less_than_or_equal_to option must be exists" do
109
- @new_proc.call.options[:less_than_or_equal_to].should == 10
109
+ @new_proc.call.options[:less_than_or_equal_to].value.should == 10
110
110
  end
111
111
  end
112
112
 
@@ -122,7 +122,7 @@ describe NumericValidator, ".new" do
122
122
  end
123
123
 
124
124
  it ":equal_to option must be exists" do
125
- @new_proc.call.options[:equal_to].should == 10
125
+ @new_proc.call.options[:equal_to].value.should == 10
126
126
  end
127
127
  end
128
128
 
@@ -138,7 +138,7 @@ describe NumericValidator, ".new" do
138
138
  end
139
139
 
140
140
  it ":not_equal_to option must be exists" do
141
- @new_proc.call.options[:not_equal_to].should == 10
141
+ @new_proc.call.options[:not_equal_to].value.should == 10
142
142
  end
143
143
  end
144
144
  end
metadata CHANGED
@@ -1,14 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anodator
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 3
10
- segments_generated: true
11
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
12
10
  platform: ruby
13
11
  authors:
14
12
  - Tetsuhisa MAKINO
@@ -16,92 +14,77 @@ autorequire:
16
14
  bindir: bin
17
15
  cert_chain: []
18
16
 
19
- date: 2011-10-21 00:00:00 +09:00
17
+ date: 2015-07-12 00:00:00 +09:00
20
18
  default_executable:
21
19
  dependencies:
22
20
  - !ruby/object:Gem::Dependency
23
- prerelease: false
24
- name: rspec
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
26
- none: false
21
+ requirement: &id001 !ruby/object:Gem::Requirement
27
22
  requirements:
28
23
  - - ~>
29
24
  - !ruby/object:Gem::Version
30
- hash: 3
31
25
  segments:
32
26
  - 2
33
27
  - 3
34
28
  - 0
35
- segments_generated: true
36
29
  version: 2.3.0
37
- requirement: *id001
30
+ prerelease: false
31
+ name: rspec
38
32
  type: :development
33
+ version_requirements: *id001
39
34
  - !ruby/object:Gem::Dependency
40
- prerelease: false
41
- name: bundler
42
- version_requirements: &id002 !ruby/object:Gem::Requirement
43
- none: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
44
36
  requirements:
45
37
  - - ~>
46
38
  - !ruby/object:Gem::Version
47
- hash: 23
48
39
  segments:
49
40
  - 1
50
41
  - 0
51
42
  - 0
52
- segments_generated: true
53
43
  version: 1.0.0
54
- requirement: *id002
44
+ prerelease: false
45
+ name: bundler
55
46
  type: :development
47
+ version_requirements: *id002
56
48
  - !ruby/object:Gem::Dependency
57
- prerelease: false
58
- name: jeweler
59
- version_requirements: &id003 !ruby/object:Gem::Requirement
60
- none: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
61
50
  requirements:
62
51
  - - ~>
63
52
  - !ruby/object:Gem::Version
64
- hash: 7
65
53
  segments:
66
54
  - 1
67
55
  - 6
68
56
  - 4
69
- segments_generated: true
70
57
  version: 1.6.4
71
- requirement: *id003
58
+ prerelease: false
59
+ name: jeweler
72
60
  type: :development
61
+ version_requirements: *id003
73
62
  - !ruby/object:Gem::Dependency
74
- prerelease: false
75
- name: rcov
76
- version_requirements: &id004 !ruby/object:Gem::Requirement
77
- none: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
78
64
  requirements:
79
65
  - - ">="
80
66
  - !ruby/object:Gem::Version
81
- hash: 3
82
67
  segments:
83
68
  - 0
84
- segments_generated: true
85
69
  version: "0"
86
- requirement: *id004
70
+ prerelease: false
71
+ name: rcov
87
72
  type: :development
73
+ version_requirements: *id004
88
74
  - !ruby/object:Gem::Dependency
89
- prerelease: false
90
- name: rake
91
- version_requirements: &id005 !ruby/object:Gem::Requirement
92
- none: false
75
+ requirement: &id005 !ruby/object:Gem::Requirement
93
76
  requirements:
94
77
  - - "="
95
78
  - !ruby/object:Gem::Version
96
- hash: 49
97
79
  segments:
98
80
  - 0
99
81
  - 8
100
82
  - 7
101
- segments_generated: true
102
83
  version: 0.8.7
103
- requirement: *id005
84
+ prerelease: false
85
+ name: rake
104
86
  type: :development
87
+ version_requirements: *id005
105
88
  description: anodator is Anonymous Data Validator.
106
89
  email: tim.makino at gmail.com
107
90
  executables: []
@@ -145,6 +128,7 @@ files:
145
128
  - lib/anodator/validator/length_validator.rb
146
129
  - lib/anodator/validator/numeric_validator.rb
147
130
  - lib/anodator/validator/presence_validator.rb
131
+ - lib/anodator/validator/value_proxy.rb
148
132
  - spec/anodator/check_result_spec.rb
149
133
  - spec/anodator/checker_spec.rb
150
134
  - spec/anodator/input_spec_item_spec.rb
@@ -176,29 +160,23 @@ rdoc_options: []
176
160
  require_paths:
177
161
  - lib
178
162
  required_ruby_version: !ruby/object:Gem::Requirement
179
- none: false
180
163
  requirements:
181
164
  - - ">="
182
165
  - !ruby/object:Gem::Version
183
- hash: 3
184
166
  segments:
185
167
  - 0
186
- segments_generated: true
187
168
  version: "0"
188
169
  required_rubygems_version: !ruby/object:Gem::Requirement
189
- none: false
190
170
  requirements:
191
171
  - - ">="
192
172
  - !ruby/object:Gem::Version
193
- hash: 3
194
173
  segments:
195
174
  - 0
196
- segments_generated: true
197
175
  version: "0"
198
176
  requirements: []
199
177
 
200
178
  rubyforge_project:
201
- rubygems_version: 1.3.7
179
+ rubygems_version: 1.3.6
202
180
  signing_key:
203
181
  specification_version: 3
204
182
  summary: anodator is Anonymous Data Validator.