-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #7 from andyquinterom/T6
Adds README and fixes Description
- Loading branch information
Showing
7 changed files
with
156 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,5 @@ | ||
^LICENSE\.md$ | ||
^\.github$ | ||
^_pkgdown\.yml$ | ||
^docs$ | ||
^pkgdown$ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples | ||
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help | ||
on: | ||
push: | ||
branches: [main] | ||
|
||
name: pkgdown | ||
|
||
jobs: | ||
pkgdown: | ||
runs-on: ubuntu-latest | ||
# Only restrict concurrency for non-PR jobs | ||
concurrency: | ||
group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} | ||
env: | ||
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | ||
permissions: | ||
contents: write | ||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- uses: r-lib/actions/setup-pandoc@v2 | ||
|
||
- uses: r-lib/actions/setup-r@v2 | ||
with: | ||
use-public-rspm: true | ||
|
||
- uses: r-lib/actions/setup-r-dependencies@v2 | ||
with: | ||
extra-packages: any::pkgdown, local::. | ||
needs: website | ||
|
||
- name: Build site | ||
run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) | ||
shell: Rscript {0} | ||
|
||
- name: Deploy to GitHub pages 🚀 | ||
if: github.event_name != 'pull_request' | ||
uses: JamesIves/[email protected] | ||
with: | ||
clean: false | ||
branch: gh-pages | ||
folder: docs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -47,3 +47,4 @@ po/*~ | |
|
||
# RStudio Connect folder | ||
rsconnect/ | ||
docs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,76 @@ | ||
# tower | ||
|
||
<!-- badges: start --> | ||
[![R-CMD-check](https://github.com/ixpantia/tower/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/ixpantia/tower/actions/workflows/R-CMD-check.yaml) | ||
<!-- badges: end --> | ||
|
||
Dead simple middleware for R Shiny. | ||
|
||
## Summary | ||
|
||
`tower` is a simple library for adding middleware to Shiny applications. | ||
It is inspired by the [tower](https://docs.rs/tower/latest/tower/) crate for Rust. | ||
It is designed to enable package authors and Shiny developers to extend | ||
Shiny a little bit more than what is usually possible. | ||
|
||
You can use `tower` to add middlewares that forward, modify, or intercept | ||
requests in Shiny applications. This can be useful for adding logging, authentication, | ||
caching, or routing to your Shiny applications. | ||
|
||
## Installation | ||
|
||
You can install the development version of `tower` from GitHub with: | ||
|
||
``` r | ||
# install.packages("remotes") | ||
remotes::install_github("ixpantia/tower") | ||
``` | ||
|
||
## Example | ||
|
||
We may want to add a new route to our Shiny application that adds a count | ||
to a counter every time a user visits the route. We can do this with `tower` | ||
by adding a middleware that intercepts the request and increments the counter. | ||
|
||
``` r | ||
library(shiny) | ||
library(tower) | ||
|
||
# Counter environment | ||
COUNTER <- new.env() | ||
COUNTER$counter <- 0 | ||
|
||
# Middleware to increment the counter | ||
increment_counter <- function(req) { | ||
if (req$PATH_INFO == "/increment") { | ||
COUNTER$counter <- COUNTER$counter + 1 | ||
return( | ||
httpResponse( | ||
200, | ||
"text/plain", | ||
paste("Counter is now", COUNTER$counter) | ||
) | ||
) | ||
} | ||
} | ||
|
||
# A very empty Shiny app (not necessary for the demo) | ||
ui <- fluidPage() | ||
server <- function(input, output, session) {} | ||
|
||
shinyApp(ui, server) |> | ||
create_tower() |> | ||
add_http_layer(increment_counter) |> | ||
build_tower() | ||
``` | ||
|
||
If you run the code above and visit the route `/increment` in your browser, | ||
you will see the counter increment every time you visit the route. | ||
|
||
## How it works | ||
|
||
Basically, `tower` adds layers to a Shiny application. A layer is a function | ||
that takes a request and returns either a response or NULL. If a layer returns | ||
a response, the response is sent to the client and the request is not forwarded | ||
to the next layer. If a layer returns NULL, the request is forwarded to the next | ||
layer. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
url: ~ | ||
template: | ||
bootstrap: 5 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
library(shiny) | ||
library(tower) | ||
|
||
# Counter environment | ||
COUNTER <- new.env() | ||
COUNTER$counter <- 0 | ||
|
||
# Middleware to increment the counter | ||
increment_counter <- function(req) { | ||
if (req$PATH_INFO == "/increment") { | ||
COUNTER$counter <- COUNTER$counter + 1 | ||
return( | ||
httpResponse( | ||
200, | ||
"text/plain", | ||
paste("Counter is now", COUNTER$counter) | ||
) | ||
) | ||
} | ||
} | ||
|
||
# A very empty Shiny app (not necesarry for the demo) | ||
ui <- fluidPage() | ||
server <- function(input, output, session) {} | ||
|
||
shinyApp(ui, server) |> | ||
create_tower() |> | ||
add_http_layer(increment_counter) |> | ||
build_tower() |