Sha256: 70d2891344bb575ce1072afe0ae9b6c48294d95552d5e647a2ca03185da5070b

Contents?: true

Size: 777 Bytes

Versions: 28

Compression:

Stored size: 777 Bytes

Contents

# frozen_string_literal: true

module IronBank
  # A custom CSV converter
  #
  class CSV < ::CSV
    DECIMAL_INTEGER_REGEX = /^[+-]?\d+$/.freeze
    DECIMAL_FLOAT_REGEX   = /^[+-]?(?:\d*\.|\.\d*)\d*$/.freeze

    CSV::Converters[:decimal_integer] = lambda do |field|
      return field unless field

      encoding = field.encode(CSV::ConverterEncoding)

      # Match: [1, 10, 100], No match: [0.1, .1, 1., 0b10]
      DECIMAL_INTEGER_REGEX.match?(encoding) ? encoding.to_i : field
    end

    CSV::Converters[:decimal_float] = lambda do |field|
      return field unless field

      encoding = field.encode(CSV::ConverterEncoding)

      # Match: [1.0, 1., 0.1, .1], No match: [1, 0b10]
      DECIMAL_FLOAT_REGEX.match?(encoding) ? encoding.to_f : field
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
iron_bank-5.4.1 lib/iron_bank/csv.rb
iron_bank-5.4.0 lib/iron_bank/csv.rb
iron_bank-5.3.2 lib/iron_bank/csv.rb
iron_bank-5.3.0 lib/iron_bank/csv.rb
iron_bank-5.2.6 lib/iron_bank/csv.rb
iron_bank-5.2.4 lib/iron_bank/csv.rb
iron_bank-5.2.3 lib/iron_bank/csv.rb
iron_bank-5.2.0 lib/iron_bank/csv.rb
iron_bank-5.1.1 lib/iron_bank/csv.rb
iron_bank-5.1.0 lib/iron_bank/csv.rb
iron_bank-4.4.3 lib/iron_bank/csv.rb
iron_bank-5.0.1 lib/iron_bank/csv.rb
iron_bank-5.0.0 lib/iron_bank/csv.rb
iron_bank-4.4.1 lib/iron_bank/csv.rb
iron_bank-4.4.0 lib/iron_bank/csv.rb
iron_bank-4.3.1 lib/iron_bank/csv.rb
iron_bank-4.3.0 lib/iron_bank/csv.rb
iron_bank-4.2.0 lib/iron_bank/csv.rb
iron_bank-4.1.1 lib/iron_bank/csv.rb
iron_bank-4.1.0 lib/iron_bank/csv.rb