class Yoda::Store::Actions::ImportGem

Attributes

gem_name[R]

@return [String]

gem_version[R]

@return [String]

registry[R]

@return [Registry]

Public Class Methods

new(registry:, gem_name:, gem_version:) click to toggle source

@param registry [Registry] @param gem_name [String] @param gem_version [String]

# File lib/yoda/store/actions/import_gem.rb, line 23
def initialize(registry:, gem_name:, gem_version:)
  @registry = registry
  @gem_name = gem_name
  @gem_version = gem_version
end
run(args = {}) click to toggle source

@return [true, false]

# File lib/yoda/store/actions/import_gem.rb, line 15
def run(args = {})
  new(args).run
end

Public Instance Methods

run() click to toggle source

@return [true, false]

# File lib/yoda/store/actions/import_gem.rb, line 30
def run
  create_dependency_doc
  if yardoc_file = yardoc_path
    if patch = load_yardoc(yardoc_file, gem_path)
      registry.add_patch(patch)
      return true
    end
  end
  false
end

Private Instance Methods

create_dependency_doc() click to toggle source
# File lib/yoda/store/actions/import_gem.rb, line 43
def create_dependency_doc
  if yardoc_path
    Logger.info "Gem docs for #{gem_name} #{gem_version} already exist"
    return true
  end
  Logger.info "Building gem docs for #{gem_name} #{gem_version}"
  begin
    o, e = Open3.capture2e("yard gems #{gem_name} #{gem_version}")
    Logger.debug o unless o.empty?
    if e.success?
      Logger.info "Done building gem docs for #{gem_name} #{gem_version}"
    else
      Logger.warn "Failed to build #{gem_name} #{gem_version}"
    end
  rescue => ex
    Logger.debug ex
    Logger.debug ex.backtrace
    Logger.warn "Failed to build #{gem_name} #{gem_version}"
  end
end
gem_path() click to toggle source

@return [String, nil]

# File lib/yoda/store/actions/import_gem.rb, line 88
def gem_path
  @gem_path ||= begin
    if spec = Gem.source_index.find_name(gem_name).first
      spec.full_gem_path
    end
  end
end
load_yardoc(yardoc_file, gem_source_path) click to toggle source

@param yardoc_file [String] @param gem_source_path [String] @return [Objects::Patch, nil]

# File lib/yoda/store/actions/import_gem.rb, line 67
def load_yardoc(yardoc_file, gem_source_path)
  begin
    YardImporter.import(yardoc_file, root_path: gem_source_path)
  rescue => ex
    Logger.debug ex
    Logger.debug ex.backtrace
    Logger.warn "Failed to load #{yardoc_file}"
    nil
  end
end
yardoc_path() click to toggle source

@return [String, nil]

# File lib/yoda/store/actions/import_gem.rb, line 79
def yardoc_path
  YARD::Registry.yardoc_file_for_gem(gem_name, gem_version)
rescue Bundler::BundlerError => ex
  Logger.debug ex
  Logger.debug ex.backtrace
  nil
end