Class: ReaperMan::PackageList::Processor::Gem

Inherits:
ReaperMan::PackageList::Processor show all
Defined in:
lib/reaper-man/package_list/gem.rb

Instance Method Summary collapse

Methods inherited from ReaperMan::PackageList::Processor

#initialize

Methods included from Utils::Checksum

#checksum

Methods included from Utils::Process

#child_process_command, #mixlib_shellout_command, #shellout

Constructor Details

This class inherits a constructor from ReaperMan::PackageList::Processor

Instance Method Details

#add(hash, package) ⇒ Object

Add a package to the list

Parameters:

  • conf (Hash)
  • package (String)

    path to package



13
14
15
16
17
18
19
20
21
# File 'lib/reaper-man/package_list/gem.rb', line 13

def add(hash, package)
  if hash["rubygem"] && !hash.to_smash.get(:rubygem, :clean)
    hash["rubygem"] = clean(hash["rubygem"])
    hash["rubygem"]["clean"] = true
  end
  info = extract_fields(package)
  filenames = inject_package(hash, info, package)
  filenames
end

#clean(hash) ⇒ Smash

Clean data hash of empty values

Parameters:

  • hash (Hash)

    package list information

Returns:

  • (Smash)


91
92
93
94
95
96
97
98
99
# File 'lib/reaper-man/package_list/gem.rb', line 91

def clean(hash)
  Smash[
    hash.map { |k, v|
      v = clean(v) if v.is_a?(Hash)
      next if v.nil? || (v.respond_to?(:empty?) && v.empty?)
      [k, v]
    }
  ]
end

#extract_fields(package) ⇒ Hash

Extract package metadata

Parameters:

  • package (String)

    path to package

Returns:

  • (Hash)


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/reaper-man/package_list/gem.rb', line 44

def extract_fields(package)
  spec = ::Gem::Package.new(package).spec
  fields = Smash[
    spec.class.attribute_names.map do |var_name|
      value = spec.send(var_name)
      next if value.nil? || (value.respond_to?(:empty?) && value.empty?)
      [var_name, value]
    end.compact
  ]
  fields["dependencies"] = fields["dependencies"].map do |dep|
    [dep.name, dep.requirement.to_s.split(",").map(&:strip)]
  end
  if fields["required_ruby_version"]
    fields["required_ruby_version"] = fields["required_ruby_version"].
      to_s.split(",").map(&:strip)
  end
  fields
end

#inject_package(hash, info, package) ⇒ Array<String>

Insert package information into package list

Parameters:

  • hash (Hash)

    package list contents

  • info (Hash)

    package information

  • package (String)

    path to package file

Returns:

  • (Array<String>)

    package paths within package list contents



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/reaper-man/package_list/gem.rb', line 69

def inject_package(hash, info, package)
  package_path = File.join(
    "rubygems", "gems", "#{info["name"]}-#{info["version"]}.gem"
  )
  classification = info["version"].prerelease? ? "prerelease" : "release"
  info["version"] = info["version"].version
  hash.deep_merge!(
    "rubygem" => {
      classification => {
        info["name"] => {
          info["version"].to_s => info.merge("package_path" => package_path),
        },
      },
    },
  )
  package_path
end

#remove(hash, package_name, version, args = {}) ⇒ Object

Remove package from the list

Parameters:

  • conf (Hash)

    configuration hash

  • package_name (String)

    name

  • version (String)


28
29
30
31
32
33
34
35
36
37
38
# File 'lib/reaper-man/package_list/gem.rb', line 28

def remove(hash, package_name, version, args = {})
  deleted = false
  if hash["rubygems"][package_name]
    if version
      deleted = hash["rubygems"][package_name].delete(version)
    else
      deleted = hash["rubygems"].delete(package_name)
    end
  end
  !!deleted
end