diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5b6a065 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.Rproj.user +.Rhistory +.RData +.Ruserdata diff --git a/Opportunity_Scoring.Rproj b/Opportunity_Scoring.Rproj new file mode 100644 index 0000000..8e3c2eb --- /dev/null +++ b/Opportunity_Scoring.Rproj @@ -0,0 +1,13 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX diff --git a/opportunityscoring/.Rbuildignore b/opportunityscoring/.Rbuildignore new file mode 100644 index 0000000..4341958 --- /dev/null +++ b/opportunityscoring/.Rbuildignore @@ -0,0 +1,6 @@ +^.*\.Rproj$ +^\.Rproj\.user$ +^data-raw$ +dev_history.R +^dev$ +$run_dev.* diff --git a/opportunityscoring/DESCRIPTION b/opportunityscoring/DESCRIPTION new file mode 100644 index 0000000..319797a --- /dev/null +++ b/opportunityscoring/DESCRIPTION @@ -0,0 +1,17 @@ +Package: opportunityscoring +Title: An Amazing Shiny App +Version: 0.0.0.9000 +Authors@R: + person(given = "firstname", + family = "lastname", + role = c("aut", "cre"), + email = "your@email.com") +Description: What the package does (one paragraph). +License: What license is it under? +Imports: + config (>= 0.3.1), + golem (>= 0.3.1), + shiny (>= 1.7.1) +Encoding: UTF-8 +LazyData: true +RoxygenNote: 7.1.1 diff --git a/opportunityscoring/NAMESPACE b/opportunityscoring/NAMESPACE new file mode 100644 index 0000000..2b8d54c --- /dev/null +++ b/opportunityscoring/NAMESPACE @@ -0,0 +1,10 @@ +# Generated by roxygen2: do not edit by hand + +export(run_app) +import(shiny) +importFrom(golem,activate_js) +importFrom(golem,add_resource_path) +importFrom(golem,bundle_resources) +importFrom(golem,favicon) +importFrom(golem,with_golem_options) +importFrom(shiny,shinyApp) diff --git a/opportunityscoring/R/app_config.R b/opportunityscoring/R/app_config.R new file mode 100644 index 0000000..0b0b270 --- /dev/null +++ b/opportunityscoring/R/app_config.R @@ -0,0 +1,43 @@ +#' Access files in the current app +#' +#' NOTE: If you manually change your package name in the DESCRIPTION, +#' don't forget to change it here too, and in the config file. +#' For a safer name change mechanism, use the `golem::set_golem_name()` function. +#' +#' @param ... character vectors, specifying subdirectory and file(s) +#' within your package. The default, none, returns the root of the app. +#' +#' @noRd +app_sys <- function(...){ + system.file(..., package = "opportunityscoring") +} + + +#' Read App Config +#' +#' @param value Value to retrieve from the config file. +#' @param config GOLEM_CONFIG_ACTIVE value. If unset, R_CONFIG_ACTIVE. +#' If unset, "default". +#' @param use_parent Logical, scan the parent directory for config file. +#' +#' @noRd +get_golem_config <- function( + value, + config = Sys.getenv( + "GOLEM_CONFIG_ACTIVE", + Sys.getenv( + "R_CONFIG_ACTIVE", + "default" + ) + ), + use_parent = TRUE +){ + config::get( + value = value, + config = config, + # Modify this if your config file is somewhere else: + file = app_sys("golem-config.yml"), + use_parent = use_parent + ) +} + diff --git a/opportunityscoring/R/app_server.R b/opportunityscoring/R/app_server.R new file mode 100644 index 0000000..de54407 --- /dev/null +++ b/opportunityscoring/R/app_server.R @@ -0,0 +1,10 @@ +#' The application server-side +#' +#' @param input,output,session Internal parameters for {shiny}. +#' DO NOT REMOVE. +#' @import shiny +#' @noRd +app_server <- function( input, output, session ) { + # Your application server logic + +} diff --git a/opportunityscoring/R/app_ui.R b/opportunityscoring/R/app_ui.R new file mode 100644 index 0000000..554d51e --- /dev/null +++ b/opportunityscoring/R/app_ui.R @@ -0,0 +1,42 @@ +#' The application User-Interface +#' +#' @param request Internal parameter for `{shiny}`. +#' DO NOT REMOVE. +#' @import shiny +#' @noRd +app_ui <- function(request) { + tagList( + # Leave this function for adding external resources + golem_add_external_resources(), + # Your application UI logic + fluidPage( + h1("opportunityscoring") + ) + ) +} + +#' Add external Resources to the Application +#' +#' This function is internally used to add external +#' resources inside the Shiny application. +#' +#' @import shiny +#' @importFrom golem add_resource_path activate_js favicon bundle_resources +#' @noRd +golem_add_external_resources <- function(){ + + add_resource_path( + 'www', app_sys('app/www') + ) + + tags$head( + favicon(), + bundle_resources( + path = app_sys('app/www'), + app_title = 'opportunityscoring' + ) + # Add here other external resources + # for example, you can add shinyalert::useShinyalert() + ) +} + diff --git a/opportunityscoring/R/run_app.R b/opportunityscoring/R/run_app.R new file mode 100644 index 0000000..dba59cf --- /dev/null +++ b/opportunityscoring/R/run_app.R @@ -0,0 +1,28 @@ +#' Run the Shiny Application +#' +#' @param ... arguments to pass to golem_opts. +#' See `?golem::get_golem_options` for more details. +#' @inheritParams shiny::shinyApp +#' +#' @export +#' @importFrom shiny shinyApp +#' @importFrom golem with_golem_options +run_app <- function( + onStart = NULL, + options = list(), + enableBookmarking = NULL, + uiPattern = "/", + ... +) { + with_golem_options( + app = shinyApp( + ui = app_ui, + server = app_server, + onStart = onStart, + options = options, + enableBookmarking = enableBookmarking, + uiPattern = uiPattern + ), + golem_opts = list(...) + ) +} diff --git a/opportunityscoring/dev/01_start.R b/opportunityscoring/dev/01_start.R new file mode 100644 index 0000000..2a23d83 --- /dev/null +++ b/opportunityscoring/dev/01_start.R @@ -0,0 +1,65 @@ +# Building a Prod-Ready, Robust Shiny Application. +# +# README: each step of the dev files is optional, and you don't have to +# fill every dev scripts before getting started. +# 01_start.R should be filled at start. +# 02_dev.R should be used to keep track of your development during the project. +# 03_deploy.R should be used once you need to deploy your app. +# +# +######################################## +#### CURRENT FILE: ON START SCRIPT ##### +######################################## + +## Fill the DESCRIPTION ---- +## Add meta data about your application +## +## /!\ Note: if you want to change the name of your app during development, +## either re-run this function, call golem::set_golem_name(), or don't forget +## to change the name in the app_sys() function in app_config.R /!\ +## +golem::fill_desc( + pkg_name = "kfoppscore", # The Name of the package containing the App + pkg_title = "Opportunity Scoring for Kraft Heinz", # The Title of the package containing the App + pkg_description = "Scoring of Opportunities", # The Description of the package containing the App + author_first_name = "Scary", # Your First Name + author_last_name = "Scarecrow", # Your Last Name + author_email = "asitav.sen@lanubia.com", # Your Email + repo_url = "https://codes.tools.lanubia.com/kraftheinz/Opportunity_Scoring.git" # The URL of the GitHub Repo (optional) +) + +## Set {golem} options ---- +golem::set_golem_options() + +## Create Common Files ---- +## See ?usethis for more information +usethis::use_mit_license( "LaNubia Consulting" ) # You can set another license here +usethis::use_readme_rmd( open = FALSE ) +usethis::use_code_of_conduct() +usethis::use_lifecycle_badge( "Experimental" ) +usethis::use_news_md( open = FALSE ) + +## Use git ---- +usethis::use_git() + +## Init Testing Infrastructure ---- +## Create a template for tests +golem::use_recommended_tests() + +## Use Recommended Packages ---- +golem::use_recommended_deps() + +## Favicon ---- +# If you want to change the favicon (default is golem's one) +#golem::use_favicon() # path = "path/to/ico". Can be an online file. +golem::remove_favicon() + +## Add helper functions ---- +golem::use_utils_ui() +golem::use_utils_server() + +# You're now set! ---- + +# go to dev/02_dev.R +rstudioapi::navigateToFile( "dev/02_dev.R" ) + diff --git a/opportunityscoring/dev/02_dev.R b/opportunityscoring/dev/02_dev.R new file mode 100644 index 0000000..bf51c4d --- /dev/null +++ b/opportunityscoring/dev/02_dev.R @@ -0,0 +1,95 @@ +# Building a Prod-Ready, Robust Shiny Application. +# +# README: each step of the dev files is optional, and you don't have to +# fill every dev scripts before getting started. +# 01_start.R should be filled at start. +# 02_dev.R should be used to keep track of your development during the project. +# 03_deploy.R should be used once you need to deploy your app. +# +# +################################### +#### CURRENT FILE: DEV SCRIPT ##### +################################### + +# Engineering + +## Dependencies ---- +## Add one line by package you want to add as dependency +usethis::use_package( "thinkr" ) + +## Add modules ---- +## Create a module infrastructure in R/ +golem::add_module( name = "name_of_module1" ) # Name of the module +golem::add_module( name = "name_of_module2" ) # Name of the module + +## Add helper functions ---- +## Creates fct_* and utils_* +golem::add_fct( "helpers" ) +golem::add_utils( "helpers" ) + +## External resources +## Creates .js and .css files at inst/app/www +golem::add_js_file( "script" ) +golem::add_js_handler( "handlers" ) +golem::add_css_file( "custom" ) + +## Add internal datasets ---- +## If you have data in your package +usethis::use_data_raw( name = "my_dataset", open = FALSE ) + +## Tests ---- +## Add one line by test you want to create +usethis::use_test( "app" ) + +# Documentation + +## Vignette ---- +usethis::use_vignette("opportunityscoring") +devtools::build_vignettes() + +## Code Coverage---- +## Set the code coverage service ("codecov" or "coveralls") +usethis::use_coverage() + +# Create a summary readme for the testthat subdirectory +covrpage::covrpage() + +## CI ---- +## Use this part of the script if you need to set up a CI +## service for your application +## +## (You'll need GitHub there) +usethis::use_github() + +# GitHub Actions +usethis::use_github_action() +# Chose one of the three +# See https://usethis.r-lib.org/reference/use_github_action.html +usethis::use_github_action_check_release() +usethis::use_github_action_check_standard() +usethis::use_github_action_check_full() +# Add action for PR +usethis::use_github_action_pr_commands() + +# Travis CI +usethis::use_travis() +usethis::use_travis_badge() + +# AppVeyor +usethis::use_appveyor() +usethis::use_appveyor_badge() + +# Circle CI +usethis::use_circleci() +usethis::use_circleci_badge() + +# Jenkins +usethis::use_jenkins() + +# GitLab CI +usethis::use_gitlab_ci() + +# You're now set! ---- +# go to dev/03_deploy.R +rstudioapi::navigateToFile("dev/03_deploy.R") + diff --git a/opportunityscoring/dev/03_deploy.R b/opportunityscoring/dev/03_deploy.R new file mode 100644 index 0000000..6933b01 --- /dev/null +++ b/opportunityscoring/dev/03_deploy.R @@ -0,0 +1,42 @@ +# Building a Prod-Ready, Robust Shiny Application. +# +# README: each step of the dev files is optional, and you don't have to +# fill every dev scripts before getting started. +# 01_start.R should be filled at start. +# 02_dev.R should be used to keep track of your development during the project. +# 03_deploy.R should be used once you need to deploy your app. +# +# +###################################### +#### CURRENT FILE: DEPLOY SCRIPT ##### +###################################### + +# Test your app + +## Run checks ---- +## Check the package before sending to prod +devtools::check() +rhub::check_for_cran() + +# Deploy + +## Local, CRAN or Package Manager ---- +## This will build a tar.gz that can be installed locally, +## sent to CRAN, or to a package manager +devtools::build() + +## RStudio ---- +## If you want to deploy on RStudio related platforms +golem::add_rstudioconnect_file() +golem::add_shinyappsio_file() +golem::add_shinyserver_file() + +## Docker ---- +## If you want to deploy via a generic Dockerfile +golem::add_dockerfile() + +## If you want to deploy to ShinyProxy +golem::add_dockerfile_shinyproxy() + +## If you want to deploy to Heroku +golem::add_dockerfile_heroku() diff --git a/opportunityscoring/dev/run_dev.R b/opportunityscoring/dev/run_dev.R new file mode 100644 index 0000000..6729c32 --- /dev/null +++ b/opportunityscoring/dev/run_dev.R @@ -0,0 +1,12 @@ +# Set options here +options(golem.app.prod = FALSE) # TRUE = production mode, FALSE = development mode + +# Detach all loaded packages and clean your environment +golem::detach_all_attached() +# rm(list=ls(all.names = TRUE)) + +# Document and reload your package +golem::document_and_reload() + +# Run the application +run_app() diff --git a/opportunityscoring/inst/golem-config.yml b/opportunityscoring/inst/golem-config.yml new file mode 100644 index 0000000..16fa9b5 --- /dev/null +++ b/opportunityscoring/inst/golem-config.yml @@ -0,0 +1,8 @@ +default: + golem_name: opportunityscoring + golem_version: 0.0.0.9000 + app_prod: no +production: + app_prod: yes +dev: + golem_wd: !expr here::here() diff --git a/opportunityscoring/man/run_app.Rd b/opportunityscoring/man/run_app.Rd new file mode 100644 index 0000000..6be75ea --- /dev/null +++ b/opportunityscoring/man/run_app.Rd @@ -0,0 +1,41 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/run_app.R +\name{run_app} +\alias{run_app} +\title{Run the Shiny Application} +\usage{ +run_app( + onStart = NULL, + options = list(), + enableBookmarking = NULL, + uiPattern = "/", + ... +) +} +\arguments{ +\item{onStart}{A function that will be called before the app is actually run. +This is only needed for \code{shinyAppObj}, since in the \code{shinyAppDir} +case, a \code{global.R} file can be used for this purpose.} + +\item{options}{Named options that should be passed to the \code{runApp} call +(these can be any of the following: "port", "launch.browser", "host", "quiet", +"display.mode" and "test.mode"). You can also specify \code{width} and +\code{height} parameters which provide a hint to the embedding environment +about the ideal height/width for the app.} + +\item{enableBookmarking}{Can be one of \code{"url"}, \code{"server"}, or +\code{"disable"}. The default value, \code{NULL}, will respect the setting from +any previous calls to \code{\link[shiny:enableBookmarking]{enableBookmarking()}}. See \code{\link[shiny:enableBookmarking]{enableBookmarking()}} +for more information on bookmarking your app.} + +\item{uiPattern}{A regular expression that will be applied to each \code{GET} +request to determine whether the \code{ui} should be used to handle the +request. Note that the entire request path must match the regular +expression in order for the match to be considered successful.} + +\item{...}{arguments to pass to golem_opts. +See `?golem::get_golem_options` for more details.} +} +\description{ +Run the Shiny Application +} diff --git a/opportunityscoring/opportunityscoring.Rproj b/opportunityscoring/opportunityscoring.Rproj new file mode 100644 index 0000000..eaa6b81 --- /dev/null +++ b/opportunityscoring/opportunityscoring.Rproj @@ -0,0 +1,18 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace