Sha256: 45f66a8d94fa6e9675dd067015cd1dd2c38fa26c247ae68788d962500b73041d
Contents?: true
Size: 1.99 KB
Versions: 1
Compression:
Stored size: 1.99 KB
Contents
# frozen_string_literal: true require "json" require 'terminal-table' class BulkseedMysql class Seed attr_reader :table, :values def initialize(table) @table = table @values = [] end def data= data data.each do |item| case item when Array @values << item when Hash @columns ||= item.keys if @columns != item.keys raise <<~TXT Keys are not same to before table: #{@table} row: #{JSON.pretty_generate(item)} TXT end @values << item.values end end end def columns= columns @columns = columns end def table= table @table = table end def to_cmd values = @values.map do |rows| vals = rows.map do |v| # escape quotes s = %Q(#{v}).gsub('"', '\"') v.nil? ? "NULL" : "\"#{s}\"" end "(#{ vals * "," })" end <<~SQL REPLACE INTO #{@table} (#{ @columns.map{ |a| %(`#{a}`) } * ',' }) VALUES #{ values * "," } SQL end end def self.init( db_host:, db_user:, db_password:, db_name: ) @@db_config = { host: db_host, user: db_user, password: db_password, database: db_name, } end def self.call(name = nil, conn = nil, &block) seed = new conn seed.prepare name, &block seed.call end attr_reader :seeds attr_accessor :conn def initialize(conn = nil) @conn = conn @conn ||= Mysql2::Client.new( host: @@db_config[:host], username: @@db_config[:user], password: @@db_config[:password], database: @@db_config[:database], ) @seeds = [] end def prepare(name = nil, &block) seed = Seed.new name yield seed @seeds << seed end def call @seeds.each do |s| puts " -- #{s.table} : created "\ "#{ s.values.count } rows" @conn.query s.to_cmd end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bulkseed_mysql-0.1.2 | lib/bulkseed_mysql.rb |