So, you want to create your own provider? I'm too slow to make them, aren't I? Well, you're in luck, because I've made every attempt to document what's required for new providers to be built. Specifically, below is a list of methods that they need to support.
For examples of how these methods might work, please look at existing providers and their code. If you can make those methods more efficient or performant using core features of your database then by all means, feel free to do so! But, they must return the data in the format described in the code.
Note that the documentation below doesn't include example return values, but the source code does.
Every Josh Provider must contain a certain number of methods that will be called by the main Josh code.
If your provider does not support a method, it should be present and throw an error indicating this fact.
Param | Type | Description |
---|---|---|
[options] | Object |
An object containing all the options required for your provider, as well as the ones provided by default with every provider. |
[options.name] | string |
Required. The name of the table in which to save the data. |
Internal method called on persistent Josh to load data from the underlying database.
Kind: instance method of JoshProvider
Returns: Promise
- Returns the defer promise to await the ready state.
Param | Type | Description |
---|---|---|
Josh | Map |
In order to set data to the Josh, one must be provided. |
Retrieves a single value from the database.
Kind: instance method of JoshProvider
Returns: Promise.<*>
- The data stored for the key, or at the path.
Param | Type | Description |
---|---|---|
key | string |
The database key where the value is stored |
path | string |
Optional. Null if not provided by the user. The path within the key where the object is located. The path must support the same syntax as lodash does, for example: 'a[0].b.c' |
- Retrieves all values from the database.
Kind: instance method of JoshProvider
Returns: Promise.<Object.<*>>
- An object consisting of every key and value in the database. At the top level, the key is what the user providers when using set(key, value) and the value in the object is whatever's in the database. Every value should be parsed using this.parseData()
\
Retrieves one or many values from the database.
Kind: instance method of JoshProvider
Returns: Promise.<Object.<*>>
- An object consisting every key requested by the user, and its value in the datbase. At the top level, the key is what the user providers when using set(key, value) and the value in the object is whatever's in the database. Every value should be parsed using this.parseData()
Param | Type | Description |
---|---|---|
keys | Array.<string> |
A list of keys to retrieve from the database. |
Retrieves one or more random values from the database.
Kind: instance method of JoshProvider
Returns: Promise.<Object.<*>>
- An object representing one or more random keys taken from the database, with their values. At the top level, the key is what the user providers when using set(key, value) and the value in the object is whatever's in the database. Every value should be parsed using this.parseData()
Param | Type | Default | Description |
---|---|---|---|
count | Number |
1 |
An integer representing the number of random values to obtain from the database. |
Retrieves a random key from all the database keys for this Josh.
Kind: instance method of JoshProvider
Returns: Promise.<Array.<string>>
- An array of random keys taken from the database, or a single key if count is 1.
Param | Type | Default | Description |
---|---|---|---|
count | Number |
1 |
An integer representing the number of random keys to obtain from the database. |
Verifies whether a key, or value at path, exists in the database.
Kind: instance method of JoshProvider
Returns: Promise.<boolean>
- Whether the key (or value at path) exists.
Param | Type | Description |
---|---|---|
key | string |
The key of which the existence should be checked. |
path | string |
Optional. Null if not provided by the user. If provided, should return whether a value exists at that path, assuming the key exists. |
Retrieves all the indexes (keys) in the database.
Kind: instance method of JoshProvider
Returns: Promise.<Array.<string>>
- Array of all indexes (keys) in the database.\
Retrieves all of the values in the database.
Kind: instance method of JoshProvider
\
Retrieves the number of rows in the database.
Kind: instance method of JoshProvider
Returns: Promise.<integer>
- The number of rows in the database.\
Saves a key in the database, along with its value.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
key | string |
The name of the key. If the key already exists, the value should be overriden. |
path | string |
Optional. Null if not provided by the user. Defines where, in an object or array value, to place the provided data. |
val | * |
The data to write in the database for the key, or at the path for this key. This value MUST be written using serialize-javascript |
Writes many different keys and their values to the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
data | Object |
The data to write to the database. Should be an object where each property is a key and its value is the value to write. Does not support writing with paths. Format is: json { key1: 'value1', key2: 'value2', } |
overwrite | boolean |
Whether to overwrite existing keys provided in the incoming data. |
Deletes a key and its value, or the part of an object or array value, from the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
key | string |
The name of the key to remove, or from which value to remove data at the path. |
path | string |
Optional. Null if not provided by the user. The path that should be deleted, if one is provided. Ideally, this could use unset() from lodash. |
Deletes every single entry in the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.\
Pushes a new value into an array stored in the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
key | string |
The key where to push a new value. The key's value must be an array (unless a path is used, then it should be an object). |
path | string |
Optional. Null if not provided by the user. If provided, the value at that path should be an array. |
value | * |
The value to push into the array. |
allowDupes | boolean |
Whether to allow duplicates to be pushed into the array. If true, should not ... well... allow duplicates. |
Removes a value from an array stored in the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
key | string |
The key where to remove a value from. The key's value must be an array (unless a path is used). |
path | string |
Optional. Null if not provided by the user. If provider, the value at that path should be an array. |
val | * | function |
The value to remove from the array, or a function provided by the user to remove from the array (using findIndex). |
Increments a numerical value within the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
key | string |
The key to increment. The value must be a Number. |
path | string |
Optional. Null if not provided by the user. If provided, the value at that path must be a Number value. |
Decrements a numerical value within the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
key | string |
The key to decrement. The value must be a Number. |
path | string |
Optional. Null if not provided by the user. If provided, the value at that path must be a Number value. |
Executes a mathematical operation on a numerical value within the database.
Kind: instance method of JoshProvider
Returns: Promise.<Provider>
- This provider.
Param | Type | Description |
---|---|---|
key | string |
The key where the operation should be executed. The value must be a Number value. |
path | string |
Optional. Null if not provided by the user. If provided, the value at the path must be a Number value. |
operation | string |
One of the supported operations (listed in this function). |
operand | Number |
The secondary Number for the mathematical operation. |
Finds and returns a value using a function.
Kind: instance method of JoshProvider
Returns: Promise.<*>
- The first value found by the function, or null
if no value found.
Param | Type | Description |
---|---|---|
fn | function |
A function to execute on every value in the database. This function should provide both the value and key as arguments and will return a boolean. findByFunction should support asynchronous functions (the fn return could be a promise that requires resolution) |
path | string |
Optional. If provided, the function should be provided the value at the path rather than at the root. |
Finds and returns an entire value, by checking whether a specific sub-value was found a the given path.
Kind: instance method of JoshProvider
Returns: Promise.<*>
- The first value found, or null
if no value found.
Param | Type | Description |
---|---|---|
path | string |
The path where to check if the value is present |
value | * |
The value to check for equality. |
Finds and returns one or more values using a function to check whether the value is desired.
Kind: instance method of JoshProvider
Returns: Promise.<Object>
- The values found by the function, or {}
if no value found.
Param | Type | Description |
---|---|---|
fn | function |
A function to execute on every value in the database. This function should be provided both the value and key as arguments and will return a boolean. filterByFunction should support asynchronous functions (the fn return could be a promise that requires resolution) |
path | string |
The path where to check if the value is present |
Finds and returns one or move value, by checking whether a specific sub-value was found at the given path.
Kind: instance method of JoshProvider
Returns: Promise.<Object>
- The values found by this function, or {}
if no value found.
Param | Type | Description |
---|---|---|
path | string |
The path where to check if the value is present |
value | * |
The value to check for equality. |
Retrieves the value at the specified path for every stored object or array in the database.
Kind: instance method of JoshProvider
Returns: Promise.<Array.<string>>
- An array of the values at that path
Param | Type | Description |
---|---|---|
path | string |
The path to get the data from. |
Runs a function for every value in the database and returns an array with the return of that function for each value.
Kind: instance method of JoshProvider
Returns: Promise.<Array.<*>>
- An array of the values returned by the function for each value.
Param | Type | Description |
---|---|---|
fn | function |
The function should be provided the key and value as arguments (in that order) and will return a value. mapByFunction should support asynchronous functions (the fn return could be a promise that requires resolution) |
Verifies if a value is part of an array at the key (or the path within that key).
Kind: instance method of JoshProvider
Returns: Promise.<boolean>
- Whether the value is in the array.
Param | Type | Description |
---|---|---|
key | string |
The key in which to verify the existence of the value. Should be an array, unless a path is used. |
path | string |
Optional. Null if not provided by the user. Value at this path is expected to be an array. |
val | * |
The value to check in the array. |
Verifies if the provided value is located in any of the values stored in the database.
Kind: instance method of JoshProvider
Returns: Promise.<boolean>
- Should return true as soon as the value is found, or false if it hasn't been.
Param | Type | Description |
---|---|---|
path | string |
Optional. Null if not provided by the user. If provided, the value would need to be equal to the data stored at that path. |
value | * |
The value to check for at that path. |
Verifies if something is true in any of the values stored in the database, through a function.
Kind: instance method of JoshProvider
Returns: Promise.<boolean>
- Whether the fn
has returned true for any value.
Param | Type | Description |
---|---|---|
fn | function |
The function should be provided both the value and key for each entry in the database, and will return a boolean. someByFunction is expected to return true immediately on the first occurence of the fn returning true. someByFunction should support asynchronous functions (the fn return could be a promise that requires resolution) |
Verifies if a value at a path is identical to the one provided, for every single value stored in the database.
Kind: instance method of JoshProvider
Returns: Promise.<boolean>
- Whether the value was equal to the one at the path for every single value in the database.
Param | Type | Description |
---|---|---|
path | string |
The path where the value should be checked. |
value | * |
The value that should be checked for equality at that path. |
Verifies if a condition is true on every single value stored in the database, using a function.
Kind: instance method of JoshProvider
Returns: Promise.<boolean>
- Whether the fn
has returned true for every value.
Param | Type | Description |
---|---|---|
fn | function |
The function should be provided botht he value and key for each entry in the database, and will return a boolean. everyByFunction should support asynchronous functions (the fn return could be a promise that requires resolution) |
Closes the database. This function should be used to shut down any connection or file access to the database this provider refers to.
Kind: instance method of JoshProvider
\
Deletes the database. This function should delete everything in the specific table used by this database (for the josh's name specifically) It should also remove any temporary table, as well as the "autoid" saved for it. After this method is run, no trace of the specific josh should exist.
Kind: instance method of JoshProvider
\
Returns the "next" automatic ID for this josh. AutoId should be a string, and can technically be anything you want - either a numerically incremented value or just an automatic row ID or DB ID (autonum, mongo's _id , etc). No 2 Ids should ever be identical.
Kind: instance method of JoshProvider
Returns: Promise.<string>
- An automatic ID.\
Internal method to read data from the database. This is essentially the contrary of serialize-javascript
's "serialize()" method. Note: EVAL IS NORMAL. As long as 100% of the data you read from this has been written by serialize(), this is SAFE. If you have any doubts as to what data has been written, or if you have to deal with mixed or unsafe data, then you should take further action to ensure you are not subject to security breaches!
Kind: instance method of JoshProvider
Returns: *
- A value parsed through eval, which will be valid javascript.
Param | Type | Description |
---|---|---|
data | string |
A string ("JSON") generated by serialize-javascript . |