Module: U3d::HubModulesParser

Defined in:
lib/u3d/hub_modules_parser.rb

Constant Summary collapse

HUB_MODULES_NAME =
'%<version>s-%<os>s-modules.json'

Class Method Summary collapse

Class Method Details

.download_modules(os: U3dCore::Helper.operating_system) ⇒ Object



66
67
68
69
70
71
# File 'lib/u3d/hub_modules_parser.rb', line 66

def download_modules(os: U3dCore::Helper.operating_system)
  url = UnityVersions.json_url_for(json_os(os))
  builds = UnityVersions.fetch_json(url, UnityVersions::UNITY_LATEST_JSON)
  builds.each { |build| write_modules(build, os) }
  return builds.map { |build| build['versions'] }
end

.load_modules(version, os: U3dCore::Helper.operating_system, offline: false) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/u3d/hub_modules_parser.rb', line 35

def load_modules(version, os: U3dCore::Helper.operating_system, offline: false)
  path = modules_path(version, os)

  # force download if no hub file present
  download_modules(os: os) if !Utils.file_exists_not_empty?(path) && !offline

  unless Utils.file_exists_not_empty?(path)
    UI.verbose "No modules registered for UnityHub for version #{version}"
    # cached_versions.keys.map{|s| UnityVersionNumber.new(s)}
    # searching for closest version
    files = Dir.glob("#{default_modules_path}/*-#{os}-modules.json")

    vn = UnityVersionNumber.new(version)

    versions_and_paths = files.map do |p|
      v = File.basename(p).split('-')[0]
      [UnityVersionNumber.new(v), p]
    end
    # filtered by version major.minor.patch (same major & minor and patch higher or equal)
    versions_and_paths = versions_and_paths.select { |a| a[0].parts[0] == vn.parts[0] && a[0].parts[1] == vn.parts[1] && a[0].parts[2] >= vn.parts[2] }

    if versions_and_paths.empty?
      UI.info "No closest version from UnityHub found for version #{version}"
      return []
    end
    path = versions_and_paths.first[1]
  end

  return JSON.parse(File.read(path))
end