Class: Gel::MultiStore

Inherits:
Object
  • Object
show all
Defined in:
lib/gel/multi_store.rb

Constant Summary collapse

VERSION =
"#{RbConfig::CONFIG["ruby_version"]}"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root, stores) ⇒ MultiStore

Returns a new instance of MultiStore.



12
13
14
15
16
17
# File 'lib/gel/multi_store.rb', line 12

def initialize(root, stores)
  @root = File.realpath(File.expand_path(root)) if root
  @stores = stores

  @monitor = Monitor.new
end

Instance Attribute Details

#monitorObject (readonly)

Returns the value of attribute monitor.



10
11
12
# File 'lib/gel/multi_store.rb', line 10

def monitor
  @monitor
end

#rootObject (readonly)

Returns the value of attribute root.



9
10
11
# File 'lib/gel/multi_store.rb', line 9

def root
  @root
end

Class Method Details

.subkey(architecture, version) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/gel/multi_store.rb', line 31

def self.subkey(architecture, version)
  architecture ||= "ruby"
  if version && architecture == "ruby"
    VERSION
  elsif version
    "#{architecture}-#{VERSION}"
  else
    "#{architecture}"
  end
end

Instance Method Details

#[](architecture, version = false) ⇒ Object



27
28
29
# File 'lib/gel/multi_store.rb', line 27

def [](architecture, version = false)
  @stores[self.class.subkey(architecture, version)]
end

#each(gem_name = nil, &block) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/gel/multi_store.rb', line 56

def each(gem_name = nil, &block)
  return enum_for(__callee__, gem_name) unless block_given?

  @stores.each do |_, store|
    store.each(gem_name, &block)
  end
end

#gem(name, version) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/gel/multi_store.rb', line 64

def gem(name, version)
  @stores.each do |_, store|
    g = store.gem(name, version)
    return g if g
  end
  nil
end

#gem?(name, version, platform = nil) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
87
88
89
# File 'lib/gel/multi_store.rb', line 84

def gem?(name, version, platform = nil)
  @stores.any? do |key, store|
    next if platform && !key.start_with?(platform)
    store.gem?(name, version)
  end
end

#gems(name_version_pairs) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/gel/multi_store.rb', line 72

def gems(name_version_pairs)
  result = {}

  @stores.each do |_, store|
    result.update(store.gems(name_version_pairs)) do |l, r|
      l
    end
  end

  result
end

#gems_for_lib(file) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/gel/multi_store.rb', line 48

def gems_for_lib(file)
  @stores.each do |_, store|
    store.gems_for_lib(file) do |gem, subdir|
      yield gem, subdir
    end
  end
end

#libs_for_gems(versions, &block) ⇒ Object



91
92
93
94
95
# File 'lib/gel/multi_store.rb', line 91

def libs_for_gems(versions, &block)
  @stores.each do |_, store|
    store.libs_for_gems(versions, &block)
  end
end

#pathsObject



23
24
25
# File 'lib/gel/multi_store.rb', line 23

def paths
  @stores.values.flat_map(&:paths).uniq
end

#prepare(versions) ⇒ Object



42
43
44
45
46
# File 'lib/gel/multi_store.rb', line 42

def prepare(versions)
  @stores.each do |_, store|
    store.prepare(versions)
  end
end

#stub_setObject



19
20
21
# File 'lib/gel/multi_store.rb', line 19

def stub_set
  @stub_set ||= Gel::StubSet.new(@root)
end