<commit_before># RingCentral SDK for C&#35;

[![NuGet][nuget-version-svg]][nuget-version-link]
[![Build Status][build-status-svg]][build-status-link]
[![Coverage Status][coverage-status-svg]][coverage-status-link]
[![Docs][docs-readthedocs-svg]][docs-readthedocs-link]
[![License][license-svg]][license-link]

## Table of contents

1. [Installation](#installation)
1. [Basic Usage](#basic-usage)
    1. [API Developer Guide](#api-developer-guide)
    1. [Initialization](#initialization)
        1. [Set User Agent Header](#set-user-agent-header)
    1. [OAuth 2.0 Authorization](#oauth-20-authorization)
        1. [Authorize](#authorize)
        1. [Refresh](#refresh)
        1. [Logout](#logout)
    1. [Quick Recipes](#quick-recipes)
        1. [Send SMS](#send-sms)
        1. [Send Fax](#send-fax)
        1. [Get Account Information](#get-account-information)
        1. [Get Address Book](#get-address-book)
        1. [Using x-http-method-override Header](#using-x-http-method-override-header)
    1. [Message Store](#message-store)
        1. [Get Message Store](#get-message-store)
        1. [Get Message Store First ID](#get-message-store-first-id)
        1. [Update Message Status](#update-message-status)
            1. [Update Message Status using x-http-override-header](#update-message-status-using-x-http-override-header)
        1. [Delete Message](#delete-message)
    1. [Subscription](#subscription)
        1. [Create Subscription](#create-subscription)
            1. [Enable SSL for Pubnub Subscription](#enable-ssl-for-pubnub-subscription)
            1. [Using Default Callbacks](#create-subscription-using-default-callbacks)
            1. [Using Explicit Callbacks](#create-subscription-using-explicit-callbacks)
        1. [Casting PubNub Notifications](#casting-pubnub-notifications)
            1. [Casting on Connect](#casting-on-connect)
            1. [Casting on Disconnect](#casting-on-disconnect)
            1. [Casting on Error](#casting-on-error)
        1. [Example PubNub Notification Message](#example-pubnub-notification-message)
        1. [Delete Subscription](#delete-subscription)
        1. [Unsubscribe from Subscription](#unsubscribe-from-subscription)
        1. [Access PubNub Message from Subscription](#access-pubnub-message-from-subscription)
1. [Links](#links)
1. [Support](#support)
1. [Contributions](#contributions)
1. [License](#license)

## Installation

Via NuGet

```
PM> Install-Package RingCentralSDK
```

This will download the RingCentral Portable Class Library into your project as well as the [PubNub PCL](https://github.com/pubnub/c-sharp "PubNub") dependencies. The NuGet package is compabible with .NET 4.0+, Xamarin.iOS, Xamarin.Android and Xamarin.Mac.


## Basic Usage

### API Developer Guide

This SDK wraps the RingCentral Connect Platform API which is documented in the [RingCentral Connect Platform Developer Guide](https://developer.ringcentral.com/api-docs/latest/index.html). For additional information, please refer to the Developer Guide.

### Initialization

```cs
//import RingCentral SDK
using RingCentral;

//Initialize RingCentral Client
var ringCentral = new SDK("your appKey", "your appSecret", "RingCentral server", "Application Name", "Application Version").Platform;
```

### OAuth 2.0 Authorization

#### Login

```cs
var response = ringCentral.Login(username, extension, password, true);
```

#### Refresh

```cs
var response = ringCentral.Refresh();
```

#### Logout

```cs
ringCentral.Logout();
```

### Quick Recipes

#### Send SMS
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/sms", jsonSmsString);
var response = ringCentral.Post(request);
```

#### Send Fax
```cs
const string text = "Hello world!";

var byteArrayText = System.Text.Encoding.UTF8.GetBytes(text);
var attachment = new Attachment("test.txt", "application/octet-stream", byteArrayText);
var attachment2 = new Attachment("test2.txt", "text/plain", byteArrayText);
var pdfFile = File.ReadAllBytes("<PATH TO YOUR PDF>");
var attachment3 = new Attachment("<NAME OF YOUR PDF.pdf", "application/pdf", pdfFile);
var attachments = new List<Attachment> { attachment,attachment2, attachment3 };
var json = "{\"to\":[{\"phoneNumber\":\"<YOUR TARGET NUMBER>\"}],\"faxResolution\":\"High\"}";

var request = new Request("/restapi/v1.0/account/~/extension/~/fax", json, attachments);
var response = ringCentral.Post(request);
```

#### Get Account Information
```cs
var request = new Request("/restapi/v1.0/account/~");
var response = ringCentral.Get(request);
```

### Get Address Book
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/address-book/contact");
var response = ringCentral.Get(request);
```

#### Using HTTP method tunneling

Sometimes, due to different technical limitations, API clients cannot issue all HTTP methods. In the most severe case a client may be restricted to GET and POST methods only. To work around this situation the RingCentral API provides a mechanism for tunneling PUT and DELETE methods through POST.

```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/address-book/contact/" + contactId);
request.HttpMethodTunneling = true;
var response = sdk.Platform.Delete(request);
Assert.AreEqual(HttpMethod.Post, response.Request.Method);
```

### Message Store

#### Get Message Store
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store");
var response = ringCentral.Get(request);
```

#### Get Message Store First ID
```cs
var messageId = response.GetJson().SelectToken("records")[0].SelectToken("id");
```

#### Update Message Status
```cs
var messageStatusJson = "{\"readStatus\": \"Read\"}";
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store/" + messageId, messageStatusJson);
var response = ringCentral.Put(request);
```

##### Update Message Status using HTTP method tunneling
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store/" + messageId, messageStatusJson);
request.HttpMethodTunneling = true;
var response = ringCentral.Put(request);
```

#### Delete Message
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store/" + messageId);
var response = ringCentral.Delete(request);
```

### Subscription

RingCentral provides the ability to subscribe for event data using PubNub.

#### Create Subscription

##### Enable SSL for PubNub Subscription
To enable SSL for PubNub you will need to call the method
```cs  
subscription.EnableSSL(true);
```

before calling

```cs
subscription.Subscribe(null,null,null);
```

An Example of enabling SSL for Pubnub:

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral};
subscription.EnableSSL(true);
subscription.AddEvent("/restapi/v1.0/account/~/extension/~/presence");
var response = subscription.Subscribe(null,null,null);
```

Checking if SSL is enabled can be done by:
```cs
var isSSLOn = subscription.isSSL();
```

##### Create Subscription using Default Callbacks

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral};
subscription.AddEvent("/restapi/v1.0/account/~/extension/~/presence");
var response = subscription.Subscribe(null,null,null);
```

Alternatively you can set Event Filters by:
```cs
subscription.SetEvent(listOfEvents);
```
Where listOfEvents is a List<string> containing each event to subscribe to.

##### Create Subscription using Explicit Callbacks

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral};
subscription.AddEvent("/restapi/v1.0/account/~/extension/~/presence");
var response = subscription.Subscribe(ActionOnNotification,ActionOnConnect,ActionOnError);
```
Note: You can assign the callback action for disconnect on initialization. Disconnect Action fired upon PubNub disconnect

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral, disconnectAction = ActionOnDisconnect};
```

Or after initialization

```cs
subscription.disconnectAction =  ActionOnDisconnect;
```

All callbacks must take only one parameter of type object.  See below for proper casting on actions.

#### Casting PubNub Notifications

**This will return an object that can easily be cast to a string or a JArray (Json.Net)**
**Messages will be decrypted, if required, before being passed to Actions. See below for an example of JSON returned.**

Use a JArray to grab a token

```cs
public void ActionOnMessage(object message) {
    var ReceivedMessage = ((JArray)message).SelectToken("[0].body.changes[0].type");
}
```

Or string for other JSON parsing

```cs
public void ActionOnMessage(object message) {
    var ReceivedMessage = message.ToString();
}
```

##### Casting on Connect

Use a JArray to grab a token.

```cs
public void ActionOnConnect(object message){
    var receivedMessage = ((JArray)receivedMessage).SelectToken("[1]");
}
```

Or string for other JSON parsing

```cs
public void ActionOnConnect(object message) {
    var ReceivedMessage = message.ToString();
}
```

##### Casting on Disconnect

Note: Disconnect messages are not deserializable JSON.

```cs
public void ActionOnDisconnect(object message) {
    var receivedMessage = message.ToString();
}
```

##### Casting on Error

Note: PubNub error messages are not deserializable JSON.

```cs
public void ActionOnError(object error) {
    var receivedMessage = message.ToString();
}
```

#### Example PubNub Notification Message

This example provides some possible tokens for JSON parsing of PubNub Notification message

```json
[
	{
	  "event": "/restapi/v1.0/account/~/extension/111/message-store",
	  "body": {
	    "lastUpdated": "2015-10-10T21:28:43.094-07:00",
	    "changes": [
	      {
	        "newCount": 0,
	        "updatedCount": 1,
	        "type": "Fax"
	      },
	      {
	        "newCount": 2,
	        "updatedCount": 0,
	        "type": "SMS"
	      }
	    ],
	    "extensionId": 1111
	  },
	  "uuid": "111-222-333-444",
	  "timestamp": "2015-10-11T04:28:51.821Z"
	}
]
```

#### Delete Subscription

```cs
var response = subscription.Remove();
```

#### Unsubscribe from Subscription

Note: If you provided a callback action for PubNub disconnect it will fire once during unsubscribe.

```cs
subscription.Unsubscribe();
```

#### Access PubNub Message from Subscription

```cs
var notificationMessage = subscription.ReturnMessage("notification");
var connectMessage = subscription.ReturnMessage("connectMessage");
var disconnectMessage = subscriptionS.ReturnMessage("disconnectMessage");
var errorMessage = subscription.ReturnMessage("errorMessage");
```

## Links

Project Repo

* https://github.com/ringcentral/ringcentral-csharp

RingCentral Developer Site

* https://developer.ringcentral.com

RingCentral API Docs

* https://developer.ringcentral.com/library.html

RingCentral API Explorer

* http://ringcentral.github.io/api-explorer

RingCentral GitHub Organization

* https://github.com/ringcentral

## Support

For support using this SDK, please use the following resources:

1. [RingCentral Developer Community](https://devcommunity.ringcentral.com)
1. [RingCentral C# SDK GitHub repo](https://github.com/ringcentral/ringcentral-csharp)
1. [Stack Overflow](http://stackoverflow.com/)

## Contributions

Any reports of problems, comments or suggestions are most welcome.

Please report these on [Github](https://github.com/ringcentral/ringcentral-csharp)

## License

RingCentral SDK is available under an MIT-style license. See [LICENSE](LICENSE) for details.

RingCentral SDK &copy; 2015-2016 by RingCentral, Inc.

 [nuget-version-svg]: https://img.shields.io/nuget/v/RingCentralSDK.svg
 [nuget-version-link]: http://www.nuget.org/packages/RingCentralSDK/
 [nuget-count-svg]: https://img.shields.io/nuget/dt/RingCentralSDK.svg
 [nuget-count-link]: http://www.nuget.org/packages/RingCentralSDK/
 [build-status-svg]: https://ci.appveyor.com/api/projects/status/ka1g6n869rxw81g4?svg=true
 [build-status-link]: https://ci.appveyor.com/project/paulzolnierczyk/ringcentral-csharp
 [coverage-status-svg]: https://coveralls.io/repos/ringcentral/ringcentral-csharp/badge.svg?branch=develop&service=github
 [coverage-status-link]: https://coveralls.io/github/ringcentral/ringcentral-csharp
 [docs-readthedocs-svg]: https://img.shields.io/badge/docs-readthedocs-blue.svg
 [docs-readthedocs-link]: http://ringcentral-csharp.readthedocs.org/
 [license-svg]: https://img.shields.io/badge/license-MIT-blue.svg
 [license-link]: https://github.com/ringcentral/ringcentral-csharp/blob/master/LICENSE<commit_msg>Fix typos, update links, format code<commit_after># RingCentral SDK for C&#35;

[![NuGet][nuget-version-svg]][nuget-version-link]
[![Build Status][build-status-svg]][build-status-link]
[![Coverage Status][coverage-status-svg]][coverage-status-link]
[![Docs][docs-readthedocs-svg]][docs-readthedocs-link]
[![License][license-svg]][license-link]

## Table of contents

1. [Installation](#installation)
1. [Basic Usage](#basic-usage)
    1. [API Developer Guide](#api-developer-guide)
    1. [Initialization](#initialization)
    1. [OAuth 2.0 Authorization](#oauth-20-authorization)
        1. [Login](#login)
        1. [Refresh](#refresh)
        1. [Logout](#logout)
    1. [Quick Recipes](#quick-recipes)
        1. [Send SMS](#send-sms)
        1. [Send Fax](#send-fax)
        1. [Get Account Information](#get-account-information)
        1. [Get Address Book](#get-address-book)
        1. [Using HTTP method tunneling](#using-http-method-tunneling)
    1. [Message Store](#message-store)
        1. [Get Message Store](#get-message-store)
        1. [Get Message Store First ID](#get-message-store-first-id)
        1. [Update Message Status](#update-message-status)
            1. [Update Message Status using HTTP method tunneling](#update-message-status-using-http-method-tunneling)
        1. [Delete Message](#delete-message)
    1. [Subscription](#subscription)
        1. [Create Subscription](#create-subscription)
            1. [Enable SSL for Pubnub Subscription](#enable-ssl-for-pubnub-subscription)
            1. [Using Default Callbacks](#create-subscription-using-default-callbacks)
            1. [Using Explicit Callbacks](#create-subscription-using-explicit-callbacks)
        1. [Casting PubNub Notifications](#casting-pubnub-notifications)
            1. [Casting on Connect](#casting-on-connect)
            1. [Casting on Disconnect](#casting-on-disconnect)
            1. [Casting on Error](#casting-on-error)
        1. [Example PubNub Notification Message](#example-pubnub-notification-message)
        1. [Delete Subscription](#delete-subscription)
        1. [Unsubscribe from Subscription](#unsubscribe-from-subscription)
        1. [Access PubNub Message from Subscription](#access-pubnub-message-from-subscription)
1. [Links](#links)
1. [Support](#support)
1. [Contributions](#contributions)
1. [License](#license)

## Installation

Via NuGet

```
PM> Install-Package RingCentralSDK
```

This will download the RingCentral Portable Class Library into your project as well as the [PubNub PCL](https://github.com/pubnub/c-sharp "PubNub") dependencies. The NuGet package is compabible with .NET 4.0+, Xamarin.iOS, Xamarin.Android and Xamarin.Mac.


## Basic Usage

### API Developer Guide

This SDK wraps the RingCentral Connect Platform API which is documented in the [RingCentral Connect Platform Developer Guide](https://developer.ringcentral.com/api-docs/latest/index.html). For additional information, please refer to the Developer Guide.

### Initialization

```cs
//import RingCentral SDK
using RingCentral;

//Initialize RingCentral Client
var ringCentral = new SDK("your appKey", "your appSecret", "RingCentral server", "Application Name", "Application Version").Platform;
```

### OAuth 2.0 Authorization

#### Login

```cs
var response = ringCentral.Login(username, extension, password, true);
```

#### Refresh

```cs
var response = ringCentral.Refresh();
```

#### Logout

```cs
ringCentral.Logout();
```

### Quick Recipes

#### Send SMS
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/sms", jsonSmsString);
var response = ringCentral.Post(request);
```

#### Send Fax
```cs
const string text = "Hello world!";

var byteArrayText = System.Text.Encoding.UTF8.GetBytes(text);
var attachment = new Attachment("test.txt", "application/octet-stream", byteArrayText);
var attachment2 = new Attachment("test2.txt", "text/plain", byteArrayText);
var pdfFile = File.ReadAllBytes("<PATH TO YOUR PDF>");
var attachment3 = new Attachment("<NAME OF YOUR PDF.pdf", "application/pdf", pdfFile);
var attachments = new List<Attachment> { attachment,attachment2, attachment3 };
var json = "{\"to\":[{\"phoneNumber\":\"<YOUR TARGET NUMBER>\"}],\"faxResolution\":\"High\"}";

var request = new Request("/restapi/v1.0/account/~/extension/~/fax", json, attachments);
var response = ringCentral.Post(request);
```

#### Get Account Information
```cs
var request = new Request("/restapi/v1.0/account/~");
var response = ringCentral.Get(request);
```

### Get Address Book
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/address-book/contact");
var response = ringCentral.Get(request);
```

#### Using HTTP method tunneling

Sometimes, due to different technical limitations, API clients cannot issue all HTTP methods. In the most severe case a client may be restricted to GET and POST methods only. To work around this situation the RingCentral API provides a mechanism for tunneling PUT and DELETE methods through POST.

```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/address-book/contact/" + contactId);
request.HttpMethodTunneling = true;
var response = sdk.Platform.Delete(request);
Assert.AreEqual(HttpMethod.Post, response.Request.Method);
```

### Message Store

#### Get Message Store
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store");
var response = ringCentral.Get(request);
```

#### Get Message Store First ID
```cs
var messageId = response.GetJson().SelectToken("records")[0].SelectToken("id");
```

#### Update Message Status
```cs
var messageStatusJson = "{\"readStatus\": \"Read\"}";
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store/" + messageId, messageStatusJson);
var response = ringCentral.Put(request);
```

##### Update Message Status using HTTP method tunneling
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store/" + messageId, messageStatusJson);
request.HttpMethodTunneling = true;
var response = ringCentral.Put(request);
```

#### Delete Message
```cs
var request = new Request("/restapi/v1.0/account/~/extension/~/message-store/" + messageId);
var response = ringCentral.Delete(request);
```

### Subscription

RingCentral provides the ability to subscribe for event data using PubNub.

#### Create Subscription

##### Enable SSL for PubNub Subscription
To enable SSL for PubNub you will need to call the method
```cs  
subscription.EnableSSL(true);
```

before calling

```cs
subscription.Subscribe(null, null, null);
```

An Example of enabling SSL for Pubnub:

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral};
subscription.EnableSSL(true);
subscription.AddEvent("/restapi/v1.0/account/~/extension/~/presence");
var response = subscription.Subscribe(null, null, null);
```

Checking if SSL is enabled can be done by:
```cs
var isSSLOn = subscription.isSSL();
```

##### Create Subscription using Default Callbacks

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral};
subscription.AddEvent("/restapi/v1.0/account/~/extension/~/presence");
var response = subscription.Subscribe(null, null, null);
```

Alternatively you can set Event Filters by:
```cs
subscription.SetEvent(listOfEvents);
```
Where listOfEvents is a List<string> containing each event to subscribe to.

##### Create Subscription using Explicit Callbacks

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral};
subscription.AddEvent("/restapi/v1.0/account/~/extension/~/presence");
var response = subscription.Subscribe(ActionOnNotification, ActionOnConnect, ActionOnError);
```
Note: You can assign the callback action for disconnect on initialization. Disconnect Action fired upon PubNub disconnect

```cs
var subscription = new SubscriptionServiceImplementation(){ _platform = ringCentral, disconnectAction = ActionOnDisconnect};
```

Or after initialization

```cs
subscription.disconnectAction =  ActionOnDisconnect;
```

All callbacks must take only one parameter of type object.  See below for proper casting on actions.

#### Casting PubNub Notifications

**This will return an object that can easily be cast to a string or a JArray (Json.Net)**
**Messages will be decrypted, if required, before being passed to Actions. See below for an example of JSON returned.**

Use a JArray to grab a token

```cs
public void ActionOnMessage(object message) {
    var ReceivedMessage = ((JArray)message).SelectToken("[0].body.changes[0].type");
}
```

Or string for other JSON parsing

```cs
public void ActionOnMessage(object message) {
    var ReceivedMessage = message.ToString();
}
```

##### Casting on Connect

Use a JArray to grab a token.

```cs
public void ActionOnConnect(object message){
    var receivedMessage = ((JArray)receivedMessage).SelectToken("[1]");
}
```

Or string for other JSON parsing

```cs
public void ActionOnConnect(object message) {
    var ReceivedMessage = message.ToString();
}
```

##### Casting on Disconnect

Note: Disconnect messages are not deserializable JSON.

```cs
public void ActionOnDisconnect(object message) {
    var receivedMessage = message.ToString();
}
```

##### Casting on Error

Note: PubNub error messages are not deserializable JSON.

```cs
public void ActionOnError(object error) {
    var receivedMessage = message.ToString();
}
```

#### Example PubNub Notification Message

This example provides some possible tokens for JSON parsing of PubNub Notification message

```json
[
	{
	  "event": "/restapi/v1.0/account/~/extension/111/message-store",
	  "body": {
	    "lastUpdated": "2015-10-10T21:28:43.094-07:00",
	    "changes": [
	      {
	        "newCount": 0,
	        "updatedCount": 1,
	        "type": "Fax"
	      },
	      {
	        "newCount": 2,
	        "updatedCount": 0,
	        "type": "SMS"
	      }
	    ],
	    "extensionId": 1111
	  },
	  "uuid": "111-222-333-444",
	  "timestamp": "2015-10-11T04:28:51.821Z"
	}
]
```

#### Delete Subscription

```cs
var response = subscription.Remove();
```

#### Unsubscribe from Subscription

Note: If you provided a callback action for PubNub disconnect it will fire once during unsubscribe.

```cs
subscription.Unsubscribe();
```

#### Access PubNub Message from Subscription

```cs
var notificationMessage = subscription.ReturnMessage("notification");
var connectMessage = subscription.ReturnMessage("connectMessage");
var disconnectMessage = subscription.ReturnMessage("disconnectMessage");
var errorMessage = subscription.ReturnMessage("errorMessage");
```

## Links

Project Repo

* https://github.com/ringcentral/ringcentral-csharp

RingCentral Developer Site

* https://developer.ringcentral.com

RingCentral API Docs

* https://developer.ringcentral.com/library.html

RingCentral API Explorer

* http://ringcentral.github.io/api-explorer

RingCentral GitHub Organization

* https://github.com/ringcentral

## Support

For support using this SDK, please use the following resources:

1. [RingCentral Developer Community](https://devcommunity.ringcentral.com)
1. [RingCentral C# SDK GitHub repo](https://github.com/ringcentral/ringcentral-csharp)
1. [Stack Overflow](http://stackoverflow.com/)

## Contributions

Any reports of problems, comments or suggestions are most welcome.

Please report these on [Github](https://github.com/ringcentral/ringcentral-csharp)

## License

RingCentral SDK is available under an MIT-style license. See [LICENSE](LICENSE) for details.

RingCentral SDK &copy; 2015-2016 by RingCentral, Inc.

[nuget-version-svg]: https://img.shields.io/nuget/v/RingCentralSDK.svg
[nuget-version-link]: http://www.nuget.org/packages/RingCentralSDK/
[nuget-count-svg]: https://img.shields.io/nuget/dt/RingCentralSDK.svg
[nuget-count-link]: http://www.nuget.org/packages/RingCentralSDK/
[build-status-svg]: https://ci.appveyor.com/api/projects/status/ka1g6n869rxw81g4?svg=true
[build-status-link]: https://ci.appveyor.com/project/paulzolnierczyk/ringcentral-csharp
[coverage-status-svg]: https://coveralls.io/repos/ringcentral/ringcentral-csharp/badge.svg?branch=develop&service=github
[coverage-status-link]: https://coveralls.io/github/ringcentral/ringcentral-csharp
[docs-readthedocs-svg]: https://img.shields.io/badge/docs-readthedocs-blue.svg
[docs-readthedocs-link]: http://ringcentral-csharp.readthedocs.org/
[license-svg]: https://img.shields.io/badge/license-MIT-blue.svg
[license-link]: https://github.com/ringcentral/ringcentral-csharp/blob/master/LICENSE
{'fraction_non_alphanumeric': 0.1426462962224261, 'fraction_numerical': 0.01304399856396346, 'mean_word_length': 4.675798052977134, 'pattern_counts': {'":': 34, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 36, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 14, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7260782', 'n_tokens_mistral': 8012, 'n_tokens_neox': 7291, 'n_words': 1982}