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.
- #insert_script(from) ⇒ Object
- #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
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/db_agent/seeder.rb', line 99 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
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/db_agent/seeder.rb', line 71 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
61 62 63 64 65 66 67 68 69 |
# File 'lib/db_agent/seeder.rb', line 61 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
82 83 84 85 86 |
# File 'lib/db_agent/seeder.rb', line 82 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
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/db_agent/seeder.rb', line 88 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 |
#insert_script(from) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/db_agent/seeder.rb', line 38 def insert_script(from) 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 } # Fill them names.each do |name| file = pairs[name] data = file.load next if data.empty? keys = data.first.keys values = data.map{|t| keys.map{|k| t[k] } } puts handler.sequel_db[name.to_sym].multi_insert_sql(keys, values) 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 31 32 33 34 35 36 |
# File 'lib/db_agent/seeder.rb', line 9 def install(from) handler.sequel_db.transaction do before_seeding! 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 names.reverse.each do |name| LOGGER.info("Emptying table `#{name}`") handler.sequel_db[name.to_sym].delete end # Fill them names.each do |name| LOGGER.info("Filling table `#{name}`") file = pairs[name] handler.sequel_db[name.to_sym].multi_insert(file.load) end after_seeding!(folder) end end |