class Sequel::TimestampSeeder

A Seeder subclass to apply timestamped seeds/fixtures files. It follows the same syntax & semantics for the Seeder superclass.

To apply the seeds/fixtures:

Sequel::TimestampSeeder.apply(db, directory)

db holds the Sequel database connection

directory the path to the seeds/fixtures files

Constants

DEFAULT_SCHEMA_COLUMN
DEFAULT_SCHEMA_TABLE
Error

Attributes

applied_seeds[R]
seed_tuples[R]

Public Class Methods

new(db, directory, opts = {}) click to toggle source
Calls superclass method Sequel::Seeder::new
# File lib/sequel/extensions/seed.rb, line 298
def initialize(db, directory, opts = {})
  super
  @applied_seeds = get_applied_seeds
  @seed_tuples = get_seed_tuples
end

Public Instance Methods

run() click to toggle source
# File lib/sequel/extensions/seed.rb, line 304
def run
  seed_tuples.each do |s, f|
    t = Time.now
    db.log_info("Applying seed file `#{f}`")
    checked_transaction(s) do
      s.apply
      fi = f.downcase
      ds.insert(column => fi)
    end
    db.log_info("Seed file `#{f}` applied, it took #{sprintf("%0.6f", Time.now - t)} seconds")
  end
  nil
end

Private Instance Methods

create_json_seed(path) click to toggle source
# File lib/sequel/extensions/seed.rb, line 380
def create_json_seed(path)
  seed_descriptor = JSON.parse(File.read(path))
  seed = Class.new(Seed::Base)
  seed.const_set "JSON_SEED", seed_descriptor
  seed.class_eval do
    include Seed::SeedDescriptor

    def run
      seed_descriptor = self.class.const_get "JSON_SEED"
      raise(Error, "JSON seed improperly defined") if seed_descriptor.nil?
      self.apply_seed_descriptor(seed_descriptor)
    end
  end
  Seed::Base.inherited(seed) unless Seed::Base.descendants.include?(seed)
  seed
end
create_yaml_seed(path) click to toggle source
# File lib/sequel/extensions/seed.rb, line 363
def create_yaml_seed(path)
  seed_descriptor = YAML::load(File.open(path))
  seed = Class.new(Seed::Base)
  seed.const_set "YAML_SEED", seed_descriptor
  seed.class_eval do
    include Seed::SeedDescriptor

    def run
      seed_descriptor = self.class.const_get "YAML_SEED"
      raise(Error, "YAML seed improperly defined") if seed_descriptor.nil?
      self.apply_seed_descriptor(seed_descriptor)
    end
  end
  Seed::Base.inherited(seed) unless Seed::Base.descendants.include?(seed)
  seed
end
get_applied_seeds() click to toggle source
# File lib/sequel/extensions/seed.rb, line 320
def get_applied_seeds
  am = ds.select_order_map(column)
  missing_seed_files = am - files.map { |f| File.basename(f).downcase }
  if missing_seed_files.length > 0 && !@allow_missing_seed_files
    raise(Error, "Seed files not in file system: #{missing_seed_files.join(", ")}")
  end
  am
end
get_seed_files() click to toggle source
# File lib/sequel/extensions/seed.rb, line 329
def get_seed_files
  files = []
  Dir.new(directory).each do |file|
    next unless SEED_FILE_PATTERN.match(file)
    files << File.join(directory, file)
  end
  files.sort_by { |f| SEED_FILE_PATTERN.match(File.basename(f))[1].to_i }
end
get_seed_tuples() click to toggle source
# File lib/sequel/extensions/seed.rb, line 338
def get_seed_tuples
  remove_seed_classes
  seeds = []
  ms = Seed::Base.descendants
  files.each do |path|
    f = File.basename(path)
    fi = f.downcase
    if !applied_seeds.include?(fi)
      #begin
      load(path) if RUBY_SEED_FILE_PATTERN.match(f)
      create_yaml_seed(path) if YAML_SEED_FILE_PATTERN.match(f)
      create_json_seed(path) if JSON_SEED_FILE_PATTERN.match(f)
      #rescue Exception => e
        #raise(Error, "error while processing seed file #{path}: #{e.inspect}")
      #end
      el = [ms.last, f]
      next if ms.last.nil?
      if ms.last < Seed::Base && !seeds.include?(el)
        seeds << el
      end
    end
  end
  seeds
end
schema_dataset() click to toggle source
# File lib/sequel/extensions/seed.rb, line 397
def schema_dataset
  c = column
  ds = db.from(table)
  if !db.table_exists?(table)
    db.create_table(table) { String c, primary_key: true }
  elsif !ds.columns.include?(c)
    raise(Error, "Seeder table \"#{table}\" does not contain column \"#{c}\"")
  end
  ds
end