lib/csv2hash/definition.rb in csv2hash-0.0.1 vs lib/csv2hash/definition.rb in csv2hash-0.0.2
- old
+ new
@@ -3,42 +3,50 @@
MAPPING = 'mapping'
COLLECTION = 'collection'
TYPES = [Definition::MAPPING, Definition::COLLECTION]
- attr_accessor :type, :rules
+ attr_accessor :rules, :type, :header_size
+ def initialize rules, type, header_size=0
+ @rules, @type, @header_size = rules, type, header_size
+ end
+
def validate!
unless TYPES.include?(type)
raise "not suitable type, please use '#{Definition::MAPPING}' or '#{Definition::COLLECTION}'"
end
raise 'rules must be an Array of rules' unless rules.class == Array
end
def default!
rules.each do |rule|
default_position rule
- rule.merge! message: 'undefined :key on :position' unless rule.has_key? :message
+ unless rule.has_key? :message
+ if rule.has_key? :values
+ rule.merge! message: ':key not supported, please use one of :values'
+ else
+ rule.merge! message: 'undefined :key on :position'
+ end
+ end
rule.merge! mappable: true unless rule.has_key? :mappable
rule.merge! type: 'string' unless rule.has_key? :type
rule.merge! values: nil unless rule.has_key? :values
rule.merge! nested: nil unless rule.has_key? :nested
rule.merge! allow_blank: false unless rule.has_key? :allow_blank
- rule.merge! position: nil unless rule.has_key? :position
- rule.merge! maptype: 'cell' unless rule.has_key? :maptype
end
end
private
def default_position rule
case type
when Definition::MAPPING
- x, y = rule.fetch(:position, ['undefined', 'undefined'])
- rule.merge! key: "key_#{x}_#{y}" unless rule.has_key? :key
+ y, x = rule.fetch(:position, ['undefined', 'undefined'])
+ rule.merge! key: "key_#{y}_#{x}" unless rule.has_key? :key
when Definition::COLLECTION
- y = rule.fetch :position
- rule.merge! key: "key_#{y}" unless rule.has_key? :key
+ x = rule.fetch :position
+ rule.merge! key: "key_undefined_#{x}" unless rule.has_key? :key
end
end
end
\ No newline at end of file