Class: TrophyApiClient::UsersClient

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request_client:) ⇒ TrophyApiClient::UsersClient

Parameters:



25
26
27
# File 'lib/trophy_api_client/users/client.rb', line 25

def initialize(request_client:)
  @request_client = request_client
end

Instance Attribute Details

#request_clientTrophyApiClient::RequestClient (readonly)



21
22
23
# File 'lib/trophy_api_client/users/client.rb', line 21

def request_client
  @request_client
end

Instance Method Details

#achievements(id:, include_incomplete: nil, request_options: nil) ⇒ Array<TrophyApiClient::CompletedAchievementResponse>

Get a user’s achievements.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.achievements(id: "userId")

Parameters:

  • id (String)

    ID of the user.

  • include_incomplete (String) (defaults to: nil)

    When set to ‘true’, returns both completed and incomplete achievements for the user. When omitted or set to any other value, returns only completed achievements.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
# File 'lib/trophy_api_client/users/client.rb', line 307

def achievements(id:, include_incomplete: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "includeIncomplete": include_incomplete
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}/achievements"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::CompletedAchievementResponse.from_json(json_object: item)
  end
end

#all_metrics(id:, request_options: nil) ⇒ Array<TrophyApiClient::MetricResponse>

Get a single user’s progress against all active metrics.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.all_metrics(id: "userId")

Parameters:

Returns:



184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/trophy_api_client/users/client.rb', line 184

def all_metrics(id:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}/metrics"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::MetricResponse.from_json(json_object: item)
  end
end

#create(request:, request_options: nil) ⇒ TrophyApiClient::User

Create a new user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.create(request: { id: "user-id" })

Parameters:

  • request (Hash)

    The user object.Request of type TrophyApiClient::UpsertedUser, as a Hash

    • :id (String)

    • :email (String)

    • :name (String)

    • :tz (String)

    • :device_tokens (Array<String>)

    • :subscribe_to_emails (Boolean)

    • :attributes (Hash=> String)

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/trophy_api_client/users/client.rb', line 48

def create(request:, request_options: nil)
  response = @request_client.conn.post do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    req.body = { **(request || {}), **(request_options&.additional_body_parameters || {}) }.compact
    req.url "#{@request_client.get_url(request_options: request_options)}/users"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end

#get(id:, request_options: nil) ⇒ TrophyApiClient::User

Get a single user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.get(id: "userId")

Parameters:

Returns:



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/trophy_api_client/users/client.rb', line 78

def get(id:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end

#identify(id:, request:, request_options: nil) ⇒ TrophyApiClient::User

Identify a user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.identify(id: "id", request: { email: "[email protected]", tz: "Europe/London", attributes: { "department": "engineering", "role": "developer" } })

Parameters:

  • id (String)

    ID of the user to identify.

  • request (Hash)

    The user object.Request of type TrophyApiClient::UpdatedUser, as a Hash

    • :email (String)

    • :name (String)

    • :tz (String)

    • :device_tokens (Array<String>)

    • :subscribe_to_emails (Boolean)

    • :attributes (Hash=> String)

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/trophy_api_client/users/client.rb', line 117

def identify(id:, request:, request_options: nil)
  response = @request_client.conn.put do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    req.body = { **(request || {}), **(request_options&.additional_body_parameters || {}) }.compact
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end

#metric_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil) ⇒ Array<TrophyApiClient::Users::UsersMetricEventSummaryResponseItem>

Get a summary of metric events over time for a user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.metric_event_summary(
  id: "userId",
  key: "words-written",
  aggregation: DAILY,
  start_date: "2024-01-01",
  end_date: "2024-01-31"
)

Parameters:

  • id (String)

    ID of the user.

  • key (String)

    Unique key of the metric.

  • aggregation (TrophyApiClient::Users::UsersMetricEventSummaryRequestAggregation)

    The time period over which to aggregate the event data.

  • start_date (String)

    The start date for the data range in YYYY-MM-DD format. The startDate must be before the endDate, and the date range must not exceed 400 days.

  • end_date (String)

    The end date for the data range in YYYY-MM-DD format. The endDate must be after the startDate, and the date range must not exceed 400 days.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
# File 'lib/trophy_api_client/users/client.rb', line 265

def metric_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "aggregation": aggregation,
      "startDate": start_date,
      "endDate": end_date
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}/metrics/#{key}/event-summary"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::Users::UsersMetricEventSummaryResponseItem.from_json(json_object: item)
  end
end

#points(id:, key:, awards: nil, request_options: nil) ⇒ TrophyApiClient::GetUserPointsResponse

Get a user’s points for a specific points system.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.points(id: "userId", key: "points-system-key")

Parameters:

  • id (String)

    ID of the user.

  • key (String)

    Key of the points system.

  • awards (Integer) (defaults to: nil)

    The number of recent point awards to return.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
# File 'lib/trophy_api_client/users/client.rb', line 381

def points(id:, key:, awards: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = { **(request_options&.additional_query_parameters || {}), "awards": awards }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}/points/#{key}"
  end
  TrophyApiClient::GetUserPointsResponse.from_json(json_object: response.body)
end

#points_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil) ⇒ Array<TrophyApiClient::Users::UsersPointsEventSummaryResponseItem>

Get a summary of points awards over time for a user for a specific points

system.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.points_event_summary(
  id: "userId",
  key: "points-system-key",
  aggregation: DAILY,
  start_date: "2024-01-01",
  end_date: "2024-01-31"
)

Parameters:

  • id (String)

    ID of the user.

  • key (String)

    Key of the points system.

  • aggregation (TrophyApiClient::Users::UsersPointsEventSummaryRequestAggregation)

    The time period over which to aggregate the event data.

  • start_date (String)

    The start date for the data range in YYYY-MM-DD format. The startDate must be before the endDate, and the date range must not exceed 400 days.

  • end_date (String)

    The end date for the data range in YYYY-MM-DD format. The endDate must be after the startDate, and the date range must not exceed 400 days.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
# File 'lib/trophy_api_client/users/client.rb', line 424

def points_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "aggregation": aggregation,
      "startDate": start_date,
      "endDate": end_date
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}/points/#{key}/event-summary"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::Users::UsersPointsEventSummaryResponseItem.from_json(json_object: item)
  end
end

#single_metric(id:, key:, request_options: nil) ⇒ TrophyApiClient::MetricResponse

Get a user’s progress against a single active metric.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.single_metric(id: "userId", key: "key")

Parameters:

Returns:



221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# File 'lib/trophy_api_client/users/client.rb', line 221

def single_metric(id:, key:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}/metrics/#{key}"
  end
  TrophyApiClient::MetricResponse.from_json(json_object: response.body)
end

#streak(id:, history_periods: nil, request_options: nil) ⇒ TrophyApiClient::StreakResponse

Get a user’s streak data.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.streak(id: "userId")

Parameters:

  • id (String)

    ID of the user.

  • history_periods (Integer) (defaults to: nil)

    The number of past streak periods to include in the streakHistory field of the response.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
# File 'lib/trophy_api_client/users/client.rb', line 346

def streak(id:, history_periods: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "historyPeriods": history_periods
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}/streak"
  end
  TrophyApiClient::StreakResponse.from_json(json_object: response.body)
end

#update(id:, request:, request_options: nil) ⇒ TrophyApiClient::User

Update a user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::DEFAULT,
  api_key: "YOUR_API_KEY"
)
api.users.update(id: "id", request: { email: "[email protected]", tz: "Europe/London", attributes: { "department": "engineering", "role": "developer" } })

Parameters:

  • id (String)

    ID of the user to update.

  • request (Hash)

    The user object.Request of type TrophyApiClient::UpdatedUser, as a Hash

    • :email (String)

    • :name (String)

    • :tz (String)

    • :device_tokens (Array<String>)

    • :subscribe_to_emails (Boolean)

    • :attributes (Hash=> String)

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/trophy_api_client/users/client.rb', line 154

def update(id:, request:, request_options: nil)
  response = @request_client.conn.patch do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    req.body = { **(request || {}), **(request_options&.additional_body_parameters || {}) }.compact
    req.url "#{@request_client.get_url(request_options: request_options)}/users/#{id}"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end