Class: RosettAi::Content::ContentClient

Inherits:
Object
  • Object
show all
Defined in:
lib/rosett_ai/content/content_client.rb

Overview

Faraday-based HTTP client for the NeatNerds content server.

License key is sent as Bearer token. All requests use HTTPS. Gracefully handles offline scenarios.

Constant Summary collapse

DEFAULT_BASE_URL =
'https://content.neatnerds.be/v1/'

Instance Method Summary collapse

Constructor Details

#initialize(license_key:, base_url: DEFAULT_BASE_URL) ⇒ ContentClient

Returns a new instance of ContentClient.



17
18
19
20
21
22
23
# File 'lib/rosett_ai/content/content_client.rb', line 17

def initialize(license_key:, base_url: DEFAULT_BASE_URL)
  @license_key = license_key
  @connection = Faraday.new(url: base_url) do |conn|
    conn.request :authorization, 'Bearer', license_key
    conn.adapter Faraday.default_adapter
  end
end

Instance Method Details

#available?(pack_name) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
55
56
57
# File 'lib/rosett_ai/content/content_client.rb', line 52

def available?(pack_name)
  response = @connection.head("packs/#{pack_name}")
  response.success?
rescue Faraday::ConnectionFailed, Faraday::TimeoutError
  false
end

#catalog(tier:) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/rosett_ai/content/content_client.rb', line 25

def catalog(tier:)
  response = @connection.get('packs', tier: tier)
  raise RosettAi::ContentError, "Server error: #{response.status}" unless response.success?

  YAML.safe_load(response.body, permitted_classes: [])
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
  raise RosettAi::ContentError, "Cannot reach content server: #{e.message}"
end

#download(pack_name, version:) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/rosett_ai/content/content_client.rb', line 34

def download(pack_name, version:)
  response = @connection.get("packs/#{pack_name}/#{version}/download")
  raise RosettAi::ContentError, "Download failed: #{response.status}" unless response.success?

  response.body
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
  raise RosettAi::ContentError, "Cannot reach content server: #{e.message}"
end

#download_signature(pack_name, version:) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/rosett_ai/content/content_client.rb', line 43

def download_signature(pack_name, version:)
  response = @connection.get("packs/#{pack_name}/#{version}/signature")
  raise RosettAi::ContentError, "Signature download failed: #{response.status}" unless response.success?

  response.body
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
  raise RosettAi::ContentError, "Cannot reach content server: #{e.message}"
end