Skip to content

Commit

Permalink
[Feature] Added feature flags (#1)
Browse files Browse the repository at this point in the history
* Added feature flags

* added circle config
  • Loading branch information
jsalaber authored Apr 3, 2019
1 parent 3d798f5 commit df16227
Show file tree
Hide file tree
Showing 12 changed files with 2,317 additions and 373 deletions.
44 changes: 44 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# PHP CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-php/ for more details
#
version: 2
jobs:
build:
docker:
- image: circleci/php:7.1-node-browsers

steps:
- checkout

- run: sudo apt update
- run: sudo docker-php-ext-install zip

- restore_cache:
keys:
# "composer.lock" can be used if it is committed to the repo
- v1-dependencies-{{ checksum "composer.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-

- run: composer install -n --prefer-dist

- save_cache:
key: v1-dependencies-{{ checksum "composer.json" }}
paths:
- ./vendor
- restore_cache:
keys:
- node-v1-{{ checksum "package.json" }}
- node-v1-
- run: yarn install
- save_cache:
key: node-v1-{{ checksum "package.json" }}
paths:
- node_modules

# prepare the database
- run: touch storage/testing.sqlite
- run: php artisan migrate --env=testing --database=sqlite_testing --force

- run: ./vendor/bin/phpunit --bootstrap vendor/autoload.php test/test.php
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,7 @@

# Embedded web-server pid file
/.web-server-pid

# vendor files
vendor/*

69 changes: 69 additions & 0 deletions GETTING_STARTED.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
## Getting Started

The generated code has dependencies over external libraries like UniRest. These dependencies are defined in the ```composer.json``` file that comes with the SDK.
To resolve these dependencies, we use the Composer package manager which requires PHP greater than 5.3.2 installed in your system.
Visit [https://getcomposer.org/download/](https://getcomposer.org/download/) to download the installer file for Composer and run it in your system.
Open command prompt and type ```composer --version```. This should display the current version of the Composer installed if the installation was successful.

* Using command line, navigate to the directory containing the generated files (including ```composer.json```) for the SDK.
* Run the command ```composer install```. This should install all the required dependencies and create the ```vendor``` directory in your project directory.

![Building SDK - Step 1](https://apidocs.io/illustration/php?step=installDependencies&workspaceFolder=Taplytics-PHP)

### [For Windows Users Only] Configuring CURL Certificate Path in php.ini

CURL used to include a list of accepted CAs, but no longer bundles ANY CA certs. So by default it will reject all SSL certificates as unverifiable. You will have to get your CA's cert and point curl at it. The steps are as follows:

1. Download the certificate bundle (.pem file) from [https://curl.haxx.se/docs/caextract.html](https://curl.haxx.se/docs/caextract.html) on to your system.
2. Add curl.cainfo = "PATH_TO/cacert.pem" to your php.ini file located in your php installation. “PATH_TO” must be an absolute path containing the .pem file.

```ini
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =
```

## How to Use

The following section explains how to use the Taplytics library in a new project.

### 1. Open Project in an IDE

Open an IDE for PHP like PhpStorm. The basic workflow presented here is also applicable if you prefer using a different editor or IDE.

![Open project in PHPStorm - Step 1](https://apidocs.io/illustration/php?step=openIDE&workspaceFolder=Taplytics-PHP)

Click on ```Open``` in PhpStorm to browse to your generated SDK directory and then click ```OK```.

![Open project in PHPStorm - Step 2](https://apidocs.io/illustration/php?step=openProject0&workspaceFolder=Taplytics-PHP)

### 2. Add a new Test Project

Create a new directory by right clicking on the solution name as shown below:

![Add a new project in PHPStorm - Step 1](https://apidocs.io/illustration/php?step=createDirectory&workspaceFolder=Taplytics-PHP)

Name the directory as "test"

![Add a new project in PHPStorm - Step 2](https://apidocs.io/illustration/php?step=nameDirectory&workspaceFolder=Taplytics-PHP)

Add a PHP file to this project

![Add a new project in PHPStorm - Step 3](https://apidocs.io/illustration/php?step=createFile&workspaceFolder=Taplytics-PHP)

Name it "testSDK"

![Add a new project in PHPStorm - Step 4](https://apidocs.io/illustration/php?step=nameFile&workspaceFolder=Taplytics-PHP)

Depending on your project setup, you might need to include composer's autoloader in your PHP code to enable auto loading of classes.

```PHP
require_once "../vendor/autoload.php";
```

It is important that the path inside require_once correctly points to the file ```autoload.php``` inside the vendor directory created during dependency installations.

![Add a new project in PHPStorm - Step 4](https://apidocs.io/illustration/php?step=projectFiles&workspaceFolder=Taplytics-PHP)

After this you can add code to initialize the client library and acquire the instance of a Controller class. Sample code to initialize the client library and using controller methods is given in the subsequent sections.
208 changes: 84 additions & 124 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,110 +1,10 @@
# Getting started

Taplytics decisions is an API to quickly use Taplytics features and functionality at edge.
# Getting started

## How to Build

The generated code has dependencies over external libraries like UniRest. These dependencies are defined in the ```composer.json``` file that comes with the SDK.
To resolve these dependencies, we use the Composer package manager which requires PHP greater than 5.3.2 installed in your system.
Visit [https://getcomposer.org/download/](https://getcomposer.org/download/) to download the installer file for Composer and run it in your system.
Open command prompt and type ```composer --version```. This should display the current version of the Composer installed if the installation was successful.

* Using command line, navigate to the directory containing the generated files (including ```composer.json```) for the SDK.
* Run the command ```composer install```. This should install all the required dependencies and create the ```vendor``` directory in your project directory.

![Building SDK - Step 1](https://apidocs.io/illustration/php?step=installDependencies&workspaceFolder=Taplytics-PHP)

### [For Windows Users Only] Configuring CURL Certificate Path in php.ini

CURL used to include a list of accepted CAs, but no longer bundles ANY CA certs. So by default it will reject all SSL certificates as unverifiable. You will have to get your CA's cert and point curl at it. The steps are as follows:

1. Download the certificate bundle (.pem file) from [https://curl.haxx.se/docs/caextract.html](https://curl.haxx.se/docs/caextract.html) on to your system.
2. Add curl.cainfo = "PATH_TO/cacert.pem" to your php.ini file located in your php installation. “PATH_TO” must be an absolute path containing the .pem file.

```ini
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =
```

## How to Use

The following section explains how to use the Taplytics library in a new project.

### 1. Open Project in an IDE

Open an IDE for PHP like PhpStorm. The basic workflow presented here is also applicable if you prefer using a different editor or IDE.

![Open project in PHPStorm - Step 1](https://apidocs.io/illustration/php?step=openIDE&workspaceFolder=Taplytics-PHP)

Click on ```Open``` in PhpStorm to browse to your generated SDK directory and then click ```OK```.

![Open project in PHPStorm - Step 2](https://apidocs.io/illustration/php?step=openProject0&workspaceFolder=Taplytics-PHP)

### 2. Add a new Test Project

Create a new directory by right clicking on the solution name as shown below:

![Add a new project in PHPStorm - Step 1](https://apidocs.io/illustration/php?step=createDirectory&workspaceFolder=Taplytics-PHP)

Name the directory as "test"

![Add a new project in PHPStorm - Step 2](https://apidocs.io/illustration/php?step=nameDirectory&workspaceFolder=Taplytics-PHP)

Add a PHP file to this project

![Add a new project in PHPStorm - Step 3](https://apidocs.io/illustration/php?step=createFile&workspaceFolder=Taplytics-PHP)

Name it "testSDK"

![Add a new project in PHPStorm - Step 4](https://apidocs.io/illustration/php?step=nameFile&workspaceFolder=Taplytics-PHP)

Depending on your project setup, you might need to include composer's autoloader in your PHP code to enable auto loading of classes.

```PHP
require_once "../vendor/autoload.php";
```
Taplytics decisions is an API to quickly use Taplytics features and functionality at edge.

It is important that the path inside require_once correctly points to the file ```autoload.php``` inside the vendor directory created during dependency installations.

![Add a new project in PHPStorm - Step 4](https://apidocs.io/illustration/php?step=projectFiles&workspaceFolder=Taplytics-PHP)

After this you can add code to initialize the client library and acquire the instance of a Controller class. Sample code to initialize the client library and using controller methods is given in the subsequent sections.

### 3. Run the Test Project

To run your project you must set the Interpreter for your project. Interpreter is the PHP engine installed on your computer.

Open ```Settings``` from ```File``` menu.

![Run Test Project - Step 1](https://apidocs.io/illustration/php?step=openSettings&workspaceFolder=Taplytics-PHP)

Select ```PHP``` from within ```Languages & Frameworks```

![Run Test Project - Step 2](https://apidocs.io/illustration/php?step=setInterpreter0&workspaceFolder=Taplytics-PHP)

Browse for Interpreters near the ```Interpreter``` option and choose your interpreter.

![Run Test Project - Step 3](https://apidocs.io/illustration/php?step=setInterpreter1&workspaceFolder=Taplytics-PHP)

Once the interpreter is selected, click ```OK```

![Run Test Project - Step 4](https://apidocs.io/illustration/php?step=setInterpreter2&workspaceFolder=Taplytics-PHP)

To run your project, right click on your PHP file inside your Test project and click on ```Run```

![Run Test Project - Step 5](https://apidocs.io/illustration/php?step=runProject&workspaceFolder=Taplytics-PHP)

## How to Test

Unit tests in this SDK can be run using PHPUnit.

1. First install the dependencies using composer including the `require-dev` dependencies.
2. Run `vendor\bin\phpunit --verbose` from commandline to execute tests. If you have
installed PHPUnit globally, run tests using `phpunit --verbose` instead.
## How to Build

You can change the PHPUnit test configuration in the `phpunit.xml` file.
Refer to [Getting Started](GETTING_STARTED.md) to build Taplytics into your project.

## Initialization

Expand All @@ -113,18 +13,13 @@ You can change the PHPUnit test configuration in the `phpunit.xml` file.
API client can be initialized as following.

```php

$client = new TaplyticsLib\TaplyticsClient();
```


# Class Reference

## <a name="list_of_controllers"></a>List of Controllers
# Class Reference

* [APIController](#api_controller)

## <a name="api_controller"></a>![Class: ](https://apidocs.io/img/class.png ".APIController") APIController
## APIController

### Get singleton instance

Expand All @@ -134,7 +29,7 @@ The singleton instance of the ``` APIController ``` class can be accessed from t
$client = $client->getClient();
```

### <a name="create_get_variables"></a>![Method: ](https://apidocs.io/img/method.png ".APIController.createGetVariables") createGetVariables
### createGetVariables

> All variables and their values for the given user
Expand Down Expand Up @@ -168,9 +63,7 @@ $result = $client->createGetVariables($token, $userId, $body);
```


### <a name="create_get_variation_for_experiment"></a>![Method: ](https://apidocs.io/img/method.png ".APIController.createGetVariationForExperiment") createGetVariationForExperiment

> *Tags:* ``` Skips Authentication ```
### createGetVariationForExperiment

> For a given experiment, determine whether or not a user is in the experiment, and in which variation
Expand Down Expand Up @@ -207,9 +100,7 @@ $result = $client->createGetVariationForExperiment($token, $userId, $experimentN
```


### <a name="create_get_variable_value"></a>![Method: ](https://apidocs.io/img/method.png ".APIController.createGetVariableValue") createGetVariableValue

> *Tags:* ``` Skips Authentication ```
### createGetVariableValue

> Value for given Taplytics Dynamic Variable. If a user is not in an experiment containing the variable, the response be the provided default value in the query params.
Expand Down Expand Up @@ -249,7 +140,7 @@ $result = $client->createGetVariableValue($token, $userId, $varName, $defaultVal
```


### <a name="create_get_bucketing"></a>![Method: ](https://apidocs.io/img/method.png ".APIController.createGetBucketing") createGetBucketing
### createGetBucketing

> Returns a key/value pairing of all experiments that the user has been segmented into, as well as the variation the users are assigned.
Expand Down Expand Up @@ -283,9 +174,7 @@ $result = $client->createGetBucketing($token, $userId, $body);
```


### <a name="post_event"></a>![Method: ](https://apidocs.io/img/method.png ".APIController.postEvent") postEvent

> *Tags:* ``` Skips Authentication ```
### postEvent

> Send an event to Taplytics. These events are then used to compare against an experiment's goals to determine the success of an A/B test.
Expand Down Expand Up @@ -319,7 +208,7 @@ $result = $client->postEvent($token, $userId, $body);
```


### <a name="create_get_config"></a>![Method: ](https://apidocs.io/img/method.png ".APIController.createGetConfig") createGetConfig
### createGetConfig

> Returns the entire configuration for the project. This is the document that informs the experiment information such as segmentation. Extremely verbose and should be used for debugging.
Expand Down Expand Up @@ -353,7 +242,78 @@ $result = $client->createGetConfig($token, $userId, $body);
```


[Back to List of Controllers](#list_of_controllers)
### createGetFeatureFlags

> Returns the list of feature flags with names and key names.
```php
function createGetFeatureFlags(
$token,
$userId,
$body = null)
```

#### Parameters

| Parameter | Tags | Description |
|-----------|------|-------------|
| token | ``` Required ``` | SDK token for the project |
| userId | ``` Required ``` | ID for given user |
| body | ``` Optional ``` | All relevant attributes associated with the user |



#### Example Usage

```php
$token = 'token';
$userId = 'user_id';
$body = new Body();

$result = $client->createGetFeatureFlags($token, $userId, $keyName, $body);
foreach($result as $flagObj) {
// $flagObj->name to get the name of the feature flag
// $flagObj->keyName to get the key of the feature flag
}
```

### isFeatureFlagEnabled

> Returns true or false based on if the keyName passed in is an enabled feature flag.
```php
function isFeatureFlagEnabled(
$token,
$userId,
$keyName,
$body = null)
```

#### Parameters

| Parameter | Tags | Description |
|-----------|------|-------------|
| token | ``` Required ``` | SDK token for the project |
| userId | ``` Required ``` | ID for given user |
| keyName | ``` Required ``` | key name for the feature flag |
| body | ``` Optional ``` | All relevant attributes associated with the user |



#### Example Usage

```php
$token = 'token';
$userId = 'user_id';
$keyName = 'featureFlagKey';
$body = new Body();

$result = $client->isFeatureFlagEnabled($token, $userId, $keyName, $body);
if ($result) {
showFeature();
}
```




Loading

0 comments on commit df16227

Please sign in to comment.