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
- .build_raw(class_name, params = {}, options = {}) ⇒ 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.
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/nexus_seed/builder.rb', line 37 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
71 72 73 |
# File 'lib/nexus_seed/builder.rb', line 71 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 |
.build_raw(class_name, params = {}, options = {}) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/nexus_seed/builder.rb', line 26 def self.build_raw(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_raw(params) end |
.destroy_seeds ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/nexus_seed/builder.rb', line 75 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
86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/nexus_seed/builder.rb', line 86 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
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/nexus_seed/builder.rb', line 49 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 |