plaid-legacy 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +34 -0
- data/CONTRIBUTING.md +15 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +328 -0
- data/Rakefile +54 -0
- data/UPGRADING.md +60 -0
- data/bin/console +13 -0
- data/bin/setup +8 -0
- data/lib/plaid.rb +64 -0
- data/lib/plaid/account.rb +144 -0
- data/lib/plaid/category.rb +62 -0
- data/lib/plaid/client.rb +69 -0
- data/lib/plaid/connector.rb +172 -0
- data/lib/plaid/errors.rb +37 -0
- data/lib/plaid/income.rb +106 -0
- data/lib/plaid/info.rb +65 -0
- data/lib/plaid/institution.rb +253 -0
- data/lib/plaid/risk.rb +34 -0
- data/lib/plaid/transaction.rb +128 -0
- data/lib/plaid/user.rb +507 -0
- data/lib/plaid/version.rb +3 -0
- data/lib/plaid/webhook.rb +153 -0
- data/plaid-legacy.gemspec +36 -0
- metadata +167 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 033f6f757e2de0376d156aec59eb4d95ea01529e
|
4
|
+
data.tar.gz: 47bbaf501af5899ac400372b58179e4ba43ce1ee
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 10c2984cecf8ca20d7794ea3abee7ddb9ec7eb974198ba81e01b4d11df61eb8111720b65c79a99b891db9715bb9ff2db553a15f18b0ccba388b92955d541af5e
|
7
|
+
data.tar.gz: 3a6199ba74f95ad1dc384893548382320d2d2eaf5cbc1c726e5ea24abee2e35b0b0f65907aa607194eed266ca1fb046a550c980c4e26d362b896bf9cf474fded
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# 3.0.0. 17-Jan-2017
|
2
|
+
|
3
|
+
* Add `/institutions/all` and `/institutions/all/search` endpoints, see [UPGRADING.md](UPGRADING.md#upgrading-from-2xx-to-300)
|
4
|
+
|
5
|
+
# 2.2.0. 03-Nov-2016
|
6
|
+
|
7
|
+
* Add `Transaction#reference_number` (@ericbirdsall).
|
8
|
+
* Fix webhook codes and add risk and income webhooks.
|
9
|
+
|
10
|
+
# 2.1.0. 19-Oct-2016
|
11
|
+
|
12
|
+
* Documentation fixes (@ishmael).
|
13
|
+
* Fix `Transaction#to_s` behavior (@michel-tricot).
|
14
|
+
* PATCH `/:product/step` flow.
|
15
|
+
* Use the same client in `User#upgrade` (@betesh).
|
16
|
+
* Webhook object (@zshannon).
|
17
|
+
* `processor_token` access in `User.exchange_token` (@gylaz).
|
18
|
+
* Raise `ServerError` in case server returned an empty response body.
|
19
|
+
|
20
|
+
# 2.0.0. 24-May-2016
|
21
|
+
|
22
|
+
* Use `~> 1.0` spec for multi_json dependency.
|
23
|
+
* Support `stripe_bank_account_token` in `User.exchange_token`.
|
24
|
+
|
25
|
+
# 2.0.0.alpha.2. 14-May-2016
|
26
|
+
|
27
|
+
* Use `:production` instead of `:api` to signify production environment
|
28
|
+
in `Plaid::Client#env=`.
|
29
|
+
* `User#mfa_step` allows to specify options now (thanks @gcweeks).
|
30
|
+
* Implemented `User#update_webhook`.
|
31
|
+
|
32
|
+
# 2.0.0.alpha. 06-May-2016
|
33
|
+
|
34
|
+
* Rewrite everything.
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
1. Make one or more atomic commits, and ensure that each commit has a
|
4
|
+
descriptive commit message. Commit messages should be line wrapped
|
5
|
+
at 72 characters.
|
6
|
+
|
7
|
+
2. Make sure that there are tests for the code you wrote.
|
8
|
+
|
9
|
+
3. Make sure that you've documented all public methods using [TomDoc](http://tomdoc.org/).
|
10
|
+
|
11
|
+
4. Run `rake test`, and address any errors. Preferably, fix commits
|
12
|
+
in place using `git rebase` or `git commit --amend` to make the
|
13
|
+
changes easier to review.
|
14
|
+
|
15
|
+
5. Open a pull request.
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Plaid Technologies, Inc.
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,328 @@
|
|
1
|
+
# plaid-ruby-legacy [](https://travis-ci.org/plaid/plaid-ruby-legacy) [](http://badge.fury.io/rb/plaid-legacy)
|
2
|
+
|
3
|
+
Ruby bindings for the Plaid's legacy API.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'plaid-legacy'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install plaid-legacy
|
20
|
+
|
21
|
+
The gem supports Ruby 2.x only.
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
This gem wraps the Plaid API, which is fully described in the [documentation](http://plaid.com/docs).
|
26
|
+
|
27
|
+
The RubyDoc for the gem is available [here](http://plaid.github.io/plaid-ruby-legacy).
|
28
|
+
|
29
|
+
### Configuring access to Plaid
|
30
|
+
|
31
|
+
Configure the gem with your client id, secret, and the environment you would like to use.
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
Plaid.config do |p|
|
35
|
+
p.client_id = '<<< Plaid provided client ID >>>'
|
36
|
+
p.secret = '<<< Plaid provided secret key >>>'
|
37
|
+
p.env = :tartan # or :production
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
### Creating a new User
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
user = Plaid::User.create(:connect, 'wells', 'plaid_test', 'plaid_good')
|
45
|
+
```
|
46
|
+
|
47
|
+
This call will do a `POST /connect`. The response will contain account information and transactions
|
48
|
+
for last 30 days, which you can find in `user.accounts` and `user.initial_transactions`, accordingly.
|
49
|
+
|
50
|
+
If the authentication requires a pin, you can pass it as a named parameter:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
user = Plaid::User.create(:income, 'usaa', 'plaid_test', 'plaid_good', pin: '1234')
|
54
|
+
```
|
55
|
+
|
56
|
+
To add options such as `login_only` or `webhook`, use `options` argument:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
user = Plaid::User.create(:connect, 'wells', 'plaid_test', 'plaid_good',
|
60
|
+
options: { login_only: true, webhook: 'https://example.org/callbacks/plaid')
|
61
|
+
```
|
62
|
+
|
63
|
+
The first argument for `Plaid::User.create` is always a product you want to add the user to (like,
|
64
|
+
`:connect`, `:auth`, `:info`, `:income`, or `:risk`). The user object is bound to the product, and subsequent
|
65
|
+
calls like `user.update` or `user.delete` are done for this product (i.e., `PATCH /info` and `DELETE /info`
|
66
|
+
for `:info`).
|
67
|
+
|
68
|
+
### Instantiating a User with an existing access token
|
69
|
+
|
70
|
+
If you've already added the user and saved the access token, you should use `User.load`:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
user = Plaid::User.load(:risk, 'access_token')
|
74
|
+
```
|
75
|
+
|
76
|
+
This won't make any API requests by itself, just set the product and the token in the `User` instance.
|
77
|
+
|
78
|
+
### Exchanging a Link public token for a Plaid access token
|
79
|
+
|
80
|
+
If you have a Link public token, use `User.exchange_token`:
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
user = Plaid::User.exchange_token('public_token') # bound to :connect product
|
84
|
+
```
|
85
|
+
|
86
|
+
With more options:
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
user2 = Plaid::User.exchange_token('public_token', 'account_id', product: :auth)
|
90
|
+
```
|
91
|
+
|
92
|
+
If you want to [move money via Stripe's ACH
|
93
|
+
API](https://plaid.com/docs/link/stripe/#step-4-write-server-side-handler), you
|
94
|
+
ought to specify the `account_id` param. In this case the returned user
|
95
|
+
instance will have the `stripe_bank_account_token` attribute set.
|
96
|
+
|
97
|
+
### Upgrading and changing the current product
|
98
|
+
|
99
|
+
Plaid supports upgrading a user, i.e. adding it to another product:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
# Create a user in Connect
|
103
|
+
user = Plaid::User.create(:connect, 'wells', 'plaid_test', 'plaid_good')
|
104
|
+
|
105
|
+
# Upgrade this user, attaching it to Auth as well (makes a request to /upgrade).
|
106
|
+
auth_user = user.upgrade(:auth)
|
107
|
+
```
|
108
|
+
|
109
|
+
The `auth_user` will be a different instance of `User`, attached to Auth, but the access token will be the same.
|
110
|
+
|
111
|
+
Sometimes you know that the user has already been added to another product. To get a `User` instance with
|
112
|
+
same access token, but different current product, use `User.for_product`:
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
# Get a user attached to Connect
|
116
|
+
user = Plaid::User.load(:connect, 'access_token')
|
117
|
+
|
118
|
+
# Makes no requests
|
119
|
+
info_user = user.for_product(:info)
|
120
|
+
```
|
121
|
+
|
122
|
+
Basically it's the same as:
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
info_user = Plaid::User.load(:info, 'access_token')
|
126
|
+
```
|
127
|
+
|
128
|
+
### MFA (Multi-Factor Authorization)
|
129
|
+
|
130
|
+
If MFA is requested by the financial institution, the `User.create` call would behave
|
131
|
+
a bit differently:
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
user = Plaid::User.create(:auth, 'wells', 'plaid_test', 'plaid_good')
|
135
|
+
|
136
|
+
user.accounts #=> nil
|
137
|
+
user.mfa? #=> true
|
138
|
+
user.mfa_type #=> :questions
|
139
|
+
user.mfa #=> [{question: "What's the nickname of the person who created Ruby?"}]
|
140
|
+
```
|
141
|
+
|
142
|
+
In this case you'll have to submit the answer to the question:
|
143
|
+
|
144
|
+
```ruby
|
145
|
+
user.mfa_step('matz') # This is the correct answer!
|
146
|
+
|
147
|
+
user.mfa? #=> false
|
148
|
+
user.mfa_type #=> nil
|
149
|
+
user.mfa #=> nil
|
150
|
+
user.accounts #=> [<Plaid::Account ...>, ...]
|
151
|
+
```
|
152
|
+
|
153
|
+
The code-based MFA workflow is similar. Basically you need to call `user.mfa_step(...)`
|
154
|
+
until `user.mfa?` becomes false.
|
155
|
+
|
156
|
+
### Obtaining user-related data
|
157
|
+
|
158
|
+
If you have a live `User` instance, you can use following methods
|
159
|
+
(independent of instance's current product):
|
160
|
+
|
161
|
+
* `user.transactions(...)`. Makes a `/connect/get` request.
|
162
|
+
* `user.auth(sync: false)`. Makes an `/auth/get` request.
|
163
|
+
* `user.info(sync: false)`. Makes an `/info/get` request.
|
164
|
+
* `user.income(sync: false)`. Makes an `/income/get` request.
|
165
|
+
* `user.risk(sync: false)`. Makes an `/risk/get` request.
|
166
|
+
* `user.balance`. Makes an `/balance` request.
|
167
|
+
|
168
|
+
All of these methods return appropriate data, but they also update the cached `user.accounts`. That is,
|
169
|
+
if you user has access to Auth and Risk products, the following code:
|
170
|
+
|
171
|
+
```ruby
|
172
|
+
user = User.load(:auth, 'access_token')
|
173
|
+
user.auth
|
174
|
+
user.risk
|
175
|
+
```
|
176
|
+
will result in `user.accounts` having both routing number and risk information for all the accounts. The
|
177
|
+
subsequent `user.balance` call will just update the current balance, not touching the routing and risk information.
|
178
|
+
|
179
|
+
The `sync` flag, if set to true, will result in updating the information from the server even if it has already been
|
180
|
+
loaded. Otherwise cached information will be returned:
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
user = User.load(:auth, 'access_token') # Just set the token
|
184
|
+
user.auth # POST /auth/get
|
185
|
+
user.auth # No POST, return cached info
|
186
|
+
user.auth(sync: true) # POST /auth/get again
|
187
|
+
```
|
188
|
+
|
189
|
+
Same goes for other methods, except `User#transactions` and `User#balance` which always make requests to the API.
|
190
|
+
|
191
|
+
### Categories
|
192
|
+
|
193
|
+
You can request category information:
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
cats = Plaid::Category.all # Array of all known categories
|
197
|
+
cat = Plaid::Category.get('17001013') # A single category by its ID
|
198
|
+
```
|
199
|
+
|
200
|
+
### Institutions
|
201
|
+
|
202
|
+
Financial institution information is available via `Plaid::Institution`.
|
203
|
+
|
204
|
+
```ruby
|
205
|
+
insts = Plaid::Institution.all(count: 20, offset: 20) # A page
|
206
|
+
inst = Plaid::Institution.get('5301a93ac140de84910000e0') # A single institution by its ID
|
207
|
+
|
208
|
+
res = Plaid::Institution.search(query: 'c') # Lookup by name
|
209
|
+
```
|
210
|
+
|
211
|
+
### Webhooks
|
212
|
+
|
213
|
+
You can register to receive [Webhooks](https://plaid.com/docs/legacy/api/#webhook) from Plaid when your users have new events. If you do, you'll receive `POST` requests with JSON.
|
214
|
+
|
215
|
+
E.g. Initial Transaction Webhook:
|
216
|
+
```json
|
217
|
+
{
|
218
|
+
"message": "Initial transaction pull finished",
|
219
|
+
"access_token": "xxxxx",
|
220
|
+
"total_transactions": 123,
|
221
|
+
"code": 0
|
222
|
+
}
|
223
|
+
```
|
224
|
+
|
225
|
+
You should parse that JSON into a Ruby Hash with String keys (eg. `webhook_hash = JSON.parse(json_string)`). Then, you can convert that Hash into a Ruby object using `Plaid::Webhook`:
|
226
|
+
|
227
|
+
```ruby
|
228
|
+
webhook = Plaid::Webhook.new(webhook_hash)
|
229
|
+
|
230
|
+
# Was that the Initial Transaction Webhook?
|
231
|
+
webhook.initial_transaction?
|
232
|
+
access_token = webhook.access_token
|
233
|
+
total_transactions = webhook.total_transactions
|
234
|
+
|
235
|
+
# Or did Historical Transactions become available?
|
236
|
+
webhook.historical_transaction?
|
237
|
+
access_token = webhook.access_token
|
238
|
+
total_transactions = webhook.total_transactions
|
239
|
+
|
240
|
+
# Or did Normal Transactions become available?
|
241
|
+
webhook.normal_transaction?
|
242
|
+
access_token = webhook.access_token
|
243
|
+
total_transactions = webhook.total_transactions
|
244
|
+
|
245
|
+
# Or maybe a transaction was removed?
|
246
|
+
webhook.removed_transaction?
|
247
|
+
access_token = webhook.access_token
|
248
|
+
removed_transactions_ids = webhook.removed_transactions_ids
|
249
|
+
|
250
|
+
# Or was the User's Webhook Updated?
|
251
|
+
webhook.user_webhook_updated?
|
252
|
+
access_token = webhook.access_token
|
253
|
+
|
254
|
+
# Otherwise, was it an error?
|
255
|
+
webhook.error_response?
|
256
|
+
# Which error?
|
257
|
+
error = webhook.error
|
258
|
+
```
|
259
|
+
|
260
|
+
### Custom clients
|
261
|
+
|
262
|
+
It's possible to use several Plaid environments and/or credentials in one app by
|
263
|
+
explicit instantiation of `Plaid::Client`:
|
264
|
+
|
265
|
+
```ruby
|
266
|
+
# Configuring the global client (Plaid.client) which is used by default
|
267
|
+
Plaid.config do |p|
|
268
|
+
p.client_id = 'client_id_1'
|
269
|
+
p.secret = 'secret_1'
|
270
|
+
p.env = :tartan
|
271
|
+
end
|
272
|
+
|
273
|
+
# Creating a custom client
|
274
|
+
api = Plaid::Client.new(client_id: 'client_id_2', secret: 'secret_2', env: :production)
|
275
|
+
|
276
|
+
# Tartan user (using default client)
|
277
|
+
user1 = Plaid::User.create(:connect, 'wells', 'plaid_test', 'plaid_good')
|
278
|
+
|
279
|
+
# Api user (using api client)
|
280
|
+
user2 = Plaid::User.create(:connect, 'wells', 'plaid_test', 'plaid_good', client: api)
|
281
|
+
|
282
|
+
# Lookup an institution in production
|
283
|
+
res = Plaid::Institution.search(query: 'c', client: api)
|
284
|
+
```
|
285
|
+
|
286
|
+
The `client` option can be passed to the following methods:
|
287
|
+
|
288
|
+
* `User.create`
|
289
|
+
* `User.load`
|
290
|
+
* `User.exchange_token`
|
291
|
+
* `Category.all`
|
292
|
+
* `Category.get`
|
293
|
+
* `Institution.all`
|
294
|
+
* `Institution.get`
|
295
|
+
* `Institution.search`
|
296
|
+
* `Institution.search_by_id`
|
297
|
+
|
298
|
+
### Errors
|
299
|
+
|
300
|
+
Any methods making API calls will result in an exception raised unless the response code is "200: Success" or
|
301
|
+
"201: MFA Required".
|
302
|
+
|
303
|
+
`Plaid::BadRequestError` is raised when status code is "400: Bad Request".
|
304
|
+
|
305
|
+
`Plaid::UnauthorizedError` is raised when status code is "401: Unauthorized".
|
306
|
+
|
307
|
+
`Plaid::RequestFailedError` is raised when status code is "402: Request Failed".
|
308
|
+
|
309
|
+
`Plaid::NotFoundError` is raised when status code is "404: Cannot be Found".
|
310
|
+
|
311
|
+
`Plaid::ServerError` is raised when status code is "50X: Server Error".
|
312
|
+
|
313
|
+
Read more about response codes and their meaning in the
|
314
|
+
[Plaid documentation](https://plaid.com/docs/legacy/api/#response-codes).
|
315
|
+
|
316
|
+
## Development
|
317
|
+
|
318
|
+
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
319
|
+
|
320
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
321
|
+
|
322
|
+
## Contributing
|
323
|
+
|
324
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/plaid/plaid-ruby-legacy. See also [contributing guidelines](CONTRIBUTING.md).
|
325
|
+
|
326
|
+
## License
|
327
|
+
|
328
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'sdoc'
|
3
|
+
require 'rdoc/task'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
RDoc::Task.new do |rdoc|
|
8
|
+
rdoc.rdoc_dir = 'doc/rdoc'
|
9
|
+
rdoc.generator = 'sdoc'
|
10
|
+
rdoc.main = 'README.md'
|
11
|
+
|
12
|
+
rdoc.rdoc_files.include('README.md', 'LICENSE', 'UPGRADING.md',
|
13
|
+
'CONTRIBUTING.md', 'CHANGELOG.md', 'lib/**/*.rb')
|
14
|
+
rdoc.markup = 'tomdoc'
|
15
|
+
end
|
16
|
+
|
17
|
+
Rake::TestTask.new do |t|
|
18
|
+
t.libs << 'test'
|
19
|
+
t.test_files = FileList['test/test*.rb']
|
20
|
+
t.verbose = true
|
21
|
+
t.ruby_opts << '-rminitest/pride'
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Update the gh-pages branch with doc/rdoc contents'
|
25
|
+
task :update_gh_pages do
|
26
|
+
tmpdir = Dir::Tmpname.create('plaid_docs') {}
|
27
|
+
|
28
|
+
desc = `git describe`.chomp
|
29
|
+
|
30
|
+
sh "git clone --shared . #{tmpdir}"
|
31
|
+
|
32
|
+
Dir.chdir(tmpdir) do
|
33
|
+
sh 'git checkout gh-pages'
|
34
|
+
FileUtils.rm_rf Dir.glob("#{tmpdir}/*")
|
35
|
+
end
|
36
|
+
|
37
|
+
FileUtils.cp_r Dir.glob('doc/rdoc/*'), tmpdir
|
38
|
+
|
39
|
+
Dir.chdir(tmpdir) do
|
40
|
+
sh 'git add .'
|
41
|
+
sh 'git add --update .'
|
42
|
+
sh "git commit --allow-empty -m 'Regenerate docs for #{desc}'"
|
43
|
+
sh 'git push'
|
44
|
+
end
|
45
|
+
|
46
|
+
FileUtils.rm_rf tmpdir
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'Generate rdoc and update gh-pages on GitHub'
|
50
|
+
task update_github_docs: %i(rdoc update_gh_pages) do
|
51
|
+
sh 'git push origin gh-pages'
|
52
|
+
end
|
53
|
+
|
54
|
+
task default: :test
|