It's my first time trying out functional programming with Ramda. I am trying to build an api endpoint string by composing multiple functions.
This works:
const endpoint = str => str && str.toUpperCase() || 'default'
const protocol = str => `https://${str}`
let finalEndpoint = R.compose(protocol, endpoint)
var result = finalEndpoint('api.content.io')
result is now https://API.CONTENT.IO
as expected
But now I want to add more functions to this pipeline:
const params = val => `?sort=desc&part=true`
const query = val => `query={ some: value, another: value}`
But when I try to compose everything together like this:
let finalEndpoint = R.compose(protocol, endpoint, params, query)
var result = finalEndpoint('api.content.io')
I just get https://?SORT=DESC&PART=TRUE
whereas I wanted
https://API.CONTENT.IO??sort=desc&part=true&query={ some: value, another: value}
What combination of chaining and composition do I use to get the above result?
A variation of this that might seem familiar to Ramda users would be to write this in a pipeline of anonymous functions:
Such a points-free version might or might not be to your taste, but it's an interesting alternative.