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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +1 -1
- data/lib/oursprivacy_ingest/client.rb +4 -0
- data/lib/oursprivacy_ingest/internal/type/union.rb +11 -0
- data/lib/oursprivacy_ingest/models/experiment_assignment_params.rb +94 -0
- data/lib/oursprivacy_ingest/models/experiment_assignment_response.rb +135 -0
- data/lib/oursprivacy_ingest/models/experiment_personalization_params.rb +29 -0
- data/lib/oursprivacy_ingest/models/experiment_personalization_response.rb +73 -0
- data/lib/oursprivacy_ingest/models.rb +4 -0
- data/lib/oursprivacy_ingest/resources/experiments.rb +91 -0
- data/lib/oursprivacy_ingest/version.rb +1 -1
- data/lib/oursprivacy_ingest.rb +5 -0
- data/rbi/oursprivacy_ingest/client.rbi +3 -0
- data/rbi/oursprivacy_ingest/models/experiment_assignment_params.rbi +159 -0
- data/rbi/oursprivacy_ingest/models/experiment_assignment_response.rbi +284 -0
- data/rbi/oursprivacy_ingest/models/experiment_personalization_params.rbi +52 -0
- data/rbi/oursprivacy_ingest/models/experiment_personalization_response.rbi +151 -0
- data/rbi/oursprivacy_ingest/models.rbi +6 -0
- data/rbi/oursprivacy_ingest/resources/experiments.rbi +75 -0
- data/sig/oursprivacy_ingest/client.rbs +2 -0
- data/sig/oursprivacy_ingest/models/experiment_assignment_params.rbs +58 -0
- data/sig/oursprivacy_ingest/models/experiment_assignment_response.rbs +132 -0
- data/sig/oursprivacy_ingest/models/experiment_personalization_params.rbs +28 -0
- data/sig/oursprivacy_ingest/models/experiment_personalization_response.rbs +77 -0
- data/sig/oursprivacy_ingest/models.rbs +4 -0
- data/sig/oursprivacy_ingest/resources/experiments.rbs +22 -0
- metadata +16 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: abb94e2f78437ee3c959514e37490b858072ffc3f5fe8815e67c5d82d4a8981b
|
|
4
|
+
data.tar.gz: c5b94c84af1db233a51d17684e5e4c210e63beda3477c2e38ea157c3baa0a038
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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
|
data/lib/oursprivacy_ingest.rb
CHANGED
|
@@ -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?
|