From 6773da5e4b9dce1e58722de5e5f20c869ab97330 Mon Sep 17 00:00:00 2001 From: Masayuki Kawamura Date: Wed, 3 Aug 2016 17:29:30 +0900 Subject: [PATCH 1/3] :hatching_chick:Create PR From 646ebb767050b55b3f5d9b71d67e2ee578c78ca1 Mon Sep 17 00:00:00 2001 From: Masayuki Kawamura Date: Wed, 3 Aug 2016 17:59:32 +0900 Subject: [PATCH 2/3] :sparkles:Add db_seeds.rb --- lib/db_seeds.rb | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 lib/db_seeds.rb 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' From f28c6c81bd528766986f330f7aa416ef228385a4 Mon Sep 17 00:00:00 2001 From: Masayuki Kawamura Date: Wed, 3 Aug 2016 19:10:44 +0900 Subject: [PATCH 3/3] :sparkles:Add compressed_fax.rb --- lib/compressable.rb | 21 +++++++++++++++++++++ lib/compressed_fax.rb | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 lib/compressable.rb create mode 100644 lib/compressed_fax.rb 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