Class: MultiRails::Loader

Inherits:
Object
  • Object
show all
Defined in:
lib/multi_rails/loader.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version) ⇒ Loader

A version of the loader is created to gem and require one version of Rails



41
42
43
# File 'lib/multi_rails/loader.rb', line 41

def initialize(version)
  @version = version
end

Instance Attribute Details

#versionObject (readonly)

Returns the value of attribute version.



4
5
6
# File 'lib/multi_rails/loader.rb', line 4

def version
  @version
end

Class Method Details

.all_rails_versionsObject

Returns a list of all Rails versions available, oldest first



19
20
21
22
# File 'lib/multi_rails/loader.rb', line 19

def self.all_rails_versions
  specs = Gem::cache.find_name("rails")
  specs.map {|spec| spec.version.to_s }.sort
end

.gem_and_require_rails(rails_version = nil) ⇒ Object

Require and gem rails Will use a default version if none is supplied



12
13
14
15
16
# File 'lib/multi_rails/loader.rb', line 12

def self.gem_and_require_rails(rails_version = nil)
  verify_rails_installed
  rails_version = MultiRails::Config.version_lookup(rails_version)
  Loader.new(rails_version).gem_and_require_rails
end

.latest_stable_versionObject

Try to detech the latest stable by finding the most recent version with less then 4 version parts

-- not sure if there is a better way?


26
27
28
# File 'lib/multi_rails/loader.rb', line 26

def self.latest_stable_version
  all_rails_versions.sort.reverse.detect {|version| version.count(".") < 3 }
end

.latest_versionObject

Find the most recent version



31
32
33
# File 'lib/multi_rails/loader.rb', line 31

def self.latest_version
  all_rails_versions.sort.last
end

.loggerObject



6
7
8
# File 'lib/multi_rails/loader.rb', line 6

def self.logger
  @logger ||= Logger.new(STDOUT)
end

.verify_rails_installedObject

Verify we have at least one Rails gem installed, otherwise fail early

Raises:



36
37
38
# File 'lib/multi_rails/loader.rb', line 36

def self.verify_rails_installed
  raise MultiRailsError, "No Rails gems installed!" if Gem::cache.find_name("rails").empty? 
end

Instance Method Details

#display_rails_gem_usedObject

Display the rails gem from the laod path, as a sanity check to make sure we are getting the rails version we expect



53
54
55
# File 'lib/multi_rails/loader.rb', line 53

def display_rails_gem_used
  puts %[#{MultiRails::BAR}\nUsing rails gem: #{Config.rails_load_path}\n]
end

#gem_and_require_railsObject

Gem a version of Rails, and require appropriate files



46
47
48
49
50
# File 'lib/multi_rails/loader.rb', line 46

def gem_and_require_rails
  gem_rails
  require_rails
  display_rails_gem_used
end

#gem_railsObject



57
58
59
60
61
62
# File 'lib/multi_rails/loader.rb', line 57

def gem_rails
  gem 'rails', version
rescue LoadError => e
  msg = %Q[Cannot find gem for Rails version: '#{version}'!\nInstall the missing gem with:\nsudo gem install -v=#{version} rails]
  raise MultiRailsError, msg
end

#require_railsObject



64
65
66
# File 'lib/multi_rails/loader.rb', line 64

def require_rails
  Config.rails_requires.each {|lib| require lib }
end