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
26
# 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]
  @prefix = options[:prefix]
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

#prefixObject

Returns the value of attribute prefix.



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

def prefix
  @prefix
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



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/prebundler/gem_ref.rb', line 60

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



78
79
80
# File 'lib/prebundler/gem_ref.rb', line 78

def executables
  gemspecs.flat_map(&:executables)
end

#extension_dirObject



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

def extension_dir
  File.join(bundle_path, relative_extension_dir)
end

#gemspecsObject



82
83
84
85
86
# File 'lib/prebundler/gem_ref.rb', line 82

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

#idObject



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

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

#installObject



50
51
52
53
# File 'lib/prebundler/gem_ref.rb', line 50

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

#install_dirObject



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

def install_dir
  File.join(install_path, id)
end

#install_from_tar(tar_file) ⇒ Object



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

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

#install_pathObject



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

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

#installable?Boolean

Returns:

  • (Boolean)


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

def installable?
  true
end

#relative_extension_dirObject



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

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

#relative_gem_dirObject



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

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

#relative_gemspec_filesObject



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

def relative_gemspec_files
  Dir.chdir(bundle_path) do
    Dir.glob(File.join('specifications', "#{id}*.gemspec"))
  end
end

#sourceObject Also known as: remote



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

def source
  @source ||= DEFAULT_SOURCE
end

#spec_pathObject



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

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

#storable?Boolean

Returns:

  • (Boolean)


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

def storable?
  true
end

#tar_fileObject



126
127
128
129
# File 'lib/prebundler/gem_ref.rb', line 126

def tar_file
  file = File.join(Bundler.local_platform.to_s, Prebundler.platform_version, Gem.extension_api_version.to_s, "#{id}.tar")
  prefix && !prefix.empty? ? File.join(prefix, file) : file
end

#to_gemObject



28
29
30
# File 'lib/prebundler/gem_ref.rb', line 28

def to_gem
  "gem '#{name}', '= #{version}'"
end

#versionObject



46
47
48
# File 'lib/prebundler/gem_ref.rb', line 46

def version
  spec.version.to_s
end