Class: Paquette::GemServer::Personalizer

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/paquette/gem_server/personalizer.rb

Instance Method Summary collapse

Constructor Details

#initialize(repository, license_key:, magic_comment_replacements: {}) ⇒ Personalizer

Returns a new instance of Personalizer.



8
9
10
11
12
# File 'lib/paquette/gem_server/personalizer.rb', line 8

def initialize(repository, license_key:, magic_comment_replacements: {})
  super(repository)
  @license_key = license_key
  @magic_comment_replacements = magic_comment_replacements
end

Instance Method Details

#compact_info(gem_name) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/paquette/gem_server/personalizer.rb', line 22

def compact_info(gem_name)
  # Override compact_info to use personalized gems for checksums
  versions = __getobj__.versions_for_gem(gem_name)
  return [] if versions.empty?

  versions.map do |version|
    spec = __getobj__.gem_spec(gem_name, version)
    next unless spec

    # Use personalized gem file for checksum calculation
    personalized_gem_file = gem_file_path(gem_name, version)
    checksum = Digest::SHA256.file(personalized_gem_file).hexdigest

    # Get required Ruby version from gemspec
    ruby_version = spec.required_ruby_version&.to_s || ">= 0"

    # Format: version |checksum:sha256_checksum,ruby:required_ruby_version
    "#{version} |checksum:#{checksum},ruby:#{ruby_version}"
  end.compact
end

#gem_file_path(gem_name, version) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/paquette/gem_server/personalizer.rb', line 14

def gem_file_path(gem_name, version)
  original_path = __getobj__.gem_file_path(gem_name, version)
  return original_path unless File.exist?(original_path)

  # Create personalized version
  personalize_gem(original_path, gem_name, version)
end