class Csv2hash::Definition
Constants
- COLLECTION
- MAPPING
- TYPES
Attributes
cells[RW]
header_size[RW]
name[RW]
structure_rules[RW]
type[R]
Public Class Methods
new(name, &blk)
click to toggle source
# File lib/csv2hash/definition.rb, line 12 def initialize name, &blk self.name = name self.cells = [] self.header_size = 0 self.structure_rules = {} instance_eval(&blk) if block_given? end
Public Instance Methods
cell(*args)
click to toggle source
# File lib/csv2hash/definition.rb, line 24 def cell *args self.cells << Cell.new(*args) end
default!()
click to toggle source
# File lib/csv2hash/definition.rb, line 48 def default! cells.each do |cell| cell.rules.fetch(:position) default_position cell default_message cell cell.rules.merge! mappable: true unless cell.rules.has_key? :mappable cell.rules.merge! type: 'string' unless cell.rules.has_key? :type cell.rules.merge! values: nil unless cell.rules.has_key? :values cell.rules.merge! case_sensitive_values: true unless cell.rules.has_key? :case_sensitive_values cell.rules.merge! nested: nil unless cell.rules.has_key? :nested cell.rules.merge! allow_blank: false unless cell.rules.has_key? :allow_blank cell.rules.merge! extra_validator: nil unless cell.rules.has_key? :extra_validator end end
mapping(&blk)
click to toggle source
# File lib/csv2hash/definition.rb, line 20 def mapping &blk instance_eval(&blk) if block_given? end
set_header_size() { || ... }
click to toggle source
# File lib/csv2hash/definition.rb, line 28 def set_header_size &blk self.header_size = yield if block_given? end
set_structure_rules() { || ... }
click to toggle source
# File lib/csv2hash/definition.rb, line 36 def set_structure_rules &blk self.structure_rules = yield if block_given? end
set_type() { || ... }
click to toggle source
# File lib/csv2hash/definition.rb, line 32 def set_type &blk @type = yield if block_given? end
validate!()
click to toggle source
# File lib/csv2hash/definition.rb, line 40 def validate! unless TYPES.include?(@type) raise "not suitable type, please use '#{MAPPING}' or '#{COLLECTION}'" end raise 'cells must be an Array of cell' unless self.cells.class == Array raise 'structure rules must be a Hash of rules' unless self.structure_rules.class == Hash end
Private Instance Methods
default_message(cell)
click to toggle source
# File lib/csv2hash/definition.rb, line 76 def default_message cell unless cell.rules.has_key? :message if cell.rules.has_key? :values cell.rules.merge! message: 'value :found not supported for :key, please use one of :values' else cell.rules.merge! message: 'undefined :key on :position' end end end
default_position(cell)
click to toggle source
# File lib/csv2hash/definition.rb, line 65 def default_position cell case type when MAPPING y, x = cell.rules.fetch(:position, ['undefined', 'undefined']) cell.rules.merge! key: "key_#{y}_#{x}" unless cell.rules.has_key? :key when COLLECTION x = cell.rules.fetch :position cell.rules.merge! key: "key_undefined_#{x}" unless cell.rules.has_key? :key end end