Class: Whoosh::ClientGen::DependencyChecker

Inherits:
Object
  • Object
show all
Defined in:
lib/whoosh/client_gen/dependency_checker.rb

Constant Summary collapse

DEPENDENCIES =
{
  react_spa: [{ cmd: "node", check: "node --version", min_version: "18" }],
  expo: [
    { cmd: "node", check: "node --version", min_version: "18" },
    { cmd: "npx", check: "npx expo --version", min_version: nil }
  ],
  ios: [{ cmd: "xcodebuild", check: "xcodebuild -version", min_version: "15" }],
  flutter: [{ cmd: "flutter", check: "flutter --version", min_version: "3" }],
  htmx: [],
  telegram_bot: [{ cmd: "ruby", check: "ruby --version", min_version: "3.2" }],
  telegram_mini_app: [{ cmd: "node", check: "node --version", min_version: "18" }]
}.freeze

Class Method Summary collapse

Class Method Details

.check(client_type) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/whoosh/client_gen/dependency_checker.rb', line 20

def self.check(client_type)
  deps = DEPENDENCIES[client_type.to_sym] || []
  return { ok: true, dependencies: [], missing: [] } if deps.empty?

  missing = []
  deps.each do |dep|
    output = `#{dep[:check]} 2>/dev/null`.strip
    if output.empty?
      missing << dep
    elsif dep[:min_version]
      version = output.scan(/(\d+)\./)[0]&.first
      if version && version.to_i < dep[:min_version].to_i
        missing << dep.merge(found_version: version)
      end
    end
  end

  {
    ok: missing.empty?,
    dependencies: deps.map { |d| d[:cmd] },
    missing: missing
  }
end

.dependency_for(client_type) ⇒ Object



44
45
46
# File 'lib/whoosh/client_gen/dependency_checker.rb', line 44

def self.dependency_for(client_type)
  DEPENDENCIES[client_type.to_sym] || []
end