module Sequel::Seed::SeedDescriptor

Public Instance Methods

apply_seed_descriptor(seed_descriptor) click to toggle source
# File lib/sequel/extensions/seed.rb, line 112
def apply_seed_descriptor(seed_descriptor)
  case seed_descriptor
  when Hash
    apply_seed_hash(seed_descriptor)
  when Array
    seed_descriptor.each { |seed_hash| apply_seed_hash(seed_hash) }
  end
end

Private Instance Methods

apply_seed_hash(seed_hash) click to toggle source
# File lib/sequel/extensions/seed.rb, line 123
def apply_seed_hash(seed_hash)
  return unless seed_hash.class <= Hash
  if seed_hash.has_key?("environment")
    case seed_hash["environment"]
    when String, Symbol
      return if seed_hash["environment"].to_sym != Seed.environment
    when Array
      return unless seed_hash["environment"].map(&:to_sym).include?(Seed.environment)
    end
  end

  keys = seed_hash.keys
  keys.delete("environment")
  keys.each do |key|
    key_hash = seed_hash[key]
    entries = nil
    class_name = if key_hash.has_key?("class")
      entries = key_hash["entries"]
      key_hash["class"]
    else
      Helpers.camelize(key)
    end
    # It will raise an error if the class name is not defined
    class_const = Kernel.const_get(class_name)
    if entries
      entries.each { |hash| create_model(class_const, hash) }
    else
      create_model(class_const, key_hash)
    end
  end
end
create_model(class_const, hash) click to toggle source
# File lib/sequel/extensions/seed.rb, line 155
def create_model(class_const, hash)
  object_instance = class_const.new
  object_instance_attr = hash.each do |attr, value|
    object_instance.set({attr.to_sym => value})
  end
  raise(Error, "Attempt to create invalid model instance of #{class_name}") unless object_instance.valid?
  object_instance.save
end