lib/mattock/task.rb in mattock-0.1.2 vs lib/mattock/task.rb in mattock-0.1.3

- old
+ new

@@ -1,19 +1,31 @@ require 'mattock/cascading-definition' require 'rake/task' +require 'rake/file_task' module Mattock - class Task < Rake::Task + # A configurable subclass of Rake::Task, such that you can use a + # configuration block to change how a common task behaves, while still + # overriding Rake API methods like Task#needed? and Task#timestamp + + module TaskMixin include CascadingDefinition setting :task_name setting :task_args - def self.default_taskname(name) - setting(:task_name, name) + module ClassMethods + def default_taskname(name) + setting(:task_name, name) + end end + def self.included(mod) + mod.class_eval{ extend ClassMethods } + super + end + def initialize(*args) configs = args.take_while{|arg| Configurable === arg} @extracted_task_args = args[configs.length..-1] if @extracted_task_args.any?{|arg| Configurable === arg} raise "Mattock::Task classes should be created with parent configs, then Rake task args" @@ -30,10 +42,11 @@ end def action end + # I continue to look for an alternative here. def task_class return @task_class if @task_class @task_class = Class.new(self.class) do define_method :initialize, Rake::Task.instance_method(:initialize) end @@ -47,7 +60,15 @@ task = task_class.define_task(*task_args) do action end copy_settings_to(task) end + end + + class Task < Rake::Task + include TaskMixin + end + + class FileTask < Rake::FileTask + include TaskMixin end end