Class: DiffGem::GemExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/diff_gem/gem_extractor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cache_dir) ⇒ GemExtractor

Returns a new instance of GemExtractor.



12
13
14
15
# File 'lib/diff_gem/gem_extractor.rb', line 12

def initialize(cache_dir)
  @cache_dir = cache_dir
  ensure_cache_dir_exists
end

Instance Attribute Details

#cache_dirObject (readonly)

Returns the value of attribute cache_dir.



10
11
12
# File 'lib/diff_gem/gem_extractor.rb', line 10

def cache_dir
  @cache_dir
end

Instance Method Details

#extract_gem(gem_name, version) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/diff_gem/gem_extractor.rb', line 17

def extract_gem(gem_name, version)
  gem_cache_dir = File.join(cache_dir, gem_name, version)

  # Return existing path if already downloaded and extracted
  if File.exist?(gem_cache_dir) && !Dir.empty?(gem_cache_dir)
    puts "  Using cached: #{gem_name} #{version}"
    return gem_cache_dir
  end

  puts "  Downloading: #{gem_name} #{version}"

  # Ensure directory exists
  FileUtils.mkdir_p(gem_cache_dir)

  # Download gem file
  gem_file_path = download_gem(gem_name, version)

  # Extract gem contents
  extract_gem_archive(gem_file_path, gem_cache_dir)

  # Clean up downloaded gem file
  File.delete(gem_file_path) if File.exist?(gem_file_path)

  gem_cache_dir
end