lib/seedbank/dsl.rb in seedbank-0.4.0 vs lib/seedbank/dsl.rb in seedbank-0.5.0.pre
- old
+ new
@@ -1,64 +1,86 @@
+# frozen_string_literal: true
module Seedbank
module DSL
+ refine Object do
+ def override_seed_task(*args)
+ task_name, _, deps = Rake.application.resolve_args(args)
+ seed_task = Rake::Task.task_defined?(task_name) ? Rake::Task[task_name].clear : Rake::Task.define_task(task_name)
+ add_comment_to(seed_task, Rake.application.last_description)
+ add_environment_dependency(seed_task)
+ seed_task.enhance deps
+ end
- def override_seed_task(*args)
- task_name, arg_names, deps = Rake.application.resolve_args(args)
- seed_task = Rake::Task.task_defined?(task_name) ? Rake::Task[task_name].clear : Rake::Task.define_task(task_name)
- add_comment_to(seed_task, Rake.application.last_description)
- seed_task.enhance deps
- end
+ def seed_tasks_matching(*pattern)
+ glob_seed_files_matching(*pattern)
+ .sort
+ .map { |seed_file| seed_task_from_file(seed_file) }
+ end
- 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(':')
+ 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(':')
- define_seed_task(seed_file, fq_name)
- end
+ define_seed_task(seed_file, fq_name)
+ end
- def glob_seed_files_matching(*args, &block)
- Dir.glob(File.join(seeds_root, *args), &block)
- end
+ def glob_seed_files_matching(*args, &block)
+ Dir.glob(File.join(seeds_root, *args), &block)
+ end
- def runner
- @_seedbank_runner ||= Seedbank::Runner.new
- end
+ def define_seed_task(seed_file, *args)
+ task = Rake::Task.define_task(*args) do |seed_task|
+ runner.evaluate(seed_task, seed_file) if File.exist?(seed_file)
+ end
- def define_seed_task(seed_file, *args)
- task = Rake::Task.define_task(*args) do |seed_task|
- runner.evaluate(seed_task, seed_file) if File.exist?(seed_file)
+ relative_file = Pathname.new(seed_file).relative_path_from(Seedbank.application_root)
+
+ task.add_description "Load the seed data from #{relative_file}"
+ add_environment_dependency(task)
+ task.name
end
- task.add_description "Load the seed data from #{seed_file}"
+ def original_seeds_file
+ @_seedbank_original ||= existent(Pathname.new('../seeds.rb').expand_path(seeds_root))
+ end
- if Rake::Task.task_defined?('db:abort_if_pending_migrations')
- task.enhance(['db:abort_if_pending_migrations'])
- elsif Rake::Task.task_defined?(':environment')
- task.enhance([':environment'])
+ def seeds_root
+ Pathname.new Seedbank.seeds_root
end
- task.name
- end
+ private
- 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
+ def existent(path)
+ String(path) if path.exist?
+ end
- def seeds_root
- Pathname.new Seedbank.seeds_root
- end
+ def scope_from_seed_file(seed_file)
+ dirname = Pathname.new(seed_file).dirname
+ return [] if dirname == seeds_root
+ dirname
+ .relative_path_from(seeds_root)
+ .to_s
+ .split(File::Separator)
+ end
- private
+ def add_environment_dependency(task)
+ if Rake::Task.task_defined?('db:abort_if_pending_migrations')
+ task.enhance(['db:abort_if_pending_migrations'])
+ elsif defined?(Rails)
+ task.enhance([:environment])
+ end
+ end
- def add_comment_to(seed_task, comment)
- if seed_task.respond_to?(:clear_comments)
- seed_task.comment = comment
- else
- seed_task.send :instance_variable_set, '@full_comment', comment
+ def runner
+ @_seedbank_runner ||= Seedbank::Runner.new
end
- end
+ def add_comment_to(seed_task, comment)
+ if seed_task.respond_to?(:clear_comments)
+ seed_task.comment = comment
+ else
+ seed_task.send :instance_variable_set, '@full_comment', comment
+ end
+ end
+ end
end
end