Sha256: aa153b02234bd3eed6e18914fe2d57660291fce21c9a170321fecc06df5a7167
Contents?: true
Size: 1.84 KB
Versions: 3
Compression:
Stored size: 1.84 KB
Contents
module Csv2hash class Definition MAPPING = 'mapping'.freeze COLLECTION = 'collection'.freeze TYPES = [MAPPING, COLLECTION] attr_accessor :rules, :type, :header_size, :structure_rules def initialize rules, type, options = {} self.rules, self.type = rules, type self.header_size, self.structure_rules = options.fetch(:header_size) { 0 }, options.fetch(:structure_rules) { {} } end def validate! unless TYPES.include?(type) raise "not suitable type, please use '#{MAPPING}' or '#{COLLECTION}'" end raise 'rules must be an Array of rules' unless rules.class == Array raise 'structure rules must be a Hash of rules' unless structure_rules.class == Hash end def default! rules.each do |rule| default_position rule 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! extra_validator: nil unless rule.has_key? :extra_validator end end private def default_position rule case type when MAPPING y, x = rule.fetch(:position, ['undefined', 'undefined']) rule.merge! key: "key_#{y}_#{x}" unless rule.has_key? :key when COLLECTION x = rule.fetch :position rule.merge! key: "key_undefined_#{x}" unless rule.has_key? :key end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
csv2hash-0.5.0 | lib/csv2hash/definition.rb |
csv2hash-0.4.0 | lib/csv2hash/definition.rb |
csv2hash-0.3.0 | lib/csv2hash/definition.rb |