class Seedbank::Runner

Public Class Methods

new() click to toggle source
# File lib/seedbank/runner.rb, line 4
def initialize
  @_memoized = {}
end

Public Instance Methods

after(*dependencies, &block) click to toggle source

Run this seed after the specified dependencies have run @param dependencies [Array] seeds to run before the block is executed

If a block is specified the contents of the block are executed after all the dependencies have been executed.

If no block is specified just the dependencies are run. This makes it possible to create shared dependencies. For example

@example db/seeds/production/users.seeds.rb

after 'shared:users'

Would look for a db/seeds/shared/users.seeds.rb seed and execute it.

# File lib/seedbank/runner.rb, line 21
def after(*dependencies, &block)
  depends_on = dependencies.flat_map { |dep| "db:seed:#{dep}" }
  dependent_task_name = @_seed_task.name + ':body'

  if Rake::Task.task_defined?(dependent_task_name)
    dependent_task = Rake::Task[dependent_task_name]
  else
    dependent_task = Rake::Task.define_task(dependent_task_name => depends_on, &block)
  end

  dependent_task.invoke
end
evaluate(seed_task, seed_file) click to toggle source
# File lib/seedbank/runner.rb, line 49
def evaluate(seed_task, seed_file)
  @_seed_task = seed_task
  instance_eval(File.read(seed_file), seed_file)
end
let(name, &block) click to toggle source
# File lib/seedbank/runner.rb, line 34
def let(name, &block)
  name = String(name)

  raise ArgumentError, "#{name} is already defined" if respond_to?(name, true)

  define_singleton_method(name) do
    @_memoized.fetch(name) { |key| @_memoized[key] = instance_exec(&block) }
  end
end
let!(name, &block) click to toggle source
# File lib/seedbank/runner.rb, line 44
def let!(name, &block)
  let(name, &block)
  public_send name
end