Class: Seedbank::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/seedbank/runner.rb

Instance Method Summary collapse

Constructor Details

#initializeRunner



4
5
6
# File 'lib/seedbank/runner.rb', line 4

def initialize
  @_memoized = {}
end

Instance Method Details

#after(*dependencies, &block) ⇒ Object

Run this seed after the specified dependencies have run 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

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

Examples:

db/seeds/production/users.seeds.rb

after 'shared:users'


44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/seedbank/runner.rb', line 44

def after(*dependencies, &block)
  dependencies.flatten!
  dependencies.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 => dependencies, &block)
  end

  dependent_task.invoke
end

#evaluate(seed_task, seed_file) ⇒ Object



26
27
28
29
# File 'lib/seedbank/runner.rb', line 26

def evaluate(seed_task, seed_file)
  @_seed_task = seed_task
  instance_eval(File.read(seed_file), seed_file)
end

#let(name, &block) ⇒ Object

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/seedbank/runner.rb', line 8

def let(name, &block)
  name = String(name)

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

  __eigenclass.instance_exec(name) do |name|
    define_method(name) do
      @_memoized.fetch(name) { |key| @_memoized[key] = instance_eval(&block) }
    end
  end

end

#let!(name, &block) ⇒ Object



21
22
23
24
# File 'lib/seedbank/runner.rb', line 21

def let!(name, &block)
  let(name, &block)
  send name
end