Sha256: 6e0c4e421b7a1ad24e6580a347c8d9a3e36ee015061ad250b7a1647d7f5929be

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

module Reap

  def self.application
    Application.instance
  end

  class Application

    def self.instance
      @application ||= self.new
    end

    attr :tasks, :projectfile

    def initialize
      @tasks = {}
      @projectfile = ProjectInfo.find
      if @projectfile
        @projectdir = File.dirname( @projectfile )
        Dir.chdir( @projectdir )
      end
      require_custom_tasks
      if @projectfile
        require_custom_project_tasks
        @projectinfo = ProjectInfo.load( @projectfile  )
      end
      initialize_tasks
      initialize_special_tasks
    end

    def projectfile?() @projectfile end

    def add_task( task )
      @tasks[task.task_name] = task
    end

    # Load custom tasks.
    def require_custom_tasks
      # Universal custom tasks for all projects.
      dir = File.join( Config::CONFIG['datadir'], 'reap/task' )
      require_all( File.join(dir, '*') ) if File.directory?(dir)
      # Personal tasks for all projects.
      dir = File.expand_path( '~/.share/reap/task' )
      require_all( File.join(dir, '*') ) if File.directory?(dir)
    end

    # Project specific tasks.
    def require_custom_project_tasks
      require_all('task/*') if File.directory?('task')
    end

    def initialize_tasks
      return unless @projectinfo
      @projectinfo.each { |key, value|
        add_task( value ) if Reap::Task === value
      }
    end

    # Load special tasks. There are tasks that don't require
    # a ProjectInfo section or other special requirements.
    def initialize_special_tasks
      Reap.registry.each { |taskclass|
        if taskclass.available?( self )
          task = taskclass.new({})
          task.task_name = taskclass.task_class
          tasks[task.task_name] = task
        end
      }
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reap-5.0.0 lib/reap/app.rb