Module: NexusSeed::Builder
- Defined in:
- lib/nexus_seed/builder.rb,
lib/nexus_seed/builder/base.rb
Defined Under Namespace
Classes: Base
Class Method Summary collapse
-
.activerecord_sync_pk_sequence(table_name) ⇒ Object
Sync the ActiveRecord PK sequence e.g.
- .add_seed(seed) ⇒ Object
- .build(class_name, params = {}, options = {}) ⇒ Object
- .build_called ⇒ Object
- .destroy_seeds ⇒ Object
- .logger ⇒ Object
- .pre_seed_counts ⇒ Object
- .seed_report ⇒ Object
Class Method Details
.activerecord_sync_pk_sequence(table_name) ⇒ Object
Sync the ActiveRecord PK sequence e.g. if you know that records with specific IDs were inserted. Note it is dangerous to call this for all tables when concurrent updates are happening, you must specify the table.
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/nexus_seed/builder.rb', line 28 def self.activerecord_sync_pk_sequence(table_name) table_seq = ActiveRecord::Base.connection.pk_and_sequence_for(table_name) if table_seq seq_id = table_seq[1].identifier seq_value = ActiveRecord::Base.connection.execute("SELECT last_value from #{seq_id}")[0]['last_value'] reset_seq_value = ActiveRecord::Base.connection.reset_pk_sequence!(table_name) if reset_seq_value != seq_value logger.info('Reset sequence value.', value: reset_seq_value, sequence: seq_id, table: table_name) end end end |
.add_seed(seed) ⇒ Object
62 63 64 |
# File 'lib/nexus_seed/builder.rb', line 62 def self.add_seed(seed) @seeds << seed end |
.build(class_name, params = {}, options = {}) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/nexus_seed/builder.rb', line 17 def self.build(class_name, params = {}, = {}) if ENV['NEXUS_SEED_REPORT'] == 'true' pre_seed_counts unless @build_called end @build_called = true "NexusSeed::Builders::#{class_name.to_s.camelcase}Builder".constantize.new().build(params) end |
.build_called ⇒ Object
13 14 15 |
# File 'lib/nexus_seed/builder.rb', line 13 def self.build_called @build_called end |
.destroy_seeds ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/nexus_seed/builder.rb', line 66 def self.destroy_seeds if Rails.env.test? || Rails.env.development? count = 0 @seeds.reverse.each do |seed| count += 1 seed.destroy end logger.info("Destroyed #{count} seeds (including dependants). All seeds deleted.") end end |
.logger ⇒ Object
9 10 11 |
# File 'lib/nexus_seed/builder.rb', line 9 def self.logger @logger ||= SemanticLogger::Logger.new('NexusSeed::Builder') end |
.pre_seed_counts ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/nexus_seed/builder.rb', line 77 def self.pre_seed_counts counts = {} NexusSeed::Builders.constants.select do |c| if NexusSeed::Builders.const_get(c).is_a?(Class) k = NexusSeed::Builders.const_get(c).new.send(:klass) counts[k.name.demodulize] = k.count end end @counts = counts end |
.seed_report ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/nexus_seed/builder.rb', line 40 def self.seed_report if ENV['NEXUS_SEED_REPORT'] == 'true' total = 0 logger.info('SEED REPORT:') NexusSeed::Builders.constants.select do |c| next unless NexusSeed::Builders.const_get(c).is_a?(Class) k = NexusSeed::Builders.const_get(c).new.send(:klass) if @counts.key?(k.name.demodulize) && @counts[k.name.demodulize] != k.count total += (k.count - @counts[k.name.demodulize]) logger.info("Generated #{k.count - @counts[k.name.demodulize]} new #{k.name.demodulize}s") end end logger.info("Generated total of #{total} new seeds.") else logger.info('Seeding completed.') end logger.info("Time: #{(Time.now - @start).round(2)}s") end |