class RakeistranoTask

attr_reader :name, :role, :primary

def initialize(options = {})
  @name = options.fetch('task')
  @role = options.fetch('role', :all).to_sym
  @primary = options.fetch('primary', false)
end

def description
  ["rake task: rake #{name},", "role: #{role},", "primary: #{primary}"].compact.join(' ')
end

def primary?
  primary
end

end

rake_tasks = YAML.load_file(‘config/rakeistrano.yml’).collect { |t| RakeistranoTask.new(t) }

rake_tasks.each do |rake_task|

desc rake_task.description
task rake_task.name do
  role_info = rake_task.primary? ? primary(rake_task.role) : roles(rake_task.role)
  on role_info do
    within release_path do
      with :rails_env => fetch(:rails_env) do
        execute :rake, rake_task.name
      end
    end
  end
end

end