Module: Seedbank::DSL

Defined in:
lib/seedbank/dsl.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



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

def self.included(base)
  Rake::Task.send(:include, Seedbank::RenameTask)
  Rake::Application.send(:include, Seedbank::TaskManager)
end

Instance Method Details

#define_seed_task(seed_file, *args) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/seedbank/dsl.rb', line 25

def define_seed_task(seed_file, *args)
  task = Rake::Task.define_task(*args) do |seed_task|
    Seedbank::Runner.new(seed_task).module_eval(File.read(seed_file), seed_file) if File.exist?(seed_file)
  end
  task.add_description "Load the seed data from #{seed_file}"
  task.name
end

#glob_seed_files_matching(*args, &block) ⇒ Object



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

def glob_seed_files_matching(*args, &block)
  Dir.glob(File.join(seeds_root, *args), &block)
end

#override_seed_task(*args, &block) ⇒ Object



9
10
11
# File 'lib/seedbank/dsl.rb', line 9

def override_seed_task(*args, &block)
  Rake.application.override_task(*args, &block)
end

#scope_from_seed_file(seed_file) ⇒ Object



33
34
35
36
37
38
# File 'lib/seedbank/dsl.rb', line 33

def scope_from_seed_file(seed_file)
  dirname = Pathname.new(seed_file).dirname
  return [] if dirname == seeds_root
  relative = dirname.relative_path_from(seeds_root)
  relative.to_s.split(File::Separator)
end

#seed_task_from_file(seed_file) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/seedbank/dsl.rb', line 13

def seed_task_from_file(seed_file)
  scopes  = scope_from_seed_file(seed_file)
  fq_name = scopes.push(File.basename(seed_file, '.seeds.rb')).join(':')
  args    = Rake::Task.task_defined?('db:abort_if_pending_migrations') ? { fq_name => 'db:abort_if_pending_migrations' } : { fq_name => :environment }

  define_seed_task(seed_file, args)
end

#seeds_rootObject



40
41
42
# File 'lib/seedbank/dsl.rb', line 40

def seeds_root
  Pathname.new Seedbank.seeds_root
end