Class: Paquette::NpmServer::GatedNpmRepository

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/paquette/npm_server/gated_npm_repository.rb

Instance Method Summary collapse

Constructor Details

#initialize(repository, &entitler) ⇒ GatedNpmRepository

Returns a new instance of GatedNpmRepository.



6
7
8
9
# File 'lib/paquette/npm_server/gated_npm_repository.rb', line 6

def initialize(repository, &entitler)
  super(repository)
  @entitler = entitler
end

Instance Method Details

#package_exists?(package_name, version) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
62
63
# File 'lib/paquette/npm_server/gated_npm_repository.rb', line 59

def package_exists?(package_name, version)
  if @entitler.call(name: package_name, version: version)
    super
  end
end

#package_file_path(package_name, version) ⇒ Object



28
29
30
31
32
# File 'lib/paquette/npm_server/gated_npm_repository.rb', line 28

def package_file_path(package_name, version)
  if @entitler.call(name: package_name, version: version)
    super
  end
end

#package_metadata(package_name) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/paquette/npm_server/gated_npm_repository.rb', line 34

def (package_name)
  return nil unless @entitler.call(name: package_name)

  # Get the metadata from the underlying repository, but filter by entitled versions
   = super
  return  unless 

  # Filter versions based on entitlements
  entitled_versions = versions_for_package(package_name)

  # Update the versions hash to only include entitled versions
  [:versions] = [:versions].slice(*entitled_versions)

  # Update time entries to only include entitled versions
  [:time] = [:time].slice(*entitled_versions)

  # Update dist-tags to use the latest entitled version
  if entitled_versions.any?
    latest_entitled = entitled_versions.max_by { |v| Gem::Version.new(v) }
    [:"dist-tags"][:latest] = latest_entitled
  end

  
end

#package_namesObject



11
12
13
# File 'lib/paquette/npm_server/gated_npm_repository.rb', line 11

def package_names
  super.select { |name| @entitler.call(name: name) }
end

#package_versionsObject



15
16
17
18
19
# File 'lib/paquette/npm_server/gated_npm_repository.rb', line 15

def package_versions
  super.select do |package_name, version|
    @entitler.call(name: package_name, version: version)
  end
end

#versions_for_package(package_name) ⇒ Object



21
22
23
24
25
26
# File 'lib/paquette/npm_server/gated_npm_repository.rb', line 21

def versions_for_package(package_name)
  return [] unless @entitler.call(name: package_name)
  super.select do |version|
    @entitler.call(name: package_name, version: version)
  end
end