Object
# File lib/bundler/source.rb, line 295
295: def self.from_lock(options)
296: new(options.merge("path" => options.delete("remote")))
297: end
# File lib/bundler/source.rb, line 272
272: def initialize(options)
273: @options = options
274: @glob = options["glob"] || DEFAULT_GLOB
275:
276: @allow_cached = false
277: @allow_remote = false
278:
279: if options["path"]
280: @path = Pathname.new(options["path"]).expand_path(Bundler.root)
281: end
282:
283: @name = options["name"]
284: @version = options["version"]
285: end
# File lib/bundler/source.rb, line 403
403: def cache(spec)
404: unless path.to_s.index(Bundler.root.to_s) == 0
405: Bundler.ui.warn " * #{spec.name} at `#{path}` will not be cached."
406: end
407: end
# File lib/bundler/source.rb, line 291
291: def cached!
292: @allow_cached = true
293: end
# File lib/bundler/source.rb, line 314
314: def eql?(o)
315: o.instance_of?(Path) &&
316: path == o.path &&
317: name == o.name &&
318: version == o.version
319: end
# File lib/bundler/source.rb, line 310
310: def hash
311: self.class.hash
312: end
# File lib/bundler/source.rb, line 391
391: def install(spec)
392: Bundler.ui.info "Using #{spec.name} (#{spec.version}) from #{to_s} "
393: # Let's be honest, when we're working from a path, we can't
394: # really expect native extensions to work because the whole point
395: # is to just be able to modify what's in that path and go. So, let's
396: # not put ourselves through the pain of actually trying to generate
397: # the full gem.
398: Installer.new(spec).generate_bin
399: end
# File lib/bundler/source.rb, line 327
327: def load_spec_files
328: index = Index.new
329:
330: if File.directory?(path)
331: Dir["#{path}/#{@glob}"].each do |file|
332: spec = Bundler.load_gemspec(file)
333: if spec
334: spec.loaded_from = file.to_s
335: spec.source = self
336: index << spec
337: end
338: end
339:
340: if index.empty? && @name && @version
341: index << Gem::Specification.new do |s|
342: s.name = @name
343: s.source = self
344: s.version = Gem::Version.new(@version)
345: s.platform = Gem::Platform::RUBY
346: s.summary = "Fake gemspec for #{@name}"
347: s.relative_loaded_from = "#{@name}.gemspec"
348: if path.join("bin").exist?
349: binaries = path.join("bin").children.map{|c| c.basename.to_s }
350: s.executables = binaries
351: end
352: end
353: end
354: else
355: raise PathError, "The path `#{path}` does not exist."
356: end
357:
358: index
359: end
# File lib/bundler/source.rb, line 361
361: def local_specs
362: @local_specs ||= load_spec_files
363: end
# File lib/bundler/source.rb, line 323
323: def name
324: File.basename(@path.to_s)
325: end
# File lib/bundler/source.rb, line 287
287: def remote!
288: @allow_remote = true
289: end
# File lib/bundler/source.rb, line 419
419: def generate_bin(spec)
420: gem_dir = Pathname.new(spec.full_gem_path)
421:
422: # Some gem authors put absolute paths in their gemspec
423: # and we have to save them from themselves
424: spec.files = spec.files.map do |p|
425: next if File.directory?(p)
426: begin
427: Pathname.new(p).relative_path_from(gem_dir).to_s
428: rescue ArgumentError
429: p
430: end
431: end.compact
432:
433: gem_file = Dir.chdir(gem_dir){ Gem::Builder.new(spec).build }
434:
435: installer = Installer.new(spec, :env_shebang => false)
436: installer.build_extensions
437: installer.generate_bin
438: rescue Gem::InvalidSpecificationException => e
439: Bundler.ui.warn "\n#{spec.name} at #{spec.full_gem_path} did not have a valid gemspec.\n" "This prevents bundler from installing bins or native extensions, but " "that may not affect its functionality."
440:
441: if !spec.extensions.empty? && !spec.email.empty?
442: Bundler.ui.warn "If you need to use this package without installing it from a gem " "repository, please contact #{spec.email} and ask them " "to modify their .gemspec so it can work with `gem build`."
443: end
444:
445: Bundler.ui.warn "The validation message from Rubygems was:\n #{e.message}"
446: ensure
447: Dir.chdir(gem_dir){ FileUtils.rm_rf(gem_file) if gem_file && File.exist?(gem_file) }
448: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.