Class: Prebundler::GemRef

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

Direct Known Subclasses

GitGemRef, PathGemRef

Constant Summary collapse

REF_TYPES =
[PathGemRef, GitGemRef]
DEFAULT_SOURCE =
'https://rubygems.org'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of GemRef.



19
20
21
22
23
24
25
# File 'lib/prebundler/gem_ref.rb', line 19

def initialize(name, bundle_path, options = {})
  @name = name
  @bundle_path = bundle_path
  @groups = Set.new(options[:groups])
  @source = options[:source]
  @dependencies = options[:dependencies]
end

Instance Attribute Details

#bundle_pathObject (readonly)

Returns the value of attribute bundle_path.



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

def bundle_path
  @bundle_path
end

#dependenciesObject

Returns the value of attribute dependencies.



17
18
19
# File 'lib/prebundler/gem_ref.rb', line 17

def dependencies
  @dependencies
end

#groupsObject (readonly)

Returns the value of attribute groups.



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

def groups
  @groups
end

#nameObject (readonly)

Returns the value of attribute name.



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

def name
  @name
end

#specObject

Returns the value of attribute spec.



17
18
19
# File 'lib/prebundler/gem_ref.rb', line 17

def spec
  @spec
end

Class Method Details

.create(name, bundle_path, options = {}) ⇒ Object



10
11
12
13
# File 'lib/prebundler/gem_ref.rb', line 10

def create(name, bundle_path, options = {})
  ref_type = REF_TYPES.find { |rt| rt.accepts?(options) } || self
  ref_type.new(name, bundle_path, options)
end

Instance Method Details

#add_to_tar(tar_file) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/prebundler/gem_ref.rb', line 53

def add_to_tar(tar_file)
  tar_flags = File.exist?(tar_file) ? '-rf' : '-cf'

  system "tar -C #{bundle_path} #{tar_flags} #{tar_file} #{relative_gem_dir}"

  relative_gemspec_files.each do |relative_gemspec_file|
    system "tar -C #{bundle_path} -rf #{tar_file} #{relative_gemspec_file}"
  end

  if File.directory?(extension_dir)
    system "tar -C #{bundle_path} -rf #{tar_file} #{relative_extension_dir}"
  end

  executables.each do |executable|
    system "tar -C #{bundle_path} -rf #{tar_file} #{File.join('bin', executable)}"
  end
end

#executablesObject



71
72
73
# File 'lib/prebundler/gem_ref.rb', line 71

def executables
  gemspecs.flat_map(&:executables)
end

#extension_dirObject



101
102
103
# File 'lib/prebundler/gem_ref.rb', line 101

def extension_dir
  File.join(bundle_path, relative_extension_dir)
end

#gemspec_fileObject



121
122
123
# File 'lib/prebundler/gem_ref.rb', line 121

def gemspec_file
  "#{id}.gemspec"
end

#gemspecsObject



75
76
77
78
79
# File 'lib/prebundler/gem_ref.rb', line 75

def gemspecs
  @gemspecs ||= relative_gemspec_files.map do |relative_gemspec_file|
    Bundler.load_gemspec(File.join(bundle_path, relative_gemspec_file))
  end
end

#idObject



35
36
37
# File 'lib/prebundler/gem_ref.rb', line 35

def id
  "#{name}-#{version}"
end

#installObject



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

def install
  system({ "GEM_HOME" => bundle_path }, "gem install -N --ignore-dependencies --source #{source} #{name} -v #{version}")
  $?.exitstatus
end

#install_dirObject



97
98
99
# File 'lib/prebundler/gem_ref.rb', line 97

def install_dir
  File.join(install_path, id)
end

#install_from_tar(tar_file) ⇒ Object



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

def install_from_tar(tar_file)
  system "tar -C #{bundle_path} -xf #{tar_file}"
  $?.exitstatus == 0
end

#install_pathObject



89
90
91
# File 'lib/prebundler/gem_ref.rb', line 89

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

#installable?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/prebundler/gem_ref.rb', line 81

def installable?
  true
end

#relative_extension_dirObject



105
106
107
# File 'lib/prebundler/gem_ref.rb', line 105

def relative_extension_dir
  File.join('extensions', Bundler.local_platform.to_s, Gem.extension_api_version.to_s, id)
end

#relative_gem_dirObject



109
110
111
# File 'lib/prebundler/gem_ref.rb', line 109

def relative_gem_dir
  File.join('gems', id)
end

#relative_gemspec_filesObject



113
114
115
# File 'lib/prebundler/gem_ref.rb', line 113

def relative_gemspec_files
  [File.join('specifications', gemspec_file)]
end

#sourceObject



31
32
33
# File 'lib/prebundler/gem_ref.rb', line 31

def source
  @source ||= DEFAULT_SOURCE
end

#spec_pathObject



93
94
95
# File 'lib/prebundler/gem_ref.rb', line 93

def spec_path
  File.join(bundle_path, 'specifications')
end

#storable?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/prebundler/gem_ref.rb', line 85

def storable?
  true
end

#tar_fileObject



117
118
119
# File 'lib/prebundler/gem_ref.rb', line 117

def tar_file
  File.join(Bundler.local_platform.to_s, Gem.extension_api_version.to_s, "#{id}.tar")
end

#versionObject



39
40
41
# File 'lib/prebundler/gem_ref.rb', line 39

def version
  spec.version.to_s
end