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 =

Returns Default base URL for API requests.

Returns:

  • (String)

    Default base URL for API requests.

'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.



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

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)


67
68
69
70
71
72
# File 'lib/rosett_ai/content/content_client.rb', line 67

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

#catalog(tier:) ⇒ Hash

Retrieve the content catalog from the remote source.

Parameters:

  • tier (Object)

    the tier

Returns:

  • (Hash)


30
31
32
33
34
35
36
37
# File 'lib/rosett_ai/content/content_client.rb', line 30

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:) ⇒ String

Download a content pack from the remote source.

Parameters:

  • pack_name (Object)

    the pack name

  • version (Object)

    the version

Returns:

  • (String)


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

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:) ⇒ String

Download the cryptographic signature for verification.

Parameters:

  • pack_name (Object)

    the pack name

  • version (Object)

    the version

Returns:

  • (String)


58
59
60
61
62
63
64
65
# File 'lib/rosett_ai/content/content_client.rb', line 58

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