Class: Prebundler::GitGemRef

Inherits:
GemRef
  • Object
show all
Defined in:
lib/prebundler/git_gem_ref.rb

Constant Summary

Constants inherited from GemRef

Prebundler::GemRef::DEFAULT_SOURCE, Prebundler::GemRef::REF_TYPES

Instance Attribute Summary collapse

Attributes inherited from GemRef

#bundle_path, #dependencies, #groups, #name, #prefix, #spec

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from GemRef

#add_to_tar, create, #executables, #extension_dir, #id, #install_from_tar, #relative_extension_dir, #relative_gem_dir, #relative_gemspec_files, #spec_path, #tar_file

Constructor Details

#initialize(name, bundle_path, options = {}) ⇒ GitGemRef

Returns a new instance of GitGemRef.



15
16
17
18
# File 'lib/prebundler/git_gem_ref.rb', line 15

def initialize(name, bundle_path, options = {})
  super
  @strategy = options.include?(:git) ? :git : :github
end

Instance Attribute Details

#strategyObject (readonly)

Returns the value of attribute strategy.



13
14
15
# File 'lib/prebundler/git_gem_ref.rb', line 13

def strategy
  @strategy
end

Class Method Details

.accepts?(options) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/prebundler/git_gem_ref.rb', line 8

def accepts?(options)
  options.include?(:git) || options.include?(:github)
end

Instance Method Details

#cache_dirObject



60
61
62
# File 'lib/prebundler/git_gem_ref.rb', line 60

def cache_dir
  File.join(cache_path, "#{name}-#{uri_hash}")
end

#cache_pathObject



56
57
58
# File 'lib/prebundler/git_gem_ref.rb', line 56

def cache_path
  File.join(bundle_path, 'cache', 'bundler', 'git')
end

#gemspecsObject



78
79
80
81
82
# File 'lib/prebundler/git_gem_ref.rb', line 78

def gemspecs
  @gemspecs ||= gemspec_files.map do |gemspec_file|
    Bundler.load_gemspec(gemspec_file)
  end
end

#installObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/prebundler/git_gem_ref.rb', line 20

def install
  FileUtils.mkdir_p(spec_path)
  FileUtils.mkdir_p(install_path)
  FileUtils.mkdir_p(cache_path)

  return if File.exist?(cache_dir) || File.exist?(install_dir)
  system "git clone #{uri} \"#{cache_dir}\" --bare --no-hardlinks --quiet"
  return $? if $?.exitstatus != 0
  system "git clone --no-checkout --quiet \"#{cache_dir}\" \"#{install_dir}\""
  return $? if $?.exitstatus != 0
  Dir.chdir(install_dir) { system "git reset --hard --quiet #{revision}" }
  serialize_gemspecs
  copy_gemspecs
  $?
end

#install_dirObject



84
85
86
# File 'lib/prebundler/git_gem_ref.rb', line 84

def install_dir
  File.join(install_path, "#{repo_name}-#{version}")
end

#install_pathObject



52
53
54
# File 'lib/prebundler/git_gem_ref.rb', line 52

def install_path
  File.join(bundle_path, 'bundler', 'gems')
end

#installable?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/prebundler/git_gem_ref.rb', line 44

def installable?
  true
end

#remoteObject



70
71
72
# File 'lib/prebundler/git_gem_ref.rb', line 70

def remote
  nil
end

#repo_nameObject



88
89
90
# File 'lib/prebundler/git_gem_ref.rb', line 88

def repo_name
  @repo_name ||= URI.parse(uri).path.split('/').last.chomp('.git')
end

#revisionObject



74
75
76
# File 'lib/prebundler/git_gem_ref.rb', line 74

def revision
  spec.source.revision
end

#storable?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/prebundler/git_gem_ref.rb', line 48

def storable?
  false
end

#to_gemObject



36
37
38
# File 'lib/prebundler/git_gem_ref.rb', line 36

def to_gem
  "gem '#{name}', git: '#{uri}', ref: '#{revision}'"
end

#uriObject Also known as: source



64
65
66
# File 'lib/prebundler/git_gem_ref.rb', line 64

def uri
  spec.source.uri
end

#versionObject



40
41
42
# File 'lib/prebundler/git_gem_ref.rb', line 40

def version
  revision[0...12]
end