Class: JekyllBaserowHeadlessCMS::BaserowClient

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll_baserow_headless_cms/baserow_client.rb

Overview

Client for interacting with the Baserow REST API

Constant Summary collapse

DEFAULT_API_BASE_URL =
'https://api.baserow.io'
ROW_PAGE_SIZE =
200

Instance Method Summary collapse

Constructor Details

#initialize(token, base_url: nil) ⇒ BaserowClient

Returns a new instance of BaserowClient.

Raises:



13
14
15
16
17
18
# File 'lib/jekyll_baserow_headless_cms/baserow_client.rb', line 13

def initialize(token, base_url: nil)
  @token = token
  raise ConfigurationError, 'Baserow token is required' if @token.nil? || @token.empty?

  @base_url = (base_url && !base_url.empty? ? base_url : DEFAULT_API_BASE_URL).chomp('/')
end

Instance Method Details

#get_row(table_id, row_id) ⇒ Hash

Retrieve a single row

Parameters:

  • table_id (String, Integer)

    The ID of the table

  • row_id (String, Integer)

    The ID of the row to retrieve

Returns:

  • (Hash)

    The row data



45
46
47
48
49
50
# File 'lib/jekyll_baserow_headless_cms/baserow_client.rb', line 45

def get_row(table_id, row_id)
  uri = URI("#{@base_url}/api/database/rows/table/#{table_id}/#{row_id}/")
  uri.query = URI.encode_www_form({ user_field_names: true })

  execute_request(uri, build_request(:get, uri))
end

#query_table(table_id, order_by: nil, filters: nil) ⇒ Hash

Query a Baserow table and return all rows

Parameters:

  • table_id (String, Integer)

    The ID of the table to query

  • order_by (String) (defaults to: nil)

    Optional Baserow order_by expression (e.g. "field_name" or "-field_name")

  • filters (String) (defaults to: nil)

    Optional Baserow filters expression (raw query string value)

Returns:

  • (Hash)

    The API response with results



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/jekyll_baserow_headless_cms/baserow_client.rb', line 25

def query_table(table_id, order_by: nil, filters: nil)
  all_results = []
  uri = build_rows_uri(table_id, order_by: order_by, filters: filters)

  loop do
    response = execute_request(uri, build_request(:get, uri))
    all_results.concat(response['results'])

    break unless response['next']

    uri = URI(response['next'])
  end

  { 'results' => all_results }
end