Class: Mxrb::OfficialMarketplace::GitHubResolver
- Inherits:
-
Object
- Object
- Mxrb::OfficialMarketplace::GitHubResolver
- Defined in:
- lib/mxrb/official_marketplace.rb
Overview
Resolves known names or explicit github:org/repo releases.
Instance Method Summary collapse
- #catalog_search(query) ⇒ Object
- #github_search(query) ⇒ Object
-
#initialize(client: HttpClient.new) ⇒ GitHubResolver
constructor
A new instance of GitHubResolver.
- #resolve(identifier, version: nil) ⇒ Object
- #search(query) ⇒ Object
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.}" 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 |