Class: Gemkeeper::CompactIndexServer::GemIndex

Inherits:
Object
  • Object
show all
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

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.

Raises:

  • (Errno::EEXIST)


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

#keysObject



23
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 23

def keys       = @gems.keys

#rebuildObject



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.

Returns:

  • (Boolean)


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

#valuesObject



24
# File 'lib/gemkeeper/compact_index_server/gem_index.rb', line 24

def values     = @gems.values