README.md

# Scripting

The Scripting module is a no-dependency portable elixir module that
  eases starting and writing scripts in elixir.

# Resources

## generator

The generator can be used to create a script starting point template. It can
generate templates or embed the `Scripting` module either as a BEAM or source
for the most portability.

The generator is written using the `Scripting` module.

## presentation

Check out the `presentation` directory for a progression of examples
for scripts.

Please read the next section about making `Scripting` available for thse
examples.

# Embed `Scripting`

The scripting project does not have any dependencies and does not
require `mix`. This project can be added as a dependency to another
mix project and then used for writing scripts run with `mix run`.

The more interesting use case is writing stand-alone script that only
depends on access to `elixir`, the base install.

## For development

Compile the module:

```elixir
elixirc lib/scripting.ex
```

This will create `Elixir.Scripting.beam`. A script under development can
be run directly as long as this beam file is in your current directory since `.`
is in the default code loading path.

## For portability

The following strategies can be used to portably deploy a script:

### Colocate the beam file

Put a copy of the `Elixir.Scripting.beam` file into the same directory as
your script and add the following line as the second line of your script:

```elixir
Code.append_path( Path.dirname( __ENV__.file() ) )
```

`__ENV__.file()` will resolve to the full path of the script being run
and is conceptually the same as argv0.

### Install a common copy

Put a copy of the beam file into a common directory. For example,
a ~/ebin, add this as your line 2:

```elixir
Code.append_path( Path.join( System.user_home(), "ebin" ) )
```

### Embed `Scripting`

The `generator` can embed the source of the module or the beam file itself
into your script. Look at embed-with-source or embed-with-beam. These will
wrap your script and output to a new file. The script is still source and can be
edited.

Note that embedding the beam file is more portable than you might expect. A beam
file compiled on x86 can be used on an ARM, and vice-versa. The only real requirement
is that the emulator version has to be equal or greater than the one it's compiled
with. The generator will also embed a check of the beam version.


## Installation

Install as a dependency with:

```elixir
def deps do
  [
    {:scripting, "~> 1.0.0"}
  ]
end
```

To develop independent script, clone this repo:

`git clone https://github.com/danj3/scripting`

Documentation is at [https://hexdocs.pm/scripting/](https://hexdocs.pm/scripting/).