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.



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

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.expand_path(Bundler.root).to_s)
end

#optionsObject (readonly)

Returns the value of attribute options.



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

def options
  @options
end

#pathObject (readonly)

Returns the value of attribute path.



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

def path
  @path
end

#versionObject

Returns the value of attribute version.



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

def version
  @version
end

Class Method Details

.from_lock(options) ⇒ Object



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

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

Instance Method Details

#cache(spec) ⇒ Object



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

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



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

def cached!
  @allow_cached = true
end

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

Returns:

  • (Boolean)


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

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

#hashObject



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

def hash
  self.class.hash
end

#install(spec) ⇒ Object



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

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
364
# 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
          binaries.reject!{|p| File.directory?(p) }
          s.executables = binaries.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



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

def local_specs
  @local_specs ||= load_spec_files
end

#remote!Object



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

def remote!
  @allow_remote = true
end

#to_lockObject



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

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



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

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