class KenAll::Import
Constants
- URI
Public Class Methods
new(opt = { visualize: true })
click to toggle source
# File lib/ken_all/import.rb, line 10 def initialize(opt = { visualize: true }) @visualizer = KenAll::Visualizer.new(opt[:visualize]) return unless old_schema? error = <<~ERROR KenAll Error. This project is using old schema information. Type First. $ rake ken_all:install:migrations $ rake db:migrate ERROR raise KenAll::OldSchemaException.new(error) end
Public Instance Methods
download_file(file)
click to toggle source
# File lib/ken_all/import.rb, line 49 def download_file(file) @visualizer.download_status do file.binmode open(URI, 'rb') do |read_file| file.write(read_file.read) end file.rewind end end
from_file()
click to toggle source
# File lib/ken_all/import.rb, line 34 def from_file if ENV["FILE"].present? if File.extname(ENV["FILE"]).downcase == '.zip' import_model zip_to_csv(ENV["FILE"]) else CSV.open(ENV["FILE"],:encoding => "Shift_JIS:UTF-8") do |csv| import_model(csv) end end else puts "Specify FILE arguments." puts "rake ken_all:import:file FILE=/path/to/x-ken-all.csv" end end
from_net()
click to toggle source
# File lib/ken_all/import.rb, line 24 def from_net @visualizer.screen_init do Tempfile.open("ken_all.zip") do |f| download_file(f) csv = zip_to_csv(f) import_model(csv) end end end
import_model(csv)
click to toggle source
# File lib/ken_all/import.rb, line 73 def import_model(csv) @visualizer.import_status do ActiveRecord::Base.transaction do header = [:code, :address1, :address2, :address3, :address_kana1, :address_kana2, :address_kana3] list = [] merge = MergeBox.new csv.each do |row| post = Post.new(row) if post.adr_start? merge.add(post) elsif post.adr_end? merge.add(post) list << merge.to_array merge.clear next elsif merge.count > 0 merge.add(post) else list << post.to_array end end KenAll::PostalCode.delete_all KenAll::PostalCode.import(header, list) end end end
zip_to_csv(zip_file)
click to toggle source
# File lib/ken_all/import.rb, line 59 def zip_to_csv(zip_file) csv = nil @visualizer.unzip_status do # Use Zip::File for rubyzip >= 1.0.0, Zip::ZipFile for older. klass = defined?(Zip::File) ? Zip::File : Zip::ZipFile klass.foreach(zip_file) do |entry| File.extname(entry.name).downcase == '.csv' or next csv = CSV.parse(entry.get_input_stream.read.encode("utf-8", "sjis")) break end end csv end
Private Instance Methods
old_schema?()
click to toggle source
# File lib/ken_all/import.rb, line 102 def old_schema? column = KenAll::PostalCode.columns.find { |v| v.name == 'address1' } column.sql_type !~ /text/ end