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.



276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
# File 'lib/bundler/source.rb', line 276

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



328
329
330
# File 'lib/bundler/source.rb', line 328

def name
  File.basename(@path.to_s)
end

#optionsObject (readonly)

Returns the value of attribute options.



269
270
271
# File 'lib/bundler/source.rb', line 269

def options
  @options
end

#pathObject (readonly)

Returns the value of attribute path.



269
270
271
# File 'lib/bundler/source.rb', line 269

def path
  @path
end

#versionObject

Returns the value of attribute version.



272
273
274
# File 'lib/bundler/source.rb', line 272

def version
  @version
end

Class Method Details

.from_lock(options) ⇒ Object



300
301
302
# File 'lib/bundler/source.rb', line 300

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

Instance Method Details

#cache(spec) ⇒ Object



410
411
412
413
414
# File 'lib/bundler/source.rb', line 410

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



296
297
298
# File 'lib/bundler/source.rb', line 296

def cached!
  @allow_cached = true
end

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

Returns:

  • (Boolean)


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

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

#hashObject



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

def hash
  self.class.hash
end

#install(spec) ⇒ Object



398
399
400
401
402
403
404
405
406
# File 'lib/bundler/source.rb', line 398

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



332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
# File 'lib/bundler/source.rb', line 332

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"
        if expanded_path.join("bin").exist?
          binaries = expanded_path.join("bin").children.map{|c| c.basename.to_s }
          s.executables = binaries
        end
      end
    end
  else
    raise PathError, "The path `#{expanded_path}` does not exist."
  end

  index
end

#local_specsObject Also known as: specs



368
369
370
# File 'lib/bundler/source.rb', line 368

def local_specs
  @local_specs ||= load_spec_files
end

#remote!Object



292
293
294
# File 'lib/bundler/source.rb', line 292

def remote!
  @allow_remote = true
end

#to_lockObject



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

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



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

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