Class: DbAgent::Seeder
- Inherits:
-
Object
- Object
- DbAgent::Seeder
- Defined in:
- lib/db_agent/seeder.rb
Instance Attribute Summary collapse
-
#handler ⇒ Object
readonly
Returns the value of attribute handler.
Instance Method Summary collapse
- #each_seed(install = true) ⇒ Object
- #flush(to) ⇒ Object
- #flush_empty(to = "empty") ⇒ Object
- #flush_seed_file(f, to) ⇒ Object
- #flush_table(table_name, target_folder, file_name, skip_empty) ⇒ Object
-
#initialize(handler) ⇒ Seeder
constructor
A new instance of Seeder.
- #install(from) ⇒ Object
Constructor Details
#initialize(handler) ⇒ Seeder
Returns a new instance of Seeder.
4 5 6 |
# File 'lib/db_agent/seeder.rb', line 4 def initialize(handler) @handler = handler end |
Instance Attribute Details
#handler ⇒ Object (readonly)
Returns the value of attribute handler.
7 8 9 |
# File 'lib/db_agent/seeder.rb', line 7 def handler @handler end |
Instance Method Details
#each_seed(install = true) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# 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. end if install end end |
#flush(to) ⇒ Object
42 43 44 45 46 47 48 49 50 51 |
# 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") ⇒ Object
32 33 34 35 36 37 38 39 40 |
# 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) ⇒ Object
53 54 55 56 57 |
# 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) ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# 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) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# 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 |