class Danger::GemsResolver
Attributes
dir[R]
gem_names[R]
Public Class Methods
new(gem_names)
click to toggle source
# File lib/danger/plugin_support/gems_resolver.rb, line 5 def initialize(gem_names) @gem_names = gem_names @dir = Dir.mktmpdir # We want it to persist until OS cleans it on reboot end
Public Instance Methods
call()
click to toggle source
Returns an Array of paths (plugin lib file paths) and gems (of metadata)
# File lib/danger/plugin_support/gems_resolver.rb, line 11 def call path_gems = [] Bundler.with_clean_env do Dir.chdir(dir) do create_gemfile_from_gem_names `bundle install --path vendor/gems` path_gems = all_gems_metadata end end return path_gems end
Private Instance Methods
all_gems_metadata()
click to toggle source
# File lib/danger/plugin_support/gems_resolver.rb, line 29 def all_gems_metadata return paths, gems end
create_gemfile_from_gem_names()
click to toggle source
# File lib/danger/plugin_support/gems_resolver.rb, line 33 def create_gemfile_from_gem_names gemfile = File.new("Gemfile", "w") gemfile.write "source 'https://rubygems.org'" gem_names.each do |plugin| gemfile.write "\ngem '#{plugin}'" end gemfile.close end
gem_metadata(gem)
click to toggle source
# File lib/danger/plugin_support/gems_resolver.rb, line 65 def gem_metadata(gem) { name: gem.name, gem: gem.name, author: gem.authors, url: gem.homepage, description: gem.summary, license: gem.license || "Unknown", version: gem.version.to_s } end
gems()
click to toggle source
# File lib/danger/plugin_support/gems_resolver.rb, line 53 def gems real_gems.map { |gem| gem_metadata(gem) } end
paths()
click to toggle source
The paths are relative to dir.
# File lib/danger/plugin_support/gems_resolver.rb, line 45 def paths relative_paths = gem_names.flat_map do |plugin| Dir.glob("vendor/gems/ruby/*/gems/#{plugin}*/lib/**/**/**/**.rb") end relative_paths.map { |path| File.join(dir, path) } end
real_gems()
click to toggle source
# File lib/danger/plugin_support/gems_resolver.rb, line 57 def real_gems spec_paths = gem_names.flat_map do |plugin| Dir.glob("vendor/gems/ruby/*/specifications/#{plugin}*.gemspec").first end spec_paths.map { |path| Gem::Specification.load path } end