class DirtySeed::DataModel

Represents the data model

Attributes

models[W]
seeders[W]

Public Class Methods

new() click to toggle source

Initializes an instance @return [DirtySeed::DataModel]

# File lib/dirty_seed/data_model.rb, line 12
def initialize
  Rails.application.eager_load!
end

Public Instance Methods

active_record_models() click to toggle source

Returns an ApplicationRecord inherited classes @return [Array<Class>] a class inheriting from ApplicationRecord

# File lib/dirty_seed/data_model.rb, line 53
def active_record_models
  ::ApplicationRecord.descendants.reject(&:abstract_class)
end
logger() click to toggle source

Returns the logger @return [DirtySeed::Logger]

# File lib/dirty_seed/data_model.rb, line 18
def logger
  DirtySeed::Logger.instance
end
models() click to toggle source

Creates and returns dirty models @return [Array<DirtySeed::Model>]

# File lib/dirty_seed/data_model.rb, line 41
def models
  @models ||= DirtySeed::Sorter.new(unsorted_models).sort
end
seed(count, verbose: false) click to toggle source

Seeds the database with dirty instances @param count [Integer] count of record to seed for each model @param verbose [Boolean] true if logs should be outputed @return [void]

# File lib/dirty_seed/data_model.rb, line 26
def seed(count, verbose: false)
  logger.verbose = verbose
  # check if ApplicationRecord is defined first (or raise error)
  ::ApplicationRecord && seeders.each { |seeder| seeder.seed(count) }
  logger.summary(seeders)
end
seeders() click to toggle source

Creates and returns a seeder for each model @return [Array<SirtySeed::Seeder>]

# File lib/dirty_seed/data_model.rb, line 35
def seeders
  @seeders ||= models.map { |model| DirtySeed::Seeder.new(model) }
end
unsorted_models() click to toggle source

Returns ApplicationRecord inherited classes sorted by their associations @return [Array<Class>] a class inheriting from ApplicationRecord

# File lib/dirty_seed/data_model.rb, line 47
def unsorted_models
  active_record_models.map { |active_record_model| DirtySeed::Model.new(active_record_model) }
end