Class: TrophyApiClient::AsyncUsersClient

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::AsyncUsersClient

Parameters:



512
513
514
# File 'lib/trophy_api_client/users/client.rb', line 512

def initialize(request_client:)
  @request_client = request_client
end

Instance Attribute Details

#request_clientTrophyApiClient::AsyncRequestClient (readonly)



508
509
510
# File 'lib/trophy_api_client/users/client.rb', line 508

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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.achievements(id: "userId", include_incomplete: "true")

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:



810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
# File 'lib/trophy_api_client/users/client.rb', line 810

def achievements(id:, include_incomplete: nil, request_options: nil)
  Async do
    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(environment: api,
                                         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
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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.all_metrics(id: "userId")

Parameters:

Returns:



679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
# File 'lib/trophy_api_client/users/client.rb', line 679

def all_metrics(id:, request_options: nil)
  Async do
    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(environment: api, 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
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::PRODUCTION,
  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:



535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
# File 'lib/trophy_api_client/users/client.rb', line 535

def create(request:, request_options: nil)
  Async do
    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(environment: api, request_options: request_options)}/users"
    end
    TrophyApiClient::User.from_json(json_object: response.body)
  end
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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.get(id: "userId")

Parameters:

Returns:



567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
# File 'lib/trophy_api_client/users/client.rb', line 567

def get(id:, request_options: nil)
  Async do
    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(environment: api, request_options: request_options)}/users/#{id}"
    end
    TrophyApiClient::User.from_json(json_object: response.body)
  end
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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.identify(id: "id", request: { email: "user@example.com", 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:



608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
# File 'lib/trophy_api_client/users/client.rb', line 608

def identify(id:, request:, request_options: nil)
  Async do
    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(environment: api, request_options: request_options)}/users/#{id}"
    end
    TrophyApiClient::User.from_json(json_object: response.body)
  end
end

#leaderboard(id:, key:, run: nil, num_events: nil, request_options: nil) ⇒ TrophyApiClient::UserLeaderboardResponseWithHistory

Get a user’s rank, value, and history for a specific leaderboard.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.leaderboard(
  id: "user-123",
  key: "weekly-words",
  run: "2025-01-15",
  num_events: 1
)

Parameters:

  • id (String)

    The user’s ID in your database.

  • key (String)

    Unique key of the leaderboard as set when created.

  • run (String) (defaults to: nil)

    Specific run date in YYYY-MM-DD format. If not provided, returns the current run.

  • num_events (Integer) (defaults to: nil)

    The number of events to return in the history array.

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

Returns:



990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
# File 'lib/trophy_api_client/users/client.rb', line 990

def leaderboard(id:, key:, run: nil, num_events: nil, request_options: nil)
  Async do
    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 || {}),
        "run": run,
        "numEvents": num_events
      }.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(environment: api,
                                         request_options: request_options)}/users/#{id}/leaderboards/#{key}"
    end
    TrophyApiClient::UserLeaderboardResponseWithHistory.from_json(json_object: response.body)
  end
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::PRODUCTION,
  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:



765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
# File 'lib/trophy_api_client/users/client.rb', line 765

def metric_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil)
  Async do
    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(environment: api,
                                         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
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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.points(
  id: "userId",
  key: "points-system-key",
  awards: 1
)

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:



893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
# File 'lib/trophy_api_client/users/client.rb', line 893

def points(id:, key:, awards: nil, request_options: nil)
  Async do
    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(environment: api,
                                         request_options: request_options)}/users/#{id}/points/#{key}"
    end
    TrophyApiClient::GetUserPointsResponse.from_json(json_object: response.body)
  end
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::PRODUCTION,
  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:



939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
# File 'lib/trophy_api_client/users/client.rb', line 939

def points_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil)
  Async do
    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(environment: api,
                                         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
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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.single_metric(id: "userId", key: "key")

Parameters:

Returns:



718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
# File 'lib/trophy_api_client/users/client.rb', line 718

def single_metric(id:, key:, request_options: nil)
  Async do
    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(environment: api,
                                         request_options: request_options)}/users/#{id}/metrics/#{key}"
    end
    TrophyApiClient::MetricResponse.from_json(json_object: response.body)
  end
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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.streak(id: "userId", history_periods: 1)

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:



852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
# File 'lib/trophy_api_client/users/client.rb', line 852

def streak(id:, history_periods: nil, request_options: nil)
  Async do
    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(environment: api, request_options: request_options)}/users/#{id}/streak"
    end
    TrophyApiClient::StreakResponse.from_json(json_object: response.body)
  end
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::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.update(id: "id", request: { email: "user@example.com", 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:



647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
# File 'lib/trophy_api_client/users/client.rb', line 647

def update(id:, request:, request_options: nil)
  Async do
    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(environment: api, request_options: request_options)}/users/#{id}"
    end
    TrophyApiClient::User.from_json(json_object: response.body)
  end
end