Giter VIP home page Giter VIP logo

ktsrunner's Introduction

KtsRunner

Build Status


KtsRunner is a light-weight tool that allows the execution of .kts (Kotlin Script) files from ordinary Kotlin programs. It's enabled by JSR 223 (Java Scripting Engines API).

Usage

Running a script from file system

A simple usage example for KtsRunner can be described as follows: The declaration of a class is placed in a .kts file, which is supposed to be loaded into a normal Kotlin program so that it can be processed further.

  1. Example class
data class ClassFromScript(val x: String)
  1. .kts file
import de.swirtz.ktsrunner.objectloader.ClassFromScript

ClassFromScript("I was created in kts")
  1. Code to load the object
val scriptReader = Files.newBufferedReader(Paths.get("path/classDeclaration.kts"))
val loadedObj: ClassFromScript = KtsObjectLoader().load<ClassFromScript>(scriptReader)
println(loadedObj.x)
// >> I was created in kts

As shown, the KtsObjectLoader can be used for executing a .kts script and getting its result. The example shows a script that creates an instance of the ClassFromScript type that is loaded via KtsObjectLoader and then processed in the regular program.

Executing scripts directly

The KtsObjectLoader also allows the evaluation of simple String based scripts:

val scriptContent = "5 + 10"
val fromScript: Int = KtsObjectLoader().load<Int>(scriptContent))
println(fromScript)
// >> 15

Application Area

You might want to use KtsRunner when some part of your application's source has to be outsourced from the regular code. As an example, you can think of an application that provides a test suite runtime. The actual test cases are provided by a QA team which writes their test scripts using a domain specific language that is provided by the main application. Since you don't want QA to add source files (defining new test cases) to your application all the time, the test case creation is made via independent .kts (Kotlin Scripting) files in which the DSL is being utilized. The test suite main application can use the presented KtsRunner library for loading the test cases provided in .kts files and process them further afterward.

Controlling the ClassLoader

When instantiating an KtsObjectLoader, you can provide an explicit classloader as shown in this test case:

 @Test
    fun `when passing a custom classloader, it should be used when loading the script`() {
        val myCl = object : ClassLoader() {
            override fun loadClass(name: String?): Class<*> {
                throw IllegalStateException()
            }
        }
       assertExceptionThrownBy<IllegalStateException> {
           KtsObjectLoader(myCl).load("anything")
       }
    }

Getting Started

In your Gradle build, simply include the following repository and dependency:

maven { 
    setUrl("https://dl.bintray.com/s1m0nw1/KtsRunner")
}
dependencies {
    //...
    implementation("de.swirtz:ktsRunner:0.0.x")
}

ktsrunner's People

Contributors

s1monw1 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.