forked from Archives/fx
Split reducers docs
parent
c3f58aa915
commit
bd02783f75
@ -0,0 +1,120 @@
|
|||||||
|
# JavaScript Reducers
|
||||||
|
|
||||||
|
If any additional arguments were passed, fx converts them into a function which
|
||||||
|
takes the JSON as an argument named `x`.
|
||||||
|
|
||||||
|
By default, fx uses builtin JavaScript VM ([goja](https://github.com/dop251/goja)),
|
||||||
|
but also can be used with node.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export FX_LANG=js # Default
|
||||||
|
```
|
||||||
|
|
||||||
|
Or for usage with node:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export FX_LANG=node
|
||||||
|
```
|
||||||
|
|
||||||
|
An example of anonymous function used as a reducer:
|
||||||
|
```sh
|
||||||
|
$ echo '{"foo": [{"bar": "value"}]}' | fx 'x => x.foo[0].bar'
|
||||||
|
value
|
||||||
|
```
|
||||||
|
|
||||||
|
The same reducer function can be simplified to:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo '{"foo": [{"bar": "value"}]}' | fx 'x.foo[0].bar'
|
||||||
|
value
|
||||||
|
```
|
||||||
|
|
||||||
|
Each argument treated as a reducer function.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo '{"foo": [{"bar": "value"}]}' | fx 'x.foo' 'x[0]' 'x.bar'
|
||||||
|
value
|
||||||
|
```
|
||||||
|
|
||||||
|
Update JSON using the spread operator:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo '{"name": "fx", "count": 0}' | fx '{...this, count: 1}'
|
||||||
|
{
|
||||||
|
"name": "fx",
|
||||||
|
"count": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dot
|
||||||
|
|
||||||
|
Fx supports simple JS-like syntax for accessing data, which can be used with any `FX_LANG`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo '{"foo": [{"bar": "value"}]}' | fx .foo[0].bar
|
||||||
|
value
|
||||||
|
```
|
||||||
|
|
||||||
|
## .fxrc.js
|
||||||
|
|
||||||
|
Create _.fxrc.js_ file in `$HOME` directory, and define some useful functions.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// .fxrc.js
|
||||||
|
function upper(s) {
|
||||||
|
return s.toUpperCase()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ cat data.json | fx .name upper
|
||||||
|
ANTON
|
||||||
|
```
|
||||||
|
|
||||||
|
## Node
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export FX_LANG=node
|
||||||
|
```
|
||||||
|
|
||||||
|
Use any npm package by installing it globally. Create _.fxrc.js_ file in `$HOME`
|
||||||
|
directory, and require any packages or define global functions. For example,
|
||||||
|
to access all lodash methods without `_` prefix, put next line into your
|
||||||
|
_.fxrc.js_ file:
|
||||||
|
|
||||||
|
```js
|
||||||
|
Object.assign(global, require('lodash/fp'))
|
||||||
|
```
|
||||||
|
|
||||||
|
And now you will be able to call all lodash methods. For example, see who's been
|
||||||
|
committing to react recently:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl 'https://api.github.com/repos/facebook/react/commits?per_page=100' \
|
||||||
|
| fx 'groupBy("commit.author.name")' 'mapValues(size)' toPairs 'sortBy(1)' reverse 'take(10)' fromPairs
|
||||||
|
```
|
||||||
|
|
||||||
|
> To be able to require global modules make sure you have correct `NODE_PATH` env variable.
|
||||||
|
> ```sh
|
||||||
|
> export NODE_PATH=`npm root -g`
|
||||||
|
> ```
|
||||||
|
|
||||||
|
The _.fxrc.js_ file supports both: `import` and `require`.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// .fxrc.js
|
||||||
|
import 'zx/globals'
|
||||||
|
const _ = require('lodash')
|
||||||
|
```
|
||||||
|
|
||||||
|
> If you want to use _.fxrc.js_ for both `FX_LANG=js` and `FX_LANG=node`,
|
||||||
|
> separate parts by `// nodejs:` comment:
|
||||||
|
> ```js
|
||||||
|
> // .fxrc.js
|
||||||
|
> function upper(s) {
|
||||||
|
> return s.toUpperCase()
|
||||||
|
> }
|
||||||
|
> // nodejs:
|
||||||
|
> import 'zx/globals'
|
||||||
|
> const _ = require('lodash')
|
||||||
|
> ```
|
@ -0,0 +1,27 @@
|
|||||||
|
# Python Reducers
|
||||||
|
|
||||||
|
If any additional arguments was passed, **fx** converts it to a function which
|
||||||
|
takes the JSON as an argument named `x`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export FX_LANG=python
|
||||||
|
```
|
||||||
|
Or
|
||||||
|
```sh
|
||||||
|
export FX_LANG=python3
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
fx data.json '[x["age"] + i for i in range(10)]'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dot
|
||||||
|
|
||||||
|
Fx supports simple syntax for accessing data, which can be used with any `FX_LANG`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo '{"foo": [{"bar": "value"}]}' | fx .foo[0].bar
|
||||||
|
value
|
||||||
|
```
|
@ -0,0 +1,23 @@
|
|||||||
|
# Ruby Reducers
|
||||||
|
|
||||||
|
If any additional arguments was passed, **fx** converts it to a function which
|
||||||
|
takes the JSON as an argument named `x`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export FX_LANG=ruby
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
fx data.json 'x.to_a.map {|x| x[1]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dot
|
||||||
|
|
||||||
|
Fx supports simple syntax for accessing data, which can be used with any `FX_LANG`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo '{"foo": [{"bar": "value"}]}' | fx .foo[0].bar
|
||||||
|
value
|
||||||
|
```
|
Loading…
Reference in New Issue