userplex 0.14.0 → 0.15.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5304abd79a996fe4c2eca502d4efc7d2cd728ddcc2b2acd0c6c59db0a53073b
4
- data.tar.gz: 35d16d6377019940f876c2014c8907daf324f1e06bd08e2726d7f80d8a3d6599
3
+ metadata.gz: 9278b955d15f31b3a6584f80a78b5d75fba4d6202e72d777a763beeea2f16472
4
+ data.tar.gz: 57c4ca2e8a0a1493d9b28e29669f4f756c70a8cdf74c93867fcf45015bcf55d9
5
5
  SHA512:
6
- metadata.gz: 210655d52b74a4d677c39a61550c8a9e128bb00bb1508453a8618c3c5727770d5be8b7458dfc19afdb288f59dc4954596368da39a149d15f73166b5852fcdfd3
7
- data.tar.gz: ce1b2b1c236ecdbdd419c864cda24d786c2bf098b204096e3b6c480a9f110e2dd8409d1d0436d34696bf20fa834b1ab19add9c987eec5ed1d7e70cf74baf056f
6
+ metadata.gz: '002386a33fc5fd3a1b48af9f754974056cce27e4860604afb9f4edca9d85fc3189923694c1d6262ef56bd07b430c3f67329841a25a2d2e22794df77e849bec21'
7
+ data.tar.gz: 390655b679cbe659c7626a501054ca25c836bee3e6d96d65e14f8222bf41f2fe70322f9ebcbe79531d65120a65694176d71081795fa24c3295dcb77344a8ad4c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.15.0 (2026-01-06)
4
+
5
+ Full Changelog: [v0.14.0...v0.15.0](https://github.com/dqnamo/userplex-ruby/compare/v0.14.0...v0.15.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** manual updates ([c04700c](https://github.com/dqnamo/userplex-ruby/commit/c04700c7a9731ed3995d988c8ecfc191ae2d1c85))
10
+
3
11
  ## 0.14.0 (2026-01-06)
4
12
 
5
13
  Full Changelog: [v0.13.0...v0.14.0](https://github.com/dqnamo/userplex-ruby/compare/v0.13.0...v0.14.0)
data/README.md CHANGED
@@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application
15
15
  <!-- x-release-please-start-version -->
16
16
 
17
17
  ```ruby
18
- gem "userplex", "~> 0.14.0"
18
+ gem "userplex", "~> 0.15.0"
19
19
  ```
20
20
 
21
21
  <!-- x-release-please-end -->
@@ -30,7 +30,7 @@ userplex = Userplex::Client.new(
30
30
  api_key: ENV["USERPLEX_API_KEY"] # This is the default and can be omitted
31
31
  )
32
32
 
33
- response = userplex.users.identify
33
+ response = userplex.events.capture
34
34
 
35
35
  puts(response.success)
36
36
  ```
@@ -41,7 +41,7 @@ When the library is unable to connect to the API, or if the API returns a non-su
41
41
 
42
42
  ```ruby
43
43
  begin
44
- user = userplex.users.identify
44
+ event = userplex.events.capture
45
45
  rescue Userplex::Errors::APIConnectionError => e
46
46
  puts("The server could not be reached")
47
47
  puts(e.cause) # an underlying Exception, likely raised within `net/http`
@@ -84,7 +84,7 @@ userplex = Userplex::Client.new(
84
84
  )
85
85
 
86
86
  # Or, configure per-request:
87
- userplex.users.identify(request_options: {max_retries: 5})
87
+ userplex.events.capture(request_options: {max_retries: 5})
88
88
  ```
89
89
 
90
90
  ### Timeouts
@@ -98,7 +98,7 @@ userplex = Userplex::Client.new(
98
98
  )
99
99
 
100
100
  # Or, configure per-request:
101
- userplex.users.identify(request_options: {timeout: 5})
101
+ userplex.events.capture(request_options: {timeout: 5})
102
102
  ```
103
103
 
104
104
  On timeout, `Userplex::Errors::APITimeoutError` is raised.
@@ -129,7 +129,7 @@ Note: the `extra_` parameters of the same name overrides the documented paramete
129
129
 
130
130
  ```ruby
131
131
  response =
132
- userplex.users.identify(
132
+ userplex.events.capture(
133
133
  request_options: {
134
134
  extra_query: {my_query_parameter: value},
135
135
  extra_body: {my_body_parameter: value},
@@ -175,18 +175,18 @@ This library provides comprehensive [RBI](https://sorbet.org/docs/rbi) definitio
175
175
  You can provide typesafe request parameters like so:
176
176
 
177
177
  ```ruby
178
- userplex.users.identify
178
+ userplex.events.capture
179
179
  ```
180
180
 
181
181
  Or, equivalently:
182
182
 
183
183
  ```ruby
184
184
  # Hashes work, but are not typesafe:
185
- userplex.users.identify
185
+ userplex.events.capture
186
186
 
187
187
  # You can also splat a full Params class:
188
- params = Userplex::UserIdentifyParams.new
189
- userplex.users.identify(**params)
188
+ params = Userplex::EventCaptureParams.new
189
+ userplex.events.capture(**params)
190
190
  ```
191
191
 
192
192
  ## Versioning
@@ -19,12 +19,12 @@ module Userplex
19
19
  # @return [String]
20
20
  attr_reader :api_key
21
21
 
22
+ # @return [Userplex::Resources::Events]
23
+ attr_reader :events
24
+
22
25
  # @return [Userplex::Resources::Users]
23
26
  attr_reader :users
24
27
 
25
- # @return [Userplex::Resources::Logs]
26
- attr_reader :logs
27
-
28
28
  # @api private
29
29
  #
30
30
  # @return [Hash{String=>String}]
@@ -73,8 +73,8 @@ module Userplex
73
73
  max_retry_delay: max_retry_delay
74
74
  )
75
75
 
76
+ @events = Userplex::Resources::Events.new(client: self)
76
77
  @users = Userplex::Resources::Users.new(client: self)
77
- @logs = Userplex::Resources::Logs.new(client: self)
78
78
  end
79
79
  end
80
80
  end
@@ -438,8 +438,8 @@ module Userplex
438
438
  # @return [Hash{Symbol=>Object}]
439
439
  #
440
440
  # @example
441
- # # `user_identify_response` is a `Userplex::Models::UserIdentifyResponse`
442
- # user_identify_response => {
441
+ # # `event_capture_response` is a `Userplex::Models::EventCaptureResponse`
442
+ # event_capture_response => {
443
443
  # success: success
444
444
  # }
445
445
  def deconstruct_keys(keys)
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Userplex
4
+ module Models
5
+ # @see Userplex::Resources::Events#capture
6
+ class EventCaptureParams < Userplex::Internal::Type::BaseModel
7
+ extend Userplex::Internal::Type::RequestParameters::Converter
8
+ include Userplex::Internal::Type::RequestParameters
9
+
10
+ # @!attribute name
11
+ #
12
+ # @return [String]
13
+ required :name, String
14
+
15
+ # @!attribute data
16
+ #
17
+ # @return [Hash{Symbol=>Object, nil}, nil]
18
+ optional :data, Userplex::Internal::Type::HashOf[Userplex::Internal::Type::Unknown, nil?: true]
19
+
20
+ # @!attribute timestamp
21
+ #
22
+ # @return [Time, nil]
23
+ optional :timestamp, Time
24
+
25
+ # @!attribute user_id
26
+ #
27
+ # @return [String, nil]
28
+ optional :user_id, String
29
+
30
+ # @!method initialize(name:, data: nil, timestamp: nil, user_id: nil, request_options: {})
31
+ # @param name [String]
32
+ # @param data [Hash{Symbol=>Object, nil}]
33
+ # @param timestamp [Time]
34
+ # @param user_id [String]
35
+ # @param request_options [Userplex::RequestOptions, Hash{Symbol=>Object}]
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Userplex
4
+ module Models
5
+ # @see Userplex::Resources::Events#capture
6
+ class EventCaptureResponse < Userplex::Internal::Type::BaseModel
7
+ # @!attribute success
8
+ #
9
+ # @return [Boolean]
10
+ required :success, Userplex::Internal::Type::Boolean
11
+
12
+ # @!method initialize(success:)
13
+ # @param success [Boolean]
14
+ end
15
+ end
16
+ end
@@ -39,5 +39,7 @@ module Userplex
39
39
  mod.define_sorbet_constant!(const) { T.type_alias { mod.to_sorbet_type } }
40
40
  end
41
41
 
42
+ EventCaptureParams = Userplex::Models::EventCaptureParams
43
+
42
44
  UserIdentifyParams = Userplex::Models::UserIdentifyParams
43
45
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Userplex
4
+ module Resources
5
+ class Events
6
+ # Capture an event
7
+ #
8
+ # @overload capture(name:, data: nil, timestamp: nil, user_id: nil, request_options: {})
9
+ #
10
+ # @param name [String]
11
+ # @param data [Hash{Symbol=>Object, nil}]
12
+ # @param timestamp [Time]
13
+ # @param user_id [String]
14
+ # @param request_options [Userplex::RequestOptions, Hash{Symbol=>Object}, nil]
15
+ #
16
+ # @return [Userplex::Models::EventCaptureResponse]
17
+ #
18
+ # @see Userplex::Models::EventCaptureParams
19
+ def capture(params)
20
+ parsed, options = Userplex::EventCaptureParams.dump_request(params)
21
+ @client.request(
22
+ method: :post,
23
+ path: "capture",
24
+ body: parsed,
25
+ model: Userplex::Models::EventCaptureResponse,
26
+ options: options
27
+ )
28
+ end
29
+
30
+ # @api private
31
+ #
32
+ # @param client [Userplex::Client]
33
+ def initialize(client:)
34
+ @client = client
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Userplex
4
- VERSION = "0.14.0"
4
+ VERSION = "0.15.0"
5
5
  end
data/lib/userplex.rb CHANGED
@@ -52,8 +52,10 @@ require_relative "userplex/errors"
52
52
  require_relative "userplex/internal/transport/base_client"
53
53
  require_relative "userplex/internal/transport/pooled_net_requester"
54
54
  require_relative "userplex/client"
55
+ require_relative "userplex/models/event_capture_params"
56
+ require_relative "userplex/models/event_capture_response"
55
57
  require_relative "userplex/models/user_identify_params"
56
58
  require_relative "userplex/models/user_identify_response"
57
59
  require_relative "userplex/models"
58
- require_relative "userplex/resources/logs"
60
+ require_relative "userplex/resources/events"
59
61
  require_relative "userplex/resources/users"
@@ -14,12 +14,12 @@ module Userplex
14
14
  sig { returns(String) }
15
15
  attr_reader :api_key
16
16
 
17
+ sig { returns(Userplex::Resources::Events) }
18
+ attr_reader :events
19
+
17
20
  sig { returns(Userplex::Resources::Users) }
18
21
  attr_reader :users
19
22
 
20
- sig { returns(Userplex::Resources::Logs) }
21
- attr_reader :logs
22
-
23
23
  # @api private
24
24
  sig { override.returns(T::Hash[String, String]) }
25
25
  private def auth_headers
@@ -0,0 +1,68 @@
1
+ # typed: strong
2
+
3
+ module Userplex
4
+ module Models
5
+ class EventCaptureParams < Userplex::Internal::Type::BaseModel
6
+ extend Userplex::Internal::Type::RequestParameters::Converter
7
+ include Userplex::Internal::Type::RequestParameters
8
+
9
+ OrHash =
10
+ T.type_alias do
11
+ T.any(Userplex::EventCaptureParams, Userplex::Internal::AnyHash)
12
+ end
13
+
14
+ sig { returns(String) }
15
+ attr_accessor :name
16
+
17
+ sig { returns(T.nilable(T::Hash[Symbol, T.nilable(T.anything)])) }
18
+ attr_reader :data
19
+
20
+ sig { params(data: T::Hash[Symbol, T.nilable(T.anything)]).void }
21
+ attr_writer :data
22
+
23
+ sig { returns(T.nilable(Time)) }
24
+ attr_reader :timestamp
25
+
26
+ sig { params(timestamp: Time).void }
27
+ attr_writer :timestamp
28
+
29
+ sig { returns(T.nilable(String)) }
30
+ attr_reader :user_id
31
+
32
+ sig { params(user_id: String).void }
33
+ attr_writer :user_id
34
+
35
+ sig do
36
+ params(
37
+ name: String,
38
+ data: T::Hash[Symbol, T.nilable(T.anything)],
39
+ timestamp: Time,
40
+ user_id: String,
41
+ request_options: Userplex::RequestOptions::OrHash
42
+ ).returns(T.attached_class)
43
+ end
44
+ def self.new(
45
+ name:,
46
+ data: nil,
47
+ timestamp: nil,
48
+ user_id: nil,
49
+ request_options: {}
50
+ )
51
+ end
52
+
53
+ sig do
54
+ override.returns(
55
+ {
56
+ name: String,
57
+ data: T::Hash[Symbol, T.nilable(T.anything)],
58
+ timestamp: Time,
59
+ user_id: String,
60
+ request_options: Userplex::RequestOptions
61
+ }
62
+ )
63
+ end
64
+ def to_hash
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,26 @@
1
+ # typed: strong
2
+
3
+ module Userplex
4
+ module Models
5
+ class EventCaptureResponse < Userplex::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Userplex::Models::EventCaptureResponse,
10
+ Userplex::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(T::Boolean) }
15
+ attr_accessor :success
16
+
17
+ sig { params(success: T::Boolean).returns(T.attached_class) }
18
+ def self.new(success:)
19
+ end
20
+
21
+ sig { override.returns({ success: T::Boolean }) }
22
+ def to_hash
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,7 @@
1
1
  # typed: strong
2
2
 
3
3
  module Userplex
4
+ EventCaptureParams = Userplex::Models::EventCaptureParams
5
+
4
6
  UserIdentifyParams = Userplex::Models::UserIdentifyParams
5
7
  end
@@ -0,0 +1,31 @@
1
+ # typed: strong
2
+
3
+ module Userplex
4
+ module Resources
5
+ class Events
6
+ # Capture an event
7
+ sig do
8
+ params(
9
+ name: String,
10
+ data: T::Hash[Symbol, T.nilable(T.anything)],
11
+ timestamp: Time,
12
+ user_id: String,
13
+ request_options: Userplex::RequestOptions::OrHash
14
+ ).returns(Userplex::Models::EventCaptureResponse)
15
+ end
16
+ def capture(
17
+ name:,
18
+ data: nil,
19
+ timestamp: nil,
20
+ user_id: nil,
21
+ request_options: {}
22
+ )
23
+ end
24
+
25
+ # @api private
26
+ sig { params(client: Userplex::Client).returns(T.attached_class) }
27
+ def self.new(client:)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -10,9 +10,9 @@ module Userplex
10
10
 
11
11
  attr_reader api_key: String
12
12
 
13
- attr_reader users: Userplex::Resources::Users
13
+ attr_reader events: Userplex::Resources::Events
14
14
 
15
- attr_reader logs: Userplex::Resources::Logs
15
+ attr_reader users: Userplex::Resources::Users
16
16
 
17
17
  private def auth_headers: -> ::Hash[String, String]
18
18
 
@@ -0,0 +1,47 @@
1
+ module Userplex
2
+ module Models
3
+ type event_capture_params =
4
+ {
5
+ name: String,
6
+ data: ::Hash[Symbol, top?],
7
+ timestamp: Time,
8
+ user_id: String
9
+ }
10
+ & Userplex::Internal::Type::request_parameters
11
+
12
+ class EventCaptureParams < Userplex::Internal::Type::BaseModel
13
+ extend Userplex::Internal::Type::RequestParameters::Converter
14
+ include Userplex::Internal::Type::RequestParameters
15
+
16
+ attr_accessor name: String
17
+
18
+ attr_reader data: ::Hash[Symbol, top?]?
19
+
20
+ def data=: (::Hash[Symbol, top?]) -> ::Hash[Symbol, top?]
21
+
22
+ attr_reader timestamp: Time?
23
+
24
+ def timestamp=: (Time) -> Time
25
+
26
+ attr_reader user_id: String?
27
+
28
+ def user_id=: (String) -> String
29
+
30
+ def initialize: (
31
+ name: String,
32
+ ?data: ::Hash[Symbol, top?],
33
+ ?timestamp: Time,
34
+ ?user_id: String,
35
+ ?request_options: Userplex::request_opts
36
+ ) -> void
37
+
38
+ def to_hash: -> {
39
+ name: String,
40
+ data: ::Hash[Symbol, top?],
41
+ timestamp: Time,
42
+ user_id: String,
43
+ request_options: Userplex::RequestOptions
44
+ }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,13 @@
1
+ module Userplex
2
+ module Models
3
+ type event_capture_response = { success: bool }
4
+
5
+ class EventCaptureResponse < Userplex::Internal::Type::BaseModel
6
+ attr_accessor success: bool
7
+
8
+ def initialize: (success: bool) -> void
9
+
10
+ def to_hash: -> { success: bool }
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,5 @@
1
1
  module Userplex
2
+ class EventCaptureParams = Userplex::Models::EventCaptureParams
3
+
2
4
  class UserIdentifyParams = Userplex::Models::UserIdentifyParams
3
5
  end
@@ -0,0 +1,15 @@
1
+ module Userplex
2
+ module Resources
3
+ class Events
4
+ def capture: (
5
+ name: String,
6
+ ?data: ::Hash[Symbol, top?],
7
+ ?timestamp: Time,
8
+ ?user_id: String,
9
+ ?request_options: Userplex::request_opts
10
+ ) -> Userplex::Models::EventCaptureResponse
11
+
12
+ def initialize: (client: Userplex::Client) -> void
13
+ end
14
+ end
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: userplex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Userplex
@@ -55,10 +55,12 @@ files:
55
55
  - lib/userplex/internal/type/unknown.rb
56
56
  - lib/userplex/internal/util.rb
57
57
  - lib/userplex/models.rb
58
+ - lib/userplex/models/event_capture_params.rb
59
+ - lib/userplex/models/event_capture_response.rb
58
60
  - lib/userplex/models/user_identify_params.rb
59
61
  - lib/userplex/models/user_identify_response.rb
60
62
  - lib/userplex/request_options.rb
61
- - lib/userplex/resources/logs.rb
63
+ - lib/userplex/resources/events.rb
62
64
  - lib/userplex/resources/users.rb
63
65
  - lib/userplex/version.rb
64
66
  - manifest.yaml
@@ -81,10 +83,12 @@ files:
81
83
  - rbi/userplex/internal/type/unknown.rbi
82
84
  - rbi/userplex/internal/util.rbi
83
85
  - rbi/userplex/models.rbi
86
+ - rbi/userplex/models/event_capture_params.rbi
87
+ - rbi/userplex/models/event_capture_response.rbi
84
88
  - rbi/userplex/models/user_identify_params.rbi
85
89
  - rbi/userplex/models/user_identify_response.rbi
86
90
  - rbi/userplex/request_options.rbi
87
- - rbi/userplex/resources/logs.rbi
91
+ - rbi/userplex/resources/events.rbi
88
92
  - rbi/userplex/resources/users.rbi
89
93
  - rbi/userplex/version.rbi
90
94
  - sig/userplex/client.rbs
@@ -106,10 +110,12 @@ files:
106
110
  - sig/userplex/internal/type/unknown.rbs
107
111
  - sig/userplex/internal/util.rbs
108
112
  - sig/userplex/models.rbs
113
+ - sig/userplex/models/event_capture_params.rbs
114
+ - sig/userplex/models/event_capture_response.rbs
109
115
  - sig/userplex/models/user_identify_params.rbs
110
116
  - sig/userplex/models/user_identify_response.rbs
111
117
  - sig/userplex/request_options.rbs
112
- - sig/userplex/resources/logs.rbs
118
+ - sig/userplex/resources/events.rbs
113
119
  - sig/userplex/resources/users.rbs
114
120
  - sig/userplex/version.rbs
115
121
  homepage: https://gemdocs.org/gems/userplex
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Userplex
4
- module Resources
5
- class Logs
6
- # @api private
7
- #
8
- # @param client [Userplex::Client]
9
- def initialize(client:)
10
- @client = client
11
- end
12
- end
13
- end
14
- end
@@ -1,12 +0,0 @@
1
- # typed: strong
2
-
3
- module Userplex
4
- module Resources
5
- class Logs
6
- # @api private
7
- sig { params(client: Userplex::Client).returns(T.attached_class) }
8
- def self.new(client:)
9
- end
10
- end
11
- end
12
- end
@@ -1,7 +0,0 @@
1
- module Userplex
2
- module Resources
3
- class Logs
4
- def initialize: (client: Userplex::Client) -> void
5
- end
6
- end
7
- end