---
title: "Demo"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{demo}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

```{r setup}
library(ODataQuery)
```

## Introduction

Here I'll show some examples to use this package

## Create service

```{r}
service <- ODataQuery$new("https://services.odata.org/V4/TripPinServiceRW")
service$all()
```

## Entity set

```{r}
people_entity <- service$path("People")

# Get first page
people_entity$retrieve(count=TRUE)

# Get all pages
people_entity$select("UserName", "FirstName", "LastName")$all()
```


## Singleton

```{r}
russellwhyte <- people_entity$get("russellwhyte")
first_person <- people_entity$top(1)$one()
head(first_person)

russellwhyte_friends <- russellwhyte$path("Friends")
russellwhyte_friends$all()
```

## Function call

```{r}
get_nearest_airport <- service$func('GetNearestAirport')
get_nearest_airport(lat = 33, lon = -118)
```

## Querying

```{r}
people_query <- people_entity$
  top(5)$
  select('FirstName', 'LastName')$
  filter(Concurrency.gt = 500)$
  expand('Friends($count=true)')$
  orderby('LastName')

people_query$all()
```

## Other endpoints

### Statistics, the Netherlands

```{r eval=FALSE}
opendata_service <- ODataQuery$new("http://beta-odata4.cbs.nl/")
entity_81589NED  <- opendata_service$path("CBS", "81589NED", Observations")
dataset_81589NED <- entity_81589NED$all()
```

### Northwind (OData v2)

Connecting with older OData v2 works, but some features have been changed.

```{r eval=FALSE}
northwind_service <- ODataQuery$new("https://services.odata.org/V2/Northwind/Northwind.svc/")
customer_entity <- northwind_service$path("Customers")
customer_entity$
  select("CompanyName", "Address", "Phone")$
  filter(Country.eq = "Germany", City.eq = "Berlin")
```

### The Hague

So far, I haven't been able to figure out how their data model works, but at least we can connect to it.

```{r eval=FALSE}
denhaag_service <- ODataQuery$new("https://denhaag.incijfers.nl/jiveservices/odata/")
denhaag_service$path('DataSources')
```

