anodator 0.0.3 → 0.0.4

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/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.