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