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.



273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
# File 'lib/bundler/source.rb', line 273

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



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

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

#optionsObject (readonly)

Returns the value of attribute options.



266
267
268
# File 'lib/bundler/source.rb', line 266

def options
  @options
end

#pathObject (readonly)

Returns the value of attribute path.



266
267
268
# File 'lib/bundler/source.rb', line 266

def path
  @path
end

#versionObject

Returns the value of attribute version.



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

def version
  @version
end

Class Method Details

.from_lock(options) ⇒ Object



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

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

Instance Method Details

#cache(spec) ⇒ Object



407
408
409
410
411
# File 'lib/bundler/source.rb', line 407

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



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

def cached!
  @allow_cached = true
end

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

Returns:

  • (Boolean)


316
317
318
319
320
321
# File 'lib/bundler/source.rb', line 316

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



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

def hash
  self.class.hash
end

#install(spec) ⇒ Object



395
396
397
398
399
400
401
402
403
# File 'lib/bundler/source.rb', line 395

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



329
330
331
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
# File 'lib/bundler/source.rb', line 329

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



365
366
367
# File 'lib/bundler/source.rb', line 365

def local_specs
  @local_specs ||= load_spec_files
end

#remote!Object



289
290
291
# File 'lib/bundler/source.rb', line 289

def remote!
  @allow_remote = true
end

#to_lockObject



301
302
303
304
305
306
# File 'lib/bundler/source.rb', line 301

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



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

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