From 67a00fd44d87d220828c7410431e87c1ba8a30dc Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Wed, 28 Jan 2026 12:21:25 +0000 Subject: [PATCH 01/15] feat: update Dart/Flutter SDK initialization to simplified API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Updated Flutter/Dart initialization example to use new ABSmartly.create() factory - Simplified from multi-step ClientConfig creation to single factory call - Added comprehensive SDK options table including retries, timeout, contextEventLogger - Added advanced configuration section showing manual Client creation for custom use cases - Improved code clarity and developer experience - Maintained backwards compatibility Example change: Before: ClientConfig → Client → ABSmartlyConfig → ABSmartly After: ABSmartly.create(endpoint, apiKey, application, environment) --- .../_import-and-initialize.mdx | 41 ++++++++++++++++--- .../import-and-initialize/flutter/import.dart | 18 ++++---- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx index defb8f01..a9c64ded 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx @@ -373,12 +373,41 @@ custom event logger), it can be done as following: **SDK Options** -| Config | Type | Required? | Default | Description | -| :---------- | :-------------------------------- | :-------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| endpoint | `string` | ✅ | `undefined` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | -| apiKey | `string` | ✅ | `undefined` | Your API key which can be found on the Web Console. | -| environment | `"production"` or `"development"` | ✅ | `undefined` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | -| application | `string` | ✅ | `undefined` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| Config | Type | Required? | Default | Description | +| :---------------------- | :-------------------------------- | :-------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `String` | ✅ | `null` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| apiKey | `String` | ✅ | `null` | Your API key which can be found on the Web Console. | +| environment | `String` | ✅ | `null` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `String` | ✅ | `null` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| retries | `int` | ❌ | `5` | The number of retries before the SDK stops trying to connect. | +| timeout | `int` | ❌ | `3000` | An amount of time, in milliseconds, before the SDK will stop trying to connect. | +| contextEventLogger | `ContextEventLogger` | ❌ | `null` | A callback interface which runs after SDK events. See [Using a Custom Event Logger](#using-a-custom-event-logger) below | + +**Advanced Configuration** + +For advanced use cases where you need custom HTTP clients or data providers, you can still use the manual configuration approach: + +```dart +final clientConfig = ClientConfig() + ..setEndpoint("https://your-company.absmartly.io/v1") + ..setAPIKey("YOUR-API-KEY") + ..setApplication("website") + ..setEnvironment("development"); + +final httpClientConfig = DefaultHTTPClientConfig() + ..setMaxRetries(3) + ..setConnectTimeout(5000); + +final client = Client.create( + clientConfig, + httpClient: DefaultHTTPClient.create(httpClientConfig), +); + +final sdkConfig = ABSmartlyConfig.create() + ..setClient(client); + +final sdk = ABSmartly(sdkConfig); +``` diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart index c49890cb..cf0e4500 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart @@ -1,11 +1,9 @@ -void main() async{ - final ClientConfig clientConfig = ClientConfig() - ..setEndpoint("https://your-company.absmartly.io/v1") - ..setAPIKey("YOUR API KEY") - ..setApplication("website") - ..setEnvironment("development"); - - final ABSmartlyConfig sdkConfig = ABSmartlyConfig.create() - .setClient(Client.create(clientConfig)); - final ABSmartly sdk = ABSmartly(sdkConfig); +void main() async { + // Recommended: Simple API + final sdk = ABSmartly.create( + endpoint: 'https://your-company.absmartly.io/v1', + apiKey: 'YOUR-API-KEY', + application: 'website', + environment: 'development', + ); } From c0943ec03a0c6bd8a5996ac4cb3bb88b2ccd4299 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Wed, 28 Jan 2026 13:06:40 +0000 Subject: [PATCH 02/15] feat: add Dart, Rust, and Liquid SDK documentation with updated naming Add missing SDK tabs to import-and-initialize documentation: - Dart SDK with Absmartly.create() factory method and advanced config - Rust SDK with SDKConfig builder pattern and async/await examples - Liquid SDK for Shopify integration with server-side rendering Update naming convention from ABSmartly to Absmartly: - Flutter SDK now uses Absmartly.create() instead of ABSmartly.create() - React provider examples updated to use component - Dart advanced config uses Absmartly/AbsmartlyConfig naming Separate Dart from Flutter documentation to clarify pure Dart usage versus Flutter-specific implementation. --- .../_import-and-initialize.mdx | 139 +++++++++++++++++- .../import-and-initialize/dart/import.dart | 10 ++ .../import-and-initialize/flutter/import.dart | 3 +- .../liquid/initialize.liquid | 29 ++++ .../import-and-initialize/rust/initialize.rs | 15 ++ 5 files changed, 189 insertions(+), 7 deletions(-) create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/liquid/initialize.liquid create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx index a9c64ded..bf682bc8 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx @@ -31,6 +31,12 @@ import RubyImport from "!!raw-loader!./ruby/import.rb"; import FlutterImport from "!!raw-loader!./flutter/import.dart"; +import DartImport from "!!raw-loader!./dart/import.dart"; + +import RustImport from "!!raw-loader!./rust/initialize.rs"; + +import LiquidImport from "!!raw-loader!./liquid/initialize.liquid"; + Once the SDK is installed, it can be initialized in your project. :::info @@ -102,9 +108,9 @@ directly into the Provider component, like so: ```jsx ReactDOM.render( - + - , + , document.getElementById("root") ); ``` @@ -367,7 +373,51 @@ custom event logger), it can be done as following: - + + +{DartImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------------------- | :-------------------------------- | :-------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `String` | ✅ | `null` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| apiKey | `String` | ✅ | `null` | Your API key which can be found on the Web Console. | +| environment | `String` | ✅ | `null` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `String` | ✅ | `null` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| retries | `int` | ❌ | `5` | The number of retries before the SDK stops trying to connect. | +| timeout | `int` | ❌ | `3000` | An amount of time, in milliseconds, before the SDK will stop trying to connect. | +| contextEventLogger | `ContextEventLogger` | ❌ | `null` | A callback interface which runs after SDK events. See [Using a Custom Event Logger](#using-a-custom-event-logger) below | + +**Advanced Configuration** + +For advanced use cases where you need custom HTTP clients or data providers, you can still use the manual configuration approach: + +```dart +final clientConfig = ClientConfig() + ..setEndpoint("https://your-company.absmartly.io/v1") + ..setAPIKey("YOUR-API-KEY") + ..setApplication("website") + ..setEnvironment("development"); + +final httpClientConfig = DefaultHTTPClientConfig() + ..setMaxRetries(3) + ..setConnectTimeout(5000); + +final client = Client.create( + clientConfig, + httpClient: DefaultHTTPClient.create(httpClientConfig), +); + +final sdkConfig = AbsmartlyConfig.create() + ..setClient(client); + +final sdk = Absmartly(sdkConfig); +``` + + + + {FlutterImport} @@ -403,10 +453,89 @@ final client = Client.create( httpClient: DefaultHTTPClient.create(httpClientConfig), ); -final sdkConfig = ABSmartlyConfig.create() +final sdkConfig = AbsmartlyConfig.create() ..setClient(client); -final sdk = ABSmartly(sdkConfig); +final sdk = Absmartly(sdkConfig); +``` + + + + + +{RustImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :----------------------------------- | :-------: | :-------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `&str` or `String` | ✅ | `undefined` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| api_key | `&str` or `String` | ✅ | `undefined` | Your API key which can be found on the Web Console. | +| environment | `&str` or `String` | ✅ | `undefined` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `&str` or `String` | ✅ | `undefined` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| retries | `u32` | ❌ | `5` | The number of retries before the SDK stops trying to connect. | +| timeout_ms | `u64` | ❌ | `3000` | An amount of time, in milliseconds, before the SDK will stop trying to connect. | +| agent | `String` | ❌ | `None` | Custom user agent string for HTTP requests. | + +**Builder Pattern** + +The Rust SDK supports a fluent builder pattern for optional configuration: + +```rust +let config = SDKConfig::new( + "https://your-company.absmartly.io/v1", + "YOUR-API-KEY", + "website", + "development", +) +.with_timeout(5000) +.with_retries(3) +.with_agent("my-app/1.0"); + +let sdk = Absmartly::new(config)?; +``` + + + + + +{LiquidImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :----------------------------------- | :-------: | :-------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `string` | ✅ | `undefined` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| apiKey | `string` | ✅ | `undefined` | Your API key which can be found on the Web Console. | +| environment | `"production"` or `"development"` | ✅ | `undefined` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `string` | ✅ | `undefined` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| units | `object` | ✅ | `{}` | An object containing unit identifiers (e.g., session_id, customer_id) used for experiment assignment. | + +**Server-Side Rendering** + +For Shopify Liquid templates, ABsmartly can be integrated server-side to pre-fetch context data: + +```liquid +{% comment %} + Render the ABsmartly initialization snippet + This can be used to embed pre-fetched context data +{% endcomment %} +{% render 'absmartly-init', + session_id: request.cookie.session_id, + customer_id: customer.id +%} +``` + +**Using ABsmartly in Templates** + +Once initialized, you can use ABsmartly treatments in your Liquid templates: + +```liquid +{% if absmartly.treatment.banner_color == 1 %} + +{% else %} + +{% endif %} ``` diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart new file mode 100644 index 00000000..bb8a65fb --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart @@ -0,0 +1,10 @@ +import 'package:absmartly_sdk/absmartly_sdk.dart'; + +void main() async { + final sdk = Absmartly.create( + endpoint: 'https://your-company.absmartly.io/v1', + apiKey: 'YOUR-API-KEY', + application: 'website', + environment: 'development', + ); +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart index cf0e4500..f60c7b9b 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart @@ -1,6 +1,5 @@ void main() async { - // Recommended: Simple API - final sdk = ABSmartly.create( + final sdk = Absmartly.create( endpoint: 'https://your-company.absmartly.io/v1', apiKey: 'YOUR-API-KEY', application: 'website', diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/liquid/initialize.liquid b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/liquid/initialize.liquid new file mode 100644 index 00000000..e0cd0971 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/liquid/initialize.liquid @@ -0,0 +1,29 @@ +{% comment %} + Initialize the ABsmartly SDK in your Shopify theme + Add this to your theme.liquid layout file, typically in the section +{% endcomment %} + + + +{% comment %} + Include the ABsmartly client-side SDK + This should be loaded before any code that uses the ABsmartly context +{% endcomment %} + + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs new file mode 100644 index 00000000..bd2d455d --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs @@ -0,0 +1,15 @@ +use absmartly_sdk::{Absmartly, SDKConfig}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let config = SDKConfig::new( + "https://your-company.absmartly.io/v1", + "YOUR-API-KEY", + "website", + "development", + ); + + let sdk = Absmartly::new(config)?; + + Ok(()) +} From a2c7befec3d1767faefdf10ec98865a451a126a4 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Wed, 28 Jan 2026 13:15:40 +0000 Subject: [PATCH 03/15] fix: update Absmartly to ABsmartly in SDK documentation - Updated all code examples to use correct naming: ABsmartly (AB uppercase) - Fixed references in Rust, Dart, Flutter, and Ruby SDK examples - Updated React component references in MDX documentation - Ensured consistency across all import and initialize documentation --- .../_import-and-initialize.mdx | 14 +++++++------- .../import-and-initialize/dart/import.dart | 2 +- .../import-and-initialize/flutter/import.dart | 2 +- .../import-and-initialize/ruby/import.rb | 2 +- .../import-and-initialize/rust/initialize.rs | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx index bf682bc8..b69a5c38 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx @@ -108,9 +108,9 @@ directly into the Provider component, like so: ```jsx ReactDOM.render( - + - , + , document.getElementById("root") ); ``` @@ -409,10 +409,10 @@ final client = Client.create( httpClient: DefaultHTTPClient.create(httpClientConfig), ); -final sdkConfig = AbsmartlyConfig.create() +final sdkConfig = ABsmartlyConfig.create() ..setClient(client); -final sdk = Absmartly(sdkConfig); +final sdk = ABsmartly(sdkConfig); ``` @@ -453,10 +453,10 @@ final client = Client.create( httpClient: DefaultHTTPClient.create(httpClientConfig), ); -final sdkConfig = AbsmartlyConfig.create() +final sdkConfig = ABsmartlyConfig.create() ..setClient(client); -final sdk = Absmartly(sdkConfig); +final sdk = ABsmartly(sdkConfig); ``` @@ -492,7 +492,7 @@ let config = SDKConfig::new( .with_retries(3) .with_agent("my-app/1.0"); -let sdk = Absmartly::new(config)?; +let sdk = ABsmartly::new(config)?; ``` diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart index bb8a65fb..3d617b38 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/dart/import.dart @@ -1,7 +1,7 @@ import 'package:absmartly_sdk/absmartly_sdk.dart'; void main() async { - final sdk = Absmartly.create( + final sdk = ABsmartly.create( endpoint: 'https://your-company.absmartly.io/v1', apiKey: 'YOUR-API-KEY', application: 'website', diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart index f60c7b9b..d4cada21 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/flutter/import.dart @@ -1,5 +1,5 @@ void main() async { - final sdk = Absmartly.create( + final sdk = ABsmartly.create( endpoint: 'https://your-company.absmartly.io/v1', apiKey: 'YOUR-API-KEY', application: 'website', diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/ruby/import.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/ruby/import.rb index dd792c8c..cbf7260c 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/ruby/import.rb +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/ruby/import.rb @@ -1,4 +1,4 @@ -Absmartly.configure_client do |config| +ABsmartly.configure_client do |config| config.endpoint = "https://your-company.absmartly.io/v1" config.api_key = "YOUR-API-KEY" config.application = "website" diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs index bd2d455d..78e06cce 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/rust/initialize.rs @@ -1,4 +1,4 @@ -use absmartly_sdk::{Absmartly, SDKConfig}; +use absmartly_sdk::{ABsmartly, SDKConfig}; #[tokio::main] async fn main() -> Result<(), Box> { @@ -9,7 +9,7 @@ async fn main() -> Result<(), Box> { "development", ); - let sdk = Absmartly::new(config)?; + let sdk = ABsmartly::new(config)?; Ok(()) } From ed665242c1088a19665bcdb543978654bbe85298 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Tue, 24 Feb 2026 21:01:01 +0000 Subject: [PATCH 04/15] docs: add code snippets for 10 new SDKs across all documentation sections Add Angular, Android, Kotlin, C++, Scala, Elixir, Dart, Rust, Liquid, and Vue3 code snippets to all 13 documentation sections (install, import-and-initialize, create-new-context-request, custom-event-logger, selecting-a-treatment, selecting-a-variable, peeking, overriding, context-attributes, custom-assignments, tracking-goals, publish, finalize). Update all MDX files with new raw-loader imports and TabItem blocks. Fix pre-existing Tabitem casing bugs in basic-usage MDX files. --- .../_setting-context-attributes.mdx | 58 +++- .../android/setAttributes.kt | 5 + .../angular/setAttributes.ts | 6 + .../cpp/setAttributes.cpp | 6 + .../dart/setAttributes.dart | 5 + .../elixir/setAttributes.ex | 5 + .../kotlin/setAttributes.kt | 3 + .../liquid/setAttributes.rb | 5 + .../rust/setAttributes.rs | 5 + .../scala/setAttributes.scala | 11 + .../vue3/setAttributes.js | 9 + .../_custom-assignments.mdx | 63 +++- .../android/customAssignment.kt | 3 + .../android/customAssignments.kt | 7 + .../angular/customAssignment.ts | 3 + .../angular/customAssignments.ts | 9 + .../cpp/customAssignment.cpp | 3 + .../cpp/customAssignments.cpp | 7 + .../dart/customAssignment.dart | 1 + .../dart/customAssignments.dart | 3 + .../elixir/customAssignment.ex | 3 + .../elixir/customAssignments.ex | 7 + .../kotlin/customAssignment.kt | 3 + .../kotlin/customAssignments.kt | 9 + .../rust/customAssignment.rs | 3 + .../rust/customAssignments.rs | 5 + .../scala/customAssignment.scala | 3 + .../scala/customAssignments.scala | 7 + .../vue3/customAssignment.js | 7 + .../vue3/customAssignments.js | 11 + .../Advanced/finalize/_finalize.mdx | 51 +++- .../Advanced/finalize/android/finalize.kt | 1 + .../Advanced/finalize/angular/finalize.ts | 1 + .../Advanced/finalize/cpp/finalize.cpp | 2 + .../Advanced/finalize/dart/finalize.dart | 1 + .../Advanced/finalize/elixir/finalize.ex | 1 + .../Advanced/finalize/kotlin/finalize.kt | 1 + .../Advanced/finalize/liquid/finalize.rb | 1 + .../Advanced/finalize/rust/finalize.rs | 1 + .../Advanced/finalize/scala/finalize.scala | 5 + .../Advanced/finalize/vue3/finalize.js | 7 + .../Advanced/publish/_publish.mdx | 49 +++- .../Advanced/publish/android/publish.kt | 1 + .../Advanced/publish/angular/publish.ts | 1 + .../Advanced/publish/cpp/publish.cpp | 3 + .../Advanced/publish/dart/publish.dart | 1 + .../Advanced/publish/elixir/publish.ex | 1 + .../Advanced/publish/kotlin/publish.kt | 1 + .../Advanced/publish/liquid/publish.rb | 1 + .../Advanced/publish/rust/publish.rs | 1 + .../Advanced/publish/scala/publish.scala | 5 + .../Advanced/publish/vue3/publish.js | 7 + .../tracking-goals/_tracking-goals.mdx | 49 +++- .../tracking-goals/android/trackingGoals.kt | 4 + .../tracking-goals/angular/trackingGoals.ts | 4 + .../tracking-goals/cpp/trackingGoals.cpp | 4 + .../tracking-goals/dart/trackingGoals.dart | 4 + .../tracking-goals/elixir/trackingGoals.ex | 4 + .../tracking-goals/kotlin/trackingGoals.kt | 4 + .../liquid/trackingGoals.liquid | 1 + .../tracking-goals/rust/trackingGoals.rs | 6 + .../tracking-goals/scala/trackingGoals.scala | 9 + .../tracking-goals/vue3/trackingGoals.js | 12 + .../basic-usage/overriding/_overriding.mdx | 47 +++ .../overriding/android/override.kt | 6 + .../overriding/angular/override.ts | 1 + .../basic-usage/overriding/cpp/override.cpp | 5 + .../basic-usage/overriding/dart/override.dart | 6 + .../basic-usage/overriding/elixir/override.ex | 5 + .../basic-usage/overriding/kotlin/override.kt | 1 + .../basic-usage/overriding/liquid/override.rb | 6 + .../basic-usage/overriding/rust/override.rs | 6 + .../overriding/scala/override.scala | 6 + .../basic-usage/overriding/vue3/override.js | 9 + .../basic-usage/peeking/_peeking.mdx | 93 ++++++ .../peeking/android/peekAtVariables.kt | 1 + .../peeking/android/peekAtVariants.kt | 6 + .../peeking/angular/peekAtVariables.ts | 1 + .../peeking/angular/peekAtVariants.ts | 6 + .../peeking/cpp/peekAtVariables.cpp | 1 + .../peeking/cpp/peekAtVariants.cpp | 6 + .../peeking/dart/peekAtVariables.dart | 1 + .../peeking/dart/peekAtVariants.dart | 7 + .../peeking/elixir/peekAtVariables.ex | 1 + .../peeking/elixir/peekAtVariants.ex | 7 + .../peeking/kotlin/peekAtVariables.kt | 1 + .../peeking/kotlin/peekAtVariants.kt | 5 + .../peeking/liquid/peekAtVariables.liquid | 1 + .../peeking/liquid/peekAtVariants.liquid | 1 + .../peeking/rust/peekAtVariables.rs | 1 + .../peeking/rust/peekAtVariants.rs | 7 + .../peeking/scala/peekAtVariables.scala | 1 + .../peeking/scala/peekAtVariants.scala | 7 + .../peeking/vue3/peekAtVariables.js | 5 + .../peeking/vue3/peekAtVariants.js | 9 + .../_selecting-a-treatment.mdx | 59 +++- .../android/selectingATreatment.kt | 6 + .../angular/selectingATreatment.ts | 6 + .../cpp/selectingATreatment.cpp | 6 + .../dart/selectingATreatment.dart | 7 + .../elixir/selectingATreatment.ex | 7 + .../kotlin/selectingATreatment.kt | 5 + .../liquid/selectingATreatment.liquid | 7 + .../rust/selectingATreatment.rs | 7 + .../scala/selectingATreatment.scala | 7 + .../vue3/selectingATreatment.js | 11 + .../_selecting-a-variable.mdx | 59 +++- .../android/selectingAVariable.kt | 3 + .../angular/selectingAVariable.ts | 1 + .../cpp/selectingAVariable.cpp | 3 + .../dart/selectingAVariable.dart | 3 + .../elixir/selectingAVariable.ex | 3 + .../kotlin/selectingAVariable.kt | 3 + .../liquid/selectingAVariable.liquid | 3 + .../rust/selectingAVariable.rs | 3 + .../scala/selectingAVariable.scala | 3 + .../vue3/selectingAVariable.js | 10 + .../_create-new-context-request.mdx | 269 ++++++++++++++++++ .../android/async.kt | 8 + .../android/extraUnits.kt | 5 + .../android/refreshWithFreshData.kt | 3 + .../android/refreshWithRefreshMethod.kt | 1 + .../android/sync.kt | 5 + .../angular/async.ts | 18 ++ .../angular/extraUnits.ts | 1 + .../angular/refreshWithFreshData.ts | 8 + .../angular/refreshWithRefreshMethod.ts | 1 + .../angular/sync.ts | 16 ++ .../create-new-context-request/cpp/async.cpp | 10 + .../cpp/extraUnits.cpp | 5 + .../cpp/refreshWithFreshData.cpp | 8 + .../cpp/refreshWithRefreshMethod.cpp | 4 + .../create-new-context-request/cpp/sync.cpp | 11 + .../dart/async.dart | 9 + .../dart/extraUnits.dart | 5 + .../dart/refreshWithFreshData.dart | 3 + .../dart/refreshWithRefreshMethod.dart | 1 + .../create-new-context-request/dart/sync.dart | 5 + .../elixir/async.ex | 7 + .../elixir/extraUnits.ex | 5 + .../elixir/refreshWithFreshData.ex | 3 + .../elixir/refreshWithRefreshMethod.ex | 1 + .../create-new-context-request/elixir/sync.ex | 7 + .../kotlin/async.kt | 11 + .../kotlin/extraUnits.kt | 1 + .../kotlin/refreshWithFreshData.kt | 2 + .../kotlin/refreshWithRefreshMethod.kt | 2 + .../create-new-context-request/kotlin/sync.kt | 11 + .../liquid/extraUnits.rb | 1 + .../liquid/prefetchedData.rb | 10 + .../liquid/refresh.rb | 1 + .../create-new-context-request/liquid/sync.rb | 10 + .../create-new-context-request/rust/async.rs | 6 + .../rust/extraUnits.rs | 6 + .../rust/refreshWithFreshData.rs | 3 + .../rust/refreshWithRefreshMethod.rs | 3 + .../create-new-context-request/rust/sync.rs | 3 + .../scala/async.scala | 11 + .../scala/extraUnits.scala | 6 + .../scala/refreshWithFreshData.scala | 2 + .../scala/refreshWithRefreshMethod.scala | 2 + .../scala/sync.scala | 11 + .../_custom-event-logger.mdx | 67 ++++- .../android/customEventLogger.kt | 27 ++ .../angular/customEventLogger.ts | 25 ++ .../cpp/customEventLogger.cpp | 25 ++ .../dart/customEventLogger.dart | 23 ++ .../elixir/customEventLogger.ex | 16 ++ .../kotlin/customEventLogger.kt | 24 ++ .../liquid/customEventLogger.rb | 26 ++ .../rust/customEventLogger.rs | 9 + .../scala/customEventLogger.scala | 25 ++ .../vue3/customEventLogger.js | 14 + .../_import-and-initialize.mdx | 109 +++++++ .../import-and-initialize/android/import.kt | 14 + .../import-and-initialize/angular/import.ts | 15 + .../import-and-initialize/cpp/initialize.cpp | 16 ++ .../import-and-initialize/elixir/import.ex | 8 + .../import-and-initialize/kotlin/import.kt | 14 + .../import-and-initialize/scala/import.scala | 11 + .../getting-started/install/_install.mdx | 108 +++++++ .../install/android/install.gradle | 3 + .../install/angular/install.bash | 1 + .../install/cpp/CMakeLists.txt | 10 + .../getting-started/install/cpp/install.bash | 3 + .../getting-started/install/dart/install.yaml | 1 + .../getting-started/install/elixir/install.ex | 1 + .../install/kotlin/install.gradle | 3 + .../install/liquid/bundle.bash | 1 + .../getting-started/install/liquid/gemfile.rb | 1 + .../getting-started/install/rust/install.toml | 2 + .../getting-started/install/scala/build.sbt | 1 + 192 files changed, 2102 insertions(+), 29 deletions(-) create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/android/setAttributes.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/angular/setAttributes.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/dart/setAttributes.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/elixir/setAttributes.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/kotlin/setAttributes.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/liquid/setAttributes.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/rust/setAttributes.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/scala/setAttributes.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignment.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignments.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignment.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignments.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignment.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignments.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignment.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignments.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignment.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignments.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignment.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignments.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignment.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignments.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/android/finalize.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/angular/finalize.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/dart/finalize.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/elixir/finalize.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/kotlin/finalize.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/liquid/finalize.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/rust/finalize.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/scala/finalize.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/android/publish.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/angular/publish.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/dart/publish.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/elixir/publish.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/kotlin/publish.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/liquid/publish.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/rust/publish.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/scala/publish.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/android/trackingGoals.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/angular/trackingGoals.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/dart/trackingGoals.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/elixir/trackingGoals.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/kotlin/trackingGoals.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/liquid/trackingGoals.liquid create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/rust/trackingGoals.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/scala/trackingGoals.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/android/override.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/angular/override.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/dart/override.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/elixir/override.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/kotlin/override.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/liquid/override.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/rust/override.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/scala/override.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariables.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariants.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariables.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariants.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariables.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariants.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariables.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariants.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariables.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariants.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariables.liquid create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariants.liquid create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariables.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariants.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariables.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariants.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/android/selectingATreatment.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/angular/selectingATreatment.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/dart/selectingATreatment.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/elixir/selectingATreatment.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/kotlin/selectingATreatment.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/liquid/selectingATreatment.liquid create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/rust/selectingATreatment.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/scala/selectingATreatment.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/android/selectingAVariable.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/angular/selectingAVariable.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/dart/selectingAVariable.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/elixir/selectingAVariable.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/kotlin/selectingAVariable.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/liquid/selectingAVariable.liquid create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/rust/selectingAVariable.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/scala/selectingAVariable.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/async.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/extraUnits.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithFreshData.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithRefreshMethod.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/sync.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/async.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/extraUnits.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithFreshData.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithRefreshMethod.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/sync.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/async.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/extraUnits.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithFreshData.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithRefreshMethod.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/sync.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/async.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/extraUnits.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithFreshData.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithRefreshMethod.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/sync.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/extraUnits.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/extraUnits.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/prefetchedData.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/refresh.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/sync.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/extraUnits.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithFreshData.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithRefreshMethod.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/async.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/extraUnits.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/android/customEventLogger.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/angular/customEventLogger.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/dart/customEventLogger.dart create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/elixir/customEventLogger.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/kotlin/customEventLogger.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/liquid/customEventLogger.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/rust/customEventLogger.rs create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/scala/customEventLogger.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/vue3/customEventLogger.js create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/angular/import.ts create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/elixir/import.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/scala/import.scala create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/android/install.gradle create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/angular/install.bash create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/CMakeLists.txt create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/install.bash create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/dart/install.yaml create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/elixir/install.ex create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/kotlin/install.gradle create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/bundle.bash create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/gemfile.rb create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/rust/install.toml create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/scala/build.sbt diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx index cd7bc980..0fa0e113 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx @@ -26,6 +26,17 @@ import RubySetAttributes from "!!raw-loader!./ruby/setAttributes.rb"; import FlutterSetAttributes from "!!raw-loader!./flutter/setAttributes.dart"; +import AngularAttributes from "!!raw-loader!./angular/setAttributes.ts"; +import AndroidAttributes from "!!raw-loader!./android/setAttributes.kt"; +import KotlinAttributes from "!!raw-loader!./kotlin/setAttributes.kt"; +import CppAttributes from "!!raw-loader!./cpp/setAttributes.cpp"; +import ScalaAttributes from "!!raw-loader!./scala/setAttributes.scala"; +import ElixirAttributes from "!!raw-loader!./elixir/setAttributes.ex"; +import DartAttributes from "!!raw-loader!./dart/setAttributes.dart"; +import RustAttributes from "!!raw-loader!./rust/setAttributes.rs"; +import LiquidAttributes from "!!raw-loader!./liquid/setAttributes.rb"; +import Vue3Attributes from "!!raw-loader!./vue3/setAttributes.js"; + Attributes are used to pass meta-data about the user and/or the request. They can be used later in the Web Console to create segments or audiences. They can be set using the `attribute()` or `attributes()` methods, before or after the @@ -87,16 +98,7 @@ component. - -Attributes can be set in script. - -{VueSetAttributesScript} - -Or directly in templates with the `:attributes` property of the `Treatment` -component. - -{VueSetAttributesTemplate} - +{Vue3Attributes} @@ -135,6 +137,42 @@ component. + +{AngularAttributes} + + + +{AndroidAttributes} + + + +{KotlinAttributes} + + + +{CppAttributes} + + + +{ScalaAttributes} + + + +{ElixirAttributes} + + + +{DartAttributes} + + + +{RustAttributes} + + + +{LiquidAttributes} + + :::caution diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/android/setAttributes.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/android/setAttributes.kt new file mode 100644 index 00000000..3d36c406 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/android/setAttributes.kt @@ -0,0 +1,5 @@ +context.setAttribute("user_agent", request.getHeader("User-Agent")) + +context.setAttributes(mapOf( + "customer_age" to "new_customer" +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/angular/setAttributes.ts b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/angular/setAttributes.ts new file mode 100644 index 00000000..8ba38ce3 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/angular/setAttributes.ts @@ -0,0 +1,6 @@ +absmartly.attribute('user_agent', navigator.userAgent); + +absmartly.attributes({ + customer_age: 'new_customer', + url: window.location.href, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp new file mode 100644 index 00000000..c8d2c671 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp @@ -0,0 +1,6 @@ +context.set_attribute("user_agent", "Mozilla/5.0..."); + +context.set_attributes({ + {"customer_age", "new_customer"}, + {"url", "/products/123"} +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/dart/setAttributes.dart b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/dart/setAttributes.dart new file mode 100644 index 00000000..b2590210 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/dart/setAttributes.dart @@ -0,0 +1,5 @@ +context.setAttribute("user_agent", "Mozilla/5.0..."); + +context.setAttributes({ + "customer_age": "new_customer", +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/elixir/setAttributes.ex b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/elixir/setAttributes.ex new file mode 100644 index 00000000..c6f46995 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/elixir/setAttributes.ex @@ -0,0 +1,5 @@ +Context.set_attribute(context, "user_agent", req.headers["user-agent"]) + +Context.set_attributes(context, %{ + "customer_age" => "new_customer" +}) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/kotlin/setAttributes.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/kotlin/setAttributes.kt new file mode 100644 index 00000000..fc1466bd --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/kotlin/setAttributes.kt @@ -0,0 +1,3 @@ +context.setAttribute("user_agent", request.getHeader("User-Agent")) + +context.setAttribute("customer_age", "new_customer") diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/liquid/setAttributes.rb b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/liquid/setAttributes.rb new file mode 100644 index 00000000..093a71b9 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/liquid/setAttributes.rb @@ -0,0 +1,5 @@ +context.attributes({ + user_agent: request.user_agent, + customer_age: 'new_customer', + account_type: 'premium' +}) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/rust/setAttributes.rs b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/rust/setAttributes.rs new file mode 100644 index 00000000..28f6c32c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/rust/setAttributes.rs @@ -0,0 +1,5 @@ +context.set_attribute("user_agent", "Mozilla/5.0")?; + +context.set_attributes([ + ("customer_age", "new_customer"), +])?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/scala/setAttributes.scala b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/scala/setAttributes.scala new file mode 100644 index 00000000..8deb33f2 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/scala/setAttributes.scala @@ -0,0 +1,11 @@ +import io.circe.Json +import io.circe.syntax._ + +context.setAttribute("user_agent", "Mozilla/5.0".asJson) +context.setAttribute("customer_age", "new_customer".asJson) +context.setAttribute("age", 25.asJson) + +context.setAttributes(Map( + "user_agent" -> "Mozilla/5.0".asJson, + "customer_age" -> "new_customer".asJson +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js new file mode 100644 index 00000000..d1d0f653 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js @@ -0,0 +1,9 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +$absmartly.attribute("user_agent", navigator.userAgent); + +$absmartly.attributes({ + customer_age: "new_customer", +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx index c5c76622..1d7ca18f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx @@ -35,6 +35,25 @@ import RubyCustomAssignments from "!!raw-loader!./ruby/customAssignments.rb"; import FlutterCustomAssignment from "!!raw-loader!./flutter/customAssignment.dart"; import FlutterCustomAssignments from "!!raw-loader!./flutter/customAssignments.dart"; +import AngularAssignment from "!!raw-loader!./angular/customAssignment.ts"; +import AngularAssignments from "!!raw-loader!./angular/customAssignments.ts"; +import AndroidAssignment from "!!raw-loader!./android/customAssignment.kt"; +import AndroidAssignments from "!!raw-loader!./android/customAssignments.kt"; +import KotlinAssignment from "!!raw-loader!./kotlin/customAssignment.kt"; +import KotlinAssignments from "!!raw-loader!./kotlin/customAssignments.kt"; +import CppAssignment from "!!raw-loader!./cpp/customAssignment.cpp"; +import CppAssignments from "!!raw-loader!./cpp/customAssignments.cpp"; +import ScalaAssignment from "!!raw-loader!./scala/customAssignment.scala"; +import ScalaAssignments from "!!raw-loader!./scala/customAssignments.scala"; +import ElixirAssignment from "!!raw-loader!./elixir/customAssignment.ex"; +import ElixirAssignments from "!!raw-loader!./elixir/customAssignments.ex"; +import DartAssignment from "!!raw-loader!./dart/customAssignment.dart"; +import DartAssignments from "!!raw-loader!./dart/customAssignments.dart"; +import RustAssignment from "!!raw-loader!./rust/customAssignment.rs"; +import RustAssignments from "!!raw-loader!./rust/customAssignments.rs"; +import Vue3Assignment from "!!raw-loader!./vue3/customAssignment.js"; +import Vue3Assignments from "!!raw-loader!./vue3/customAssignments.js"; + :::warning Warning Events with custom assignments are **counted as eligible events** by the ABsmartly statistics engines. If you are using these methods for development purposes @@ -134,12 +153,12 @@ For example, if you wish to have your variant chosen based on data from an API call. This can be accomplished using the `customAssignment()` method. -{VueCustomAssignment} +{Vue3Assignment} If you are running multiple experiments and need to choose different custom assignments for each one, you can do so using the `customAssignments()` method. -{VueCustomAssignments} +{Vue3Assignments} @@ -242,6 +261,46 @@ method. + +{AngularAssignment} +{AngularAssignments} + + + +{AndroidAssignment} +{AndroidAssignments} + + + +{KotlinAssignment} +{KotlinAssignments} + + + +{CppAssignment} +{CppAssignments} + + + +{ScalaAssignment} +{ScalaAssignments} + + + +{ElixirAssignment} +{ElixirAssignments} + + + +{DartAssignment} +{DartAssignments} + + + +{RustAssignment} +{RustAssignments} + + :::info diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignment.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignment.kt new file mode 100644 index 00000000..d2395647 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignment.kt @@ -0,0 +1,3 @@ +val chosenVariant = 1 + +context.setCustomAssignment("experiment_name", chosenVariant) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignments.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignments.kt new file mode 100644 index 00000000..055b788a --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/android/customAssignments.kt @@ -0,0 +1,7 @@ +val assignments = mapOf( + "experiment_name" to 1, + "another_experiment_name" to 0, + "a_third_experiment_name" to 2 +) + +context.setCustomAssignments(assignments) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignment.ts b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignment.ts new file mode 100644 index 00000000..6eb5d616 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignment.ts @@ -0,0 +1,3 @@ +const chosenVariant = 1; + +absmartly.customAssignment('experiment_name', chosenVariant); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignments.ts b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignments.ts new file mode 100644 index 00000000..938bbb6d --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/angular/customAssignments.ts @@ -0,0 +1,9 @@ +const assignments = { + experiment_name: 1, + another_experiment_name: 0, + a_third_experiment_name: 2, +}; + +for (const [experiment, variant] of Object.entries(assignments)) { + absmartly.customAssignment(experiment, variant); +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp new file mode 100644 index 00000000..5d7cf6c0 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp @@ -0,0 +1,3 @@ +int chosenVariant = 1; + +context.set_custom_assignment("experiment_name", chosenVariant); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp new file mode 100644 index 00000000..348a6b7a --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp @@ -0,0 +1,7 @@ +std::map assignments = { + {"experiment_name", 1}, + {"another_experiment_name", 0}, + {"a_third_experiment_name", 2} +}; + +context.set_custom_assignments(assignments); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignment.dart b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignment.dart new file mode 100644 index 00000000..eb255621 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignment.dart @@ -0,0 +1 @@ +context.setCustomAssignment("exp_test_experiment", 1); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignments.dart b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignments.dart new file mode 100644 index 00000000..3bb0a367 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/dart/customAssignments.dart @@ -0,0 +1,3 @@ +context.setCustomAssignments({ + "exp_test_experiment": 1, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignment.ex b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignment.ex new file mode 100644 index 00000000..20ac7c8f --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignment.ex @@ -0,0 +1,3 @@ +chosen_variant = 1 + +Context.set_custom_assignment(context, "experiment_name", chosen_variant) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignments.ex b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignments.ex new file mode 100644 index 00000000..4ccfe170 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/elixir/customAssignments.ex @@ -0,0 +1,7 @@ +assignments = %{ + "experiment_name" => 1, + "another_experiment_name" => 0, + "a_third_experiment_name" => 2 +} + +Context.set_custom_assignments(context, assignments) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignment.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignment.kt new file mode 100644 index 00000000..d2395647 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignment.kt @@ -0,0 +1,3 @@ +val chosenVariant = 1 + +context.setCustomAssignment("experiment_name", chosenVariant) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignments.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignments.kt new file mode 100644 index 00000000..23b28272 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/kotlin/customAssignments.kt @@ -0,0 +1,9 @@ +val assignments = mapOf( + "experiment_name" to 1, + "another_experiment_name" to 0, + "a_third_experiment_name" to 2, +) + +for ((experiment, variant) in assignments) { + context.setCustomAssignment(experiment, variant) +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignment.rs b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignment.rs new file mode 100644 index 00000000..d951d74b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignment.rs @@ -0,0 +1,3 @@ +let chosen_variant = 1; + +context.set_custom_assignment("experiment_name", chosen_variant)?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignments.rs b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignments.rs new file mode 100644 index 00000000..21a10dc8 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/rust/customAssignments.rs @@ -0,0 +1,5 @@ +context.set_custom_assignments([ + ("experiment_name", 1), + ("another_experiment_name", 0), + ("a_third_experiment_name", 2), +])?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignment.scala b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignment.scala new file mode 100644 index 00000000..d2395647 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignment.scala @@ -0,0 +1,3 @@ +val chosenVariant = 1 + +context.setCustomAssignment("experiment_name", chosenVariant) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignments.scala b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignments.scala new file mode 100644 index 00000000..66a16e4a --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/scala/customAssignments.scala @@ -0,0 +1,7 @@ +val assignments = Map( + "experiment_name" -> 1, + "another_experiment_name" -> 0, + "a_third_experiment_name" -> 2 +) + +context.setCustomAssignments(assignments) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js new file mode 100644 index 00000000..897aba2b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js @@ -0,0 +1,7 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +const chosenVariant = 1; + +$absmartly.customAssignment("experiment_name", chosenVariant); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js new file mode 100644 index 00000000..fddf9538 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js @@ -0,0 +1,11 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +const assignments = { + experiment_name: 1, + another_experiment_name: 0, + a_third_experiment_name: 2, +}; + +$absmartly.customAssignments(assignments); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx index 5f091ebf..9c0775f5 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx @@ -24,6 +24,17 @@ import RubyFinalize from "!!raw-loader!./ruby/finalize.rb"; import FlutterFinalize from "!!raw-loader!./flutter/finalize.dart"; +import AngularFinalize from "!!raw-loader!./angular/finalize.ts"; +import AndroidFinalize from "!!raw-loader!./android/finalize.kt"; +import KotlinFinalize from "!!raw-loader!./kotlin/finalize.kt"; +import CppFinalize from "!!raw-loader!./cpp/finalize.cpp"; +import ScalaFinalize from "!!raw-loader!./scala/finalize.scala"; +import ElixirFinalize from "!!raw-loader!./elixir/finalize.ex"; +import DartFinalize from "!!raw-loader!./dart/finalize.dart"; +import RustFinalize from "!!raw-loader!./rust/finalize.rs"; +import LiquidFinalize from "!!raw-loader!./liquid/finalize.rb"; +import Vue3Finalize from "!!raw-loader!./vue3/finalize.js"; + Finalizing (or closing) a context publishes any unpublished events before "sealing" it. Any `track` calls after a context has been finalized will throw an error. @@ -104,11 +115,11 @@ throwing an error if any method that could generate an event is called. -The `finalize()` method will ensure all events have been published to the +The `finalize()` method will ensure all events have been published to the ABsmartly collector, like `publish()`, and will also "seal" the context, throwing an error if any method that could generate an event is called. -{VueFinalize} +{Vue3Finalize} @@ -177,4 +188,40 @@ an error if any method that could generate an event is called. + +{AngularFinalize} + + + +{AndroidFinalize} + + + +{KotlinFinalize} + + + +{CppFinalize} + + + +{ScalaFinalize} + + + +{ElixirFinalize} + + + +{DartFinalize} + + + +{RustFinalize} + + + +{LiquidFinalize} + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/android/finalize.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/android/finalize.kt new file mode 100644 index 00000000..259454ca --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/android/finalize.kt @@ -0,0 +1 @@ +context.close() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/angular/finalize.ts b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/angular/finalize.ts new file mode 100644 index 00000000..46ac5a3b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/angular/finalize.ts @@ -0,0 +1 @@ +await absmartly.finalize(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp new file mode 100644 index 00000000..d3f0a269 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp @@ -0,0 +1,2 @@ +absmartly::PublishEvent event = context.finalize(); +send_to_collector(nlohmann::json(event).dump()); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/dart/finalize.dart b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/dart/finalize.dart new file mode 100644 index 00000000..02e648ba --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/dart/finalize.dart @@ -0,0 +1 @@ +await context.close(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/elixir/finalize.ex b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/elixir/finalize.ex new file mode 100644 index 00000000..60c4f34a --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/elixir/finalize.ex @@ -0,0 +1 @@ +Context.finalize(context) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/kotlin/finalize.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/kotlin/finalize.kt new file mode 100644 index 00000000..259454ca --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/kotlin/finalize.kt @@ -0,0 +1 @@ +context.close() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/liquid/finalize.rb b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/liquid/finalize.rb new file mode 100644 index 00000000..13a48e69 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/liquid/finalize.rb @@ -0,0 +1 @@ +context.close diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/rust/finalize.rs b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/rust/finalize.rs new file mode 100644 index 00000000..33c08cac --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/rust/finalize.rs @@ -0,0 +1 @@ +context.finalize(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/scala/finalize.scala b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/scala/finalize.scala new file mode 100644 index 00000000..ea77eb0b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/scala/finalize.scala @@ -0,0 +1,5 @@ +import scala.concurrent.Await +import scala.concurrent.duration._ + +val finalizeFuture = context.finalizeContext() +Await.result(finalizeFuture, 5.seconds) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js new file mode 100644 index 00000000..855d4244 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js @@ -0,0 +1,7 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +await $absmartly.finalize().then(() => { + window.location = "https://www.absmartly.com"; +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx index 0d4af4c0..f98b131c 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx @@ -24,6 +24,17 @@ import RubyPublish from "!!raw-loader!./ruby/publish.rb"; import FlutterPublish from "!!raw-loader!./flutter/publish.dart"; +import AngularPublish from "!!raw-loader!./angular/publish.ts"; +import AndroidPublish from "!!raw-loader!./android/publish.kt"; +import KotlinPublish from "!!raw-loader!./kotlin/publish.kt"; +import CppPublish from "!!raw-loader!./cpp/publish.cpp"; +import ScalaPublish from "!!raw-loader!./scala/publish.scala"; +import ElixirPublish from "!!raw-loader!./elixir/publish.ex"; +import DartPublish from "!!raw-loader!./dart/publish.dart"; +import RustPublish from "!!raw-loader!./rust/publish.rs"; +import LiquidPublish from "!!raw-loader!./liquid/publish.rb"; +import Vue3Publish from "!!raw-loader!./vue3/publish.js"; + @@ -72,7 +83,7 @@ Sometimes it is necessary to ensure all events have been published to the ABsmar Sometimes it is necessary to ensure all events have been published to the ABsmartly collector before proceeding. To do this, you can explicitly call the `publish()` method. -{VuePublish} +{Vue3Publish} @@ -130,4 +141,40 @@ method. + +{AngularPublish} + + + +{AndroidPublish} + + + +{KotlinPublish} + + + +{CppPublish} + + + +{ScalaPublish} + + + +{ElixirPublish} + + + +{DartPublish} + + + +{RustPublish} + + + +{LiquidPublish} + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/android/publish.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/android/publish.kt new file mode 100644 index 00000000..ee276fa8 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/android/publish.kt @@ -0,0 +1 @@ +context.publish() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/angular/publish.ts b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/angular/publish.ts new file mode 100644 index 00000000..b51148a8 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/angular/publish.ts @@ -0,0 +1 @@ +await absmartly.publish(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp new file mode 100644 index 00000000..c3ac3d3d --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp @@ -0,0 +1,3 @@ +absmartly::PublishEvent event = context.publish(); +nlohmann::json event_json = event; +send_to_collector(event_json.dump()); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/dart/publish.dart b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/dart/publish.dart new file mode 100644 index 00000000..8577cbc1 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/dart/publish.dart @@ -0,0 +1 @@ +await context.publish(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/elixir/publish.ex b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/elixir/publish.ex new file mode 100644 index 00000000..2e99f227 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/elixir/publish.ex @@ -0,0 +1 @@ +Context.publish(context) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/kotlin/publish.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/kotlin/publish.kt new file mode 100644 index 00000000..ee276fa8 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/kotlin/publish.kt @@ -0,0 +1 @@ +context.publish() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/liquid/publish.rb b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/liquid/publish.rb new file mode 100644 index 00000000..1605b35a --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/liquid/publish.rb @@ -0,0 +1 @@ +context.publish diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/rust/publish.rs b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/rust/publish.rs new file mode 100644 index 00000000..2bb2db8f --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/rust/publish.rs @@ -0,0 +1 @@ +context.publish(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/scala/publish.scala b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/scala/publish.scala new file mode 100644 index 00000000..0a1d366c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/scala/publish.scala @@ -0,0 +1,5 @@ +import scala.concurrent.Await +import scala.concurrent.duration._ + +val publishFuture = context.publish() +Await.result(publishFuture, 5.seconds) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js new file mode 100644 index 00000000..3008b108 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js @@ -0,0 +1,7 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +await $absmartly.publish().then(() => { + window.location = "https://www.absmartly.com"; +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx index 53a8bfb4..f431cec9 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx @@ -14,6 +14,17 @@ import PHPTrackingGoals from "!!raw-loader!./php/trackingGoals.php"; import RubyTrackingGoals from "!!raw-loader!./ruby/trackingGoals.rb"; import FlutterTrackingGoals from "!!raw-loader!./flutter/trackingGoals.dart"; +import AngularGoals from "!!raw-loader!./angular/trackingGoals.ts"; +import AndroidGoals from "!!raw-loader!./android/trackingGoals.kt"; +import KotlinGoals from "!!raw-loader!./kotlin/trackingGoals.kt"; +import CppGoals from "!!raw-loader!./cpp/trackingGoals.cpp"; +import ScalaGoals from "!!raw-loader!./scala/trackingGoals.scala"; +import ElixirGoals from "!!raw-loader!./elixir/trackingGoals.ex"; +import DartGoals from "!!raw-loader!./dart/trackingGoals.dart"; +import RustGoals from "!!raw-loader!./rust/trackingGoals.rs"; +import LiquidGoals from "!!raw-loader!./liquid/trackingGoals.liquid"; +import Vue3Goals from "!!raw-loader!./vue3/trackingGoals.js"; + Use the `track()` method to record any actions that your customers perform. Each action is known as a goal and corresponds to a `goal_name` as defined in the Web Console. Calling `track()` through the SDKs is the easiest way of @@ -53,7 +64,7 @@ data type and syntax for each are: - {VueTrackingGoals} + {Vue3Goals} @@ -80,4 +91,40 @@ data type and syntax for each are: {FlutterTrackingGoals} + + {AngularGoals} + + + + {AndroidGoals} + + + + {KotlinGoals} + + + + {CppGoals} + + + + {ScalaGoals} + + + + {ElixirGoals} + + + + {DartGoals} + + + + {RustGoals} + + + + {LiquidGoals} + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/android/trackingGoals.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/android/trackingGoals.kt new file mode 100644 index 00000000..02ef0938 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/android/trackingGoals.kt @@ -0,0 +1,4 @@ +context.track("payment", mapOf( + "item_count" to 1, + "total_amount" to 1999.99 +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/angular/trackingGoals.ts b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/angular/trackingGoals.ts new file mode 100644 index 00000000..d4031f49 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/angular/trackingGoals.ts @@ -0,0 +1,4 @@ +absmartly.track('payment', { + item_count: 1, + total_amount: 1999.99, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp new file mode 100644 index 00000000..b0bcf60d --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp @@ -0,0 +1,4 @@ +context.track("payment", { + {"item_count", 1}, + {"total_amount", 1999.99} +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/dart/trackingGoals.dart b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/dart/trackingGoals.dart new file mode 100644 index 00000000..61454ae3 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/dart/trackingGoals.dart @@ -0,0 +1,4 @@ +context.track("payment", { + "item_count": 1, + "total_amount": 1999.99, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/elixir/trackingGoals.ex b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/elixir/trackingGoals.ex new file mode 100644 index 00000000..eaee5215 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/elixir/trackingGoals.ex @@ -0,0 +1,4 @@ +Context.track(context, "payment", %{ + "item_count" => 1, + "total_amount" => 1999.99 +}) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/kotlin/trackingGoals.kt b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/kotlin/trackingGoals.kt new file mode 100644 index 00000000..88a831ce --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/kotlin/trackingGoals.kt @@ -0,0 +1,4 @@ +context.track("payment", mapOf( + "item_count" to 1, + "total_amount" to 1999.99, +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/liquid/trackingGoals.liquid b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/liquid/trackingGoals.liquid new file mode 100644 index 00000000..a1fbabb0 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/liquid/trackingGoals.liquid @@ -0,0 +1 @@ +{{ 'purchase' | absmartly_track: amount: order.total_price, items: order.line_items.size }} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/rust/trackingGoals.rs b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/rust/trackingGoals.rs new file mode 100644 index 00000000..7a880281 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/rust/trackingGoals.rs @@ -0,0 +1,6 @@ +use serde_json::json; + +context.track("payment", json!({ + "item_count": 1, + "total_amount": 1999.99 +}))?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/scala/trackingGoals.scala b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/scala/trackingGoals.scala new file mode 100644 index 00000000..147bbdc1 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/scala/trackingGoals.scala @@ -0,0 +1,9 @@ +import io.circe.Json +import io.circe.syntax._ + +context.track("payment") + +context.track("purchase", Some(Map( + "item_count" -> Json.fromInt(1), + "total_amount" -> Json.fromDoubleOrNull(1999.99) +))) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js new file mode 100644 index 00000000..ba506afb --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js @@ -0,0 +1,12 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +const properties = { + price: 10000, + category: "5 stars", + free_cancellation: true, + instance_id: 5350, +}; + +$absmartly.track("booking", properties); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx index e561e3e3..56615d34 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx @@ -25,6 +25,17 @@ import RubyOverriding from "!!raw-loader!./ruby/override.rb"; import FlutterOverriding from "!!raw-loader!./flutter/override.dart"; +import AngularOverride from "!!raw-loader!./angular/override.ts"; +import AndroidOverride from "!!raw-loader!./android/override.kt"; +import KotlinOverride from "!!raw-loader!./kotlin/override.kt"; +import CppOverride from "!!raw-loader!./cpp/override.cpp"; +import ScalaOverride from "!!raw-loader!./scala/override.scala"; +import ElixirOverride from "!!raw-loader!./elixir/override.ex"; +import DartOverride from "!!raw-loader!./dart/override.dart"; +import RustOverride from "!!raw-loader!./rust/override.rs"; +import LiquidOverride from "!!raw-loader!./liquid/override.rb"; +import Vue3Override from "!!raw-loader!./vue3/override.js"; + :::warning Warning Overriden events are typed as ineligible and are **ignored** by the ABsmartly statistics engines. If you want to force a particular experiment's variant and have the event be counted, you @@ -183,6 +194,42 @@ the context is ready. + +{AngularOverride} + + + +{AndroidOverride} + + + +{KotlinOverride} + + + +{CppOverride} + + + +{ScalaOverride} + + + +{ElixirOverride} + + + +{DartOverride} + + + +{RustOverride} + + + +{LiquidOverride} + + ### Overriding Based On URL Params diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/android/override.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/android/override.kt new file mode 100644 index 00000000..8e04fd87 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/android/override.kt @@ -0,0 +1,6 @@ +context.setOverride("exp_test_experiment", 1) + +context.setOverrides(mapOf( + "exp_test_experiment" to 1, + "exp_another_experiment" to 0 +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/angular/override.ts b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/angular/override.ts new file mode 100644 index 00000000..064da3aa --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/angular/override.ts @@ -0,0 +1 @@ +absmartly.override('exp_test_experiment', 1); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp new file mode 100644 index 00000000..215eebad --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp @@ -0,0 +1,5 @@ +context.set_override("exp_test_experiment", 1); // force variant 1 of treatment +context.set_overrides({ + {"exp_test_experiment", 1}, + {"exp_another_experiment", 0} +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/dart/override.dart b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/dart/override.dart new file mode 100644 index 00000000..67f9a732 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/dart/override.dart @@ -0,0 +1,6 @@ +context.setOverride("exp_test_experiment", 1); + +context.setOverrides({ + "exp_test_experiment": 1, + "exp_another_experiment": 0, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/elixir/override.ex b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/elixir/override.ex new file mode 100644 index 00000000..7b943cae --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/elixir/override.ex @@ -0,0 +1,5 @@ +Context.set_override(context, "exp_test_experiment", 1) +Context.set_overrides(context, %{ + "exp_test_experiment" => 1, + "exp_another_experiment" => 0 +}) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/kotlin/override.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/kotlin/override.kt new file mode 100644 index 00000000..fbedb80b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/kotlin/override.kt @@ -0,0 +1 @@ +context.setOverride("exp_test_experiment", 1) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/liquid/override.rb b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/liquid/override.rb new file mode 100644 index 00000000..ba3e3a98 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/liquid/override.rb @@ -0,0 +1,6 @@ +context.override('exp_test_experiment', 1) + +context.overrides({ + 'exp_test_experiment' => 1, + 'exp_another_experiment' => 0 +}) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/rust/override.rs b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/rust/override.rs new file mode 100644 index 00000000..5bec44a3 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/rust/override.rs @@ -0,0 +1,6 @@ +context.set_override("exp_test_experiment", 1)?; // force variant 1 of treatment + +context.set_overrides([ + ("exp_test_experiment", 1), + ("exp_another_experiment", 0), +])?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/scala/override.scala b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/scala/override.scala new file mode 100644 index 00000000..b869b22e --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/scala/override.scala @@ -0,0 +1,6 @@ +context.setOverride("exp_test_experiment", 1) + +context.setOverrides(Map( + "exp_test_experiment" -> 1, + "exp_another_experiment" -> 0 +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js new file mode 100644 index 00000000..527b93cd --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js @@ -0,0 +1,9 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +$absmartly.override("exp_test_experiment", 1); // force variant 1 of treatment +$absmartly.overrides({ + exp_test_experiment: 1, + exp_another_experiment: 0, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx index d429c5c4..57172e79 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx @@ -25,6 +25,27 @@ import RubyPeekAtVariable from "!!raw-loader!./ruby/peekAtVariables.rb"; import FlutterPeekAtVariant from "!!raw-loader!./flutter/peekAtVariants.dart"; import FlutterPeekAtVariable from "!!raw-loader!./flutter/peekAtVariables.dart"; +import AngularPeekVariants from "!!raw-loader!./angular/peekAtVariants.ts"; +import AngularPeekVariables from "!!raw-loader!./angular/peekAtVariables.ts"; +import AndroidPeekVariants from "!!raw-loader!./android/peekAtVariants.kt"; +import AndroidPeekVariables from "!!raw-loader!./android/peekAtVariables.kt"; +import KotlinPeekVariants from "!!raw-loader!./kotlin/peekAtVariants.kt"; +import KotlinPeekVariables from "!!raw-loader!./kotlin/peekAtVariables.kt"; +import CppPeekVariants from "!!raw-loader!./cpp/peekAtVariants.cpp"; +import CppPeekVariables from "!!raw-loader!./cpp/peekAtVariables.cpp"; +import ScalaPeekVariants from "!!raw-loader!./scala/peekAtVariants.scala"; +import ScalaPeekVariables from "!!raw-loader!./scala/peekAtVariables.scala"; +import ElixirPeekVariants from "!!raw-loader!./elixir/peekAtVariants.ex"; +import ElixirPeekVariables from "!!raw-loader!./elixir/peekAtVariables.ex"; +import DartPeekVariants from "!!raw-loader!./dart/peekAtVariants.dart"; +import DartPeekVariables from "!!raw-loader!./dart/peekAtVariables.dart"; +import RustPeekVariants from "!!raw-loader!./rust/peekAtVariants.rs"; +import RustPeekVariables from "!!raw-loader!./rust/peekAtVariables.rs"; +import LiquidPeekVariants from "!!raw-loader!./liquid/peekAtVariants.liquid"; +import LiquidPeekVariables from "!!raw-loader!./liquid/peekAtVariables.liquid"; +import Vue3PeekVariants from "!!raw-loader!./vue3/peekAtVariants.js"; +import Vue3PeekVariables from "!!raw-loader!./vue3/peekAtVariables.js"; + @@ -147,6 +168,42 @@ provides a `peekTreatment()` method for that. + +{AngularPeekVariants} + + + +{AndroidPeekVariants} + + + +{KotlinPeekVariants} + + + +{CppPeekVariants} + + + +{ScalaPeekVariants} + + + +{ElixirPeekVariants} + + + +{DartPeekVariants} + + + +{RustPeekVariants} + + + +{LiquidPeekVariants} + + ## Peeking at variables @@ -225,4 +282,40 @@ provides a `peekTreatment()` method for that. + +{AngularPeekVariables} + + + +{AndroidPeekVariables} + + + +{KotlinPeekVariables} + + + +{CppPeekVariables} + + + +{ScalaPeekVariables} + + + +{ElixirPeekVariables} + + + +{DartPeekVariables} + + + +{RustPeekVariables} + + + +{LiquidPeekVariables} + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariables.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariables.kt new file mode 100644 index 00000000..79229829 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariables.kt @@ -0,0 +1 @@ +val variable = context.peekVariable("button.color") diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariants.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariants.kt new file mode 100644 index 00000000..a1534725 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/android/peekAtVariants.kt @@ -0,0 +1,6 @@ +val treatment = context.peekTreatment("exp_test_experiment") +if (treatment == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariables.ts b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariables.ts new file mode 100644 index 00000000..951db856 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariables.ts @@ -0,0 +1 @@ +const buttonColor = absmartly.peekVariableValue('button_color', 'blue'); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariants.ts b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariants.ts new file mode 100644 index 00000000..b3753446 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/angular/peekAtVariants.ts @@ -0,0 +1,6 @@ +const treatment = absmartly.peek('exp_test_experiment'); +if (treatment === 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp new file mode 100644 index 00000000..907348c6 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp @@ -0,0 +1 @@ +nlohmann::json variable = context.peek_variable_value("button.color", nlohmann::json("default")); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp new file mode 100644 index 00000000..61fe528b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp @@ -0,0 +1,6 @@ +int treatment = context.peek("exp_test_experiment"); +if (treatment == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariables.dart b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariables.dart new file mode 100644 index 00000000..6acd85c2 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariables.dart @@ -0,0 +1 @@ +var buttonColor = context.peekVariableValue("button.color", "red"); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariants.dart b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariants.dart new file mode 100644 index 00000000..07a49054 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/dart/peekAtVariants.dart @@ -0,0 +1,7 @@ +int treatment = context.peekTreatment("exp_test_experiment"); + +if (treatment == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariables.ex b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariables.ex new file mode 100644 index 00000000..66bbca44 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariables.ex @@ -0,0 +1 @@ +variable = Context.peek_variable_value(context, "button.color", "red") diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariants.ex b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariants.ex new file mode 100644 index 00000000..ed5ddc67 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/elixir/peekAtVariants.ex @@ -0,0 +1,7 @@ +variant = Context.peek(context, "exp_test_experiment") + +if variant == 0 do + # user is in control group (variant 0) +else + # user is in treatment group +end diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariables.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariables.kt new file mode 100644 index 00000000..134d258e --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariables.kt @@ -0,0 +1 @@ +val variable = context.peekVariableValue("button.color", "red") diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariants.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariants.kt new file mode 100644 index 00000000..0eb8703f --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/kotlin/peekAtVariants.kt @@ -0,0 +1,5 @@ +if (context.peekTreatment("exp_test_experiment") == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariables.liquid b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariables.liquid new file mode 100644 index 00000000..c5d15c4b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariables.liquid @@ -0,0 +1 @@ +{% assign button_color = 'button.color' | absmartly_peek_variable: 'red' %} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariants.liquid b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariants.liquid new file mode 100644 index 00000000..0c90a2c7 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/liquid/peekAtVariants.liquid @@ -0,0 +1 @@ +{% assign variant = 'exp_test_experiment' | absmartly_peek %} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariables.rs b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariables.rs new file mode 100644 index 00000000..ed405e97 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariables.rs @@ -0,0 +1 @@ +let button_color = context.peek_variable_value("button.color", "red"); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariants.rs b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariants.rs new file mode 100644 index 00000000..807d3a8a --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/rust/peekAtVariants.rs @@ -0,0 +1,7 @@ +let variant = context.peek("exp_test_experiment"); + +if variant == 0 { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariables.scala b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariables.scala new file mode 100644 index 00000000..57ef8c22 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariables.scala @@ -0,0 +1 @@ +val peekedColor = context.peekVariableValue("button.color", "blue") diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariants.scala b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariants.scala new file mode 100644 index 00000000..ea9951f4 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/scala/peekAtVariants.scala @@ -0,0 +1,7 @@ +val variant = context.peek("exp_test_experiment") + +if (variant == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js new file mode 100644 index 00000000..26ba6227 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js @@ -0,0 +1,5 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +const variableValue = $absmartly.peekVariableValue("button.color", "red"); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js new file mode 100644 index 00000000..d6e6559b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js @@ -0,0 +1,9 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +if ($absmartly.peek("exp_test_experiment") == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx index c5d9b9be..fa721036 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx @@ -28,6 +28,17 @@ import RubySelectingATreatment from "!!raw-loader!./ruby/selectingATreatment.rb" import FlutterSelectingATreatment from "!!raw-loader!./flutter/selectingATreatment.dart"; +import AngularTreatment from "!!raw-loader!./angular/selectingATreatment.ts"; +import AndroidTreatment from "!!raw-loader!./android/selectingATreatment.kt"; +import KotlinTreatment from "!!raw-loader!./kotlin/selectingATreatment.kt"; +import CppTreatment from "!!raw-loader!./cpp/selectingATreatment.cpp"; +import ScalaTreatment from "!!raw-loader!./scala/selectingATreatment.scala"; +import ElixirTreatment from "!!raw-loader!./elixir/selectingATreatment.ex"; +import DartTreatment from "!!raw-loader!./dart/selectingATreatment.dart"; +import RustTreatment from "!!raw-loader!./rust/selectingATreatment.rs"; +import LiquidTreatment from "!!raw-loader!./liquid/selectingATreatment.liquid"; +import Vue3Treatment from "!!raw-loader!./vue3/selectingATreatment.js"; + @@ -83,13 +94,13 @@ use the `TreatmentFunction` component and the ternary operator, like so: - + {SwiftSelectingATreatment} - + @@ -213,21 +224,21 @@ will be rendered with the following properties: - + {JavaSelectingATreatment} - + - + {GoSelectingATreatment} - + @@ -253,4 +264,40 @@ will be rendered with the following properties: + +{AngularTreatment} + + + +{AndroidTreatment} + + + +{KotlinTreatment} + + + +{CppTreatment} + + + +{ScalaTreatment} + + + +{ElixirTreatment} + + + +{DartTreatment} + + + +{RustTreatment} + + + +{LiquidTreatment} + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/android/selectingATreatment.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/android/selectingATreatment.kt new file mode 100644 index 00000000..e0500b1f --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/android/selectingATreatment.kt @@ -0,0 +1,6 @@ +val treatment = context.getTreatment("exp_test_experiment") +if (treatment == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/angular/selectingATreatment.ts b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/angular/selectingATreatment.ts new file mode 100644 index 00000000..ebf101a1 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/angular/selectingATreatment.ts @@ -0,0 +1,6 @@ +const treatment = absmartly.treatment('exp_test_experiment'); +if (treatment === 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp new file mode 100644 index 00000000..a24e093c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp @@ -0,0 +1,6 @@ +int treatment = context.treatment("exp_test_experiment"); +if (treatment == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/dart/selectingATreatment.dart b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/dart/selectingATreatment.dart new file mode 100644 index 00000000..13d90d6d --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/dart/selectingATreatment.dart @@ -0,0 +1,7 @@ +int treatment = context.getTreatment("exp_test_experiment"); + +if (treatment == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/elixir/selectingATreatment.ex b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/elixir/selectingATreatment.ex new file mode 100644 index 00000000..471bf047 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/elixir/selectingATreatment.ex @@ -0,0 +1,7 @@ +variant = Context.treatment(context, "exp_test_experiment") + +if variant == 0 do + # user is in control group (variant 0) +else + # user is in treatment group +end diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/kotlin/selectingATreatment.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/kotlin/selectingATreatment.kt new file mode 100644 index 00000000..ebf14ccd --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/kotlin/selectingATreatment.kt @@ -0,0 +1,5 @@ +if (context.getTreatment("exp_test_experiment") == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/liquid/selectingATreatment.liquid b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/liquid/selectingATreatment.liquid new file mode 100644 index 00000000..2722f3ff --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/liquid/selectingATreatment.liquid @@ -0,0 +1,7 @@ +{% assign variant = 'exp_test_experiment' | absmartly_treatment %} + +{% if variant == 0 %} + +{% elsif variant == 1 %} + +{% endif %} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/rust/selectingATreatment.rs b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/rust/selectingATreatment.rs new file mode 100644 index 00000000..b7166ac7 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/rust/selectingATreatment.rs @@ -0,0 +1,7 @@ +let variant = context.treatment("exp_test_experiment"); + +if variant == 0 { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/scala/selectingATreatment.scala b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/scala/selectingATreatment.scala new file mode 100644 index 00000000..a5a71f37 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/scala/selectingATreatment.scala @@ -0,0 +1,7 @@ +val variant = context.treatment("exp_test_experiment") + +if (variant == 0) { + // user is in control group (variant 0) +} else { + // user is in treatment group +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js new file mode 100644 index 00000000..28ee38f0 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js @@ -0,0 +1,11 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +const treatment = $absmartly.treatment("exp_test_experiment"); + +if (treatment === 0) { + // user is in control group (variant 0) +} else if (treatment === 1) { + // user is in treatment group (variant 1) +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx index 11eeafaa..71a9e464 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx @@ -28,6 +28,17 @@ import RubySelectingAVariable from "!!raw-loader!./ruby/selectingAVariable.rb"; import FlutterSelectingAVariable from "!!raw-loader!./flutter/selectingAVariable.dart"; +import AngularVariable from "!!raw-loader!./angular/selectingAVariable.ts"; +import AndroidVariable from "!!raw-loader!./android/selectingAVariable.kt"; +import KotlinVariable from "!!raw-loader!./kotlin/selectingAVariable.kt"; +import CppVariable from "!!raw-loader!./cpp/selectingAVariable.cpp"; +import ScalaVariable from "!!raw-loader!./scala/selectingAVariable.scala"; +import ElixirVariable from "!!raw-loader!./elixir/selectingAVariable.ex"; +import DartVariable from "!!raw-loader!./dart/selectingAVariable.dart"; +import RustVariable from "!!raw-loader!./rust/selectingAVariable.rs"; +import LiquidVariable from "!!raw-loader!./liquid/selectingAVariable.liquid"; +import Vue3Variable from "!!raw-loader!./vue3/selectingAVariable.js"; + Treatment variables are a powerful tool that can be used to automate your experiments. When creating an experiment on your ABsmartly Web Console, you can give each variant a set of variables. You can then use your context to pull the values of these variables @@ -84,11 +95,11 @@ store the variables in your component's state there. - + {SwiftSelectingAVariable} - + @@ -102,17 +113,17 @@ store the variables in your component's state there. - + {JavaSelectingAVariable} - + - + {GoSelectingAVariable} - + @@ -138,6 +149,42 @@ store the variables in your component's state there. + +{AngularVariable} + + + +{AndroidVariable} + + + +{KotlinVariable} + + + +{CppVariable} + + + +{ScalaVariable} + + + +{ElixirVariable} + + + +{DartVariable} + + + +{RustVariable} + + + +{LiquidVariable} + + :::caution diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/android/selectingAVariable.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/android/selectingAVariable.kt new file mode 100644 index 00000000..0a42160c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/android/selectingAVariable.kt @@ -0,0 +1,3 @@ +val defaultButtonColorValue = "red" + +val buttonColor = context.getVariableValue("button.color", defaultButtonColorValue) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/angular/selectingAVariable.ts b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/angular/selectingAVariable.ts new file mode 100644 index 00000000..45699f5a --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/angular/selectingAVariable.ts @@ -0,0 +1 @@ +const buttonColor = absmartly.variableValue('button_color', 'red'); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp new file mode 100644 index 00000000..583283aa --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp @@ -0,0 +1,3 @@ +nlohmann::json defaultButtonColorValue = "red"; + +nlohmann::json buttonColor = context.variable_value("button.color", defaultButtonColorValue); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/dart/selectingAVariable.dart b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/dart/selectingAVariable.dart new file mode 100644 index 00000000..d0c1b4c7 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/dart/selectingAVariable.dart @@ -0,0 +1,3 @@ +var defaultButtonColorValue = "red"; + +var buttonColor = context.getVariableValue("button.color", defaultButtonColorValue); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/elixir/selectingAVariable.ex b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/elixir/selectingAVariable.ex new file mode 100644 index 00000000..de19fd2e --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/elixir/selectingAVariable.ex @@ -0,0 +1,3 @@ +default_button_color_value = "red" + +button_color = Context.variable_value(context, "button.color", default_button_color_value) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/kotlin/selectingAVariable.kt b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/kotlin/selectingAVariable.kt new file mode 100644 index 00000000..0a42160c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/kotlin/selectingAVariable.kt @@ -0,0 +1,3 @@ +val defaultButtonColorValue = "red" + +val buttonColor = context.getVariableValue("button.color", defaultButtonColorValue) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/liquid/selectingAVariable.liquid b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/liquid/selectingAVariable.liquid new file mode 100644 index 00000000..ed11fc59 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/liquid/selectingAVariable.liquid @@ -0,0 +1,3 @@ +{% assign button_color = 'button.color' | absmartly_variable: 'red' %} + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/rust/selectingAVariable.rs b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/rust/selectingAVariable.rs new file mode 100644 index 00000000..7f5d9c36 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/rust/selectingAVariable.rs @@ -0,0 +1,3 @@ +let default_button_color_value = "red"; + +let button_color = context.variable_value("button.color", default_button_color_value); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/scala/selectingAVariable.scala b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/scala/selectingAVariable.scala new file mode 100644 index 00000000..5bdb7408 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/scala/selectingAVariable.scala @@ -0,0 +1,3 @@ +val defaultButtonColorValue = "red" + +val buttonColor = context.variableValue("button.color", defaultButtonColorValue) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js new file mode 100644 index 00000000..c180ae1c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js @@ -0,0 +1,10 @@ +import { inject } from "vue"; + +const $absmartly = inject("$absmartly"); + +const defaultButtonColorValue = "red"; + +const buttonColor = $absmartly.variableValue( + "button.color", + defaultButtonColorValue +); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx index 22f82ab0..a56b7915 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx @@ -74,6 +74,59 @@ import FlutterExtraUnits from "!!raw-loader!./flutter/extraUnits.dart" import FlutterRefresh from "!!raw-loader!./flutter/refreshWithFreshData.dart" import FlutterRefreshManual from "!!raw-loader!./flutter/refreshWithRefresh.dart" +import AngularSync from "!!raw-loader!./angular/sync.ts"; +import AngularAsync from "!!raw-loader!./angular/async.ts"; +import AngularExtraUnits from "!!raw-loader!./angular/extraUnits.ts"; +import AngularRefreshData from "!!raw-loader!./angular/refreshWithFreshData.ts"; +import AngularRefreshMethod from "!!raw-loader!./angular/refreshWithRefreshMethod.ts"; + +import AndroidSync from "!!raw-loader!./android/sync.kt"; +import AndroidAsync from "!!raw-loader!./android/async.kt"; +import AndroidExtraUnits from "!!raw-loader!./android/extraUnits.kt"; +import AndroidRefreshData from "!!raw-loader!./android/refreshWithFreshData.kt"; +import AndroidRefreshMethod from "!!raw-loader!./android/refreshWithRefreshMethod.kt"; + +import KotlinSync from "!!raw-loader!./kotlin/sync.kt"; +import KotlinAsync from "!!raw-loader!./kotlin/async.kt"; +import KotlinExtraUnits from "!!raw-loader!./kotlin/extraUnits.kt"; +import KotlinRefreshData from "!!raw-loader!./kotlin/refreshWithFreshData.kt"; +import KotlinRefreshMethod from "!!raw-loader!./kotlin/refreshWithRefreshMethod.kt"; + +import CppSync from "!!raw-loader!./cpp/sync.cpp"; +import CppAsync from "!!raw-loader!./cpp/async.cpp"; +import CppExtraUnits from "!!raw-loader!./cpp/extraUnits.cpp"; +import CppRefreshData from "!!raw-loader!./cpp/refreshWithFreshData.cpp"; +import CppRefreshMethod from "!!raw-loader!./cpp/refreshWithRefreshMethod.cpp"; + +import ScalaSync from "!!raw-loader!./scala/sync.scala"; +import ScalaAsync from "!!raw-loader!./scala/async.scala"; +import ScalaExtraUnits from "!!raw-loader!./scala/extraUnits.scala"; +import ScalaRefreshData from "!!raw-loader!./scala/refreshWithFreshData.scala"; +import ScalaRefreshMethod from "!!raw-loader!./scala/refreshWithRefreshMethod.scala"; + +import ElixirSync from "!!raw-loader!./elixir/sync.ex"; +import ElixirAsync from "!!raw-loader!./elixir/async.ex"; +import ElixirExtraUnits from "!!raw-loader!./elixir/extraUnits.ex"; +import ElixirRefreshData from "!!raw-loader!./elixir/refreshWithFreshData.ex"; +import ElixirRefreshMethod from "!!raw-loader!./elixir/refreshWithRefreshMethod.ex"; + +import DartSync from "!!raw-loader!./dart/sync.dart"; +import DartAsync from "!!raw-loader!./dart/async.dart"; +import DartExtraUnits from "!!raw-loader!./dart/extraUnits.dart"; +import DartRefreshData from "!!raw-loader!./dart/refreshWithFreshData.dart"; +import DartRefreshMethod from "!!raw-loader!./dart/refreshWithRefreshMethod.dart"; + +import RustSync from "!!raw-loader!./rust/sync.rs"; +import RustAsync from "!!raw-loader!./rust/async.rs"; +import RustExtraUnits from "!!raw-loader!./rust/extraUnits.rs"; +import RustRefreshData from "!!raw-loader!./rust/refreshWithFreshData.rs"; +import RustRefreshMethod from "!!raw-loader!./rust/refreshWithRefreshMethod.rs"; + +import LiquidSync from "!!raw-loader!./liquid/sync.rb"; +import LiquidPrefetched from "!!raw-loader!./liquid/prefetchedData.rb"; +import LiquidExtraUnits from "!!raw-loader!./liquid/extraUnits.rb"; +import LiquidRefresh from "!!raw-loader!./liquid/refresh.rb"; + In order to start linking your experiments from the Web Console to your application, you will need to create a context. When you instantiate a context, you should pass all known characteristics of the current user. These @@ -624,4 +677,220 @@ create a new context instead. The `setUnit()` and + + +#### Synchronously + +{AngularSync} + +#### Asynchronously + +{AngularAsync} + +#### Setting Extra Units + +{AngularExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{AngularRefreshData} + +#### Refreshing the Context with the refresh method + +{AngularRefreshMethod} + + + + + +#### Synchronously + +{AndroidSync} + +#### Asynchronously + +{AndroidAsync} + +#### Setting Extra Units + +{AndroidExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{AndroidRefreshData} + +#### Refreshing the Context with the refresh method + +{AndroidRefreshMethod} + + + + + +#### Synchronously + +{KotlinSync} + +#### Asynchronously + +{KotlinAsync} + +#### Setting Extra Units + +{KotlinExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{KotlinRefreshData} + +#### Refreshing the Context with the refresh method + +{KotlinRefreshMethod} + + + + + +#### Synchronously + +{CppSync} + +#### Asynchronously + +{CppAsync} + +#### Setting Extra Units + +{CppExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{CppRefreshData} + +#### Refreshing the Context with the refresh method + +{CppRefreshMethod} + + + + + +#### Synchronously + +{ScalaSync} + +#### Asynchronously + +{ScalaAsync} + +#### Setting Extra Units + +{ScalaExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{ScalaRefreshData} + +#### Refreshing the Context with the refresh method + +{ScalaRefreshMethod} + + + + + +#### Synchronously + +{ElixirSync} + +#### Asynchronously + +{ElixirAsync} + +#### Setting Extra Units + +{ElixirExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{ElixirRefreshData} + +#### Refreshing the Context with the refresh method + +{ElixirRefreshMethod} + + + + + +#### Synchronously + +{DartSync} + +#### Asynchronously + +{DartAsync} + +#### Setting Extra Units + +{DartExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{DartRefreshData} + +#### Refreshing the Context with the refresh method + +{DartRefreshMethod} + + + + + +#### Synchronously + +{RustSync} + +#### Asynchronously + +{RustAsync} + +#### Setting Extra Units + +{RustExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{RustRefreshData} + +#### Refreshing the Context with the refresh method + +{RustRefreshMethod} + + + + + +#### Synchronously + +{LiquidSync} + +#### With Prefetched Data + +{LiquidPrefetched} + +#### Setting Extra Units + +{LiquidExtraUnits} + +#### Refreshing the Context with Fresh Experiment Data + +{LiquidRefresh} + +#### Refreshing the Context with the refresh method + +{LiquidRefresh} + + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/async.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/async.kt new file mode 100644 index 00000000..794b552d --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/async.kt @@ -0,0 +1,8 @@ +val contextConfig = ContextConfig.create() + .setUnit("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8") + +sdk.createContext(contextConfig) + .waitUntilReadyAsync() + .thenAccept { ctx -> + println("context ready!") + } diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/extraUnits.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/extraUnits.kt new file mode 100644 index 00000000..f365dc0d --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/extraUnits.kt @@ -0,0 +1,5 @@ +context.setUnit("db_user_id", "1000013") + +context.setUnits(mapOf( + "db_user_id" to "1000013" +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithFreshData.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithFreshData.kt new file mode 100644 index 00000000..01168d52 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithFreshData.kt @@ -0,0 +1,3 @@ +val contextConfig = ContextConfig.create() + .setUnit("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8") + .setRefreshInterval(TimeUnit.HOURS.toMillis(4)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithRefreshMethod.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithRefreshMethod.kt new file mode 100644 index 00000000..a6059257 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/refreshWithRefreshMethod.kt @@ -0,0 +1 @@ +context.refresh() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/sync.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/sync.kt new file mode 100644 index 00000000..4de37900 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/android/sync.kt @@ -0,0 +1,5 @@ +val contextConfig = ContextConfig.create() + .setUnit("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8") + +val context = sdk.createContext(contextConfig) + .waitUntilReady() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/async.ts b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/async.ts new file mode 100644 index 00000000..614c1cef --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/async.ts @@ -0,0 +1,18 @@ +import { Component, inject } from '@angular/core'; +import { ABSmartlyService } from '@absmartly/angular-sdk'; + +@Component({ + selector: 'app-root', + template: ` + @if (absmartly.loading()) { +

Loading experiments...

+ } @else if (absmartly.failed()) { +

Failed to load experiments

+ } @else { + + } + `, +}) +export class AppComponent { + absmartly = inject(ABSmartlyService); +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/extraUnits.ts b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/extraUnits.ts new file mode 100644 index 00000000..414cf290 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/extraUnits.ts @@ -0,0 +1 @@ +absmartly.setUnit('db_user_id', '1000013'); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithFreshData.ts b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithFreshData.ts new file mode 100644 index 00000000..b7a26e78 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithFreshData.ts @@ -0,0 +1,8 @@ +provideABSmartly({ + endpoint: 'https://your-company.absmartly.io/v1', + apiKey: 'YOUR-API-KEY', + environment: 'development', + application: 'website', + units: { session_id: '5ebf06d8cb5d8137290c4abb64155584fbdb64d8' }, + refreshPeriod: 14400000, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithRefreshMethod.ts b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithRefreshMethod.ts new file mode 100644 index 00000000..b4225675 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/refreshWithRefreshMethod.ts @@ -0,0 +1 @@ +await absmartly.refresh(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/sync.ts b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/sync.ts new file mode 100644 index 00000000..b834d2eb --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/angular/sync.ts @@ -0,0 +1,16 @@ +import { Component, inject } from '@angular/core'; +import { ABSmartlyService } from '@absmartly/angular-sdk'; + +@Component({ + selector: 'app-root', + template: ` + @if (absmartly.loading()) { +

Loading experiments...

+ } @else { + + } + `, +}) +export class AppComponent { + absmartly = inject(ABSmartlyService); +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp new file mode 100644 index 00000000..54ea37e8 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp @@ -0,0 +1,10 @@ +absmartly::ContextConfig config; +config.units = { + {"session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8"}, + {"user_id", "123456"} +}; + +absmartly::ContextData data = nlohmann::json::parse(json_response) + .get(); + +absmartly::Context context(config, data); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp new file mode 100644 index 00000000..e41579ce --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp @@ -0,0 +1,5 @@ +context.set_unit("db_user_id", "1000013"); + +context.set_units({ + {"db_user_id", "1000013"} +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp new file mode 100644 index 00000000..80fb3460 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp @@ -0,0 +1,8 @@ +absmartly::ContextConfig config; +config.units = { + {"session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8"}, + {"user_id", "123456"} +}; +config.refresh_period = 4 * 60 * 60 * 1000; // 4 hours in milliseconds + +absmartly::Context context(config, data); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp new file mode 100644 index 00000000..e8be9aeb --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp @@ -0,0 +1,4 @@ +absmartly::ContextData fresh_data = nlohmann::json::parse(fresh_json_response) + .get(); + +context.refresh(fresh_data); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp new file mode 100644 index 00000000..1d13b504 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp @@ -0,0 +1,11 @@ +absmartly::ContextConfig config; +config.units = { + {"session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8"}, + {"user_id", "123456"} +}; + +absmartly::ContextData data = nlohmann::json::parse(json_response) + .get(); + +absmartly::Context context(config, data); +assert(context.is_ready()); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/async.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/async.dart new file mode 100644 index 00000000..671b2426 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/async.dart @@ -0,0 +1,9 @@ +final ContextConfig contextConfig = ContextConfig.create() + .setUnit("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8"); + +final Context context = await sdk.createContext(contextConfig) + .waitUntilReady(); + +if (context.isReady()) { + print("context ready!"); +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/extraUnits.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/extraUnits.dart new file mode 100644 index 00000000..f0f2e956 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/extraUnits.dart @@ -0,0 +1,5 @@ +context.setUnit("db_user_id", "1000013"); + +context.setUnits({ + "db_user_id": "1000013", +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithFreshData.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithFreshData.dart new file mode 100644 index 00000000..6c2c8c56 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithFreshData.dart @@ -0,0 +1,3 @@ +final ContextConfig contextConfig = ContextConfig.create() + .setUnit("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8") + .setRefreshInterval(4 * 60 * 60 * 1000); // every 4 hours diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithRefreshMethod.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithRefreshMethod.dart new file mode 100644 index 00000000..35f3dcdb --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/refreshWithRefreshMethod.dart @@ -0,0 +1 @@ +await context.refresh(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/sync.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/sync.dart new file mode 100644 index 00000000..d709a387 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/dart/sync.dart @@ -0,0 +1,5 @@ +final ContextConfig contextConfig = ContextConfig.create() + .setUnit("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8"); + +final Context context = sdk.createContext(contextConfig) + .waitUntilReady(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/async.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/async.ex new file mode 100644 index 00000000..a52acb58 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/async.ex @@ -0,0 +1,7 @@ +alias ABSmartly.{SDK, Context} + +units = %{"session_id" => "5ebf06d8cb5d8137290c4abb64155584fbdb64d8"} + +{:ok, context} = SDK.create_context_async(sdk, units) + +Context.wait_until_ready(context) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/extraUnits.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/extraUnits.ex new file mode 100644 index 00000000..75c1a9f7 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/extraUnits.ex @@ -0,0 +1,5 @@ +Context.set_unit(context, "db_user_id", "1000013") + +Context.set_units(context, %{ + "db_user_id" => "1000013" +}) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithFreshData.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithFreshData.ex new file mode 100644 index 00000000..0ad432e1 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithFreshData.ex @@ -0,0 +1,3 @@ +new_data = %{"experiments" => [...]} + +:ok = Context.refresh(context, new_data) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithRefreshMethod.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithRefreshMethod.ex new file mode 100644 index 00000000..4f25590c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/refreshWithRefreshMethod.ex @@ -0,0 +1 @@ +Context.refresh(context) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/sync.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/sync.ex new file mode 100644 index 00000000..054c4cf9 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/elixir/sync.ex @@ -0,0 +1,7 @@ +alias ABSmartly.{SDK, Context} + +units = %{"session_id" => "5ebf06d8cb5d8137290c4abb64155584fbdb64d8"} + +{:ok, context} = SDK.create_context(sdk, units) + +true = Context.is_ready?(context) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt new file mode 100644 index 00000000..a48474e5 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt @@ -0,0 +1,11 @@ +val context = Context( + data = ContextData(), + units = mutableMapOf( + "session_id" to "bf06d8cb5d8137290c4abb64155584fbdb64d8", + "user_id" to "123456", + ), + options = ContextOptions(), + startReady = false, +) + +context.setDataAndReady(contextData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/extraUnits.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/extraUnits.kt new file mode 100644 index 00000000..9d309126 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/extraUnits.kt @@ -0,0 +1 @@ +context.setUnit("db_user_id", "1000013") diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt new file mode 100644 index 00000000..55c1d96b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt @@ -0,0 +1,2 @@ +val freshData: ContextData = fetchFreshContextData() +context.refresh(freshData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt new file mode 100644 index 00000000..55c1d96b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt @@ -0,0 +1,2 @@ +val freshData: ContextData = fetchFreshContextData() +context.refresh(freshData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt new file mode 100644 index 00000000..1030eda0 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt @@ -0,0 +1,11 @@ +val units = mutableMapOf( + "session_id" to "bf06d8cb5d8137290c4abb64155584fbdb64d8", + "user_id" to "123456", +) +val options = ContextOptions() + +val context = Context( + data = contextData, + units = units, + options = options, +) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/extraUnits.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/extraUnits.rb new file mode 100644 index 00000000..d77199f7 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/extraUnits.rb @@ -0,0 +1 @@ +context.set_unit('db_user_id', '1000013') diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/prefetchedData.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/prefetchedData.rb new file mode 100644 index 00000000..6812669e --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/prefetchedData.rb @@ -0,0 +1,10 @@ +data = sdk.get_client.get_context( + units: { session_id: session[:id] } +) + +context = sdk.create_context_with( + { units: { session_id: session[:id] } }, + data +) + +drop = ABSmartly::Liquid::Drop.new(context) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/refresh.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/refresh.rb new file mode 100644 index 00000000..edf48b77 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/refresh.rb @@ -0,0 +1 @@ +context.refresh diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/sync.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/sync.rb new file mode 100644 index 00000000..06767a22 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/liquid/sync.rb @@ -0,0 +1,10 @@ +context = sdk.create_context( + units: { + session_id: session[:id], + customer_id: current_customer&.id + } +) + +context.ready + +drop = ABSmartly::Liquid::Drop.new(context) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs new file mode 100644 index 00000000..6f787e70 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs @@ -0,0 +1,6 @@ +let units = [("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8")]; + +let context_data: ContextData = serde_json::from_str(&api_response)?; + +let mut context = sdk.create_context_with(units, context_data, None); +assert!(context.is_ready()); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/extraUnits.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/extraUnits.rs new file mode 100644 index 00000000..cec9f984 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/extraUnits.rs @@ -0,0 +1,6 @@ +context.set_unit("db_user_id", "1000013")?; + +context.set_units([ + ("db_user_id", "1000013"), + ("user_type", "premium"), +])?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithFreshData.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithFreshData.rs new file mode 100644 index 00000000..460a8248 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithFreshData.rs @@ -0,0 +1,3 @@ +let fresh_data: ContextData = serde_json::from_str(&api_response)?; + +context.refresh(fresh_data); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithRefreshMethod.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithRefreshMethod.rs new file mode 100644 index 00000000..460a8248 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/refreshWithRefreshMethod.rs @@ -0,0 +1,3 @@ +let fresh_data: ContextData = serde_json::from_str(&api_response)?; + +context.refresh(fresh_data); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs new file mode 100644 index 00000000..c53811a6 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs @@ -0,0 +1,3 @@ +let units = [("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8")]; + +let mut context = sdk.create_context(units, None).await?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/async.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/async.scala new file mode 100644 index 00000000..0ac420f7 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/async.scala @@ -0,0 +1,11 @@ +import scala.concurrent.Await +import scala.concurrent.duration._ + +val units = Map( + "session_id" -> "5ebf06d8cb5d8137290c4abb64155584fbdb64d8", + "user_id" -> "123456" +) + +val contextFuture = sdk.createContext(units) + +val context = Await.result(contextFuture, 5.seconds) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/extraUnits.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/extraUnits.scala new file mode 100644 index 00000000..6b50abfe --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/extraUnits.scala @@ -0,0 +1,6 @@ +context.setUnit("db_user_id", "1000013") + +context.setUnits(Map( + "db_user_id" -> "1000013", + "user_type" -> "premium" +)) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala new file mode 100644 index 00000000..fe9da143 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala @@ -0,0 +1,2 @@ +val newData = sdk.fetchContextData() +context.refresh(newData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala new file mode 100644 index 00000000..fe9da143 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala @@ -0,0 +1,2 @@ +val newData = sdk.fetchContextData() +context.refresh(newData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala new file mode 100644 index 00000000..a33f43a3 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala @@ -0,0 +1,11 @@ +import scala.concurrent.Await +import scala.concurrent.duration._ + +val units = Map( + "session_id" -> "5ebf06d8cb5d8137290c4abb64155584fbdb64d8", + "user_id" -> "123456" +) + +val contextData = sdk.fetchContextData() + +val context = sdk.createContextWith(units, contextData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx index 92724748..0fbb71b3 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx @@ -19,6 +19,17 @@ import PHPHandleEvent from "!!raw-loader!./php/handleEvent.php"; import FlutterCustomEventLogger from "!!raw-loader!./flutter/customEventLogger.dart"; import FlutterUsage from "!!raw-loader!./flutter/usage.dart"; +import AngularEventLogger from "!!raw-loader!./angular/customEventLogger.ts"; +import AndroidEventLogger from "!!raw-loader!./android/customEventLogger.kt"; +import KotlinEventLogger from "!!raw-loader!./kotlin/customEventLogger.kt"; +import CppEventLogger from "!!raw-loader!./cpp/customEventLogger.cpp"; +import ScalaEventLogger from "!!raw-loader!./scala/customEventLogger.scala"; +import ElixirEventLogger from "!!raw-loader!./elixir/customEventLogger.ex"; +import DartEventLogger from "!!raw-loader!./dart/customEventLogger.dart"; +import RustEventLogger from "!!raw-loader!./rust/customEventLogger.rs"; +import LiquidEventLogger from "!!raw-loader!./liquid/customEventLogger.rb"; +import Vue3EventLogger from "!!raw-loader!./vue3/customEventLogger.js"; + @@ -144,7 +155,7 @@ The ABsmartly SDK can be instantiated with an event logger used for all contexts. The example below illustrates this with the implementation of the default event logger, used if none is specified. -{VueCustomEventLogger} +{Vue3EventLogger} The event data depends on the type of event. Currently, the SDK logs the following events: @@ -277,4 +288,58 @@ The data parameter depends on the type of event. Currently, the SDK logs the fol + + +{AngularEventLogger} + + + + + +{AndroidEventLogger} + + + + + +{KotlinEventLogger} + + + + + +{CppEventLogger} + + + + + +{ScalaEventLogger} + + + + + +{ElixirEventLogger} + + + + + +{DartEventLogger} + + + + + +{RustEventLogger} + + + + + +{LiquidEventLogger} + + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/android/customEventLogger.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/android/customEventLogger.kt new file mode 100644 index 00000000..235180ea --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/android/customEventLogger.kt @@ -0,0 +1,27 @@ +class CustomEventLogger : ContextEventLogger { + override fun handleEvent(context: Context, event: ContextEventLogger.EventType, data: Any?) { + when (event) { + ContextEventLogger.EventType.Exposure -> { + val exposure = data as Exposure + println("exposed to experiment ${exposure.name}") + } + ContextEventLogger.EventType.Goal -> { + val goal = data as GoalAchievement + println("goal tracked: ${goal.name}") + } + ContextEventLogger.EventType.Error -> { + println("error: $data") + } + ContextEventLogger.EventType.Publish, + ContextEventLogger.EventType.Ready, + ContextEventLogger.EventType.Refresh, + ContextEventLogger.EventType.Close -> {} + } + } +} + +val sdkConfig = ABsmartlyConfig.create() +sdkConfig.setContextEventLogger(CustomEventLogger()) + +val contextConfig = ContextConfig.create() +contextConfig.setEventLogger(CustomEventLogger()) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/angular/customEventLogger.ts b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/angular/customEventLogger.ts new file mode 100644 index 00000000..573f81ea --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/angular/customEventLogger.ts @@ -0,0 +1,25 @@ +provideABSmartly({ + endpoint: 'https://your-company.absmartly.io/v1', + apiKey: 'YOUR-API-KEY', + environment: 'development', + application: 'website', + units: { session_id: 'abc123' }, + eventLogger: (context, eventName, data) => { + switch (eventName) { + case 'exposure': + console.log('Exposed to experiment:', data.name); + break; + case 'goal': + console.log('Goal tracked:', data.name); + break; + case 'error': + console.error('SDK error:', data); + break; + case 'ready': + case 'refresh': + case 'publish': + case 'finalize': + break; + } + }, +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp new file mode 100644 index 00000000..b3db2566 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp @@ -0,0 +1,25 @@ +class CustomEventHandler : public absmartly::ContextEventHandler { +public: + void handle_event(absmartly::Context& context, + const std::string& event_type, + const nlohmann::json& data) override { + if (event_type == "exposure") { + std::cout << "Exposed to experiment: " << data["name"] << std::endl; + } else if (event_type == "goal") { + std::cout << "Goal tracked: " << data["name"] << std::endl; + } else if (event_type == "error") { + std::cerr << "Error: " << data.dump() << std::endl; + } else if (event_type == "ready") { + std::cout << "Context ready" << std::endl; + } else if (event_type == "refresh") { + std::cout << "Context refreshed" << std::endl; + } else if (event_type == "publish") { + std::cout << "Context published" << std::endl; + } else if (event_type == "finalize") { + std::cout << "Context finalized" << std::endl; + } + } +}; + +auto handler = std::make_shared(); +absmartly::Context context(config, data, handler); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/dart/customEventLogger.dart b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/dart/customEventLogger.dart new file mode 100644 index 00000000..a8d64ac3 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/dart/customEventLogger.dart @@ -0,0 +1,23 @@ +class CustomEventLogger implements ContextEventLogger { + @override + void handleEvent(Context context, EventType event, dynamic data) { + switch (event) { + case EventType.exposure: + final Exposure exposure = data; + print("exposed to experiment ${exposure.name}"); + break; + case EventType.goal: + final GoalAchievement goal = data; + print("goal tracked: ${goal.name}"); + break; + case EventType.error: + print("error: $data"); + break; + case EventType.publish: + case EventType.ready: + case EventType.refresh: + case EventType.close: + break; + } + } +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/elixir/customEventLogger.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/elixir/customEventLogger.ex new file mode 100644 index 00000000..8fb7432b --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/elixir/customEventLogger.ex @@ -0,0 +1,16 @@ +defmodule MyApp.CustomEventLogger do + @behaviour ABSmartly.ContextEventLogger + + @impl true + def handle_event(event_type, data) do + case event_type do + :error -> Logger.error("ABSmartly error: #{inspect(data)}") + :ready -> Logger.info("ABSmartly context ready") + :refresh -> Logger.info("ABSmartly context refreshed") + :publish -> Logger.info("ABSmartly events published") + :exposure -> Logger.info("ABSmartly exposure: #{inspect(data)}") + :goal -> Logger.info("ABSmartly goal tracked: #{inspect(data)}") + :close -> Logger.info("ABSmartly context closed") + end + end +end diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/kotlin/customEventLogger.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/kotlin/customEventLogger.kt new file mode 100644 index 00000000..d525d602 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/kotlin/customEventLogger.kt @@ -0,0 +1,24 @@ +class CustomEventLogger : ContextEventLogger { + override fun handleEvent(context: Context, type: ContextEventLogger.EventType, data: Any?) { + when (type) { + ContextEventLogger.EventType.Exposure -> { + val exposure = data as Exposure + println("Exposed to experiment: ${exposure.name}") + } + ContextEventLogger.EventType.Goal -> { + val goal = data as GoalAchievement + println("Goal tracked: ${goal.name}") + } + ContextEventLogger.EventType.Error -> { + println("Error: $data") + } + ContextEventLogger.EventType.Publish -> { + val event = data as PublishEvent + println("Published ${event.exposures?.size ?: 0} exposures") + } + ContextEventLogger.EventType.Ready, + ContextEventLogger.EventType.Refresh, + ContextEventLogger.EventType.Close -> {} + } + } +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/liquid/customEventLogger.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/liquid/customEventLogger.rb new file mode 100644 index 00000000..da2e1d48 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/liquid/customEventLogger.rb @@ -0,0 +1,26 @@ +event_logger = ->(context, event_name, data) { + case event_name + when 'exposure' + Rails.logger.info "ABsmartly exposure: #{data[:name]}" + when 'goal' + Rails.logger.info "ABsmartly goal: #{data[:name]}" + when 'error' + Rails.logger.error "ABsmartly error: #{data}" + when 'ready' + Rails.logger.info "ABsmartly context ready" + when 'refresh' + Rails.logger.info "ABsmartly context refreshed" + when 'publish' + Rails.logger.info "ABsmartly events published" + when 'close' + Rails.logger.info "ABsmartly context closed" + end +} + +sdk = ABSmartly::SDK.new( + endpoint: ENV['ABSMARTLY_ENDPOINT'], + api_key: ENV['ABSMARTLY_API_KEY'], + application: 'my-store', + environment: Rails.env, + event_logger: event_logger +) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/rust/customEventLogger.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/rust/customEventLogger.rs new file mode 100644 index 00000000..2b027044 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/rust/customEventLogger.rs @@ -0,0 +1,9 @@ +context.set_event_logger(Box::new(|ctx, event_type, data| { + match event_type { + "exposure" => println!("Exposure event"), + "goal" => println!("Goal tracked"), + "error" => eprintln!("Error: {:?}", data), + "ready" | "refresh" | "publish" | "finalize" => {} + _ => {} + } +})); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/scala/customEventLogger.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/scala/customEventLogger.scala new file mode 100644 index 00000000..fac866ea --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/scala/customEventLogger.scala @@ -0,0 +1,25 @@ +import com.absmartly.sdk.EventLogger +import io.circe.Json + +class CustomEventLogger extends EventLogger { + override def logEvent(eventType: String, data: Json): Unit = { + eventType match { + case "exposure" => + println(s"Exposure event: ${data.noSpaces}") + case "goal" => + println(s"Goal event: ${data.noSpaces}") + case "error" => + println(s"Error event: ${data.noSpaces}") + case "ready" => + println("Context ready") + case "refresh" => + println("Context refreshed") + case "publish" => + println("Events published") + case "close" => + println("Context finalized") + case _ => + println(s"Unknown event: $eventType") + } + } +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/vue3/customEventLogger.js b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/vue3/customEventLogger.js new file mode 100644 index 00000000..791f63cb --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/vue3/customEventLogger.js @@ -0,0 +1,14 @@ +app.use(absmartly.ABSmartlyVue, { + sdkOptions: { + endpoint: "https://sandbox-api.absmartly.com/v1", + apiKey: ABSMARTLY_API_KEY, + environment: "production", + application: "website", + eventLogger: (context, eventName, data) => { + if (eventName == "error") { + console.error(data); + } + }, + }, + /* ... */ +}); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx index b69a5c38..de6205dc 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/_import-and-initialize.mdx @@ -37,6 +37,18 @@ import RustImport from "!!raw-loader!./rust/initialize.rs"; import LiquidImport from "!!raw-loader!./liquid/initialize.liquid"; +import AngularImport from "!!raw-loader!./angular/import.ts"; + +import AndroidImport from "!!raw-loader!./android/import.kt"; + +import KotlinImport from "!!raw-loader!./kotlin/import.kt"; + +import CppImport from "!!raw-loader!./cpp/initialize.cpp"; + +import ScalaImport from "!!raw-loader!./scala/import.scala"; + +import ElixirImport from "!!raw-loader!./elixir/import.ex"; + Once the SDK is installed, it can be initialized in your project. :::info @@ -540,4 +552,101 @@ Once initialized, you can use ABsmartly treatments in your Liquid templates: + + +{AngularImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :----------------------------------- | :-------: | :-------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `string` | ✅ | `undefined` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| apiKey | `string` | ✅ | `undefined` | Your API key which can be found on the Web Console. | +| environment | `"production"` or `"development"` | ✅ | `undefined` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `string` | ✅ | `undefined` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| retries | `number` | ❌ | `5` | The number of retries before the SDK stops trying to connect. | +| timeout | `number` | ❌ | `3000` | An amount of time, in milliseconds, before the SDK will stop trying to connect. | +| eventLogger | `(context, eventName, data) => void` | ❌ | See [Using a Custom Event Logger](#using-a-custom-event-logger) below | A callback function which runs after SDK events. | + + + + + +{AndroidImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :-------------------------------- | :-------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `String` | ✅ | `null` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| apiKey | `String` | ✅ | `null` | Your API key which can be found on the Web Console. | +| environment | `String` | ✅ | `null` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `String` | ✅ | `null` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| retries | `int` | ❌ | `5` | The number of retries before the SDK stops trying to connect. | +| timeout | `int` | ❌ | `3000` | An amount of time, in milliseconds, before the SDK will stop trying to connect. | + + + + + +{KotlinImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :-------------------------------- | :-------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `String` | ✅ | `null` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| apiKey | `String` | ✅ | `null` | Your API key which can be found on the Web Console. | +| environment | `String` | ✅ | `null` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `String` | ✅ | `null` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | + + + + + +{CppImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :-------------------------------- | :-------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `std::string` | ✅ | `""` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| api_key | `std::string` | ✅ | `""` | Your API key which can be found on the Web Console. | +| environment | `std::string` | ✅ | `""` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `std::string` | ✅ | `""` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | + + + + + +{ScalaImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :-------------------------------- | :-------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `String` | ✅ | `null` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| apiKey | `String` | ✅ | `null` | Your API key which can be found on the Web Console. | +| environment | `String` | ✅ | `null` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `String` | ✅ | `null` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | + + + + + +{ElixirImport} + +**SDK Options** + +| Config | Type | Required? | Default | Description | +| :---------- | :-------- | :-------: | :-----: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| endpoint | `String` | ✅ | `nil` | The URL to your API endpoint. Most commonly `"your-company.absmartly.io"` | +| api_key | `String` | ✅ | `nil` | Your API key which can be found on the Web Console. | +| environment | `String` | ✅ | `nil` | The environment of the platform where the SDK is installed. Environments are created on the Web Console and should match the available environments in your infrastructure. | +| application | `String` | ✅ | `nil` | The name of the application where the SDK is installed. Applications are created on the Web Console and should match the applications where your experiments will be running. | +| retries | `Integer` | ❌ | `5` | Number of retry attempts for failed HTTP requests | +| timeout | `Integer` | ❌ | `3000` | Connection timeout in milliseconds | + + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt new file mode 100644 index 00000000..ae85de01 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt @@ -0,0 +1,14 @@ +import com.absmartly.sdk.* + +val clientConfig = ClientConfig.create() + .setEndpoint("https://your-company.absmartly.io/v1") + .setAPIKey("YOUR-API-KEY") + .setApplication("android-app") + .setEnvironment("production") + +val absmartlyClient = Client.create(clientConfig) + +val sdkConfig = ABsmartlyConfig.create() + .setClient(absmartlyClient) + +val sdk = ABsmartly.create(sdkConfig) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/angular/import.ts b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/angular/import.ts new file mode 100644 index 00000000..93f78567 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/angular/import.ts @@ -0,0 +1,15 @@ +import { provideABSmartly } from '@absmartly/angular-sdk'; + +export const appConfig = { + providers: [ + provideABSmartly({ + endpoint: 'https://your-company.absmartly.io/v1', + apiKey: process.env.ABSMARTLY_API_KEY, + environment: process.env.NODE_ENV, + application: process.env.APPLICATION_NAME, + units: { + session_id: '5ebf06d8cb5d8137290c4abb64155584fbdb64d8', + }, + }), + ], +}; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp new file mode 100644 index 00000000..5ddd3fe4 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +int main() { + std::string json_response = fetch_context_data(); + + absmartly::ContextData data = nlohmann::json::parse(json_response) + .get(); + + absmartly::ContextConfig config; + config.units = {{"session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8"}}; + + absmartly::Context context(config, data); +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/elixir/import.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/elixir/import.ex new file mode 100644 index 00000000..a4aeacc7 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/elixir/import.ex @@ -0,0 +1,8 @@ +alias ABSmartly.SDK + +{:ok, sdk} = SDK.new( + endpoint: "https://your-company.absmartly.io/v1", + api_key: System.get_env("ABSMARTLY_API_KEY"), + application: "website", + environment: "production" +) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt new file mode 100644 index 00000000..62c607ef --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt @@ -0,0 +1,14 @@ +import com.absmartly.sdk.* + +fun main() { + val contextData: ContextData = fetchContextData() + + val units = mutableMapOf("session_id" to "5ebf06d8cb5d8137290c4abb64155584fbdb64d8") + val options = ContextOptions(publishDelay = -1, refreshPeriod = 0) + + val context = Context( + data = contextData, + units = units, + options = options, + ) +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/scala/import.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/scala/import.scala new file mode 100644 index 00000000..ccc4bfb5 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/scala/import.scala @@ -0,0 +1,11 @@ +import com.absmartly.sdk.{SDK, SDKConfig} +import scala.concurrent.ExecutionContext.Implicits.global + +val config = SDKConfig( + endpoint = "https://your-company.absmartly.io/v1", + apiKey = "YOUR-API-KEY", + environment = "development", + application = "website" +) + +val sdk = new SDK(config) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx index ca9cf58c..d40ac460 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx @@ -34,6 +34,26 @@ import RubyGemInstall from "!!raw-loader!./ruby/gem.sh"; import FlutterInstall from "!!raw-loader!./flutter/install.yaml"; +import AngularInstall from "!!raw-loader!./angular/install.bash"; + +import AndroidInstall from "!!raw-loader!./android/install.gradle"; + +import KotlinInstall from "!!raw-loader!./kotlin/install.gradle"; + +import CppInstall from "!!raw-loader!./cpp/install.bash"; +import CppCMake from "!!raw-loader!./cpp/CMakeLists.txt"; + +import ScalaInstall from "!!raw-loader!./scala/build.sbt"; + +import ElixirInstall from "!!raw-loader!./elixir/install.ex"; + +import DartInstall from "!!raw-loader!./dart/install.yaml"; + +import RustInstall from "!!raw-loader!./rust/install.toml"; + +import LiquidGemfile from "!!raw-loader!./liquid/gemfile.rb"; +import LiquidBundle from "!!raw-loader!./liquid/bundle.bash"; + Once your Web Console is setup and you have created some experiments, you can install our SDKs through your package manager, a CDN or by directly importing it. @@ -269,4 +289,92 @@ To install the ABSmartly SDK, place the following in your `pubspec.yaml` and rep + + +{AngularInstall} + + + + + +:::info Compatibility +The ABsmartly Android SDK is compatible with Android 4.4 and later (API level 19+). +::: + +**Gradle** + +{AndroidInstall} + + + + + +**Gradle** + +{KotlinInstall} + + + + + +**Build from Source** + +{CppInstall} + +**CMake Integration** + +{CppCMake} + + + + + +**SBT** + +{ScalaInstall} + + + + + +:::info Compatibility +The ABsmartly Elixir SDK is compatible with Elixir 1.14+ and Erlang/OTP 24+. +::: + +Add to your `mix.exs` dependencies: + +{ElixirInstall} + + + + + +:::info Compatibility +The ABsmartly Dart SDK is compatible with Dart versions 2.18.6 and later. +::: + +Add to your `pubspec.yaml`: + +{DartInstall} + + + + + +Add to your `Cargo.toml`: + +{RustInstall} + + + + + +**Gemfile** + +{LiquidGemfile} + +{LiquidBundle} + + + diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/android/install.gradle b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/android/install.gradle new file mode 100644 index 00000000..e8dc77ab --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/android/install.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation 'com.absmartly.sdk:android-sdk:{VERSION}' +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/angular/install.bash b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/angular/install.bash new file mode 100644 index 00000000..3cfbefbd --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/angular/install.bash @@ -0,0 +1 @@ +npm install @absmartly/angular-sdk --save diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/CMakeLists.txt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/CMakeLists.txt new file mode 100644 index 00000000..5887dd38 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/CMakeLists.txt @@ -0,0 +1,10 @@ +include(FetchContent) + +FetchContent_Declare( + absmartly-sdk + GIT_REPOSITORY https://github.com/absmartly/cpp-sdk.git + GIT_TAG main +) +FetchContent_MakeAvailable(absmartly-sdk) + +target_link_libraries(your_target PRIVATE absmartly-sdk) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/install.bash b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/install.bash new file mode 100644 index 00000000..a4790140 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/cpp/install.bash @@ -0,0 +1,3 @@ +mkdir build && cd build +cmake .. +cmake --build . diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/dart/install.yaml b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/dart/install.yaml new file mode 100644 index 00000000..bd7065e1 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/dart/install.yaml @@ -0,0 +1 @@ + absmartly_dart: ^2.1.2 diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/elixir/install.ex b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/elixir/install.ex new file mode 100644 index 00000000..7c6d0adb --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/elixir/install.ex @@ -0,0 +1 @@ +{:absmartly, "~> 1.0"} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/kotlin/install.gradle b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/kotlin/install.gradle new file mode 100644 index 00000000..aa1bc0c6 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/kotlin/install.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation("com.absmartly:absmartly-sdk-kotlin:{VERSION}") +} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/bundle.bash b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/bundle.bash new file mode 100644 index 00000000..b67b3c47 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/bundle.bash @@ -0,0 +1 @@ +bundle install diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/gemfile.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/gemfile.rb new file mode 100644 index 00000000..879a1c93 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/liquid/gemfile.rb @@ -0,0 +1 @@ +gem 'absmartly-liquid-sdk' diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/rust/install.toml b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/rust/install.toml new file mode 100644 index 00000000..4815a171 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/rust/install.toml @@ -0,0 +1,2 @@ +[dependencies] +absmartly-sdk = "0.1" diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/scala/build.sbt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/scala/build.sbt new file mode 100644 index 00000000..a40f547c --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/scala/build.sbt @@ -0,0 +1 @@ +libraryDependencies += "com.absmartly" %% "absmartly-sdk" % "0.1.0" From 2d72397798541ad1dc6c22d0f7cf8aed66fabde7 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Tue, 24 Feb 2026 21:05:38 +0000 Subject: [PATCH 05/15] docs: update SDK index page with all 21 SDKs in horizontal layout --- docs/APIs-and-SDKs/SDK-Documentation/index.mdx | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/index.mdx b/docs/APIs-and-SDKs/SDK-Documentation/index.mdx index 075f4c90..834b9102 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/index.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/index.mdx @@ -5,22 +5,10 @@ SDKs. We currently support: -- [Java](https://www.github.com/absmartly/java-sdk) -- [Javascript](https://www.github.com/absmartly/javascript-sdk) -- [Swift](https://www.github.com/absmartly/swift-sdk) -- [React](https://www.github.com/absmartly/react-sdk) -- [Vue2](https://www.github.com/absmartly/vue2-sdk) -- [Vue3](https://www.github.com/absmartly/vue3-sdk) -- [PHP](https://www.github.com/absmartly/php-sdk) -- [.NET](https://www.github.com/absmartly/dotnet-sdk) -- [Ruby](https://www.github.com/absmartly/ruby-sdk) -- [Golang](https://www.github.com/absmartly/go-sdk) -- [Flutter/Dart](https://www.github.com/absmartly/flutter-sdk) -- [Python3](https://www.github.com/absmartly/python3-sdk) +[Java](https://www.github.com/absmartly/java-sdk) | [JavaScript](https://www.github.com/absmartly/javascript-sdk) | [Python](https://www.github.com/absmartly/python3-sdk) | [Go](https://www.github.com/absmartly/go-sdk) | [Ruby](https://www.github.com/absmartly/ruby-sdk) | [PHP](https://www.github.com/absmartly/php-sdk) | [.NET](https://www.github.com/absmartly/dotnet-sdk) | [Swift](https://www.github.com/absmartly/swift-sdk) | [Android](https://www.github.com/absmartly/android-sdk) | [Kotlin](https://www.github.com/absmartly/kotlin-sdk) | [Flutter](https://www.github.com/absmartly/flutter-sdk) | [Dart](https://www.github.com/absmartly/flutter-sdk) | [React](https://www.github.com/absmartly/react-sdk) | [Angular](https://www.github.com/absmartly/angular-sdk) | [Vue2](https://www.github.com/absmartly/vue2-sdk) | [Vue3](https://www.github.com/absmartly/vue3-sdk) | [Rust](https://www.github.com/absmartly/rust-sdk) | [Scala](https://www.github.com/absmartly/scala-sdk) | [Elixir](https://www.github.com/absmartly/elixir-sdk) | [C++](https://www.github.com/absmartly/cpp-sdk) | [Liquid (Shopify)](https://www.github.com/absmartly/liquid-sdk) Have a look at [our Github](https://github.com/absmartly) to see our current -SDKs and those which are still in development (here's looking at **you** Python -developers)! +SDKs and those which are still in development! :::note This guide assumes that you are already partnered with us and your Web Console From e72931029eefcf7d6a9675515fb5b6ab7682d6f6 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Wed, 25 Feb 2026 09:22:37 +0000 Subject: [PATCH 06/15] fix: wrap SDK tabs to multiple lines and separate Flutter from Dart - Add CSS flex-wrap to .tabs so all SDK tabs are visible without horizontal scrolling - Rename "Flutter/Dart" tab to "Flutter" across all 12 MDX files since Dart now has its own separate tab --- .../_setting-context-attributes.mdx | 2 +- .../Advanced/custom-assignments/_custom-assignments.mdx | 2 +- .../SDK-Documentation/Advanced/finalize/_finalize.mdx | 2 +- .../SDK-Documentation/Advanced/publish/_publish.mdx | 2 +- .../Advanced/tracking-goals/_tracking-goals.mdx | 2 +- .../basic-usage/overriding/_overriding.mdx | 2 +- .../SDK-Documentation/basic-usage/peeking/_peeking.mdx | 4 ++-- .../selecting-a-treatment/_selecting-a-treatment.mdx | 2 +- .../selecting-a-variable/_selecting-a-variable.mdx | 2 +- .../_create-new-context-request.mdx | 2 +- .../custom-event-logger/_custom-event-logger.mdx | 2 +- .../getting-started/install/_install.mdx | 2 +- src/scss/custom.scss | 8 ++++++++ 13 files changed, 21 insertions(+), 13 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx index 0fa0e113..0406dfad 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/_setting-context-attributes.mdx @@ -131,7 +131,7 @@ component. - + {FlutterSetAttributes} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx index 1d7ca18f..9c1fc539 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/_custom-assignments.mdx @@ -244,7 +244,7 @@ method. - + Sometimes it may be necessary to override the automatic selection of a variant. For example, if you wish to have your variant chosen based on data diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx index 9c0775f5..81a3e895 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/_finalize.mdx @@ -178,7 +178,7 @@ an error if any method that could generate an event is called. - + The `close()` method will ensure all events have been published to the ABsmartly collector, like `publish()`, and will also "seal" the context, throwing diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx index f98b131c..0bcdb96d 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/_publish.mdx @@ -132,7 +132,7 @@ methods. - + Sometimes it is necessary to ensure all events have been published to the ABsmartly collector, before proceeding. You can explicitly call the `publish()` method. diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx index f431cec9..d9ac9338 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/_tracking-goals.mdx @@ -87,7 +87,7 @@ data type and syntax for each are: {RubyTrackingGoals} - + {FlutterTrackingGoals} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx index 56615d34..bfa9f1e1 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/_overriding.mdx @@ -183,7 +183,7 @@ ready. - + During development, for example, it is useful to force a treatment for an experiment. This can be achieved with the `override()` and/or `overrides()` diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx index 57172e79..08f3100f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/_peeking.mdx @@ -158,7 +158,7 @@ provides a `peek_treatment()` method for that. - + Although generally not recommended, it is sometimes necessary to peek at a treatment or variable without triggering an exposure. The ABsmartly SDK @@ -276,7 +276,7 @@ provides a `peekTreatment()` method for that. - + {FlutterPeekAtVariable} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx index fa721036..62ed605f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/_selecting-a-treatment.mdx @@ -258,7 +258,7 @@ will be rendered with the following properties: - + {FlutterSelectingATreatment} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx index 71a9e464..dbd3063a 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/_selecting-a-variable.mdx @@ -143,7 +143,7 @@ store the variables in your component's state there. - + {FlutterSelectingAVariable} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx index a56b7915..1869d33f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx @@ -637,7 +637,7 @@ or - + #### Synchronously diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx index 0fbb71b3..0fde66dc 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/_custom-event-logger.mdx @@ -266,7 +266,7 @@ The data parameter depends on the type of event. Currently, the SDK logs the fol - + The ABsmartly SDK can be instantiated with an event logger used for all contexts. In addition, an event logger can be specified when creating a particular context in the `contextConfig`. diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx index d40ac460..0bd82b6e 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/install/_install.mdx @@ -276,7 +276,7 @@ ensure it is compatible with the latest Ruby version. - + :::info Compatibility The ABsmartly Flutter SDK is compatible with Dart versions diff --git a/src/scss/custom.scss b/src/scss/custom.scss index c95317ac..432ed200 100644 --- a/src/scss/custom.scss +++ b/src/scss/custom.scss @@ -29,6 +29,14 @@ --ifm-color-primary-lightest: #fafaff; } +.tabs { + flex-wrap: wrap; +} + +.tabs__item { + flex-shrink: 0; +} + .button { transition-property: transform, box-shadow; transition-duration: 0.5s; From a7e1ecdbae965d64e7def03e619050482dba5a16 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Wed, 25 Feb 2026 09:52:03 +0000 Subject: [PATCH 07/15] fix: add syntax highlighting for new SDK languages Add Prism language support for kotlin, elixir, rust, toml, cmake, and liquid. Override prism-include-languages.js to keep Prism global available for non-IIFE language components like liquid that reference it in hook callbacks. --- docusaurus.config.js | 7 +++++++ src/theme/prism-include-languages.js | 13 +++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/theme/prism-include-languages.js diff --git a/docusaurus.config.js b/docusaurus.config.js index 5d753f2a..7c23686e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -226,6 +226,13 @@ const config = { "ruby", "swift", "csharp", + "kotlin", + "elixir", + "rust", + "toml", + "cmake", + "markup-templating", + "liquid", ], }, }), diff --git a/src/theme/prism-include-languages.js b/src/theme/prism-include-languages.js new file mode 100644 index 00000000..7ce07b74 --- /dev/null +++ b/src/theme/prism-include-languages.js @@ -0,0 +1,13 @@ +import siteConfig from "@generated/docusaurus.config"; + +export default function prismIncludeLanguages(PrismObject) { + const { + themeConfig: { prism }, + } = siteConfig; + const { additionalLanguages } = prism; + + globalThis.Prism = PrismObject; + additionalLanguages.forEach((lang) => { + require(`prismjs/components/prism-${lang}`); + }); +} From 7513b59a155c18792a26f9b85db92b34acf48e0d Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Thu, 26 Feb 2026 21:39:22 +0000 Subject: [PATCH 08/15] docs: update Go SDK snippets with idiomatic field names and New() constructor Replace trailing-underscore fields (Endpoint_, ApiKey_, Units_) with idiomatic Go names (Endpoint, APIKey, Units). Fix RefreshInteval_ typo. Add sdk.New() one-liner alternative. --- .../create-new-context-request/go/async.go | 2 +- .../go/refreshWithFreshData.go | 4 ++-- .../create-new-context-request/go/sync.go | 2 +- .../import-and-initialize/go/initialize.go | 18 +++++++++++++----- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/async.go b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/async.go index b33433e0..664f22b8 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/async.go +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/async.go @@ -1,5 +1,5 @@ // define a new context request -var contextConfig = ContextConfig{Units_: map[string]string{ +var contextConfig = ContextConfig{Units: map[string]string{ "session_id": "bf06d8cb5d8137290c4abb64155584fbdb64d8", "user_id": "123456", }} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/refreshWithFreshData.go b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/refreshWithFreshData.go index 42d1128f..1e1e38d7 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/refreshWithFreshData.go +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/refreshWithFreshData.go @@ -1,4 +1,4 @@ -var contextConfig = ContextConfig{Units_: map[string]string{ +var contextConfig = ContextConfig{Units: map[string]string{ "session_id": "bf06d8cb5d8137290c4abb64155584fbdb64d8", "user_id": "123456", -}, RefreshInteval_: 4 * Time.Hour} +}, RefreshInterval: 4 * Time.Hour} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/sync.go b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/sync.go index e2e67661..5b9dd492 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/sync.go +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/go/sync.go @@ -1,5 +1,5 @@ // define a new context request -var contextConfig = ContextConfig{Units_: map[string]string{ +var contextConfig = ContextConfig{Units: map[string]string{ "session_id": "bf06d8cb5d8137290c4abb64155584fbdb64d8", "user_id": "123456", }} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/go/initialize.go b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/go/initialize.go index d6ae88e0..086de123 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/go/initialize.go +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/go/initialize.go @@ -1,14 +1,22 @@ func main() { var clientConfig = ClientConfig{ - Endpoint_: "https://your-company.absmartly.io/v1", - ApiKey_: os.Getenv("ABSMARTLY_APIKEY"), - Application_: os.Getenv(`ABSMARTLY_APPLICATION`), // created in the ABSmartly web console - Environment_: os.Getenv(`ABSMARTLY_ENVIRONMENT`) // created in the ABSmartly web console + Endpoint: "https://your-company.absmartly.io/v1", + APIKey: os.Getenv("ABSMARTLY_APIKEY"), + Application: os.Getenv(`ABSMARTLY_APPLICATION`), + Environment: os.Getenv(`ABSMARTLY_ENVIRONMENT`), } - var sdkConfig = ABSmartlyConfig{Client_: CreateDefaultClient(clientConfig)} + var sdkConfig = ABSmartlyConfig{Client: CreateDefaultClient(clientConfig)} var sdk = Create(sdkConfig) // ... } + +// Alternatively, using the sdk.New() constructor: +sdk, err := absmartly.New( + "https://your-company.absmartly.io/v1", + os.Getenv("ABSMARTLY_APIKEY"), + os.Getenv("ABSMARTLY_APPLICATION"), + os.Getenv("ABSMARTLY_ENVIRONMENT"), +) From fd4f53ee33705d14231ea580b1f49e68ee3d5c37 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Thu, 26 Feb 2026 21:39:31 +0000 Subject: [PATCH 09/15] docs: update Vue3 snippets to use useABSmartly() composable Replace inject("$absmartly") pattern with the new useABSmartly() composable from @absmartly/vue3-sdk across all Vue3 code examples. --- .../setting-context-attributes/vue3/setAttributes.js | 8 ++++---- .../custom-assignments/vue3/customAssignment.js | 6 +++--- .../custom-assignments/vue3/customAssignments.js | 6 +++--- .../Advanced/finalize/vue3/finalize.js | 6 +++--- .../SDK-Documentation/Advanced/publish/vue3/publish.js | 6 +++--- .../Advanced/tracking-goals/vue3/trackingGoals.js | 6 +++--- .../basic-usage/overriding/vue3/override.js | 8 ++++---- .../basic-usage/peeking/vue3/peekAtVariables.js | 6 +++--- .../basic-usage/peeking/vue3/peekAtVariants.js | 6 +++--- .../selecting-a-treatment/vue3/selectingATreatment.js | 10 +++++----- .../selecting-a-variable/vue3/selectingAVariable.js | 9 +++------ 11 files changed, 37 insertions(+), 40 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js index d1d0f653..da94d575 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/vue3/setAttributes.js @@ -1,9 +1,9 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { context } = useABSmartly(); -$absmartly.attribute("user_agent", navigator.userAgent); +context.value.attribute("user_agent", navigator.userAgent); -$absmartly.attributes({ +context.value.attributes({ customer_age: "new_customer", }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js index 897aba2b..f8509b96 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignment.js @@ -1,7 +1,7 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { context } = useABSmartly(); const chosenVariant = 1; -$absmartly.customAssignment("experiment_name", chosenVariant); +context.value.customAssignment("experiment_name", chosenVariant); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js index fddf9538..fb7c756f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/vue3/customAssignments.js @@ -1,6 +1,6 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { context } = useABSmartly(); const assignments = { experiment_name: 1, @@ -8,4 +8,4 @@ const assignments = { a_third_experiment_name: 2, }; -$absmartly.customAssignments(assignments); +context.value.customAssignments(assignments); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js index 855d4244..5b1024c5 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/vue3/finalize.js @@ -1,7 +1,7 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { context } = useABSmartly(); -await $absmartly.finalize().then(() => { +await context.value.finalize().then(() => { window.location = "https://www.absmartly.com"; }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js index 3008b108..9917ddd9 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/vue3/publish.js @@ -1,7 +1,7 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { context } = useABSmartly(); -await $absmartly.publish().then(() => { +await context.value.publish().then(() => { window.location = "https://www.absmartly.com"; }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js index ba506afb..3a7088e8 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/vue3/trackingGoals.js @@ -1,6 +1,6 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { track } = useABSmartly(); const properties = { price: 10000, @@ -9,4 +9,4 @@ const properties = { instance_id: 5350, }; -$absmartly.track("booking", properties); +track("booking", properties); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js index 527b93cd..468e4a7d 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/vue3/override.js @@ -1,9 +1,9 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { context } = useABSmartly(); -$absmartly.override("exp_test_experiment", 1); // force variant 1 of treatment -$absmartly.overrides({ +context.value.override("exp_test_experiment", 1); // force variant 1 of treatment +context.value.overrides({ exp_test_experiment: 1, exp_another_experiment: 0, }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js index 26ba6227..97ab86d8 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariables.js @@ -1,5 +1,5 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { context } = useABSmartly(); -const variableValue = $absmartly.peekVariableValue("button.color", "red"); +const variableValue = context.value.peekVariableValue("button.color", "red"); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js index d6e6559b..d3ee8de4 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/vue3/peekAtVariants.js @@ -1,8 +1,8 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { peek } = useABSmartly(); -if ($absmartly.peek("exp_test_experiment") == 0) { +if (peek("exp_test_experiment").value == 0) { // user is in control group (variant 0) } else { // user is in treatment group diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js index 28ee38f0..ad681f23 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/vue3/selectingATreatment.js @@ -1,11 +1,11 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { treatment } = useABSmartly(); -const treatment = $absmartly.treatment("exp_test_experiment"); +const treatmentVariant = treatment("exp_test_experiment"); -if (treatment === 0) { +if (treatmentVariant.value === 0) { // user is in control group (variant 0) -} else if (treatment === 1) { +} else if (treatmentVariant.value === 1) { // user is in treatment group (variant 1) } diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js index c180ae1c..d06ae452 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/vue3/selectingAVariable.js @@ -1,10 +1,7 @@ -import { inject } from "vue"; +import { useABSmartly } from "@absmartly/vue3-sdk"; -const $absmartly = inject("$absmartly"); +const { variableValue } = useABSmartly(); const defaultButtonColorValue = "red"; -const buttonColor = $absmartly.variableValue( - "button.color", - defaultButtonColorValue -); +const buttonColor = variableValue("button.color", defaultButtonColorValue); From bf2a741665c369d30724e8cbf170693d868d3c5d Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Thu, 26 Feb 2026 21:39:37 +0000 Subject: [PATCH 10/15] docs: update Kotlin snippets to use SDK wrapper pattern Replace manual fetchContextData() + direct Context() construction with the new ABsmartly.create() + sdk.createContext()/createContextWith() API. --- .../create-new-context-request/kotlin/async.kt | 18 ++++++++---------- .../kotlin/refreshWithFreshData.kt | 8 ++++++-- .../kotlin/refreshWithRefreshMethod.kt | 3 +-- .../create-new-context-request/kotlin/sync.kt | 15 +++++---------- .../import-and-initialize/kotlin/import.kt | 18 ++++++++---------- 5 files changed, 28 insertions(+), 34 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt index a48474e5..5da2997c 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/async.kt @@ -1,11 +1,9 @@ -val context = Context( - data = ContextData(), - units = mutableMapOf( - "session_id" to "bf06d8cb5d8137290c4abb64155584fbdb64d8", - "user_id" to "123456", - ), - options = ContextOptions(), - startReady = false, -) +val contextConfig = ContextConfig.create() + .setUnit("session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8") + .setUnit("user_id", "123456") -context.setDataAndReady(contextData) +sdk.createContext(contextConfig) + .waitUntilReadyAsync() + .thenAccept { ctx -> + println("context ready!") + } diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt index 55c1d96b..25677e2f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithFreshData.kt @@ -1,2 +1,6 @@ -val freshData: ContextData = fetchFreshContextData() -context.refresh(freshData) +val contextConfig = ContextConfig.create() + .setUnit("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8") + +val contextData: ContextData = sdk.getContextData().join() + +val context = sdk.createContextWith(contextConfig, contextData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt index 55c1d96b..a6059257 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/refreshWithRefreshMethod.kt @@ -1,2 +1 @@ -val freshData: ContextData = fetchFreshContextData() -context.refresh(freshData) +context.refresh() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt index 1030eda0..7ad31281 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/kotlin/sync.kt @@ -1,11 +1,6 @@ -val units = mutableMapOf( - "session_id" to "bf06d8cb5d8137290c4abb64155584fbdb64d8", - "user_id" to "123456", -) -val options = ContextOptions() +val contextConfig = ContextConfig.create() + .setUnit("session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8") + .setUnit("user_id", "123456") -val context = Context( - data = contextData, - units = units, - options = options, -) +val context = sdk.createContext(contextConfig) + .waitUntilReady() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt index 62c607ef..dfe6da92 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/kotlin/import.kt @@ -1,14 +1,12 @@ import com.absmartly.sdk.* -fun main() { - val contextData: ContextData = fetchContextData() +val clientConfig = ClientConfig.create() + .setEndpoint("https://your-company.absmartly.io/v1") + .setAPIKey(System.getenv("ABSMARTLY_APIKEY")) + .setApplication(System.getenv("ABSMARTLY_APPLICATION")) + .setEnvironment(System.getenv("ABSMARTLY_ENVIRONMENT")) - val units = mutableMapOf("session_id" to "5ebf06d8cb5d8137290c4abb64155584fbdb64d8") - val options = ContextOptions(publishDelay = -1, refreshPeriod = 0) +val sdkConfig = ABSmartlyConfig.create() + .setClient(Client.create(clientConfig)) - val context = Context( - data = contextData, - units = units, - options = options, - ) -} +val sdk = ABsmartly.create(sdkConfig) From 75fc4f5a078b771db69e20d156a357c1bbd439b2 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Thu, 26 Feb 2026 21:39:47 +0000 Subject: [PATCH 11/15] docs: update C++ snippets to use SDK wrapper pattern Replace manual fetch_context_data() + JSON parse + direct Context() construction with SDK::create() + sdk->create_context() wrapper API. Update all context method calls from stack (.) to pointer (->) syntax. --- .../cpp/setAttributes.cpp | 4 +-- .../cpp/customAssignment.cpp | 2 +- .../cpp/customAssignments.cpp | 2 +- .../Advanced/finalize/cpp/finalize.cpp | 3 +- .../Advanced/publish/cpp/publish.cpp | 4 +-- .../tracking-goals/cpp/trackingGoals.cpp | 2 +- .../basic-usage/overriding/cpp/override.cpp | 4 +-- .../peeking/cpp/peekAtVariables.cpp | 2 +- .../peeking/cpp/peekAtVariants.cpp | 2 +- .../cpp/selectingATreatment.cpp | 2 +- .../cpp/selectingAVariable.cpp | 2 +- .../create-new-context-request/cpp/async.cpp | 10 +++--- .../cpp/extraUnits.cpp | 4 +-- .../cpp/refreshWithFreshData.cpp | 10 +++--- .../cpp/refreshWithRefreshMethod.cpp | 5 ++- .../create-new-context-request/cpp/sync.cpp | 12 +++---- .../cpp/customEventLogger.cpp | 7 ++++- .../import-and-initialize/cpp/initialize.cpp | 31 +++++++++++++------ 18 files changed, 61 insertions(+), 47 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp index c8d2c671..515c1a07 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/context-attributes/setting-context-attributes/cpp/setAttributes.cpp @@ -1,6 +1,6 @@ -context.set_attribute("user_agent", "Mozilla/5.0..."); +context->set_attribute("user_agent", "Mozilla/5.0..."); -context.set_attributes({ +context->set_attributes({ {"customer_age", "new_customer"}, {"url", "/products/123"} }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp index 5d7cf6c0..4dd9a830 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignment.cpp @@ -1,3 +1,3 @@ int chosenVariant = 1; -context.set_custom_assignment("experiment_name", chosenVariant); +context->set_custom_assignment("experiment_name", chosenVariant); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp index 348a6b7a..69863cdd 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/custom-assignments/cpp/customAssignments.cpp @@ -4,4 +4,4 @@ std::map assignments = { {"a_third_experiment_name", 2} }; -context.set_custom_assignments(assignments); +context->set_custom_assignments(assignments); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp index d3f0a269..4fe470ab 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/finalize/cpp/finalize.cpp @@ -1,2 +1 @@ -absmartly::PublishEvent event = context.finalize(); -send_to_collector(nlohmann::json(event).dump()); +context->finalize(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp index c3ac3d3d..723cd274 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/publish/cpp/publish.cpp @@ -1,3 +1 @@ -absmartly::PublishEvent event = context.publish(); -nlohmann::json event_json = event; -send_to_collector(event_json.dump()); +context->publish(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp index b0bcf60d..82a9382f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/Advanced/tracking-goals/cpp/trackingGoals.cpp @@ -1,4 +1,4 @@ -context.track("payment", { +context->track("payment", { {"item_count", 1}, {"total_amount", 1999.99} }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp index 215eebad..4503b816 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/overriding/cpp/override.cpp @@ -1,5 +1,5 @@ -context.set_override("exp_test_experiment", 1); // force variant 1 of treatment -context.set_overrides({ +context->set_override("exp_test_experiment", 1); // force variant 1 of treatment +context->set_overrides({ {"exp_test_experiment", 1}, {"exp_another_experiment", 0} }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp index 907348c6..b1a69d56 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariables.cpp @@ -1 +1 @@ -nlohmann::json variable = context.peek_variable_value("button.color", nlohmann::json("default")); +nlohmann::json variable = context->peek_variable_value("button.color", nlohmann::json("default")); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp index 61fe528b..0395c133 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/peeking/cpp/peekAtVariants.cpp @@ -1,4 +1,4 @@ -int treatment = context.peek("exp_test_experiment"); +int treatment = context->peek("exp_test_experiment"); if (treatment == 0) { // user is in control group (variant 0) } else { diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp index a24e093c..f1385eb4 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-treatment/cpp/selectingATreatment.cpp @@ -1,4 +1,4 @@ -int treatment = context.treatment("exp_test_experiment"); +int treatment = context->treatment("exp_test_experiment"); if (treatment == 0) { // user is in control group (variant 0) } else { diff --git a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp index 583283aa..cc378a29 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/basic-usage/selecting-a-variable/cpp/selectingAVariable.cpp @@ -1,3 +1,3 @@ nlohmann::json defaultButtonColorValue = "red"; -nlohmann::json buttonColor = context.variable_value("button.color", defaultButtonColorValue); +nlohmann::json buttonColor = context->variable_value("button.color", defaultButtonColorValue); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp index 54ea37e8..36e4201d 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/async.cpp @@ -1,10 +1,10 @@ -absmartly::ContextConfig config; -config.units = { +absmartly::ContextConfig context_config; +context_config.units = { {"session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8"}, {"user_id", "123456"} }; -absmartly::ContextData data = nlohmann::json::parse(json_response) - .get(); +auto context = sdk->create_context(context_config); -absmartly::Context context(config, data); +// context is not yet ready; call wait_until_ready() before using it +context->wait_until_ready(); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp index e41579ce..52025e70 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/extraUnits.cpp @@ -1,5 +1,5 @@ -context.set_unit("db_user_id", "1000013"); +context->set_unit("db_user_id", "1000013"); -context.set_units({ +context->set_units({ {"db_user_id", "1000013"} }); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp index 80fb3460..98c31b99 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithFreshData.cpp @@ -1,8 +1,10 @@ -absmartly::ContextConfig config; -config.units = { +absmartly::ContextConfig context_config; +context_config.units = { {"session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8"}, {"user_id", "123456"} }; -config.refresh_period = 4 * 60 * 60 * 1000; // 4 hours in milliseconds +context_config.refresh_period = 4 * 60 * 60 * 1000; // 4 hours in milliseconds -absmartly::Context context(config, data); +absmartly::ContextData fresh_data = sdk->get_context_data().get(); + +auto context = sdk->create_context_with(context_config, fresh_data); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp index e8be9aeb..be3a0669 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/refreshWithRefreshMethod.cpp @@ -1,4 +1,3 @@ -absmartly::ContextData fresh_data = nlohmann::json::parse(fresh_json_response) - .get(); +absmartly::ContextData fresh_data = sdk->get_context_data().get(); -context.refresh(fresh_data); +context->refresh(fresh_data); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp index 1d13b504..cc29a340 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/cpp/sync.cpp @@ -1,11 +1,9 @@ -absmartly::ContextConfig config; -config.units = { +absmartly::ContextConfig context_config; +context_config.units = { {"session_id", "bf06d8cb5d8137290c4abb64155584fbdb64d8"}, {"user_id", "123456"} }; -absmartly::ContextData data = nlohmann::json::parse(json_response) - .get(); - -absmartly::Context context(config, data); -assert(context.is_ready()); +auto context = sdk->create_context(context_config); +context->wait_until_ready(); +assert(context->is_ready()); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp index b3db2566..c4336077 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/custom-event-logger/cpp/customEventLogger.cpp @@ -22,4 +22,9 @@ class CustomEventHandler : public absmartly::ContextEventHandler { }; auto handler = std::make_shared(); -absmartly::Context context(config, data, handler); + +absmartly::SDKConfig sdk_config; +sdk_config.client = client; +sdk_config.context_event_handler = handler; + +auto sdk = absmartly::SDK::create(sdk_config); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp index 5ddd3fe4..99159405 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/cpp/initialize.cpp @@ -1,16 +1,29 @@ -#include +#include +#include +#include +#include #include -#include -#include +#include +#include int main() { - std::string json_response = fetch_context_data(); + absmartly::ClientConfig client_config; + client_config.endpoint = "https://your-company.absmartly.io/v1"; + client_config.api_key = "YOUR-API-KEY"; + client_config.application = "website"; + client_config.environment = "production"; - absmartly::ContextData data = nlohmann::json::parse(json_response) - .get(); + auto http_client = std::make_shared(); + auto client = std::make_shared(client_config, http_client); - absmartly::ContextConfig config; - config.units = {{"session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8"}}; + absmartly::SDKConfig sdk_config; + sdk_config.client = client; - absmartly::Context context(config, data); + auto sdk = absmartly::SDK::create(sdk_config); + + absmartly::ContextConfig context_config; + context_config.units = {{"session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8"}}; + + auto context = sdk->create_context(context_config); + context->wait_until_ready(); } From 6e5a032c67639c0c04bcec5550fb6a8287c91a44 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Thu, 26 Feb 2026 21:39:52 +0000 Subject: [PATCH 12/15] docs: add Ruby async context creation snippet Add create_context_async example with wait_until_ready pattern to the Ruby tab in the context creation docs. --- .../_create-new-context-request.mdx | 9 ++++++++- .../create-new-context-request/ruby/async.rb | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/ruby/async.rb diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx index 1869d33f..e44296ed 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/_create-new-context-request.mdx @@ -63,6 +63,7 @@ import PHPExtraUnits from "!!raw-loader!./php/extraUnits.php"; import PHPPrefetchedData from "!!raw-loader!./php/prefetchedData.php"; import RubyContext from "!!raw-loader!./ruby/createContext.rb"; +import RubyAsync from "!!raw-loader!./ruby/async.rb"; import RubyPreFetchedData from "!!raw-loader!./ruby/prefetchedData.rb"; import RubyExtraUnits from "!!raw-loader!./ruby/extraUnits.rb"; import RubyExtraUnitsAlt from "!!raw-loader!./ruby/extraUnitsAlt.rb"; @@ -599,10 +600,16 @@ Please note, you cannot override an already set unit type as that would be a cha -**Create A New Context** +**Create A New Context Synchronously** {RubyContext} +**Create A New Context Asynchronously** + +`create_context_async` returns immediately and fetches experiment data in a background thread. Call `wait_until_ready` to block until the data is available. + +{RubyAsync} + **Create A Context With Prefetched Data** {RubyPreFetchedData} diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/ruby/async.rb b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/ruby/async.rb new file mode 100644 index 00000000..3c3f3233 --- /dev/null +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/ruby/async.rb @@ -0,0 +1,6 @@ +context_config = Absmartly.create_context_config +context_config.set_unit('session_id', 'bf06d8cb5d8137290c4abb64155584fbdb64d8') + +context = sdk.create_context_async(context_config) + +context.wait_until_ready From addce5c5de614236803d4b500118ee42fd5d370f Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Fri, 27 Feb 2026 08:05:21 +0000 Subject: [PATCH 13/15] docs: update Java, PHP, Scala, Android, Rust snippets with ergonomics fixes Java: show ABsmartly.create(endpoint, apiKey, app, env) convenience factory PHP: use createSimple() with correct parameter order Scala: use fetchContextDataAsync() instead of deprecated blocking call Android: show ABSmartlyAndroid.Builder() with auto SQLite cache Rust: pass ContextOptions instead of None --- .../create-new-context-request/rust/async.rs | 10 +++++++- .../create-new-context-request/rust/sync.rs | 10 +++++++- .../scala/refreshWithFreshData.scala | 6 ++++- .../scala/refreshWithRefreshMethod.scala | 6 ++++- .../scala/sync.scala | 4 +++- .../import-and-initialize/android/import.kt | 23 ++++++++----------- .../import-and-initialize/java/import.java | 19 +++++---------- .../php/importAndInitialize.php | 8 +++---- .../php/paramsInOrder.php | 6 ++--- 9 files changed, 53 insertions(+), 39 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs index 6f787e70..d196ad3b 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/async.rs @@ -1,6 +1,14 @@ +use absmartly_sdk::ContextOptions; + let units = [("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8")]; let context_data: ContextData = serde_json::from_str(&api_response)?; -let mut context = sdk.create_context_with(units, context_data, None); +let options = ContextOptions { + publish_delay: 100, + refresh_period: 0, + event_logger: None, +}; + +let mut context = sdk.create_context_with(units, context_data, Some(options)); assert!(context.is_ready()); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs index c53811a6..8424831a 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/rust/sync.rs @@ -1,3 +1,11 @@ +use absmartly_sdk::ContextOptions; + let units = [("session_id", "5ebf06d8cb5d8137290c4abb64155584fbdb64d8")]; -let mut context = sdk.create_context(units, None).await?; +let options = ContextOptions { + publish_delay: 100, + refresh_period: 0, + event_logger: None, +}; + +let mut context = sdk.create_context(units, Some(options)).await?; diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala index fe9da143..e25ae4aa 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithFreshData.scala @@ -1,2 +1,6 @@ -val newData = sdk.fetchContextData() +import scala.concurrent.Await +import scala.concurrent.duration._ + +val newDataFuture = sdk.fetchContextDataAsync() +val newData = Await.result(newDataFuture, 5.seconds) context.refresh(newData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala index fe9da143..e25ae4aa 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/refreshWithRefreshMethod.scala @@ -1,2 +1,6 @@ -val newData = sdk.fetchContextData() +import scala.concurrent.Await +import scala.concurrent.duration._ + +val newDataFuture = sdk.fetchContextDataAsync() +val newData = Await.result(newDataFuture, 5.seconds) context.refresh(newData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala index a33f43a3..d8ed5d7f 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/create-new-context-request/scala/sync.scala @@ -6,6 +6,8 @@ val units = Map( "user_id" -> "123456" ) -val contextData = sdk.fetchContextData() +val contextDataFuture = sdk.fetchContextDataAsync() + +val contextData = Await.result(contextDataFuture, 5.seconds) val context = sdk.createContextWith(units, contextData) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt index ae85de01..9313a5eb 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/android/import.kt @@ -1,14 +1,9 @@ -import com.absmartly.sdk.* - -val clientConfig = ClientConfig.create() - .setEndpoint("https://your-company.absmartly.io/v1") - .setAPIKey("YOUR-API-KEY") - .setApplication("android-app") - .setEnvironment("production") - -val absmartlyClient = Client.create(clientConfig) - -val sdkConfig = ABsmartlyConfig.create() - .setClient(absmartlyClient) - -val sdk = ABsmartly.create(sdkConfig) +import com.absmartly.android.sdk.ABSmartlyAndroid + +val sdk = ABSmartlyAndroid.Builder() + .endpoint("https://your-company.absmartly.io/v1") + .apiKey(BuildConfig.ABSMARTLY_API_KEY) + .application("my-android-app") + .environment("production") + .androidContext(applicationContext) + .build() diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java index b88c8ce5..aae174a6 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java @@ -3,19 +3,12 @@ public class Example { static public void main(String[] args) { - final ClientConfig clientConfig = ClientConfig.create() - .setEndpoint("https://your-company.absmartly.io/v1") - .setAPIKey("YOUR-API-KEY") - .setApplication("website") // created in the ABSmartly Web Console - .setEnvironment("development"); // created in the ABSmartly Web Console - - final Client absmartlyClient = Client.create(clientConfig); - - final ABSmartlyConfig sdkConfig = ABSmartlyConfig.create() - .setClient(absmartlyClient); - - - final ABSmartly sdk = ABSmartly.create(sdkConfig); + final ABSmartly sdk = ABSmartly.create( + "https://your-company.absmartly.io/v1", + System.getenv("ABSMARTLY_APIKEY"), + "website", + "production" + ); // ... } } diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/importAndInitialize.php b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/importAndInitialize.php index b91a7c5a..a5ac8c37 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/importAndInitialize.php +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/importAndInitialize.php @@ -1,8 +1,8 @@ -use \ABSmartly\SDK\SDK; +use \ABSmartly\SDK\ABsmartly; -$sdk = SDK::createWithDefaults( +$sdk = ABsmartly::createSimple( endpoint: 'https://your-company.absmartly.io/v1', apiKey: $apiKey, - environment: $environment, - application: $application + application: $application, + environment: $environment ); diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/paramsInOrder.php b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/paramsInOrder.php index 337c271f..ba2e6d72 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/paramsInOrder.php +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/php/paramsInOrder.php @@ -1,5 +1,5 @@ -use \ABSmartly\SDK\SDK; +use \ABSmartly\SDK\ABsmartly; -$sdk = SDK::createWithDefaults( - 'https://your-company.absmartly.io/v1', $apiKey, $environment, $application, +$sdk = ABsmartly::createSimple( + 'https://your-company.absmartly.io/v1', $apiKey, $application, $environment ); From b5b29a13440d321fa8efbec5543f36289ae45f6e Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Fri, 27 Feb 2026 08:48:18 +0000 Subject: [PATCH 14/15] fix: update Java snippet to use Builder pattern --- .../import-and-initialize/java/import.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java index aae174a6..4bbaf8b7 100644 --- a/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java +++ b/docs/APIs-and-SDKs/SDK-Documentation/getting-started/import-and-initialize/java/import.java @@ -3,12 +3,12 @@ public class Example { static public void main(String[] args) { - final ABSmartly sdk = ABSmartly.create( - "https://your-company.absmartly.io/v1", - System.getenv("ABSMARTLY_APIKEY"), - "website", - "production" - ); + final ABsmartly sdk = ABsmartly.builder() + .endpoint("https://your-company.absmartly.io/v1") + .apiKey(System.getenv("ABSMARTLY_APIKEY")) + .application("website") + .environment("production") + .build(); // ... } } From 9a0df6c2c75270418058bf7d3f7ad78f0fcacd86 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Fri, 6 Mar 2026 10:08:32 +0000 Subject: [PATCH 15/15] chore: add .worktrees to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ce99086e..224242eb 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ yarn-error.log* .claude/tasks/ .claude/audits/ openapi_console_bk/ +.worktrees/