forked from yamldb/yaml_db
/
serialization_helper.rb
68 lines (53 loc) · 1.34 KB
/
serialization_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class SerializationHelper
attr_reader :extension
def initialize(helper)
@dumper = helper.dumper
@loader = helper.loader
@extension = helper.extension
end
def dump(filename)
disable_logger
@dumper.dump(File.new(filename, "w"))
reenable_logger
end
def dump_to_dir(dirname)
Dir.mkdir(dirname)
tables = @dumper.tables
tables.each do |table|
file = File.new "#{dirname}/#{table}.#{@extension}", "w"
@dumper.dump_table file, table
end
end
def load(filename)
disable_logger
@loader.load(File.new(filename, "r"))
reenable_logger
end
def disable_logger
@@old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil
end
def reenable_logger
ActiveRecord::Base.logger = @@old_logger
end
class Load
end
class Dump
def self.dump(io)
tables.each do |table|
dump_table(io, table)
end
end
def self.tables
ActiveRecord::Base.connection.tables.reject { |table| ['schema_info', 'schema_migrations'].include?(table) }
end
def self.dump_table(io, table)
return if table_record_count(table).zero?
dump_table_columns(io, table)
dump_table_records(io, table)
end
def self.table_column_names(table)
ActiveRecord::Base.connection.columns(table).map { |c| c.name }
end
end
end