Class: Bundler::Source::Path

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler/source.rb

Direct Known Subclasses

Git

Defined Under Namespace

Classes: Installer

Constant Summary collapse

DEFAULT_GLOB =
"{,*,*/*}.gemspec"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Path

Returns a new instance of Path.



291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# File 'lib/bundler/source.rb', line 291

def initialize(options)
  @options = options
  @glob = options["glob"] || DEFAULT_GLOB

  @allow_cached = false
  @allow_remote = false

  if options["path"]
    @path = Pathname.new(options["path"])
    @path = @path.expand_path(Bundler.root) unless @path.relative?
  end

  @name = options["name"]
  @version = options["version"]
end

Instance Attribute Details

#nameObject



342
343
344
# File 'lib/bundler/source.rb', line 342

def name
  File.basename(path.expand_path(Bundler.root).to_s)
end

#optionsObject (readonly)

Returns the value of attribute options.



284
285
286
# File 'lib/bundler/source.rb', line 284

def options
  @options
end

#pathObject (readonly)

Returns the value of attribute path.



284
285
286
# File 'lib/bundler/source.rb', line 284

def path
  @path
end

#versionObject

Returns the value of attribute version.



287
288
289
# File 'lib/bundler/source.rb', line 287

def version
  @version
end

Class Method Details

.from_lock(options) ⇒ Object



315
316
317
# File 'lib/bundler/source.rb', line 315

def self.from_lock(options)
  new(options.merge("path" => options.delete("remote")))
end

Instance Method Details

#cache(spec) ⇒ Object



426
427
428
429
430
# File 'lib/bundler/source.rb', line 426

def cache(spec)
  unless path.expand_path(Bundler.root).to_s.index(Bundler.root.to_s) == 0
    Bundler.ui.warn "  * #{spec.name} at `#{path}` will not be cached."
  end
end

#cached!Object



311
312
313
# File 'lib/bundler/source.rb', line 311

def cached!
  @allow_cached = true
end

#eql?(o) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


334
335
336
337
338
# File 'lib/bundler/source.rb', line 334

def eql?(o)
  o.instance_of?(Path) &&
  path.expand_path(Bundler.root) == o.path.expand_path(Bundler.root) &&
  version == o.version
end

#hashObject



330
331
332
# File 'lib/bundler/source.rb', line 330

def hash
  self.class.hash
end

#install(spec) ⇒ Object



414
415
416
417
418
419
420
421
422
# File 'lib/bundler/source.rb', line 414

def install(spec)
  Bundler.ui.info "Using #{spec.name} (#{spec.version}) from #{to_s} "
  # Let's be honest, when we're working from a path, we can't
  # really expect native extensions to work because the whole point
  # is to just be able to modify what's in that path and go. So, let's
  # not put ourselves through the pain of actually trying to generate
  # the full gem.
  Installer.new(spec).generate_bin
end

#load_spec_filesObject



346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/bundler/source.rb', line 346

def load_spec_files
  index = Index.new

  expanded_path = path.expand_path(Bundler.root)

  if File.directory?(expanded_path)
    Dir["#{expanded_path}/#{@glob}"].each do |file|
      spec = Bundler.load_gemspec(file)
      if spec
        spec.loaded_from = file.to_s
        spec.source = self
        index << spec
      end
    end

    if index.empty? && @name && @version
      index << Gem::Specification.new do |s|
        s.name     = @name
        s.source   = self
        s.version  = Gem::Version.new(@version)
        s.platform = Gem::Platform::RUBY
        s.summary  = "Fake gemspec for #{@name}"
        s.relative_loaded_from = "#{@name}.gemspec"
        s.authors  = ["no one"]
        if expanded_path.join("bin").exist?
          executables = expanded_path.join("bin").children
          executables.reject!{|p| File.directory?(p) }
          s.executables = executables.map{|c| c.basename.to_s }
        end
      end
    end
  else
    raise PathError, "The path `#{expanded_path}` does not exist."
  end

  index
end

#local_specsObject Also known as: specs



384
385
386
# File 'lib/bundler/source.rb', line 384

def local_specs
  @local_specs ||= load_spec_files
end

#remote!Object



307
308
309
# File 'lib/bundler/source.rb', line 307

def remote!
  @allow_remote = true
end

#to_lockObject



319
320
321
322
323
324
# File 'lib/bundler/source.rb', line 319

def to_lock
  out = "PATH\n"
  out << "  remote: #{relative_path}\n"
  out << "  glob: #{@glob}\n" unless @glob == DEFAULT_GLOB
  out << "  specs:\n"
end

#to_sObject



326
327
328
# File 'lib/bundler/source.rb', line 326

def to_s
  "source at #{@path}"
end