660 Commits

Author SHA1 Message Date
Olivier Bellone
9735255318 Better tests for sources 2017-01-19 18:32:58 +01:00
Brandur
b291bce240 Alphabetize class name list 2017-01-13 12:41:35 -08:00
Brandur
4da4bd3ff3 Colocate uname helpers + tests
Colocates the helper methods for looking up a uname by renaming them to
have the same prefix as the base method (i.e. `get_uname`).

Also adds an additional rescue in case we try to run an executable on a
system but it wasn't founded (this should never happen).

Also adds some tests to make sure that each method gets at least a very
basic amount of exercise in the test suite.
2017-01-13 10:59:08 -08:00
Brandur
09c4885d31 Consolidate errors to one file + document them
Right now we have every error class in a separate file which doesn't do
anyone a lot of good, especially given that most of them are just stubs
that derive directly from `StripeError`.

This patch pulls them all into one file and gives them some
documentation. It follows #487 and #488 as minor refactoring work.
2017-01-13 10:28:10 -08:00
Brandur
da1b87f1c6 Alphabetize stripe.rb require list
Alphabetizes the list of named model requires in stripe.rb. This makes
it a little easier to spot things, and makes the correct spot to insert
a new model fully deterministic.

This continues along the path of #487 in introducing minor cleanups.
2017-01-13 10:06:32 -08:00
Brandur
83201e1a48 Alphabetize methods in lib/stripe.rb
This one is unfortunately a lot of churn, but it's incredibly
frustrating how difficult it is to find methods in this file.

Here we alphabetize the methods, but do nothing else. Alphabetization
only occurs within visibility blocks, so visibility is not affected at
all.
2017-01-13 09:58:29 -08:00
Brandur
fb555a764e Bump version to 1.57.1 2016-11-28 17:52:27 -08:00
Brandur
11a6eec5f5 Don't allow protected fields in Save.update API operation
As described in #481, adding a protected field like `legal_entity` as
part of an update API operation can cause some issues like a custom
encoding scheme not being considered and special handling around empty
values being ignored.

As a an easy fix for this, let's disallow access to protected fields in
the same way that we disallow them from being set directly on an
instance of a given model.

Helps address (but is not a complete fix for) #481.
2016-11-28 11:42:57 -08:00
Brandur
58184c2039 Bump version to 1.57.0 2016-11-21 18:03:06 -08:00
Olivier Bellone
4122f9bbb3 Adds 3DS retrieve endpoint 2016-11-21 19:36:58 +01:00
Brandur
b3828b6736 Bump version to 1.56.2 2016-11-17 11:54:35 -08:00
Amos47
46d992cf0d allow to_s to also pretty_generate embedded StripeObjects 2016-11-17 14:28:51 -05:00
Brandur
c826049813 Bump version to 1.56.1 2016-11-09 15:16:33 -08:00
Brandur
e3e070785b Fix memory leak
Fixes a memory leak caused by a doubled up `instance_eval`. See [1] for
context and discussion.

[1] https://github.com/stripe/stripe-ruby/issues/477
2016-11-08 17:38:58 -08:00
Feram
f14bf618e5 Fix typo unkown 2016-11-06 05:19:10 +00:00
takiy33
2e1931b153 Remove respond_to? method for Ruby 1.9.2 or earlier 2016-11-03 23:10:10 +09:00
Brandur
2de99c55ce Bump version to 1.56.0 2016-10-24 09:23:06 -07:00
Brandur
1437fa5418 Bump version to 1.55.1 2016-10-24 09:16:29 -07:00
Barry Kim
4faa7d169f Create accessor methods in update_attributes 2016-10-21 17:06:58 -07:00
Brandur
dff2bf10dd Alphabetize class list
This is a pretty pedestrian change, but here we alphabetize the list of
StripeObject class mappings so that it's easier to scan it for
accidental omissions.
2016-10-14 16:31:51 -07:00
Brandur
7b9169712f Rename error class to be singular "permissions"
The addition of this class was unreleased so this is not a breaking
change.
2016-10-14 10:29:09 -07:00
Jack Flintermann
1806d9524c handle 403 status codes 2016-10-14 08:57:19 -04:00
Kyle Conroy
c131bcbcac Correctly encode the subscription items array (#467)
* Correctly encode the subscription items array

* Use super

* Handle non-arrays as well

* Also encode items on create
2016-09-27 13:46:57 -07:00
Jacqueline
d2f783df34 Add support for multiplan subscriptions (#466)
* Add support for multiplan subscriptions:
Serialize indexed arrays into hashes with index keys in subscription create, subscription update, and upcoming invoice
Add a SubscriptionItem object that supports creation, deletion, update, listing, and retrieval

* Remove helpers that convert items array to indexed hash
2016-09-21 17:44:00 -07:00
Brandur
7637eb48bf Bump version to 1.55.0 2016-09-15 10:27:19 -07:00
Vijay Singh
e2cc264c12 Hoist extend and include directives to top of class 2016-09-15 10:14:42 -07:00
Vijay Singh
7ac03e0a88 Changed from ApplePay::Domain to ApplePayDomain 2016-09-14 18:43:56 -07:00
Vijay Singh
35bbb7a26b Ruby bindings of ApplePayDomain 2016-09-14 18:16:12 -07:00
Brandur
3b595a9e7f Bump version to 1.54.0 2016-09-01 10:24:30 -07:00
Brandur
6ebf6ad92a Whitelist retry exceptions
Right now we are retrying *most* non-HTTP exceptions. This is
problematic because in something like a test context, even a rogue name
error could initiate a retry. It's also bad for production because there
are quite a number of socket errors [1] for which we don't want to
retry.

Fixes #462.

[1] https://ruby-doc.org/stdlib-2.3.0/libdoc/socket/rdoc/Socket.html
2016-08-31 15:23:21 -07:00
Brandur
805b65478c Bump version to 1.53.0 2016-08-31 08:10:34 -07:00
Brandur
73a1cf33de Bump version to 1.52.0 2016-08-30 14:48:55 -07:00
Brandur
22839df560 Nicen this code up a little bit and add a comment 2016-08-30 13:42:11 -07:00
Brandur
c796958516 Generalize saving nested resources
Since #433, saving API resources nested under other API resources has
not been the default. Instead, any instances where this should occur
have been special cased with specific method implementations that would
set the `#save_with_parent` flag when a field is written.

This ended up causing some problems because as seen in #457, because
places that we need to do this aren't well vetted, some were forgotten.

This makes implementation of new fields that need this behavior simpler
by implementing a `.save_nested_resource` metraprogramming method on the
`APIResource` class. This can be called as necessary by any concrete API
resource implementations.

We replace existing implementatinos and also add one to `Subscription`,
which had previously been suffering from a similar problem where its
`#source` had not received a special case.
2016-08-30 11:52:16 -07:00
Brandur
c15e3953fe Bump version to 1.51.1 2016-08-30 11:13:56 -07:00
Brandur
67b10a52ca Add deprecated #bank_account=
Add deprecated `#bank_account=` to maintain backwards compatibility.
This would have been broken by #433, so this change keeps the
functionality alive in case someone has not upgraded since.
2016-08-29 13:44:46 -07:00
Brandur
d6514ef633 Flag Account#external_account into save_with_parent system
In #433, we built a framework under which subresources are usually not
persisted, but in certain cases they can be. At the time,
`Customer#source` was the only field that I knew about that had to be
flagged into it.

Issue #456 has raised that we also be doing `Account#external_account`.
This patch adds support for that.

Fixes #456.
2016-08-29 10:34:08 -07:00
Brandur
5573cc73fc Bump version to 1.51.0 2016-08-26 10:20:29 -07:00
Brandur
d61c1b1211 Merge pull request #455 from stripe/brandur-header-like-headers
Move away from rest-client's "symbol header names"
2016-08-26 10:19:00 -07:00
Brandur
a5a9eb94db Produce an error on bad array of maps
This produces an error when we detect an "array of maps" that cannot be
encoded with `application/x-www-form-urlencoded`; that is to say, one
that does not have each hash starting with a consistent key that will
allow a Rack-compliant server to recognize boundaries.

So for example, this is fine:

```
items: [
    { :type => 'sku', :parent => 'sku_94ZYSC0wppRTbk' },
    { :type => 'discount', :amount => -10000, :currency => 'cad', :description => 'potato' }
],
```

But this is _not_ okay:

```
items: [
    { :type => 'sku', :parent => 'sku_94ZYSC0wppRTbk' },
    { :amount => -10000, :currency => 'cad', :description => 'potato', :type => 'discount' }
],
```

(`type` should be moved to the beginning of the array.)

The purpose of this change is to give users better feedback when they
run into an encoding problem like this one. Currently, they just get
something confusing from the server, and someone on support usually
needs to examine a request log to figure out what happened.

CI will fail until the changes in #453 are brought in.
2016-08-25 17:07:56 -07:00
Brandur
fb9fd44dd6 Bump version to 1.50.1 2016-08-25 14:36:59 -07:00
Brandur
2a9413e155 Move away from rest-client's "symbol header names"
This moves away from rest-client's convention of using symbols as header
names so as to present less obfuscation as to how these are actually
named when they go over the wire.

Because headers can be injected via the bindings' API I was initially
worried that this change might break something, but upon inspection of
rest-client source, I can see now that headers take precedence as
assigned by their insertion order into the header hash, and are
"stringified" in that same loop [1]. This means that even if a user
injects a symbolized header name (`:idempotency_key`), it will still
correctly overwrite the one generated by stripe-ruby despite that using
the string format (`"Idempotency-Key"`).

[1] https://github.com/rest-client/rest-client/blob/master/lib/restclient/request.rb#L603,L625
2016-08-25 11:42:44 -07:00
Brandur
d9b6f08ce5 Don't alphabetize encoded maps by key
Alphabetizing maps being encoded by key can cause problems because the
server side Rack relies on the fact that that a new array item will
start with a repeated key.

For example, given this encoding:

```
items: [
    { :type => 'sku', :parent => 'sku_94ZYSC0wppRTbk' },
    { :type => 'discount', :amount => -10000, :currency => 'cad', :description => 'potato' }
],
```

We need to have `type` appear first so that an array boundary is
recognized. So the encoded form should take:

```
items[][type]=sku&items[][parent]=...&items[][type]=discount&items[][amount]=...
```

But currently `type` gets sorted to the back, so we get something more
like:

```
items[][parent]=...&items[][type]=...&items[][amount]=...&items[][currency]=...&items[][description]=...&items[][type]=potato
```

Which the server will receive as this:

```
items: [
    { :type => 'sku', :parent => 'sku_94ZYSC0wppRTbk', :amount => -10000, :currency => 'cad', :description => 'potato' }
    { :type => 'discount' }
],
```

Here we remove the alphabetization to fix the problem and correct a bad
test.
2016-08-25 10:54:08 -07:00
Brandur
8952860d8e Bump version to 1.50.0 2016-08-15 13:36:56 -07:00
Will Bronitsky
6062d27ed8 Add ability to create sources 2016-08-12 09:53:39 -07:00
Brandur
e7f09c2e68 Bump version to 1.49.0 2016-07-28 17:35:50 -07:00
Will Bronitsky
4a6d70bf14 Add Source functionality 2016-07-28 17:25:06 -07:00
Brandur
d7abd71071 Bump version to 1.48.0 2016-07-12 10:11:55 -07:00
Olivier Bellone
be8c56458f Added support for 3D Secure 2016-07-12 17:01:33 +02:00
Brandur
7ed6e48b48 Bump version to 1.47.0 2016-07-11 16:54:50 -07:00