Methods
- ==
- add_load_paths
- dependencies
- frozen?
- gem_dir
- install
- load
- load_paths_added?
- loaded?
- new
- specification
- unpack_to
- unpacked_path
- unpacked_paths
Attributes
| [RW] | lib | |
| [RW] | name | |
| [RW] | requirement | |
| [RW] | source | |
| [RW] | version |
Public Class methods
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 9
9: def initialize(name, options = {})
10: require 'rubygems' unless Object.const_defined?(:Gem)
11:
12: if options[:requirement]
13: @requirement = options[:requirement]
14: elsif options[:version]
15: @requirement = Gem::Requirement.create(options[:version])
16: end
17:
18: @version = @requirement.instance_variable_get("@requirements").first.last if @requirement
19: @name = name.to_s
20: @lib = options[:lib]
21: @source = options[:source]
22: @loaded = @frozen = @load_paths_added = false
23: @unpack_directory = nil
24: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 5 5: def self.unpacked_path 6: @unpacked_path ||= File.join(RAILS_ROOT, 'vendor', 'gems') 7: end
Public Instance methods
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 101
101: def ==(other)
102: self.name == other.name && self.requirement == other.requirement
103: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 30
30: def add_load_paths
31: return if @loaded || @load_paths_added
32: unpacked_paths = self.unpacked_paths
33: if unpacked_paths.empty?
34: args = [@name]
35: args << @requirement.to_s if @requirement
36: gem *args
37: else
38: $LOAD_PATH.unshift File.join(unpacked_paths.first, 'lib')
39: ext = File.join(unpacked_paths.first, 'ext')
40: $LOAD_PATH.unshift(ext) if File.exist?(ext)
41: @frozen = true
42: end
43: @load_paths_added = true
44: rescue Gem::LoadError
45: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 47
47: def dependencies
48: all_dependencies = specification.dependencies.map do |dependency|
49: GemDependency.new(dependency.name, :requirement => dependency.version_requirements)
50: end
51: all_dependencies += all_dependencies.map(&:dependencies).flatten
52: all_dependencies.uniq
53: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 68
68: def frozen?
69: @frozen
70: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 55
55: def gem_dir(base_directory)
56: File.join(base_directory, specification.full_name)
57: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 80
80: def install
81: cmd = "#{gem_command} #{install_command.join(' ')}"
82: puts cmd
83: puts %x(#{cmd})
84: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 59
59: def load
60: return if @loaded || @load_paths_added == false
61: require(@lib || @name)
62: @loaded = true
63: rescue LoadError
64: puts $!.to_s
65: $!.backtrace.each { |b| puts b }
66: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 76
76: def load_paths_added?
77: @load_paths_added
78: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 72
72: def loaded?
73: @loaded
74: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 105
105: def specification
106: @spec ||= Gem.source_index.search(Gem::Dependency.new(@name, @requirement)).sort_by { |s| s.version }.last
107: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 86
86: def unpack_to(directory)
87: FileUtils.mkdir_p directory
88: Dir.chdir directory do
89: Gem::GemRunner.new.run(unpack_command)
90: end
91:
92: # copy the gem's specification into GEMDIR/.specification so that
93: # we can access information about the gem on deployment systems
94: # without having the gem installed
95: spec_filename = File.join(gem_dir(directory), '.specification')
96: File.open(spec_filename, 'w') do |file|
97: file.puts specification.to_yaml
98: end
99: end
[ show source ]
# File railties/lib/rails/gem_dependency.rb, line 26
26: def unpacked_paths
27: Dir[File.join(self.class.unpacked_path, "#{@name}-#{@version || "*"}")]
28: end