Class: FacelessReels::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/faceless_reels/client.rb

Constant Summary collapse

SHOWCASE_ID_PATTERN =
/\A[a-z0-9]+(?:-[a-z0-9]+)*\z/.freeze

Instance Method Summary collapse

Constructor Details

#initialize(base_url: HOMEPAGE, http_get: nil) ⇒ Client

Returns a new instance of Client.



9
10
11
12
# File 'lib/faceless_reels/client.rb', line 9

def initialize(base_url: HOMEPAGE, http_get: nil)
  @base_url = normalize_base_url(base_url)
  @http_get = http_get || lambda { |uri| Net::HTTP.get_response(uri) }
end

Instance Method Details

#available?Boolean

Returns:

  • (Boolean)


23
24
25
26
27
# File 'lib/faceless_reels/client.rb', line 23

def available?
  ping.fetch("message", nil) == "pong"
rescue Error, SystemCallError, Timeout::Error
  false
end

#pingObject



14
15
16
17
18
19
20
21
# File 'lib/faceless_reels/client.rb', line 14

def ping
  response = @http_get.call(URI("#{@base_url}/api/ping"))
  raise HTTPError, response.code unless success?(response)

  JSON.parse(response.body)
rescue JSON::ParserError => error
  raise Error, "Faceless Reels returned invalid JSON: #{error.message}"
end

#showcase_video_url(showcase_id) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/faceless_reels/client.rb', line 29

def showcase_video_url(showcase_id)
  id = showcase_id.to_s
  unless SHOWCASE_ID_PATTERN.match?(id)
    raise ArgumentError, "Invalid showcase ID"
  end

  "#{@base_url}/api/public/showcase-videos/#{id}"
end