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