Class: Gemkeeper::CompactIndexServer::GemIndex
- Inherits:
-
Object
- Object
- Gemkeeper::CompactIndexServer::GemIndex
- Defined in:
- lib/gemkeeper/compact_index_server/gem_index.rb
Overview
Builds and maintains the in-memory index of privately-hosted gems. Scans gems_dir on construction and after each successful upload.
Instance Method Summary collapse
- #[](name) ⇒ Object
-
#add(source_path, spec) ⇒ Object
Copies source_path into gems_dir, derives the filename from spec, and rebuilds.
- #gem_path(filename) ⇒ Object
-
#initialize(gems_dir) ⇒ GemIndex
constructor
A new instance of GemIndex.
- #keys ⇒ Object
- #rebuild ⇒ Object
-
#serves?(name, version) ⇒ Boolean
True when the private store holds this exact name and bare-semver version.
- #values ⇒ Object
Constructor Details
#initialize(gems_dir) ⇒ GemIndex
Returns a new instance of GemIndex.
15 16 17 18 19 20 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 15 def initialize(gems_dir) @gems_dir = gems_dir @gems = {} FileUtils.mkdir_p(@gems_dir) rebuild end |
Instance Method Details
#[](name) ⇒ Object
22 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 22 def [](name) = @gems[name] |
#add(source_path, spec) ⇒ Object
Copies source_path into gems_dir, derives the filename from spec, and rebuilds. Raises Errno::EEXIST if the gem already exists. Returns the target filename.
39 40 41 42 43 44 45 46 47 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 39 def add(source_path, spec) filename = SpecMapper.filename(spec) target = File.join(@gems_dir, filename) raise Errno::EEXIST, target if File.exist?(target) copy_into_place(source_path, target) rebuild filename end |
#gem_path(filename) ⇒ Object
32 33 34 35 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 32 def gem_path(filename) path = File.join(@gems_dir, filename) File.exist?(path) ? path : nil end |
#keys ⇒ Object
23 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 23 def keys = @gems.keys |
#rebuild ⇒ Object
49 50 51 52 53 54 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 49 def rebuild gems = {} Dir.glob(File.join(@gems_dir, "*.gem")).each { |gem_file| index_gem(gems, gem_file) } gems.each_value { |gem| stamp_checksum(gem) } @gems = gems end |
#serves?(name, version) ⇒ Boolean
True when the private store holds this exact name and bare-semver version.
27 28 29 30 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 27 def serves?(name, version) gem = @gems[name] gem ? gem.versions.any? { |gem_version| gem_version.number == version } : false end |
#values ⇒ Object
24 |
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 24 def values = @gems.values |