Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
a38e46b
feat: initial ABsmartly C++ SDK implementation
joalves Feb 24, 2026
b83f1e4
docs: add comprehensive README documentation
joalves Feb 24, 2026
6f7ffd3
feat: add SDK wrapper pattern with create_context convenience methods
joalves Feb 27, 2026
6ac7d8f
feat: add async HTTP client and sync/async mode selection
joalves Mar 9, 2026
21764c3
docs: update README with async HTTP client and HTTPMode documentation
joalves Mar 9, 2026
43a5b1e
feat(cpp-sdk): add ready_error and custom_field_value_type methods
joalves Mar 15, 2026
d7d0916
feat: add close/is_closed/is_closing aliases and standardize error me…
joalves Mar 15, 2026
b6c697f
test(cpp): replace refresh(data) bypass with MockDataProvider + publi…
joalves Mar 15, 2026
2f11058
fix(cpp-sdk): remove check_ready/check_not_finalized from read method…
joalves Mar 16, 2026
e7ebf2d
fix: allow track() before context is ready by removing check_ready() …
joalves Mar 16, 2026
9c1ea3b
fix: reset exposed flag for overridden assignments on refresh when ex…
joalves Mar 17, 2026
9f54b95
feat: cross-SDK consistency fixes — all 201 scenarios passing
joalves Mar 17, 2026
e01e4d5
refactor: rename ContextEventHandler to ContextPublisher
joalves Mar 18, 2026
d31dd69
fix: address coderabbit review issues
joalves Mar 18, 2026
700c161
feat(jsonexpr): make IN haystack-first and add CONTAINS alias
joalves Jun 15, 2026
d7ca979
fix(jsonexpr): eq(null, null) returns null (canonical null-operand ha…
joalves Jun 16, 2026
55c52ad
test: add canonical astral/multibyte hashUnit regression test
joalves Jun 17, 2026
6903a84
fix: set PUT body before CURLOPT_CUSTOMREQUEST (publish was failing)
joalves Jun 25, 2026
565cd91
test: add hermetic local-HTTP integration test + CI workflow
joalves Jun 25, 2026
5a2f70d
fix: await publish HTTP + correct context URL (was /v1/v1/context 404)
joalves Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: CI

on:
push:
pull_request:

jobs:
build-and-test:
name: Build & test
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake g++ libcurl4-openssl-dev

- name: Configure
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DABSMARTLY_BUILD_TESTS=ON

- name: Build
run: cmake --build build --parallel

- name: Test
run: ctest --test-dir build --output-on-failure
45 changes: 45 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.16)
project(absmartly-sdk VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)

FetchContent_Declare(
json
URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz
)
FetchContent_MakeAvailable(json)

add_library(absmartly-sdk
src/md5.cpp
src/murmur3.cpp
src/variant_assigner.cpp
src/utils.cpp
src/context.cpp
src/client.cpp
src/default_context_data_provider.cpp
src/default_context_publisher.cpp
src/sdk.cpp
src/json_expr/evaluator.cpp
src/json_expr/operators.cpp
src/audience_matcher.cpp
)

target_include_directories(absmartly-sdk PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)

target_link_libraries(absmartly-sdk PUBLIC nlohmann_json::nlohmann_json)

find_package(CURL REQUIRED)
target_sources(absmartly-sdk PRIVATE src/default_http_client.cpp src/async_http_client.cpp)
target_link_libraries(absmartly-sdk PUBLIC CURL::libcurl)

option(ABSMARTLY_BUILD_TESTS "Build tests" ON)
if(ABSMARTLY_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
Loading
Loading