# Granger
[![AppVeyor](https://img.shields.io/appveyor/ci/jkent/granger.svg?style=flat-square)](https://ci.appveyor.com/project/jkent/granger)
[![Travis-CI](https://travis-ci.org/GrangerHub/granger.svg?branch=master "Travis-CI")](https://travis-ci.org/GrangerHub/granger)
### Lua API documentation
`os.access(p, mode)`
Checks that the file is executable/writable/readable. `mode` is a string of the characters "rwx".
`os.chdir(p)`
Change the current working directory.
`os.copyfile(src, dst)`
Copy a file from one location to another.
`os.elevate()`
Attempts to re-run process under elevated privlidges, returning true if elevated or false if unsuccessful.
`os.get()`
Retrieve the current operating system ID string.
`os.getcwd()`
Retrieve the current working directory.
`os.is(id)`
Check the current operating system.
`os.is64bit()`
Determine if the current system is running a 64-bit architecture.
`os.isdir(p)`
Returns true if the specified directory exists.
`os.isfile(p)`
Returns true if the given file exists.
`os.matchdirs(p)`
Performs a wildcard match to locate one or more directories.
`os.matchfiles(p)`
Performs a wildcard match to locate one or more files.
`os.mkdir(p)`
An overload of os.mkdir() function, which will create any missing subdirectories along the path.
`os.outputof(cmd)`
Run a shell command and return the output.
`os.pathsearch(p, path1, ...)`
Locates a file, given a set of search paths.
`os.rmdir(p)`
Remove a directory, along with any contained files or subdirectories.
`os.stat(p)`
Retrieve information about a file.
`path.getbasename(p)`
Retrieve the filename portion of a path, without any extension.
`path.getabsolute(p)`
Returns an absolute version of a relative path.
`path.getdirectory(p)`
Retrieve the directory portion of a path, or an empty string if the path does not include a directory.
`path.getdrive(p)`
Retrieve the drive letter, if a Windows path.
`path.getextension(p)`
Retrieve the file extension.
`path.getname(p)`
Retreive the filename portion of a path.
`path.getrelative(p1, p2)`
Returns a path relative to another.
`path.isabsolute(p)`
Determines if a path is absolute or relative.
`path.join(...)`
Builds a path from two or more path parts.
`path.normalize(p)`
Removes any wwirdness from a file system path string.
`path.rebase(p, oldbase, newbase)`
Takes a path which is relative to one location and makes it relative to another location instead.
`path.translate(p, sep)`
Convert the separators in a path from one form to another. If `sep` is nil, then a platform-specific separator is used.
`path.wildcards(pattern)`
Converts from a simple wildcard syntax, where * is "match any" and ** is "match recursive", to the corresponding Lua pattern.
`string.explode(s, pattern, plain)`
Returns an array of strings, each which is a substring of `s` formed by splitting on boundaries formed by `pattern`.
`string.endswith(haystack, needle)`
Returns true if `haystack` ends with `needle`.
`string.findlast(s, pattern, plain)`
Find the last instance of a pattern in a string.
`string.startswith(haystack, needle)`
Returns true if `haystack` starts with `needle`.
`table.contains(t, value)`
Returns true if the table contains the specified value.
`table.extract(arr, fname)`
Enumerates an array of objects and returns a new table containing only the value of one particular field.
`table.flatten(arr)`
Flattens a hierarchy of tables into a single array containing all of the values.
`table.implode(arr, before, after, between)`
Merges an array of items into a string.
`table.insertflat(tbl, values)`
Inserts a value of array of values into a table. If the value is itself a table, its contents are enumerated and added instead. So these inputs give these outputs:
"x" -> { "x" }
{ "x", "y" } -> { "x", "y" }
{ "x", { "y" }} -> { "x", "y" }
`table.isempty(t)`
Returns true of the table is empty, and contains no indexed or keyed values.
`table.join(...)`
Adds the values from one array to the end of another and returns the result.
`table.keys(tbl)`
Return a list of all the keys used in a table.
`table.merge(...)`
Adds the key-value associations from one table into another and returns the resulting merged table.
`table.translate(arr, translation)`
Translates the values contained in array, using specified translation table and returns the results in a new array.