Skip to content

Commit

Permalink
url callback for partials (#23)
Browse files Browse the repository at this point in the history
  • Loading branch information
zackify authored Jan 6, 2017
1 parent db1dc6b commit c9f9644
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 7 deletions.
8 changes: 4 additions & 4 deletions src/partial.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import normalize from './utilities/normalize'
*/

export default (strings, ...vars) => {
let { options, url } = normalize(strings, vars)
let partial = normalize(strings, vars)

return (strings, ...vars) => {
let finalData = normalize(strings, vars)
let mergedOptions = { ...options, ...finalData.options }
let finalUrl = finalData.url || url
let { options, url } = normalize(strings, vars, partial)
let mergedOptions = { ...partial.options, ...options }
let finalUrl = url || partial.url

return fetch(finalUrl, mergedOptions)
}
Expand Down
9 changes: 6 additions & 3 deletions src/utilities/normalize.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import processBody from './body'
return a fetch api compatible object
*/

const buildObjectFromTag = (strings, vars) => {
const buildObjectFromTag = (strings, vars, partial) => {
const namespace = 'legible-request-var-'
return strings
// First, add namespaced placeholders to elements in `strings`
Expand All @@ -32,6 +32,9 @@ const buildObjectFromTag = (strings, vars) => {
// Get the index at the end of the namespaced string
const index = parseInt(value.replace(namespace, ''), 10)
// Return an array of the object key and replaced value from `vars`
if (partial.url && key === 'url' && typeof vars[index] === 'function') {
return [key, vars[index](partial.url)]
}
return [key, vars[index]]
})
// Convert to object
Expand All @@ -40,8 +43,8 @@ const buildObjectFromTag = (strings, vars) => {
}, {})
}

export default (strings, vars) => {
const { url, method, body, ...options } = buildObjectFromTag(strings, vars)
export default (strings, vars, partial = {}) => {
const { url, method, body, ...options } = buildObjectFromTag(strings, vars, partial)

return {
url,
Expand Down
15 changes: 15 additions & 0 deletions tests/unit/partial.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,19 @@ describe('partial', () => {
`
expect(response.country_code).to.equal('US')
})

it('passes partial url', async function () {
let test = partial`
url: /test
method: POST
`

await test`
url: ${url => {
expect(url).to.equal('/test')
return 'https://freegeoip.net/json/github.com'
}}
method: GET
`
})
})

0 comments on commit c9f9644

Please sign in to comment.