lara-sdk 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/lara/client.rb +35 -4
- data/lib/lara/glossaries.rb +14 -0
- data/lib/lara/memories.rb +14 -0
- data/lib/lara/models/collection_result.rb +27 -0
- data/lib/lara/models/resource_query_options.rb +29 -0
- data/lib/lara/styleguides.rb +14 -0
- data/lib/lara/version.rb +1 -1
- data/lib/lara.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d794b96f2ef4b205bf0b46706b9346af3659ee923870116341e87a3688220ee7
|
|
4
|
+
data.tar.gz: e460f4a73a7a25c94c2d57a99a8d6998c06625b9e27723594b9789b86d601061
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 722e1746da8b4735ee5b072b8168cef5996a1aeb7cc059b3ca651da46a0144808c93c7cde7583d300ea0adf02a1b812f24803072e399e35642560b82b10b272f
|
|
7
|
+
data.tar.gz: c3dec84e4e56eec0bbfa2f46ec05a688bbecf2ee76f17bd80c6f78273f33458595b33c42baa39d2cb2d76057c04c9ac16f8c03937847ab1e994aacd976bfdf94
|
data/lib/lara/client.rb
CHANGED
|
@@ -56,6 +56,22 @@ module Lara
|
|
|
56
56
|
request(:get, path, body: nil, headers: headers, params: params)
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
+
# Retrieves a collection using pagination metadata from the response headers.
|
|
60
|
+
# @yield [Hash] Converts each resource to its SDK model
|
|
61
|
+
# @return [Lara::Models::CollectionResult]
|
|
62
|
+
def get_collection(path, params: nil)
|
|
63
|
+
items, headers = request(:get, path, params: params, with_metadata: true)
|
|
64
|
+
total = integer_header(headers, "x-total-count", minimum: 0)
|
|
65
|
+
raise LaraError, "Missing or invalid X-Total-Count response header" if total.nil?
|
|
66
|
+
|
|
67
|
+
Lara::Models::CollectionResult.new(
|
|
68
|
+
items: block_given? ? items.map { |item| yield item } : items,
|
|
69
|
+
total: total,
|
|
70
|
+
page: integer_header(headers, "x-page", minimum: 1),
|
|
71
|
+
size: integer_header(headers, "x-page-size", minimum: 1)
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
59
75
|
# Sends a POST request to the Lara API.
|
|
60
76
|
# @param path [String] The path to send the request to.
|
|
61
77
|
# @param body [Hash,nil] The parameters to send with the request.
|
|
@@ -90,8 +106,19 @@ module Lara
|
|
|
90
106
|
|
|
91
107
|
private
|
|
92
108
|
|
|
109
|
+
def integer_header(headers, name, minimum:)
|
|
110
|
+
value = headers.find { |key, _| key.downcase == name }&.last
|
|
111
|
+
return nil unless value.is_a?(String)
|
|
112
|
+
|
|
113
|
+
value = value.gsub(/\A[ \t]+|[ \t]+\z/, "")
|
|
114
|
+
return nil unless value.match?(/\A[0-9]+\z/)
|
|
115
|
+
|
|
116
|
+
number = value.to_i
|
|
117
|
+
number if number >= minimum
|
|
118
|
+
end
|
|
119
|
+
|
|
93
120
|
def request(method, path, body: nil, files: nil, headers: nil, params: nil,
|
|
94
|
-
raw_response: false, &callback)
|
|
121
|
+
raw_response: false, with_metadata: false, &callback)
|
|
95
122
|
file_positions = (files || {}).each_with_object({}) do |(name, file), positions|
|
|
96
123
|
next unless file.respond_to?(:pos) && file.respond_to?(:seek)
|
|
97
124
|
|
|
@@ -104,7 +131,8 @@ module Lara
|
|
|
104
131
|
ensure_valid_token
|
|
105
132
|
|
|
106
133
|
make_request(method, path, body: body, files: files, headers: headers, params: params,
|
|
107
|
-
raw_response: raw_response,
|
|
134
|
+
raw_response: raw_response, with_metadata: with_metadata,
|
|
135
|
+
&callback)
|
|
108
136
|
rescue LaraApiError => e
|
|
109
137
|
raise unless e.status_code == 401
|
|
110
138
|
|
|
@@ -112,7 +140,8 @@ module Lara
|
|
|
112
140
|
# Multipart encoding consumed the files; replay their original bytes.
|
|
113
141
|
file_positions.each { |name, position| files[name].seek(position) }
|
|
114
142
|
make_request(method, path, body: body, files: files, headers: headers, params: params,
|
|
115
|
-
raw_response: raw_response,
|
|
143
|
+
raw_response: raw_response, with_metadata: with_metadata,
|
|
144
|
+
&callback)
|
|
116
145
|
end
|
|
117
146
|
|
|
118
147
|
def ensure_valid_token
|
|
@@ -204,7 +233,7 @@ module Lara
|
|
|
204
233
|
end
|
|
205
234
|
|
|
206
235
|
def make_request(method, path, body: nil, files: nil, headers: nil, params: nil,
|
|
207
|
-
raw_response: false, &callback)
|
|
236
|
+
raw_response: false, with_metadata: false, &callback)
|
|
208
237
|
path = "/#{path}" unless path.start_with?("/")
|
|
209
238
|
request_headers = build_request_headers(body, files, headers)
|
|
210
239
|
|
|
@@ -226,6 +255,8 @@ module Lara
|
|
|
226
255
|
|
|
227
256
|
raise LaraApiError.from_response(response) unless response.success?
|
|
228
257
|
|
|
258
|
+
return [parse_json(response.body), response.headers] if with_metadata
|
|
259
|
+
|
|
229
260
|
return response.body if raw_response
|
|
230
261
|
|
|
231
262
|
content_type = response.headers["content-type"] || response.headers["Content-Type"]
|
data/lib/lara/glossaries.rb
CHANGED
|
@@ -25,13 +25,27 @@ module Lara
|
|
|
25
25
|
@polling_interval = 2
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
+
# @deprecated Use #list_paginated instead.
|
|
28
29
|
# @return [Array<Lara::Models::Glossary>]
|
|
29
30
|
def list
|
|
31
|
+
warn "[DEPRECATION] list is deprecated; use list_paginated instead.", uplevel: 1
|
|
30
32
|
(@client.get("/v2/glossaries") || []).map do |_h|
|
|
31
33
|
Lara::Models::Glossary.new(**_h.transform_keys(&:to_sym))
|
|
32
34
|
end
|
|
33
35
|
end
|
|
34
36
|
|
|
37
|
+
# Lists resources with optional name filtering and pagination.
|
|
38
|
+
# Without options, returns the complete collection without pagination.
|
|
39
|
+
# Any supplied option enables pagination; page and size default to 1 and 20.
|
|
40
|
+
# @param options [Lara::Models::ResourceQueryOptions,nil] Name filter and pagination
|
|
41
|
+
# @return [Lara::Models::CollectionResult] Collection containing Glossary objects
|
|
42
|
+
def list_paginated(options = nil)
|
|
43
|
+
params = options&.to_params || {}
|
|
44
|
+
@client.get_collection("/v2/glossaries", params: params) do |item|
|
|
45
|
+
Lara::Models::Glossary.new(**item.transform_keys(&:to_sym))
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
35
49
|
# @return [Lara::Models::Glossary]
|
|
36
50
|
def create(name:)
|
|
37
51
|
Lara::Models::Glossary.new(**@client.post("/v2/glossaries",
|
data/lib/lara/memories.rb
CHANGED
|
@@ -24,13 +24,27 @@ module Lara
|
|
|
24
24
|
@polling_interval = 2
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
# @deprecated Use #list_paginated instead.
|
|
27
28
|
# @return [Array<Lara::Models::Memory>]
|
|
28
29
|
def list
|
|
30
|
+
warn "[DEPRECATION] list is deprecated; use list_paginated instead.", uplevel: 1
|
|
29
31
|
(@client.get("/v2/memories") || []).map do |_h|
|
|
30
32
|
Lara::Models::Memory.new(**_h.transform_keys(&:to_sym))
|
|
31
33
|
end
|
|
32
34
|
end
|
|
33
35
|
|
|
36
|
+
# Lists resources with optional name filtering and pagination.
|
|
37
|
+
# Without options, returns the complete collection without pagination.
|
|
38
|
+
# Any supplied option enables pagination; page and size default to 1 and 20.
|
|
39
|
+
# @param options [Lara::Models::ResourceQueryOptions,nil] Name filter and pagination
|
|
40
|
+
# @return [Lara::Models::CollectionResult] Collection containing Memory objects
|
|
41
|
+
def list_paginated(options = nil)
|
|
42
|
+
params = options&.to_params || {}
|
|
43
|
+
@client.get_collection("/v2/memories", params: params) do |item|
|
|
44
|
+
Lara::Models::Memory.new(**item.transform_keys(&:to_sym))
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
34
48
|
# @return [Lara::Models::Memory]
|
|
35
49
|
def create(name:, external_id: nil)
|
|
36
50
|
payload = { name: name, external_id: external_id }.compact
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Lara
|
|
6
|
+
module Models
|
|
7
|
+
# A resource collection and its server-provided pagination metadata.
|
|
8
|
+
class CollectionResult < Base
|
|
9
|
+
# @return [Array<Lara::Models::Memory,Lara::Models::Glossary,Lara::Models::Styleguide>]
|
|
10
|
+
attr_reader :items
|
|
11
|
+
# @return [Integer] Total number of matching resources
|
|
12
|
+
attr_reader :total
|
|
13
|
+
# @return [Integer,nil] Current page (1-based), or nil for an unbounded collection
|
|
14
|
+
attr_reader :page
|
|
15
|
+
# @return [Integer,nil] Page size, or nil for an unbounded collection
|
|
16
|
+
attr_reader :size
|
|
17
|
+
|
|
18
|
+
def initialize(items:, total:, page: nil, size: nil)
|
|
19
|
+
super()
|
|
20
|
+
@items = items
|
|
21
|
+
@total = total
|
|
22
|
+
@page = page
|
|
23
|
+
@size = size
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Lara
|
|
6
|
+
module Models
|
|
7
|
+
# Optional name filtering and pagination for resource collections.
|
|
8
|
+
class ResourceQueryOptions < Base
|
|
9
|
+
# @return [String,nil] Filter by visible name (1-255 characters)
|
|
10
|
+
attr_reader :search
|
|
11
|
+
# @return [Integer,nil] Page number (1-based); enables pagination when supplied
|
|
12
|
+
attr_reader :page
|
|
13
|
+
# @return [Integer,nil] Page size (1-200); enables pagination when supplied
|
|
14
|
+
attr_reader :size
|
|
15
|
+
|
|
16
|
+
def initialize(search: nil, page: nil, size: nil)
|
|
17
|
+
super()
|
|
18
|
+
@search = search
|
|
19
|
+
@page = page
|
|
20
|
+
@size = size
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @return [Hash] Supplied options; validation and defaults are handled by the API
|
|
24
|
+
def to_params
|
|
25
|
+
{ search: search, page: page, size: size }.compact
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/lara/styleguides.rb
CHANGED
|
@@ -6,13 +6,27 @@ module Lara
|
|
|
6
6
|
@client = client
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
# @deprecated Use #list_paginated instead.
|
|
9
10
|
# @return [Array<Lara::Models::Styleguide>]
|
|
10
11
|
def list
|
|
12
|
+
warn "[DEPRECATION] list is deprecated; use list_paginated instead.", uplevel: 1
|
|
11
13
|
(@client.get("/v2/styleguides") || []).map do |h|
|
|
12
14
|
Lara::Models::Styleguide.new(**h.transform_keys(&:to_sym))
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
|
|
18
|
+
# Lists resources with optional name filtering and pagination.
|
|
19
|
+
# Without options, returns the complete collection without pagination.
|
|
20
|
+
# Any supplied option enables pagination; page and size default to 1 and 20.
|
|
21
|
+
# @param options [Lara::Models::ResourceQueryOptions,nil] Name filter and pagination
|
|
22
|
+
# @return [Lara::Models::CollectionResult] Collection containing Styleguide objects
|
|
23
|
+
def list_paginated(options = nil)
|
|
24
|
+
params = options&.to_params || {}
|
|
25
|
+
@client.get_collection("/v2/styleguides", params: params) do |item|
|
|
26
|
+
Lara::Models::Styleguide.new(**item.transform_keys(&:to_sym))
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
16
30
|
# @return [Lara::Models::Styleguide]
|
|
17
31
|
def create(name:, content:)
|
|
18
32
|
Lara::Models::Styleguide.new(**@client.post("/v2/styleguides",
|
data/lib/lara/version.rb
CHANGED
data/lib/lara.rb
CHANGED
|
@@ -16,6 +16,8 @@ require_relative "lara/audio"
|
|
|
16
16
|
|
|
17
17
|
# Models
|
|
18
18
|
require_relative "lara/models/base"
|
|
19
|
+
require_relative "lara/models/collection_result"
|
|
20
|
+
require_relative "lara/models/resource_query_options"
|
|
19
21
|
require_relative "lara/models/text"
|
|
20
22
|
require_relative "lara/models/memories"
|
|
21
23
|
require_relative "lara/models/glossaries"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lara-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Translated
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-10-
|
|
11
|
+
date: 2026-10-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -161,10 +161,12 @@ files:
|
|
|
161
161
|
- lib/lara/memories.rb
|
|
162
162
|
- lib/lara/models/audio.rb
|
|
163
163
|
- lib/lara/models/base.rb
|
|
164
|
+
- lib/lara/models/collection_result.rb
|
|
164
165
|
- lib/lara/models/documents.rb
|
|
165
166
|
- lib/lara/models/glossaries.rb
|
|
166
167
|
- lib/lara/models/images.rb
|
|
167
168
|
- lib/lara/models/memories.rb
|
|
169
|
+
- lib/lara/models/resource_query_options.rb
|
|
168
170
|
- lib/lara/models/shares.rb
|
|
169
171
|
- lib/lara/models/text.rb
|
|
170
172
|
- lib/lara/s3_client.rb
|