oursprivacy-ingest 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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +1 -1
  4. data/lib/oursprivacy_ingest/client.rb +4 -0
  5. data/lib/oursprivacy_ingest/internal/type/union.rb +11 -0
  6. data/lib/oursprivacy_ingest/models/experiment_assignment_params.rb +94 -0
  7. data/lib/oursprivacy_ingest/models/experiment_assignment_response.rb +135 -0
  8. data/lib/oursprivacy_ingest/models/experiment_personalization_params.rb +29 -0
  9. data/lib/oursprivacy_ingest/models/experiment_personalization_response.rb +73 -0
  10. data/lib/oursprivacy_ingest/models.rb +4 -0
  11. data/lib/oursprivacy_ingest/resources/experiments.rb +91 -0
  12. data/lib/oursprivacy_ingest/version.rb +1 -1
  13. data/lib/oursprivacy_ingest.rb +5 -0
  14. data/rbi/oursprivacy_ingest/client.rbi +3 -0
  15. data/rbi/oursprivacy_ingest/models/experiment_assignment_params.rbi +159 -0
  16. data/rbi/oursprivacy_ingest/models/experiment_assignment_response.rbi +284 -0
  17. data/rbi/oursprivacy_ingest/models/experiment_personalization_params.rbi +52 -0
  18. data/rbi/oursprivacy_ingest/models/experiment_personalization_response.rbi +151 -0
  19. data/rbi/oursprivacy_ingest/models.rbi +6 -0
  20. data/rbi/oursprivacy_ingest/resources/experiments.rbi +75 -0
  21. data/sig/oursprivacy_ingest/client.rbs +2 -0
  22. data/sig/oursprivacy_ingest/models/experiment_assignment_params.rbs +58 -0
  23. data/sig/oursprivacy_ingest/models/experiment_assignment_response.rbs +132 -0
  24. data/sig/oursprivacy_ingest/models/experiment_personalization_params.rbs +28 -0
  25. data/sig/oursprivacy_ingest/models/experiment_personalization_response.rbs +77 -0
  26. data/sig/oursprivacy_ingest/models.rbs +4 -0
  27. data/sig/oursprivacy_ingest/resources/experiments.rbs +22 -0
  28. metadata +16 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b37fe59b66fe28fc56f5e19dc9b6440478ddbb90f387e9b618f2aade2a2e281
4
- data.tar.gz: f1015c560142fd14deb6c9892b5349ea3c062da30610dd7fb56387abb59a309a
3
+ metadata.gz: abb94e2f78437ee3c959514e37490b858072ffc3f5fe8815e67c5d82d4a8981b
4
+ data.tar.gz: c5b94c84af1db233a51d17684e5e4c210e63beda3477c2e38ea157c3baa0a038
5
5
  SHA512:
6
- metadata.gz: 52e45a24efacfc15f4826b5fb696aae27c484bb1f8e507f04c70af9040707ee961862f5217b1bc8eac3e9075f71a563687d7e77e9073a2d168ce64c4c2a0b578
7
- data.tar.gz: 321cb84832e867f3fa31dda24bf650f8e2b15df38775853795c1a07277e30c512abd2fdffc6087a2c17f9cc07fd958b379c784471d65a194516b1930ad95d3f3
6
+ metadata.gz: 4c74d7e70b9b7d618e1acd348aae432adc4b95ad8efffd1eaf7f2bce3f5a7bbac4cbb2929cb35f7d26d7ba118bb392cc853d9f5e42e8ed699ad94a3f6b629d27
7
+ data.tar.gz: 2f0153bad01e49db6f65d1e10443a35b8e642b975436285937339841d5b1726a4d4100b53908cc982604d9b1b0ae1b157baaa0d715b962b89d63fd5df6b32da0
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.11.0 (2026-05-28)
4
+
5
+ Full Changelog: [v1.10.0...v1.11.0](https://github.com/with-ours/ingest-sdk-ruby/compare/v1.10.0...v1.11.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([1836d36](https://github.com/with-ours/ingest-sdk-ruby/commit/1836d362919dea15c8bd5912d54a958a0ee34610))
10
+
3
11
  ## 1.10.0 (2026-05-27)
4
12
 
5
13
  Full Changelog: [v1.9.0...v1.10.0](https://github.com/with-ours/ingest-sdk-ruby/compare/v1.9.0...v1.10.0)
data/README.md CHANGED
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "oursprivacy-ingest", "~> 1.10.0"
20
+ gem "oursprivacy-ingest", "~> 1.11.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -24,6 +24,9 @@ module OursprivacyIngest
24
24
  # @return [OursprivacyIngest::Resources::Visitor]
25
25
  attr_reader :visitor
26
26
 
27
+ # @return [OursprivacyIngest::Resources::Experiments]
28
+ attr_reader :experiments
29
+
27
30
  # @api private
28
31
  #
29
32
  # @return [Boolean]
@@ -77,6 +80,7 @@ module OursprivacyIngest
77
80
  @batch = OursprivacyIngest::Resources::Batch.new(client: self)
78
81
  @track = OursprivacyIngest::Resources::Track.new(client: self)
79
82
  @visitor = OursprivacyIngest::Resources::Visitor.new(client: self)
83
+ @experiments = OursprivacyIngest::Resources::Experiments.new(client: self)
80
84
  end
81
85
  end
82
86
  end
@@ -4,6 +4,17 @@ module OursprivacyIngest
4
4
  module Internal
5
5
  module Type
6
6
  # @api private
7
+ #
8
+ # @example
9
+ # # `experiment_assignment_response` is a `OursprivacyIngest::Models::ExperimentAssignmentResponse`
10
+ # case experiment_assignment_response
11
+ # when OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0
12
+ # puts(experiment_assignment_response.experiment_id)
13
+ # when OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1
14
+ # puts(experiment_assignment_response.in_experiment)
15
+ # else
16
+ # puts(experiment_assignment_response)
17
+ # end
7
18
  module Union
8
19
  include OursprivacyIngest::Internal::Type::Converter
9
20
  include OursprivacyIngest::Internal::Util::SorbetRuntimeSupport
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OursprivacyIngest
4
+ module Models
5
+ # @see OursprivacyIngest::Resources::Experiments#assignment
6
+ class ExperimentAssignmentParams < OursprivacyIngest::Internal::Type::BaseModel
7
+ extend OursprivacyIngest::Internal::Type::RequestParameters::Converter
8
+ include OursprivacyIngest::Internal::Type::RequestParameters
9
+
10
+ # @!attribute experiment_key
11
+ # The experiment's stable key. Surfaced in the dashboard under each experiment's
12
+ # setup tab.
13
+ #
14
+ # @return [String]
15
+ required :experiment_key, String
16
+
17
+ # @!attribute token
18
+ # The experiment token (`exp_*`) for the experiment settings holding this
19
+ # experiment. Available from the dashboard.
20
+ #
21
+ # @return [String]
22
+ required :token, String
23
+
24
+ # @!attribute visitor_id
25
+ # Stable identifier for the visitor — typically the Ours visitor id from your
26
+ # browser cookie, or your own server-side user id if you keep the same id
27
+ # consistent across browser and server.
28
+ #
29
+ # @return [String]
30
+ required :visitor_id, String
31
+
32
+ # @!attribute context
33
+ # Optional page context for URL + query-param eligibility. Variant bucketing is
34
+ # deterministic on `visitor_id` regardless of context.
35
+ #
36
+ # @return [OursprivacyIngest::Models::ExperimentAssignmentParams::Context, nil]
37
+ optional :context, -> { OursprivacyIngest::ExperimentAssignmentParams::Context }, nil?: true
38
+
39
+ # @!attribute track_impression
40
+ # When true (default), an `$experiment_impression` event is enqueued and the
41
+ # visitor's `experiment_assignments` map is updated. Set to false to read the
42
+ # assignment without recording an impression — useful for in-test diagnostics.
43
+ #
44
+ # @return [Boolean, nil]
45
+ optional :track_impression, OursprivacyIngest::Internal::Type::Boolean, nil?: true
46
+
47
+ # @!method initialize(experiment_key:, token:, visitor_id:, context: nil, track_impression: nil, request_options: {})
48
+ # Some parameter documentations has been truncated, see
49
+ # {OursprivacyIngest::Models::ExperimentAssignmentParams} for more details.
50
+ #
51
+ # @param experiment_key [String] The experiment's stable key. Surfaced in the dashboard under each experiment's s
52
+ #
53
+ # @param token [String] The experiment token (`exp_*`) for the experiment settings holding this experime
54
+ #
55
+ # @param visitor_id [String] Stable identifier for the visitor — typically the Ours visitor id from your brow
56
+ #
57
+ # @param context [OursprivacyIngest::Models::ExperimentAssignmentParams::Context, nil] Optional page context for URL + query-param eligibility. Variant bucketing is de
58
+ #
59
+ # @param track_impression [Boolean, nil] When true (default), an `$experiment_impression` event is enqueued and the visit
60
+ #
61
+ # @param request_options [OursprivacyIngest::RequestOptions, Hash{Symbol=>Object}]
62
+
63
+ class Context < OursprivacyIngest::Internal::Type::BaseModel
64
+ # @!attribute search
65
+ # The current query string (e.g. `?utm_source=meta`). When provided, the
66
+ # experiment's query-param conditions are evaluated for eligibility. If omitted,
67
+ # the query string is parsed from `url`.
68
+ #
69
+ # @return [String, nil]
70
+ optional :search, String, nil?: true
71
+
72
+ # @!attribute url
73
+ # The current page URL. When provided, the experiment's URL patterns are evaluated
74
+ # for eligibility — visitors on non-matching URLs are returned
75
+ # `in_experiment: false`. Omit when the caller is pre-gating the request.
76
+ #
77
+ # @return [String, nil]
78
+ optional :url, String, nil?: true
79
+
80
+ # @!method initialize(search: nil, url: nil)
81
+ # Some parameter documentations has been truncated, see
82
+ # {OursprivacyIngest::Models::ExperimentAssignmentParams::Context} for more
83
+ # details.
84
+ #
85
+ # Optional page context for URL + query-param eligibility. Variant bucketing is
86
+ # deterministic on `visitor_id` regardless of context.
87
+ #
88
+ # @param search [String, nil] The current query string (e.g. `?utm_source=meta`). When provided, the experimen
89
+ #
90
+ # @param url [String, nil] The current page URL. When provided, the experiment's URL patterns are evaluated
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OursprivacyIngest
4
+ module Models
5
+ # @see OursprivacyIngest::Resources::Experiments#assignment
6
+ module ExperimentAssignmentResponse
7
+ extend OursprivacyIngest::Internal::Type::Union
8
+
9
+ variant -> { OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0 }
10
+
11
+ variant -> { OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1 }
12
+
13
+ class UnionMember0 < OursprivacyIngest::Internal::Type::BaseModel
14
+ # @!attribute experiment_id
15
+ #
16
+ # @return [String]
17
+ required :experiment_id, String
18
+
19
+ # @!attribute in_experiment
20
+ #
21
+ # @return [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0::InExperiment]
22
+ required :in_experiment,
23
+ enum: -> { OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0::InExperiment }
24
+
25
+ # @!attribute success
26
+ #
27
+ # @return [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0::Success]
28
+ required :success,
29
+ enum: -> { OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0::Success }
30
+
31
+ # @!attribute variant_id
32
+ #
33
+ # @return [String]
34
+ required :variant_id, String
35
+
36
+ # @!attribute experiment_key
37
+ #
38
+ # @return [String, nil]
39
+ optional :experiment_key, String, nil?: true
40
+
41
+ # @!attribute experiment_name
42
+ #
43
+ # @return [String, nil]
44
+ optional :experiment_name, String, nil?: true
45
+
46
+ # @!attribute is_control
47
+ #
48
+ # @return [Boolean, nil]
49
+ optional :is_control, OursprivacyIngest::Internal::Type::Boolean, nil?: true
50
+
51
+ # @!attribute type
52
+ #
53
+ # @return [String, nil]
54
+ optional :type, String, nil?: true
55
+
56
+ # @!attribute variant_name
57
+ #
58
+ # @return [String, nil]
59
+ optional :variant_name, String, nil?: true
60
+
61
+ # @!method initialize(experiment_id:, in_experiment:, success:, variant_id:, experiment_key: nil, experiment_name: nil, is_control: nil, type: nil, variant_name: nil)
62
+ # @param experiment_id [String]
63
+ # @param in_experiment [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0::InExperiment]
64
+ # @param success [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0::Success]
65
+ # @param variant_id [String]
66
+ # @param experiment_key [String, nil]
67
+ # @param experiment_name [String, nil]
68
+ # @param is_control [Boolean, nil]
69
+ # @param type [String, nil]
70
+ # @param variant_name [String, nil]
71
+
72
+ # @see OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0#in_experiment
73
+ module InExperiment
74
+ extend OursprivacyIngest::Internal::Type::Enum
75
+
76
+ TRUE = true
77
+
78
+ # @!method self.values
79
+ # @return [Array<Boolean>]
80
+ end
81
+
82
+ # @see OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0#success
83
+ module Success
84
+ extend OursprivacyIngest::Internal::Type::Enum
85
+
86
+ TRUE = true
87
+
88
+ # @!method self.values
89
+ # @return [Array<Boolean>]
90
+ end
91
+ end
92
+
93
+ class UnionMember1 < OursprivacyIngest::Internal::Type::BaseModel
94
+ # @!attribute in_experiment
95
+ #
96
+ # @return [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1::InExperiment]
97
+ required :in_experiment,
98
+ enum: -> { OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1::InExperiment }
99
+
100
+ # @!attribute success
101
+ #
102
+ # @return [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1::Success]
103
+ required :success,
104
+ enum: -> { OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1::Success }
105
+
106
+ # @!method initialize(in_experiment:, success:)
107
+ # @param in_experiment [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1::InExperiment]
108
+ # @param success [Boolean, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1::Success]
109
+
110
+ # @see OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1#in_experiment
111
+ module InExperiment
112
+ extend OursprivacyIngest::Internal::Type::Enum
113
+
114
+ FALSE = false
115
+
116
+ # @!method self.values
117
+ # @return [Array<Boolean>]
118
+ end
119
+
120
+ # @see OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1#success
121
+ module Success
122
+ extend OursprivacyIngest::Internal::Type::Enum
123
+
124
+ TRUE = true
125
+
126
+ # @!method self.values
127
+ # @return [Array<Boolean>]
128
+ end
129
+ end
130
+
131
+ # @!method self.variants
132
+ # @return [Array(OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1)]
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OursprivacyIngest
4
+ module Models
5
+ # @see OursprivacyIngest::Resources::Experiments#personalization
6
+ class ExperimentPersonalizationParams < OursprivacyIngest::Internal::Type::BaseModel
7
+ extend OursprivacyIngest::Internal::Type::RequestParameters::Converter
8
+ include OursprivacyIngest::Internal::Type::RequestParameters
9
+
10
+ # @!attribute token
11
+ # The experiment token (`exp_*`).
12
+ #
13
+ # @return [String]
14
+ required :token, String
15
+
16
+ # @!attribute visitor_id
17
+ #
18
+ # @return [String]
19
+ required :visitor_id, String
20
+
21
+ # @!method initialize(token:, visitor_id:, request_options: {})
22
+ # @param token [String] The experiment token (`exp_*`).
23
+ #
24
+ # @param visitor_id [String]
25
+ #
26
+ # @param request_options [OursprivacyIngest::RequestOptions, Hash{Symbol=>Object}]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OursprivacyIngest
4
+ module Models
5
+ # @see OursprivacyIngest::Resources::Experiments#personalization
6
+ class ExperimentPersonalizationResponse < OursprivacyIngest::Internal::Type::BaseModel
7
+ # @!attribute personalizations
8
+ #
9
+ # @return [Array<OursprivacyIngest::Models::ExperimentPersonalizationResponse::Personalization>]
10
+ required :personalizations,
11
+ -> { OursprivacyIngest::Internal::Type::ArrayOf[OursprivacyIngest::Models::ExperimentPersonalizationResponse::Personalization] }
12
+
13
+ # @!attribute success
14
+ #
15
+ # @return [Boolean, OursprivacyIngest::Models::ExperimentPersonalizationResponse::Success]
16
+ required :success, enum: -> { OursprivacyIngest::Models::ExperimentPersonalizationResponse::Success }
17
+
18
+ # @!method initialize(personalizations:, success:)
19
+ # @param personalizations [Array<OursprivacyIngest::Models::ExperimentPersonalizationResponse::Personalization>]
20
+ # @param success [Boolean, OursprivacyIngest::Models::ExperimentPersonalizationResponse::Success]
21
+
22
+ class Personalization < OursprivacyIngest::Internal::Type::BaseModel
23
+ # @!attribute assigned_at
24
+ #
25
+ # @return [Float]
26
+ required :assigned_at, Float
27
+
28
+ # @!attribute experiment_id
29
+ #
30
+ # @return [String]
31
+ required :experiment_id, String
32
+
33
+ # @!attribute variant_id
34
+ #
35
+ # @return [String]
36
+ required :variant_id, String
37
+
38
+ # @!attribute experiment_key
39
+ #
40
+ # @return [String, nil]
41
+ optional :experiment_key, String, nil?: true
42
+
43
+ # @!attribute experiment_name
44
+ #
45
+ # @return [String, nil]
46
+ optional :experiment_name, String, nil?: true
47
+
48
+ # @!attribute variant_name
49
+ #
50
+ # @return [String, nil]
51
+ optional :variant_name, String, nil?: true
52
+
53
+ # @!method initialize(assigned_at:, experiment_id:, variant_id:, experiment_key: nil, experiment_name: nil, variant_name: nil)
54
+ # @param assigned_at [Float]
55
+ # @param experiment_id [String]
56
+ # @param variant_id [String]
57
+ # @param experiment_key [String, nil]
58
+ # @param experiment_name [String, nil]
59
+ # @param variant_name [String, nil]
60
+ end
61
+
62
+ # @see OursprivacyIngest::Models::ExperimentPersonalizationResponse#success
63
+ module Success
64
+ extend OursprivacyIngest::Internal::Type::Enum
65
+
66
+ TRUE = true
67
+
68
+ # @!method self.values
69
+ # @return [Array<Boolean>]
70
+ end
71
+ end
72
+ end
73
+ end
@@ -44,6 +44,10 @@ module OursprivacyIngest
44
44
 
45
45
  BatchCreateParams = OursprivacyIngest::Models::BatchCreateParams
46
46
 
47
+ ExperimentAssignmentParams = OursprivacyIngest::Models::ExperimentAssignmentParams
48
+
49
+ ExperimentPersonalizationParams = OursprivacyIngest::Models::ExperimentPersonalizationParams
50
+
47
51
  TrackEventParams = OursprivacyIngest::Models::TrackEventParams
48
52
 
49
53
  VisitorUpsertParams = OursprivacyIngest::Models::VisitorUpsertParams
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OursprivacyIngest
4
+ module Resources
5
+ class Experiments
6
+ # Some parameter documentations has been truncated, see
7
+ # {OursprivacyIngest::Models::ExperimentAssignmentParams} for more details.
8
+ #
9
+ # Return the server-side variant assignment for a visitor in a single A/B or
10
+ # multivariate experiment, identified by its experiment key. Bucketing is
11
+ # deterministic on `visitor_id` and is sticky across calls. Tracking an impression
12
+ # is the default — pass `track_impression: false` to read without recording. The
13
+ # browser SDK and this endpoint converge on the same variant for the same visitor.
14
+ #
15
+ # @overload assignment(experiment_key, token:, visitor_id:, context: nil, track_impression: nil, request_options: {})
16
+ #
17
+ # @param experiment_key [String] The experiment's stable key. Surfaced in the dashboard under each experiment's s
18
+ #
19
+ # @param token [String] The experiment token (`exp_*`) for the experiment settings holding this experime
20
+ #
21
+ # @param visitor_id [String] Stable identifier for the visitor — typically the Ours visitor id from your brow
22
+ #
23
+ # @param context [OursprivacyIngest::Models::ExperimentAssignmentParams::Context, nil] Optional page context for URL + query-param eligibility. Variant bucketing is de
24
+ #
25
+ # @param track_impression [Boolean, nil] When true (default), an `$experiment_impression` event is enqueued and the visit
26
+ #
27
+ # @param request_options [OursprivacyIngest::RequestOptions, Hash{Symbol=>Object}, nil]
28
+ #
29
+ # @return [OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember0, OursprivacyIngest::Models::ExperimentAssignmentResponse::UnionMember1]
30
+ #
31
+ # @see OursprivacyIngest::Models::ExperimentAssignmentParams
32
+ def assignment(experiment_key, params)
33
+ parsed, options = OursprivacyIngest::ExperimentAssignmentParams.dump_request(params)
34
+ path =
35
+ if @client.base_url_overridden?
36
+ [
37
+ "experiments/assignments/%1$s",
38
+ experiment_key
39
+ ]
40
+ else
41
+ [
42
+ "https://api.oursprivacy.com/api/v1/experiments/assignments/%1$s", experiment_key
43
+ ]
44
+ end
45
+ @client.request(
46
+ method: :post,
47
+ path: path,
48
+ body: parsed,
49
+ model: OursprivacyIngest::Models::ExperimentAssignmentResponse,
50
+ options: options
51
+ )
52
+ end
53
+
54
+ # Return the active personalization assignments for a visitor. Read-only and never
55
+ # records an impression. Personalizations are populated by the event-driven rule
56
+ # engine — until that ships, this endpoint returns an empty list for every
57
+ # visitor, which is the correct fail-closed behavior (no false positives).
58
+ #
59
+ # @overload personalization(token:, visitor_id:, request_options: {})
60
+ #
61
+ # @param token [String] The experiment token (`exp_*`).
62
+ #
63
+ # @param visitor_id [String]
64
+ #
65
+ # @param request_options [OursprivacyIngest::RequestOptions, Hash{Symbol=>Object}, nil]
66
+ #
67
+ # @return [OursprivacyIngest::Models::ExperimentPersonalizationResponse]
68
+ #
69
+ # @see OursprivacyIngest::Models::ExperimentPersonalizationParams
70
+ def personalization(params)
71
+ parsed, options = OursprivacyIngest::ExperimentPersonalizationParams.dump_request(params)
72
+ path =
73
+ @client.base_url_overridden? ? "experiments/personalization" : "https://api.oursprivacy.com/api/v1/experiments/personalization"
74
+ @client.request(
75
+ method: :post,
76
+ path: path,
77
+ body: parsed,
78
+ model: OursprivacyIngest::Models::ExperimentPersonalizationResponse,
79
+ options: options
80
+ )
81
+ end
82
+
83
+ # @api private
84
+ #
85
+ # @param client [OursprivacyIngest::Client]
86
+ def initialize(client:)
87
+ @client = client
88
+ end
89
+ end
90
+ end
91
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OursprivacyIngest
4
- VERSION = "1.10.0"
4
+ VERSION = "1.11.0"
5
5
  end
@@ -54,11 +54,16 @@ require_relative "oursprivacy_ingest/internal/transport/pooled_net_requester"
54
54
  require_relative "oursprivacy_ingest/client"
55
55
  require_relative "oursprivacy_ingest/models/batch_create_params"
56
56
  require_relative "oursprivacy_ingest/models/batch_create_response"
57
+ require_relative "oursprivacy_ingest/models/experiment_assignment_params"
58
+ require_relative "oursprivacy_ingest/models/experiment_assignment_response"
59
+ require_relative "oursprivacy_ingest/models/experiment_personalization_params"
60
+ require_relative "oursprivacy_ingest/models/experiment_personalization_response"
57
61
  require_relative "oursprivacy_ingest/models/track_event_params"
58
62
  require_relative "oursprivacy_ingest/models/track_event_response"
59
63
  require_relative "oursprivacy_ingest/models/visitor_upsert_params"
60
64
  require_relative "oursprivacy_ingest/models/visitor_upsert_response"
61
65
  require_relative "oursprivacy_ingest/models"
62
66
  require_relative "oursprivacy_ingest/resources/batch"
67
+ require_relative "oursprivacy_ingest/resources/experiments"
63
68
  require_relative "oursprivacy_ingest/resources/track"
64
69
  require_relative "oursprivacy_ingest/resources/visitor"
@@ -19,6 +19,9 @@ module OursprivacyIngest
19
19
  sig { returns(OursprivacyIngest::Resources::Visitor) }
20
20
  attr_reader :visitor
21
21
 
22
+ sig { returns(OursprivacyIngest::Resources::Experiments) }
23
+ attr_reader :experiments
24
+
22
25
  # @api private
23
26
  sig { returns(T::Boolean) }
24
27
  def base_url_overridden?