Class: Mxrb::OfficialMarketplace::GitHubResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/mxrb/official_marketplace.rb

Overview

Resolves known names or explicit github:org/repo releases.

Instance Method Summary collapse

Constructor Details

#initialize(client: HttpClient.new) ⇒ GitHubResolver

Returns a new instance of GitHubResolver.



299
300
301
# File 'lib/mxrb/official_marketplace.rb', line 299

def initialize(client: HttpClient.new)
  @client = client
end

Instance Method Details

#catalog_search(query) ⇒ Object



310
311
312
313
314
315
# File 'lib/mxrb/official_marketplace.rb', line 310

def catalog_search(query)
  term = query.to_s.downcase
  CATALOG.filter_map do |name, repository|
    { name:, repository: } if name.downcase.include?(term) || repository.downcase.include?(term)
  end
end

#github_search(query) ⇒ Object



317
318
319
320
321
322
323
324
# File 'lib/mxrb/official_marketplace.rb', line 317

def github_search(query)
  payload = @client.json(
    "https://api.github.com/search/repositories?q=#{URI.encode_www_form_component(query)}+org:mendix"
  )
  Array(payload['items']).first(20).map do |item|
    { name: item['name'], repository: item['full_name'], description: item['description'] }
  end
end

#resolve(identifier, version: nil) ⇒ Object



326
327
328
329
330
331
332
333
334
# File 'lib/mxrb/official_marketplace.rb', line 326

def resolve(identifier, version: nil)
  repository, name = repository_and_name(identifier)
  endpoint = release_endpoint(version)
  release = @client.json("https://api.github.com/repos/#{repository}/#{endpoint}")
  download_url = release_download(release)
  Package.new(name, release['tag_name'] || version || 'latest', :github, download_url, repository)
rescue KeyError => e
  raise MarketplaceError, "GitHub release is incomplete: #{e.message}"
end

#search(query) ⇒ Object



303
304
305
306
307
308
# File 'lib/mxrb/official_marketplace.rb', line 303

def search(query)
  local = catalog_search(query)
  return local unless local.empty?

  github_search(query)
end