Sha256: c11a5a7073a4ade56781ef029f264cecbbb38dd7187f4a319972829ccb51e157

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

# encoding: utf-8
require 'ostruct'
require 'active_support/inflector'
require 'active_support/core_ext/string/inflections'

module CSD
  
  # A convenience wrapper to get information about the available applications
  #
  class Applications

    # Returns nil if application could not be found
    #
    def self.find(app_name)
      begin
        UI.debug "Applications.find: Attempting to require `#{File.join(Path.applications, app_name.to_s)}´."
        require File.join(Path.applications, app_name.to_s)
        UI.debug "Applications.find: Attempting to load `#{app_name}´."
        ActiveSupport::Inflector.constantize "CSD::Application::#{app_name.camelize}"
      rescue LoadError => e
        UI.debug "Applications.find: The Application `#{app_name}´ could not be loaded properly."
        UI.debug "                   Reason: #{e}"
        nil
      end
    end

    def self.all(&block)
      result = []
      Dir.directories(Path.applications) do |dir|
        next if dir == 'default'
        UI.debug "Applications.all: Identified application directory `#{dir}´."
        if app = find(dir)
          UI.debug "Applications.all: The application `#{dir}´ is valid."
          block_given? ? yield(app) : result << app
        end
      end
      result
    end

    def self.valid?(name)
      list.include?(name)
    end
    
    # This method identifies the desired application and initializes it in to +@@current+.
    # It is meant to be very robust, we expect the application to be any one of the first three arguments.
    #
    def self.current
      @@current ||= begin
        Applications.find(ARGV.first) || Applications.find(ARGV.second) || Applications.find(ARGV.third)
      end
    end
    
    # Forces a reload of the current application. This method is useful for functional tests.
    #
    def self.current!
      @@current = false
      current
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
csd-0.1.5 lib/csd/applications.rb