Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove "curried" nested resources and manually specified urlParams #625

Merged
merged 10 commits into from May 10, 2019

Conversation

rattrayalex-stripe
Copy link
Contributor

@rattrayalex-stripe rattrayalex-stripe commented May 10, 2019

r? @ob-stripe
cc @irace-stripe @paulasjes-stripe @robz-stripe @remi-stripe
cc @stripe/api-libraries

This removes support for "curried" url parameters on nested resources, like this:

const transferReversals = new resources.TransferReversal(stripe, {transferId: 'tr_123'});
transferReversals.update('trr_123', params);

and along with it, removing the associated resource objects (ie; stripe.transferReversals no longer exists) on the grounds that they were not usable outside of the curried case.

You can still do this instead:

stripe.transters.updateReversal('tr_123', 'tr_123', params);

This applies to all nested resources, namely:

  • Persons
  • LoginLinks
  • SubscriptionScheduleRevisions
  • ApplicationFeeRefunds
  • TaxIds
  • TransferReversals

This means the names of url parameters is no longer meaningful, and can be changed without compatibility concerns. We can even have two url parameters named id if we like (though I think that would be less clear).

Because of this, and because we no longer have any paths specified as a function, I was also able to remove urlParams from the stripeMethods, inferring them with a regex instead (though their name values are not actually used; only the number of url params is meaningful).

Note that we briefly experimented with support for this pattern:

stripe.transferReversals.update('tr_123', 'trr_123', params);

and ultimately decided against it for now; we may reconsider in the future. Thoughts from the community welcome!

Verified this is no different with:

```js
const urlParams = utils.extractUrlParams(spec.path || '');
if (
  !(spec.urlParams || []).every((x, i) => urlParams[i] === x) ||
  (spec.urlParams || []).length !== urlParams.length
) {
  throw Error(
    'mismatch' + JSON.stringify(urlParams) + JSON.stringify(spec.urlParams)
  );
}
```

inside StripeMethod

function getRequestOpts(self, requestArgs, spec, overrideData) {
// Extract spec values with defaults.
const commandPath =
typeof spec.path == 'function'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we had no paths specified as functions anymore

@@ -1,14 +1,10 @@
'use strict';

const utils = require('./utils');
const OPTIONAL_REGEX = /^optional!/;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we had no url params specified as optional anymore

throw new Error(
`Stripe: Argument "${
urlParams[i]
}" required, but got: ${arg} (on API request to \`${requestMethod} ${path}\`)`
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this error wasn't as good as the other, combined it.


if (param == 'id' && typeof arg !== 'string') {
path = self.createResourcePathWithSymbols(spec.path);
const urlData = urlParams.reduce((urlData, param) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that we're on Node 6+, we can use "modern" features like .reduce

@@ -8,5 +8,5 @@ module.exports = StripeResource.extend({

includeBasic: ['list', 'retrieve', 'update'],

close: stripeMethod({method: 'POST', path: '/{id}/close', urlParams: ['id']}),
close: stripeMethod({method: 'POST', path: '/{id}/close'}),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we break this out onto multiple lines like we do with most of the stripeMethod() calls? Purely a style thing.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call! prettier collapsed them but we can uncollapse.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cc @irace-stripe we may want to try to indicate to prettier-poet that these should break.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think <Node.Object entries={} break /> would be a useful API, since prettier generally allows objects to be configured to be broken

@@ -8,11 +8,10 @@ module.exports = StripeResource.extend({

includeBasic: ['create', 'list', 'retrieve', 'update'],

pay: stripeMethod({method: 'POST', path: '/{id}/pay', urlParams: ['id']}),
pay: stripeMethod({method: 'POST', path: '/{id}/pay'}),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question here on one vs. multiple lines.

@ob-stripe
Copy link
Contributor

Let's wait until we reach a decision re. nested resources, but this looks pretty great to me!

@rattrayalex-stripe rattrayalex-stripe changed the title Remove curried urlData and manually specified urlParams Remove "curried" nested resources and manually specified urlParams May 10, 2019
@rattrayalex-stripe
Copy link
Contributor Author

Per internal discussion document, I've reverted my change adding support for stripe.transferReversals.update('tr_123', 'trr_123', params); which I feel good about.

@rattrayalex-stripe
Copy link
Contributor Author

Per IRL with @ob-stripe merging this.

irace-stripe added a commit that referenced this pull request May 14, 2019
* Extract separate resources file (to aid with code generation)

* Remove resources that were removed in #625

https://github.com/stripe/stripe-node/pull/625/files#diff-d3dd6c4fd6f915f29d42e4081dc817a8L85
rattrayalex-stripe added a commit that referenced this pull request May 14, 2019
)

* Drop support for optional url params

* Delete nested resource files

* Remove urlData

* Extract urlParams from path instead of manual definition

Verified this is no different with:

```js
const urlParams = utils.extractUrlParams(spec.path || '');
if (
  !(spec.urlParams || []).every((x, i) => urlParams[i] === x) ||
  (spec.urlParams || []).length !== urlParams.length
) {
  throw Error(
    'mismatch' + JSON.stringify(urlParams) + JSON.stringify(spec.urlParams)
  );
}
```

inside StripeMethod

* Remove manually specified urlParams

* Add a deprecation error message

* Revert "Delete nested resource files"

This reverts commit d88a3e7.

* Fix nested resources for non-curried urlParams and update tests to demonstrate their use

* Refactor makeRequest

* Revert "Revert "Delete nested resource files""

This reverts commit e5eccb8.
rattrayalex-stripe pushed a commit that referenced this pull request May 14, 2019
* Extract separate resources file (to aid with code generation)

* Remove resources that were removed in #625

https://github.com/stripe/stripe-node/pull/625/files#diff-d3dd6c4fd6f915f29d42e4081dc817a8L85
rattrayalex-stripe added a commit that referenced this pull request May 14, 2019
)

* Drop support for optional url params

* Delete nested resource files

* Remove urlData

* Extract urlParams from path instead of manual definition

Verified this is no different with:

```js
const urlParams = utils.extractUrlParams(spec.path || '');
if (
  !(spec.urlParams || []).every((x, i) => urlParams[i] === x) ||
  (spec.urlParams || []).length !== urlParams.length
) {
  throw Error(
    'mismatch' + JSON.stringify(urlParams) + JSON.stringify(spec.urlParams)
  );
}
```

inside StripeMethod

* Remove manually specified urlParams

* Add a deprecation error message

* Revert "Delete nested resource files"

This reverts commit d88a3e7.

* Fix nested resources for non-curried urlParams and update tests to demonstrate their use

* Refactor makeRequest

* Revert "Revert "Delete nested resource files""

This reverts commit e5eccb8.
rattrayalex-stripe pushed a commit that referenced this pull request May 14, 2019
* Extract separate resources file (to aid with code generation)

* Remove resources that were removed in #625

https://github.com/stripe/stripe-node/pull/625/files#diff-d3dd6c4fd6f915f29d42e4081dc817a8L85
rattrayalex-stripe added a commit that referenced this pull request May 14, 2019
)

* Drop support for optional url params

* Delete nested resource files

* Remove urlData

* Extract urlParams from path instead of manual definition

Verified this is no different with:

```js
const urlParams = utils.extractUrlParams(spec.path || '');
if (
  !(spec.urlParams || []).every((x, i) => urlParams[i] === x) ||
  (spec.urlParams || []).length !== urlParams.length
) {
  throw Error(
    'mismatch' + JSON.stringify(urlParams) + JSON.stringify(spec.urlParams)
  );
}
```

inside StripeMethod

* Remove manually specified urlParams

* Add a deprecation error message

* Revert "Delete nested resource files"

This reverts commit d88a3e7.

* Fix nested resources for non-curried urlParams and update tests to demonstrate their use

* Refactor makeRequest

* Revert "Revert "Delete nested resource files""

This reverts commit e5eccb8.
rattrayalex-stripe pushed a commit that referenced this pull request May 14, 2019
* Extract separate resources file (to aid with code generation)

* Remove resources that were removed in #625

https://github.com/stripe/stripe-node/pull/625/files#diff-d3dd6c4fd6f915f29d42e4081dc817a8L85
rattrayalex-stripe added a commit that referenced this pull request May 14, 2019
)

* Drop support for optional url params

* Delete nested resource files

* Remove urlData

* Extract urlParams from path instead of manual definition

Verified this is no different with:

```js
const urlParams = utils.extractUrlParams(spec.path || '');
if (
  !(spec.urlParams || []).every((x, i) => urlParams[i] === x) ||
  (spec.urlParams || []).length !== urlParams.length
) {
  throw Error(
    'mismatch' + JSON.stringify(urlParams) + JSON.stringify(spec.urlParams)
  );
}
```

inside StripeMethod

* Remove manually specified urlParams

* Add a deprecation error message

* Revert "Delete nested resource files"

This reverts commit d88a3e7.

* Fix nested resources for non-curried urlParams and update tests to demonstrate their use

* Refactor makeRequest

* Revert "Revert "Delete nested resource files""

This reverts commit e5eccb8.
rattrayalex-stripe pushed a commit that referenced this pull request May 14, 2019
* Extract separate resources file (to aid with code generation)

* Remove resources that were removed in #625

https://github.com/stripe/stripe-node/pull/625/files#diff-d3dd6c4fd6f915f29d42e4081dc817a8L85
rattrayalex-stripe added a commit that referenced this pull request May 14, 2019
* Update version to 7 and drop support for Node 4 and Node 5, and Node 7

* Format using Prettier

tmp

* Alphabetize basic methods

* Use 'id' for all single identifier positional arguments

* Fix typo

* Modernize ES5 to ES6 with lebab (#607)

* Add lebab and a script to run it

* lebab transform: arrow

* lebab transform: arg-rest

* lebab transform: arg-spread

* lebab transform: obj-method

* lebab transform: obj-shorthand

* lebab transform: let

* lebab transform: template

* lebab transform: default-param

* lebab transform: destruct-param

* lebab transform: includes

* Revert "Add lebab and a script to run it"

This reverts commit 70fd492.

* Revert "lebab transform: destruct-param" because its changes didn't seem good.

This  reverts commit b56f52d.

* Revert "lebab transform: default-param" because it seems dangerous / backwards-incompatible.

This reverts commit 7eba992.

* Unrelated: mark 8.1 as minimum 8-series version

* Add mocha-only script

* Use arrows in more places

* Loosen some eslint rules I don't love

* Remove deprecated methods

* Add VSCode and EditorConfig files

* Bump dependencies to latest versions

* Remove legacy parameter support in invoices.retrieveUpcoming()

* Misc. manual formatting (#623)

* Misc. manual formatting

* Fix some unit tests

* Roll back path argument name changes

* Misc. manual formatting

* Remove "curried" nested resources and manually specified urlParams (#625)

* Drop support for optional url params

* Delete nested resource files

* Remove urlData

* Extract urlParams from path instead of manual definition

Verified this is no different with:

```js
const urlParams = utils.extractUrlParams(spec.path || '');
if (
  !(spec.urlParams || []).every((x, i) => urlParams[i] === x) ||
  (spec.urlParams || []).length !== urlParams.length
) {
  throw Error(
    'mismatch' + JSON.stringify(urlParams) + JSON.stringify(spec.urlParams)
  );
}
```

inside StripeMethod

* Remove manually specified urlParams

* Add a deprecation error message

* Revert "Delete nested resource files"

This reverts commit d88a3e7.

* Fix nested resources for non-curried urlParams and update tests to demonstrate their use

* Refactor makeRequest

* Revert "Revert "Delete nested resource files""

This reverts commit e5eccb8.

* Extract resources file (to aid with code generation) (#626)

* Extract separate resources file (to aid with code generation)

* Remove resources that were removed in #625

https://github.com/stripe/stripe-node/pull/625/files#diff-d3dd6c4fd6f915f29d42e4081dc817a8L85

* Update CHANGELOG for 7.0.0 release
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants