Class: Binbundle::GemList

Inherits:
Object
  • Object
show all
Defined in:
lib/binbundle/gem_list.rb

Overview

String helpers

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(contents, include_version: true) ⇒ GemList

Returns a new instance of GemList.



8
9
10
11
# File 'lib/binbundle/gem_list.rb', line 8

def initialize(contents, include_version: true)
  @contents = contents
  @include_version = include_version
end

Instance Attribute Details

#include_version=(value) ⇒ Object (writeonly)

Sets the attribute include_version

Parameters:

  • value

    the value to set the attribute include_version to.



6
7
8
# File 'lib/binbundle/gem_list.rb', line 6

def include_version=(value)
  @include_version = value
end

Instance Method Details

#bins_for_gem(gem) ⇒ Object



54
55
56
57
58
59
# File 'lib/binbundle/gem_list.rb', line 54

def bins_for_gem(gem)
  m = gem_list.select { |g| g[:gem] == gem }.first
  return "Gem #{gem} not found" unless m

  m[:bins] ? m[:bins].join("\n") : 'Missing info'
end

#gem_for_bin(bin) ⇒ Object



47
48
49
50
51
52
# File 'lib/binbundle/gem_list.rb', line 47

def gem_for_bin(bin)
  m = gem_list.select { |gem| gem[:bins].include?(bin) }.first
  return "Gem for #{bin} not found" unless m

  m[:gem]
end

#gem_listObject



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/binbundle/gem_list.rb', line 13

def gem_list
  return @gem_list if @gem_list

  rx = /(?mix)(?:\#\sExecutables:\s(?<bins>[\S\s,]+?)\n)?(?:sudo\s)?gem\sinstall
        \s(?:--user-install\s)?
        (?<gem>\S+)(?:\s(?:-v|--version)\s'(?<version>[0-9.]+)')?/
  @gem_list = []
  @contents.to_enum(:scan, rx).map { Regexp.last_match }.each do |m|
    @gem_list << { gem: m['gem'], bins: m['bins']&.split(', '), version: m['version'] }
  end
  @gem_list
end

#normal_installObject



40
41
42
43
44
45
# File 'lib/binbundle/gem_list.rb', line 40

def normal_install
  gem_list.map do |gem|
    version = @include_version && gem[:version] ? " -v '#{gem[:version]}'" : ''
    "gem install #{gem[:gem]}#{version}"
  end
end

#sudoObject



26
27
28
29
30
31
# File 'lib/binbundle/gem_list.rb', line 26

def sudo
  gem_list.map do |gem|
    version = @include_version && gem[:version] ? " -v '#{gem[:version]}'" : ''
    "sudo gem install #{gem[:gem]}#{version}"
  end
end

#user_installObject



33
34
35
36
37
38
# File 'lib/binbundle/gem_list.rb', line 33

def user_install
  gem_list.map do |gem|
    version = @include_version && gem[:version] ? " -v '#{gem[:version]}'" : ''
    "gem install --user-install #{gem[:gem]}#{version}"
  end
end