Sha256: bf35c3d24469c576bb626ea65b99a7fd83f57d32c88f78c3f0a7bd1220904833
Contents?: true
Size: 1.19 KB
Versions: 1
Compression:
Stored size: 1.19 KB
Contents
require 'csv' class StreetTypeUpdater def self.update! new.update! end def initialize(repository = StreetType) self.repository = repository end def update! transaction do parser.foreach(file, options) do |row| attributes = row.to_hash.symbolize_keys! code = attributes[:code] name = attributes[:name] record = repository.find_by(code: code) if record.present? && name_differs?(record.name, name) record.update_column(:name, name.capitalize) else repository.new(code: code, name: name.capitalize).tap do |street_type| street_type.save(validate: false) end end end end end protected attr_accessor :repository def transaction(&block) repository.transaction(&block) end def parser CSV end def options { col_sep: ',', headers: true, encoding: 'utf-8' } end def file "#{Unico::Engine.config.root}/lib/import/files/updated_street_types.csv" end def name_differs?(name_founded, name) unaccent(name_founded) != unaccent(name) end def unaccent(value) value.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').downcase.to_s end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
unico-training-7.8.0 | lib/street_type_updater.rb |