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