lib/backhoe.rb in backhoe-0.1.0 vs lib/backhoe.rb in backhoe-0.2.0
- old
+ new
@@ -4,23 +4,22 @@
module Backhoe
mattr_accessor(:file_path) { "db/data.sql" }
class << self
- def dump
- autodetect_adapter.dump
+ def dump file_path: Backhoe.file_path, **options
+ autodetect_adapter.new(database_config, file_path).dump **options
end
- def load
- autodetect_adapter.load
+ def load file_path: Backhoe.file_path
+ autodetect_adapter.new(database_config, file_path).load
end
private
def autodetect_adapter
- klass = const_get(database_config["adapter"].camelize)
- klass.new(database_config, file_path)
+ const_get(database_config["adapter"].camelize)
end
def database_config
ActiveRecord::Base.configurations[Rails.env || "development"]
end
@@ -35,23 +34,29 @@
config["database"]
end
end
class Mysql < Base
- def dump
+ def dump skip_tables: []
mysqldump = `which mysqldump`.strip
raise RuntimeError, "Cannot find mysqldump." if mysqldump.blank?
- sh "#{mysqldump} --no-create-db --single-transaction --quick -e #{mysql_options} > #{file_path}"
+ sh "#{mysqldump} --no-create-db --single-transaction --quick -e #{skip_table_options(skip_tables)} #{mysql_options} > #{file_path}"
end
def load
mysql = `which mysql`.strip
raise RuntimeError, "Cannot find mysql." if mysql.blank?
sh "#{mysql} #{mysql_options} < #{file_path}"
end
private
+
+ def skip_table_options skip_tables
+ skip_tables.map do |table|
+ "--ignore-table=#{config["database"]}.#{table}"
+ end.join(" ")
+ end
def mysql_options
options = " -u #{config["username"]}"
options += " -p'#{config["password"]}'" if config["password"]
options += " -h #{config["host"]}" if config["host"]
@@ -61,20 +66,20 @@
end
Mysql2 = Mysql
class Sqlite3 < Base
- def dump
+ def dump **_
FileUtils.cp database, file_path
end
def load
FileUtils.cp file_path, database
end
end
class Postgresql < Base
- def dump
+ def dump **_
pg_dump = `which pg_dump`.strip
raise RuntimeError, "Cannot find pg_dump." if pg_dump.blank?
sh "#{pg_dump} -c -f#{file_path} #{database}"
end