Class: Spork::AppFramework

Inherits:
Object
  • Object
show all
Defined in:
lib/spork/app_framework.rb

Direct Known Subclasses

Padrino, Rails, Unknown

Defined Under Namespace

Classes: Padrino, Rails, Unknown

Constant Summary collapse

SUPPORTED_FRAMEWORKS =

A hash of procs where the key is the class name, and the proc takes no arguments and returns true if it detects that said application framework is being used in the project.

The key :Rails maps to Spork::AppFramework::Rails

This is used to reduce the amount of code needed to be loaded - only the detected application framework’s support code is loaded.

{
  :Padrino => lambda {
    File.exist?("config/boot.rb") && File.read("config/boot.rb").include?('PADRINO')
  },
  :Rails => lambda {
    File.exist?("config/environment.rb") && (
      File.read("config/environment.rb").include?('RAILS_GEM_VERSION') ||
      (File.exist?("config/application.rb") && File.read("config/application.rb").include?("Rails::Application"))
    )
  }
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.[](name) ⇒ Object

Initializes, stores, and returns a singleton instance of the named AppFramework.

Parameters

# name - A symbolic name of a AppFramework subclass

Example

Spork::AppFramework[:Rails]


48
49
50
# File 'lib/spork/app_framework.rb', line 48

def self.[](name)
  instances[name] ||= const_get(name).new
end

.detect_frameworkObject

Same as detect_framework_name, but returns an instance of the specific AppFramework class.



34
35
36
37
# File 'lib/spork/app_framework.rb', line 34

def self.detect_framework
  name = detect_framework_name
  self[name]
end

.detect_framework_nameObject

Iterates through all SUPPORTED_FRAMEWORKS and returns the symbolic name of the project application framework detected. Otherwise, returns :Unknown



26
27
28
29
30
31
# File 'lib/spork/app_framework.rb', line 26

def self.detect_framework_name
  SUPPORTED_FRAMEWORKS.each do |key, value|
    return key if value.call
  end
  :Unknown
end

.setup_autoloadObject



19
20
21
22
23
# File 'lib/spork/app_framework.rb', line 19

def self.setup_autoload
  ([:Unknown] + SUPPORTED_FRAMEWORKS.keys).each do |name|
    autoload name, File.join(File.dirname(__FILE__), "app_framework", name.to_s.downcase)
  end
end

.short_nameObject



52
53
54
# File 'lib/spork/app_framework.rb', line 52

def self.short_name
  name.gsub('Spork::AppFramework::', '')
end

Instance Method Details

#bootstrap_required?Boolean

If there is some stuff out of the box that the Spork can do to speed up tests without the test helper file being bootstrapped, this should return false.

Returns:

  • (Boolean)


57
58
59
# File 'lib/spork/app_framework.rb', line 57

def bootstrap_required?
  entry_point.nil?
end

#entry_pointObject

Abstract: The path to the file that loads the project environment, ie config/environment.rb. Returns nil if there is none.

Raises:

  • (NotImplementedError)


62
63
64
# File 'lib/spork/app_framework.rb', line 62

def entry_point
  raise NotImplementedError
end

#preload(&block) ⇒ Object



66
67
68
# File 'lib/spork/app_framework.rb', line 66

def preload(&block)
  yield
end

#short_nameObject



70
71
72
# File 'lib/spork/app_framework.rb', line 70

def short_name
  self.class.short_name
end