# File lib/bundler/shared_helpers.rb, line 19
19: def default_gemfile
20: gemfile = find_gemfile
21: raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
22: Pathname.new(gemfile)
23: end
# File lib/bundler/shared_helpers.rb, line 55
55: def clean_load_path
56: # handle 1.9 where system gems are always on the load path
57: if defined?(::Gem)
58: me = File.expand_path("../../", __FILE__)
59: $LOAD_PATH.reject! do |p|
60: next if File.expand_path(p) =~ /^#{me}/
61: p != File.dirname(__FILE__) &&
62: Gem.path.any?{|gp| p =~ /^#{gp}/ }
63: end
64: $LOAD_PATH.uniq!
65: end
66: end
# File lib/bundler/shared_helpers.rb, line 80
80: def cripple_rubygems(specs)
81: reverse_rubygems_kernel_mixin
82:
83: executables = specs.map { |s| s.executables }.flatten
84: Gem.source_index # ensure RubyGems is fully loaded
85:
86: ::Kernel.send(:define_method, :gem) do |dep, *reqs|
87: if executables.include? File.basename(caller.first.split(':').first)
88: return
89: end
90: opts = reqs.last.is_a?(Hash) ? reqs.pop : {}
91:
92: unless dep.respond_to?(:name) && dep.respond_to?(:requirement)
93: dep = Gem::Dependency.new(dep, reqs)
94: end
95:
96: spec = specs.find { |s| s.name == dep.name }
97:
98: if spec.nil?
99: e = Gem::LoadError.new "#{dep.name} is not part of the bundle. Add it to Gemfile."
100: e.name = dep.name
101: e.version_requirement = dep.requirement
102: raise e
103: elsif dep !~ spec
104: e = Gem::LoadError.new "can't activate #{dep}, already activated #{spec.full_name}. " "Make sure all dependencies are added to Gemfile."
105: e.name = dep.name
106: e.version_requirement = dep.requirement
107: raise e
108: end
109:
110: true
111: end
112:
113: # === Following hacks are to improve on the generated bin wrappers ===
114:
115: # Yeah, talk about a hack
116: source_index_class = (class << Gem::SourceIndex ; self ; end)
117: source_index_class.send(:remove_method, :from_gems_in)
118: source_index_class.send(:define_method, :from_gems_in) do |*args|
119: source_index = Gem::SourceIndex.new
120: source_index.spec_dirs = *args
121: source_index.add_specs(*specs)
122: source_index
123: end
124:
125: # OMG more hacks
126: gem_class = (class << Gem ; self ; end)
127: gem_class.send(:remove_method, :refresh)
128: gem_class.send(:define_method, :refresh) { }
129: gem_class.send(:remove_method, :bin_path)
130: gem_class.send(:define_method, :bin_path) do |name, *args|
131: exec_name, *reqs = args
132:
133: if exec_name == 'bundle'
134: return ENV['BUNDLE_BIN_PATH']
135: end
136:
137: spec = nil
138:
139: if exec_name
140: spec = specs.find { |s| s.executables.include?(exec_name) }
141: spec or raise Gem::Exception, "can't find executable #{exec_name}"
142: else
143: spec = specs.find { |s| s.name == name }
144: exec_name = spec.default_executable or raise Gem::Exception, "no default executable for #{spec.full_name}"
145: end
146:
147: gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name)
148: gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name)
149: File.exist?(gem_bin) ? gem_bin : gem_from_path_bin
150: end
151:
152: Gem.clear_paths
153: end
# File lib/bundler/shared_helpers.rb, line 35
35: def find_gemfile
36: given = ENV['BUNDLE_GEMFILE']
37: return given if given && !given.empty?
38:
39: previous = nil
40: current = File.expand_path(Dir.pwd)
41:
42: until !File.directory?(current) || current == previous
43: if ENV['BUNDLE_SPEC_RUN']
44: # avoid stepping above the tmp directory when testing
45: return nil if File.file?(File.join(current, 'bundler.gemspec'))
46: end
47:
48: # otherwise return the Gemfile if it's there
49: filename = File.join(current, 'Gemfile')
50: return filename if File.file?(filename)
51: current, previous = File.expand_path("..", current), current
52: end
53: end
# File lib/bundler/shared_helpers.rb, line 68
68: def reverse_rubygems_kernel_mixin
69: # Disable rubygems' gem activation system
70: ::Kernel.class_eval do
71: if private_method_defined?(:gem_original_require)
72: alias rubygems_require require
73: alias require gem_original_require
74: end
75:
76: undef gem
77: end
78: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.