lib/csv2hash/validator.rb in csv2hash-0.0.2 vs lib/csv2hash/validator.rb in csv2hash-0.1
- old
+ new
@@ -1,42 +1,44 @@
-module Validator
+class Csv2hash
+ module Validator
- attr_accessor :errors, :exception
-
- def validate_rules y=nil
- definition.rules.each do |rule|
- _y, x = position rule.fetch(:position)
- begin
- validate_cell (_y||y), x, rule
- rescue => e
- errors << { y: (_y||y), x: x, message: e.message, key: rule.fetch(:key) }
- raise if exception
+ def validate_rules y=nil
+ definition.rules.each do |rule|
+ _y, x = position rule.fetch(:position)
+ begin
+ validate_cell (_y||y), x, rule
+ rescue => e
+ self.errors << { y: (_y||y), x: x, message: e.message, key: rule.fetch(:key) }
+ raise if exception_mode
+ end
end
end
- end
- def valid?() errors.empty?; end
+ def valid?() self.errors.empty?; end
- protected
+ protected
- def validate_cell y, x, rule
-
- value = data_source[y][x] rescue nil
-
- begin
- raise unless value unless rule.fetch :allow_blank
- if value && (values = rule.fetch :values)
- raise unless values.include?(value)
+ def validate_cell y, x, rule
+ value = data_source[y][x] rescue nil
+ begin
+ raise unless value unless rule.fetch :allow_blank
+ if (extra_validator = rule.fetch :extra_validator) && extra_validator.kind_of?(Csv2hash::ExtraValidator)
+ raise unless extra_validator.valid? rule, value
+ else
+ if value && (values = rule.fetch :values)
+ raise unless values.include?(value)
+ end
+ end
+ rescue => e
+ raise message(rule, y, x)
end
- rescue => e
- raise message(rule, y, x)
end
- end
- def message rule, y, x
- msg = rule.fetch(:message).tap do |msg|
- rule.each { |key, value| msg.gsub!(":#{key.to_s}", value.to_s) unless key == :position }
+ def message rule, y, x
+ msg = rule.fetch(:message).tap do |msg|
+ rule.each { |key, value| msg.gsub!(":#{key.to_s}", value.to_s) unless key == :position }
+ end
+ msg.gsub ':position', "[#{y}, #{x}]"
end
- msg.gsub ':position', "[#{y}, #{x}]"
- end
-end
\ No newline at end of file
+ end
+end