Class: Paquette::GemServer::ReadGatedRepository
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Paquette::GemServer::ReadGatedRepository
- Defined in:
- lib/paquette/gem_server/read_gated_repository.rb
Overview
Wraps a gem repository and filters every read through an entitler block. The block receives ‘name:` (and optionally `version:`) and returns truthy when the caller is allowed to see that gem/version. Non-entitled gems disappear from listings, return nil paths, and report as non-existent.
Writes (add_gem, yank_gem) always raise WriteNotAllowed. Gating a read path implies the caller is not the right party to mutate the corpus —if you want a more nuanced story (e.g. read-gated but write-allowed for authenticated admins), write a different wrapper with its own policy. This one is deliberately opinionated: gating reads blocks writes, full stop.
Defined Under Namespace
Classes: WriteNotAllowed
Instance Method Summary collapse
- #add_gem ⇒ Object
- #compact_info(gem_name) ⇒ Object
- #gem_exists?(gem_name, version) ⇒ Boolean
- #gem_file_path(gem_name, version) ⇒ Object
- #gem_names ⇒ Object
- #gem_versions ⇒ Object
-
#initialize(repository, &entitler) ⇒ ReadGatedRepository
constructor
A new instance of ReadGatedRepository.
- #versions_for_gem(gem_name) ⇒ Object
- #yank_gem ⇒ Object
Constructor Details
#initialize(repository, &entitler) ⇒ ReadGatedRepository
Returns a new instance of ReadGatedRepository.
19 20 21 22 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 19 def initialize(repository, &entitler) super(repository) @entitler = entitler end |
Instance Method Details
#add_gem ⇒ Object
65 66 67 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 65 def add_gem(*) raise WriteNotAllowed, "Writes are not allowed through a read-gated repository" end |
#compact_info(gem_name) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 47 def compact_info(gem_name) return nil unless @entitler.call(name: gem_name) all_info = super return all_info unless all_info.is_a?(Array) all_info.select do |line| version = line.split(" ")[0] @entitler.call(name: gem_name, version: version) end end |
#gem_exists?(gem_name, version) ⇒ Boolean
59 60 61 62 63 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 59 def gem_exists?(gem_name, version) if @entitler.call(name: gem_name, version: version) super end end |
#gem_file_path(gem_name, version) ⇒ Object
41 42 43 44 45 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 41 def gem_file_path(gem_name, version) if @entitler.call(name: gem_name, version: version) super end end |
#gem_names ⇒ Object
24 25 26 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 24 def gem_names super.select { |name| @entitler.call(name: name) } end |
#gem_versions ⇒ Object
28 29 30 31 32 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 28 def gem_versions super.select do |gem_name, version| @entitler.call(name: gem_name, version: version) end end |
#versions_for_gem(gem_name) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 34 def versions_for_gem(gem_name) return [] unless @entitler.call(name: gem_name) super.select do |version| @entitler.call(name: gem_name, version: version) end end |
#yank_gem ⇒ Object
69 70 71 |
# File 'lib/paquette/gem_server/read_gated_repository.rb', line 69 def yank_gem(*) raise WriteNotAllowed, "Writes are not allowed through a read-gated repository" end |