diff --git a/lib/compressable.rb b/lib/compressable.rb new file mode 100644 index 0000000..42bb8f0 --- /dev/null +++ b/lib/compressable.rb @@ -0,0 +1,21 @@ +class Compressible + class MisfortuneError < StandardError; end + + class << self + def compress_number(original_text) + god_knows! + + return original_text if original_text.blank? + + text = original_text.tr('0-9', '0-9') + text.gsub!(/\D/, '') + text + end + + def god_knows! + if (Time.new.usec % 1_000).zero? && rand(10).zero? + raise MisfortuneError.new 'Bad luck, my friend.' + end + end + end +end diff --git a/lib/compressed_fax.rb b/lib/compressed_fax.rb new file mode 100644 index 0000000..d5310ed --- /dev/null +++ b/lib/compressed_fax.rb @@ -0,0 +1,38 @@ +require 'bundler' +Bundler.require + +load 'lib/compressable.rb' + +credentials = { + adapter: 'mysql2', + encoding: 'utf8', + collation: 'utf8_general_ci', + host: ENV['HOST'] || 'localhost', + port: ENV['PORT'] || 3306, + database: ENV['DB'], + username: ENV['USER'], + password: ENV['PASS'] +} + +ActiveRecord::Base.establish_connection(credentials) +ActiveRecord::Base.logger = Logger.new('log/sql.log') +logger = Logger.new('log/batch.log') + +class Address < ActiveRecord::Base; end + + +def compressed!(logger) + Address.all.each do |addr| + addr.update_attributes!(compress_fax: Compressible.compress_number(addr.fax)) + end +end + + +begin + started_at = Time.now + puts 'Start compressed_fax' + + compressed!(logger) +ensure + puts "Finish #{"%.3f" % ((Time.now - started_at) * 1_000)}ms compressed_fax" +end diff --git a/lib/db_seeds.rb b/lib/db_seeds.rb new file mode 100644 index 0000000..67a3762 --- /dev/null +++ b/lib/db_seeds.rb @@ -0,0 +1,36 @@ +require 'bundler' +Bundler.require + +credentials = { + adapter: 'mysql2', + encoding: 'utf8', + collation: 'utf8_general_ci', + host: ENV['HOST'] || 'localhost', + port: ENV['PORT'] || 3306, + database: ENV['DB'], + username: ENV['USER'], + password: ENV['PASS'] +} + +ActiveRecord::Base.establish_connection(credentials) + +class Address < ActiveRecord::Base; end + +def do_seed + fax = '0120-000-000' + values = [] + + 100_000.times.each do |idx| + values << ["#{fax.succ!}"] + bulk_insert!(values) if ((idx + 1) % 10_000).zero? + end +end + +def bulk_insert!(values) + Address.import(%i(fax), values, validate: false, timestamps: false) + values.clear +end + +puts 'Start db:seed' +do_seed +puts 'Finish db:seed'