class DbAgent::Seeder
Attributes
handler[R]
Public Class Methods
new(handler)
click to toggle source
# File lib/db_agent/seeder.rb, line 4 def initialize(handler) @handler = handler end
Public Instance Methods
each_seed(install = true) { |self, file| ... }
click to toggle source
# File lib/db_agent/seeder.rb, line 70 def each_seed(install = true) handler.data_folder.glob('**/*') do |file| next unless file.directory? next unless (file/"metadata.json").exists? base = file.relative_to(handler.data_folder) begin Seeder.new(handler).install(base) puts "#{base} OK" yield(self, file) if block_given? rescue => ex puts "KO on #{file}" puts ex.message end if install end end
flush(to)
click to toggle source
# File lib/db_agent/seeder.rb, line 42 def flush(to) target = (handler.data_folder/to).rm_rf.mkdir_p source = (handler.data_folder/"empty") (target/"metadata.json").write <<-JSON.strip { "inherits": "empty" } JSON seed_files(source).each do |f| flush_seed_file(f, to) end end
flush_empty(to = "empty")
click to toggle source
# File lib/db_agent/seeder.rb, line 32 def flush_empty(to = "empty") target = (handler.data_folder/to).rm_rf.mkdir_p (target/"metadata.json").write <<-JSON.strip {} JSON TableOrderer.new(handler).tsort.each_with_index do |table_name, index| (target/"#{(index*10).to_s.rjust(5,"0")}-#{table_name}.json").write("[]") end end
flush_seed_file(f, to)
click to toggle source
# File lib/db_agent/seeder.rb, line 53 def flush_seed_file(f, to) target = (handler.data_folder/to) table = file2table(f) flush_table(table, target, f.basename, true) end
flush_table(table_name, target_folder, file_name, skip_empty)
click to toggle source
# File lib/db_agent/seeder.rb, line 59 def flush_table(table_name, target_folder, file_name, skip_empty) data = viewpoint.send(table_name.to_sym).to_a if data.empty? && skip_empty LOGGER.info("Skipping table `#{table_name}` since empty") else LOGGER.info("Flushing table `#{table_name}`") json = JSON.pretty_generate(data) (target_folder/file_name).write(json) end end
install(from)
click to toggle source
# File lib/db_agent/seeder.rb, line 9 def install(from) handler.sequel_db.transaction do folder = handler.data_folder/from # load files in order pairs = merged_data(from) names = pairs.keys.sort{|p1,p2| pairs[p1].basename <=> pairs[p2].basename } # Truncate tables then fill them names.reverse.each do |name| LOGGER.info("Emptying table `#{name}`") handler.sequel_db[name.to_sym].delete end names.each do |name| LOGGER.info("Filling table `#{name}`") file = pairs[name] handler.sequel_db[name.to_sym].multi_insert(file.load) end end end
Private Instance Methods
file2table(f)
click to toggle source
# File lib/db_agent/seeder.rb, line 112 def file2table(f) f.basename.rm_ext.to_s[/^\d+-(.*)/, 1] end
merged_data(from)
click to toggle source
# File lib/db_agent/seeder.rb, line 89 def merged_data(from) folder = handler.data_folder/from data = {} # load metadata and install parent dataset if any metadata = (folder/"metadata.json").load if parent = metadata["inherits"] data = merged_data(parent) end seed_files(folder).each do |f| data[file2table(f)] = f end data end
seed_files(folder)
click to toggle source
# File lib/db_agent/seeder.rb, line 106 def seed_files(folder) folder .glob("*.json") .reject{|f| f.basename.to_s =~ /^metadata/ } end
viewpoint()
click to toggle source
# File lib/db_agent/seeder.rb, line 116 def viewpoint @viewpoint ||= if vp = ENV['DBAGENT_VIEWPOINT'] Kernel.const_get(vp).new(handler.sequel_db) else Viewpoint::Base.new(handler.sequel_db) end end