xeroizer 0.5.2 → 2.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -1
- data/Gemfile.lock +2 -0
- data/README.md +217 -175
- data/VERSION +1 -1
- data/lib/xeroizer/models/manual_journal.rb +1 -0
- data/lib/xeroizer/record/base.rb +1 -1
- data/lib/xeroizer/record/xml_helper.rb +1 -1
- data/xeroizer.gemspec +1 -4
- metadata +15 -29
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -24,6 +24,7 @@ GEM
|
|
24
24
|
rake (0.9.2.2)
|
25
25
|
rdoc (3.12)
|
26
26
|
json (~> 1.4)
|
27
|
+
redcarpet (2.1.1)
|
27
28
|
rest-client (1.6.7)
|
28
29
|
mime-types (>= 1.16)
|
29
30
|
shoulda (3.0.1)
|
@@ -48,6 +49,7 @@ DEPENDENCIES
|
|
48
49
|
mocha
|
49
50
|
nokogiri
|
50
51
|
oauth (>= 0.3.6)
|
52
|
+
redcarpet
|
51
53
|
rest-client
|
52
54
|
shoulda
|
53
55
|
test-unit
|
data/README.md
CHANGED
@@ -24,14 +24,16 @@ Installation
|
|
24
24
|
Basic Usage
|
25
25
|
-----------
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
27
|
+
```ruby
|
28
|
+
require 'rubygems'
|
29
|
+
require 'xeroizer'
|
30
|
+
|
31
|
+
# Create client (used to communicate with the API).
|
32
|
+
client = Xeroizer::PublicApplication.new(YOUR_OAUTH_CONSUMER_KEY, YOUR_OAUTH_CONSUMER_SECRET)
|
33
|
+
|
34
|
+
# Retrieve list of contacts (note: all communication must be made through the client).
|
35
|
+
contacts = client.Contact.all(:order => 'Name')
|
36
|
+
```
|
35
37
|
|
36
38
|
Authentication
|
37
39
|
--------------
|
@@ -54,80 +56,86 @@ to many organisations at once by going through the authorisation process for eac
|
|
54
56
|
The access token received will expire after 30 minutes. If you want access for longer you will need
|
55
57
|
the user to re-authorise your application.
|
56
58
|
|
57
|
-
Authentication
|
59
|
+
Authentication occurs in 3 steps:
|
58
60
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
61
|
+
```ruby
|
62
|
+
client = Xeroizer::PublicApplication.new(YOUR_OAUTH_CONSUMER_KEY, YOUR_OAUTH_CONSUMER_SECRET)
|
63
|
+
|
64
|
+
# 1. Get a RequestToken from Xero. :oauth_callback is the URL the user will be redirected to
|
65
|
+
# after they have authenticated your application.
|
66
|
+
#
|
67
|
+
# Note: The callback URL's domain must match that listed for your application in http://api.xero.com
|
68
|
+
# otherwise the user will not be redirected and only be shown the authentication code.
|
69
|
+
request_token = client.request_token(:oauth_callback => 'http://yourapp.com/oauth/callback')
|
70
|
+
|
71
|
+
# 2. Redirect the user to the URL specified by the RequestToken.
|
72
|
+
#
|
73
|
+
# Note: example uses redirect_to method defined in Rails controllers.
|
74
|
+
redirect_to request_token.authorize_url
|
75
|
+
|
76
|
+
# 3. Exchange RequestToken for AccessToken.
|
77
|
+
# This access token will be used for all subsequent requests but it is stored within the client
|
78
|
+
# application so you don't have to record it.
|
79
|
+
#
|
80
|
+
# Note: This example assumes the callback URL is a Rails action.
|
81
|
+
client.authorize_from_request(request_token.token, request_token.secret, :oauth_verifier => params[:oauth_verifier])
|
82
|
+
```
|
79
83
|
|
80
84
|
You can now use the client to access the Xero API methods, e.g.
|
81
85
|
|
82
|
-
|
86
|
+
```ruby
|
87
|
+
contacts = client.Contact.all
|
88
|
+
```
|
83
89
|
|
84
90
|
#### Example Rails Controller
|
85
91
|
|
86
|
-
|
92
|
+
```ruby
|
93
|
+
class XeroSessionController < ApplicationController
|
94
|
+
|
95
|
+
before_filter :get_xero_client
|
96
|
+
|
97
|
+
public
|
87
98
|
|
88
|
-
|
99
|
+
def new
|
100
|
+
request_token = @xero_client.request_token(:oauth_callback => 'http://yourapp.com/xero_session/create')
|
101
|
+
session[:request_token] = request_token.token
|
102
|
+
session[:request_secret] = request_token.secret
|
103
|
+
|
104
|
+
redirect_to request_token.authorize_url
|
105
|
+
end
|
89
106
|
|
90
|
-
|
107
|
+
def create
|
108
|
+
@xero_client.authorize_from_request(
|
109
|
+
session[:request_token],
|
110
|
+
session[:request_secret],
|
111
|
+
:oauth_verifier => params[:oauth_verifier] )
|
112
|
+
|
113
|
+
session[:xero_auth] = {
|
114
|
+
:access_token => @xero_client.access_token.token,
|
115
|
+
:access_key => @xero_client.access_token.key }
|
116
|
+
|
117
|
+
session.data.delete(:request_token)
|
118
|
+
session.data.delete(:request_secret)
|
119
|
+
end
|
91
120
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
def create
|
101
|
-
@xero_client.authorize_from_request(
|
102
|
-
session[:request_token],
|
103
|
-
session[:request_secret],
|
104
|
-
:oauth_verifier => params[:oauth_verifier] )
|
105
|
-
|
106
|
-
session[:xero_auth] = {
|
107
|
-
:access_token => @xero_client.access_token.token,
|
108
|
-
:access_key => @xero_client.access_token.key }
|
109
|
-
|
110
|
-
session.data.delete(:request_token)
|
111
|
-
session.data.delete(:request_secret)
|
112
|
-
end
|
113
|
-
|
114
|
-
def destroy
|
115
|
-
session.data.delete(:xero_auth)
|
116
|
-
end
|
117
|
-
|
118
|
-
private
|
121
|
+
def destroy
|
122
|
+
session.data.delete(:xero_auth)
|
123
|
+
end
|
124
|
+
|
125
|
+
private
|
126
|
+
|
127
|
+
def get_xero_client
|
128
|
+
@xero_client = Xeroizer::PublicApplication.new(YOUR_OAUTH_CONSUMER_KEY, YOUR_OAUTH_CONSUMER_SECRET)
|
119
129
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
@xero_client.authorize_from_access(
|
126
|
-
session[:xero_auth][:access_token],
|
127
|
-
session[:xero_auth][:access_key] )
|
128
|
-
end
|
130
|
+
# Add AccessToken if authorised previously.
|
131
|
+
if session[:xero_auth]
|
132
|
+
@xero_client.authorize_from_access(
|
133
|
+
session[:xero_auth][:access_token],
|
134
|
+
session[:xero_auth][:access_key] )
|
129
135
|
end
|
130
|
-
|
136
|
+
end
|
137
|
+
end
|
138
|
+
```
|
131
139
|
|
132
140
|
#### Storing AccessToken
|
133
141
|
|
@@ -137,8 +145,10 @@ the API beyond the token's expiry time.
|
|
137
145
|
|
138
146
|
If you want API access for longer consider creating a PartnerApplication which will allow you to renew tokens.
|
139
147
|
|
140
|
-
|
141
|
-
|
148
|
+
```ruby
|
149
|
+
access_key = client.access_token.token
|
150
|
+
access_secret = client.access_token.secret
|
151
|
+
```
|
142
152
|
|
143
153
|
### Private Applications
|
144
154
|
|
@@ -159,8 +169,10 @@ You need to upload this `public_privatekey.pfx` file to your private application
|
|
159
169
|
|
160
170
|
Example usage:
|
161
171
|
|
162
|
-
|
163
|
-
|
172
|
+
```ruby
|
173
|
+
client = Xeroizer::PrivateApplication.new(YOUR_OAUTH_CONSUMER_KEY, YOUR_OAUTH_CONSUMER_SECRET, "/path/to/privatekey.pem")
|
174
|
+
contacts = client.Contact.all
|
175
|
+
```
|
164
176
|
|
165
177
|
### Partner Applications
|
166
178
|
|
@@ -186,40 +198,44 @@ access the partner application in a similar way to public applications.
|
|
186
198
|
|
187
199
|
Authentication occcurs in 3 steps:
|
188
200
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
201
|
+
```ruby
|
202
|
+
client = Xeroizer::PartnerApplication.new(
|
203
|
+
YOUR_OAUTH_CONSUMER_KEY,
|
204
|
+
YOUR_OAUTH_CONSUMER_SECRET,
|
205
|
+
"/path/to/privatekey.pem",
|
206
|
+
"/path/to/entrust-cert.pem",
|
207
|
+
"/path/to/entrust-private-nopass.pem"
|
208
|
+
)
|
209
|
+
|
210
|
+
# 1. Get a RequestToken from Xero. :oauth_callback is the URL the user will be redirected to
|
211
|
+
# after they have authenticated your application.
|
212
|
+
#
|
213
|
+
# Note: The callback URL's domain must match that listed for your application in http://api.xero.com
|
214
|
+
# otherwise the user will not be redirected and only be shown the authentication code.
|
215
|
+
request_token = client.request_token(:oauth_callback => 'http://yourapp.com/oauth/callback')
|
216
|
+
|
217
|
+
# 2. Redirect the user to the URL specified by the RequestToken.
|
218
|
+
#
|
219
|
+
# Note: example uses redirect_to method defined in Rails controllers.
|
220
|
+
redirect_to request_token.authorize_url
|
221
|
+
|
222
|
+
# 3. Exchange RequestToken for AccessToken.
|
223
|
+
# This access token will be used for all subsequent requests but it is stored within the client
|
224
|
+
# application so you don't have to record it.
|
225
|
+
#
|
226
|
+
# Note: This example assumes the callback URL is a Rails action.
|
227
|
+
client.authorize_from_request(request_token.token, request_token.secret, :oauth_verifier => params[:oauth_verifier])
|
228
|
+
```
|
215
229
|
|
216
230
|
This AccessToken will last for 30 minutes however, when using the partner application API you can
|
217
231
|
renew this token. To be able to renew this token, you need to save the following data from this organisation's
|
218
232
|
AccessToken:
|
219
233
|
|
220
|
-
|
221
|
-
|
222
|
-
|
234
|
+
```ruby
|
235
|
+
session_handle = client.session_handle
|
236
|
+
access_key = client.access_token.token
|
237
|
+
access_secret = client.access_token.secret
|
238
|
+
```
|
223
239
|
|
224
240
|
Two other interesting attributes of the PartnerApplication client are:
|
225
241
|
|
@@ -230,12 +246,14 @@ Two other interesting attributes of the PartnerApplication client are:
|
|
230
246
|
|
231
247
|
Renewal of an access token requires knowledge of the previous access token generated for this organisation. To renew:
|
232
248
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
249
|
+
```ruby
|
250
|
+
# If you still have a client instance.
|
251
|
+
client.renew_access_token
|
252
|
+
|
253
|
+
# If you are renewing from stored token/session details.
|
254
|
+
client.renew_access_token(access_key, access_secret, session_handle)
|
255
|
+
```
|
256
|
+
|
239
257
|
This will invalidate the previous token and refresh the `access_key` and `access_secret` as specified in the
|
240
258
|
initial authorisation process. You must always know the previous token's details to renew access to this
|
241
259
|
session.
|
@@ -249,13 +267,15 @@ Each of the below record types is implemented within this library. To allow for
|
|
249
267
|
time in a single application, the model classes are accessed from the instance of PublicApplication, PrivateApplication
|
250
268
|
or PartnerApplication. All class-level operations occur on this singleton. For example:
|
251
269
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
270
|
+
```ruby
|
271
|
+
xero = Xeroizer::PublicApplication.new(YOUR_OAUTH_CONSUMER_KEY, YOUR_OAUTH_CONSUMER_SECRET)
|
272
|
+
xero.authorize_from_access(session[:xero_auth][:access_token], session[:xero_auth][:access_key])
|
273
|
+
|
274
|
+
contacts = xero.Contact.all(:order => 'Name')
|
275
|
+
|
276
|
+
new_contact = xero.Contact.build(:name => 'ABC Development')
|
277
|
+
saved = new_contact.save
|
278
|
+
```
|
259
279
|
|
260
280
|
### \#all([options])
|
261
281
|
|
@@ -297,7 +317,9 @@ creating these records.
|
|
297
317
|
|
298
318
|
You can specify find filters by providing the :where option with a hash. For example:
|
299
319
|
|
300
|
-
|
320
|
+
```ruby
|
321
|
+
invoices = Xero.Invoice.all(:where => {:type => 'ACCREC', :amount_due_is_not => 0})
|
322
|
+
```
|
301
323
|
|
302
324
|
will automatically create the Xero string:
|
303
325
|
|
@@ -355,15 +377,19 @@ Records may be associated with each other via two different methods, `has_many`
|
|
355
377
|
|
356
378
|
**has\_many example:**
|
357
379
|
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
380
|
+
```ruby
|
381
|
+
invoice = xero.Invoice.find('cd09aa49-134d-40fb-a52b-b63c6a91d712')
|
382
|
+
invoice.line_items.each do | line_item |
|
383
|
+
puts "Line Description: #{line_item.description}"
|
384
|
+
end
|
385
|
+
```
|
362
386
|
|
363
387
|
**belongs\_to example:**
|
364
388
|
|
365
|
-
|
366
|
-
|
389
|
+
```ruby
|
390
|
+
invoice = xero.Invoice.find('cd09aa49-134d-40fb-a52b-b63c6a91d712')
|
391
|
+
puts "Invoice Contact Name: #{invoice.contact.name}"
|
392
|
+
```
|
367
393
|
|
368
394
|
Creating/Updating Data
|
369
395
|
----------------------
|
@@ -372,21 +398,27 @@ Creating/Updating Data
|
|
372
398
|
|
373
399
|
New records can be created like:
|
374
400
|
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
401
|
+
```ruby
|
402
|
+
contact = xero.Contact.build(:name => 'Contact Name')
|
403
|
+
contact.first_name = 'Joe'
|
404
|
+
contact.last_name = 'Bloggs'
|
405
|
+
contact.add_address(:type => 'STREET', :line1 => '12 Testing Lane', :city => 'Brisbane')
|
406
|
+
contact.add_phone(:type => 'DEFAULT', :area_code => '07', :number => '3033 1234')
|
407
|
+
contact.add_phone(:type => 'MOBILE', :number => '0412 123 456')
|
408
|
+
contact.save
|
409
|
+
```
|
382
410
|
|
383
411
|
To add to a `has_many` association use the `add_{association}` method. For example:
|
384
412
|
|
385
|
-
|
413
|
+
```ruby
|
414
|
+
contact.add_address(:type => 'STREET', :line1 => '12 Testing Lane', :city => 'Brisbane')
|
415
|
+
```
|
386
416
|
|
387
417
|
To add to a `belongs_to` association use the `build_{association}` method. For example:
|
388
418
|
|
389
|
-
|
419
|
+
```ruby
|
420
|
+
invoice.build_contact(:name => 'ABC Company')
|
421
|
+
```
|
390
422
|
|
391
423
|
### Updating
|
392
424
|
|
@@ -394,9 +426,11 @@ If the primary GUID for the record is present, the library will attempt to updat
|
|
394
426
|
creating it. It is important that this record is downloaded from the Xero API first before attempting
|
395
427
|
an update. For example:
|
396
428
|
|
397
|
-
|
398
|
-
|
399
|
-
|
429
|
+
```ruby
|
430
|
+
contact = xero.Contact.find("cd09aa49-134d-40fb-a52b-b63c6a91d712")
|
431
|
+
contact.name = "Another Name Change"
|
432
|
+
contact.save
|
433
|
+
```
|
400
434
|
|
401
435
|
Have a look at the models in `lib/xeroizer/models/` to see the valid attributes, associations and
|
402
436
|
minimum validation requirements for each of the record types.
|
@@ -408,15 +442,19 @@ If a record doesn't match it's internal validation requirements the `#save` meth
|
|
408
442
|
|
409
443
|
For example:
|
410
444
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
445
|
+
```ruby
|
446
|
+
contact = xero.Contact.build
|
447
|
+
saved = contact.save
|
448
|
+
|
449
|
+
# contact.errors will contain [[:name, "can't be blank"]]
|
450
|
+
```
|
415
451
|
|
416
452
|
\#errors\_for(:attribute\_name) is a helper method to return just the errors associated with
|
417
453
|
that attribute. For example:
|
418
454
|
|
419
|
-
|
455
|
+
```ruby
|
456
|
+
contact.errors_for(:name) # will contain ["can't be blank"]
|
457
|
+
```
|
420
458
|
|
421
459
|
If something goes really wrong and the particular validation isn't handled by the internal
|
422
460
|
validators then the library may raise a `Xeroizer::ApiException`.
|
@@ -432,39 +470,41 @@ are welcome).
|
|
432
470
|
|
433
471
|
Reports are accessed like the following example:
|
434
472
|
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
473
|
+
```ruby
|
474
|
+
trial_balance = xero.TrialBalance.get(:date => '2011-03-21')
|
475
|
+
|
476
|
+
# Array containing report headings.
|
477
|
+
trial_balance.header.cells.map { | cell | cell.value }
|
478
|
+
|
479
|
+
# Report rows by section
|
480
|
+
trial_balance.sections.each do | section |
|
481
|
+
puts "Section Title: #{section.title}"
|
482
|
+
section.rows.each do | row |
|
483
|
+
puts "\t#{row.cells.map { | cell | cell.value }.join("\t")}"
|
446
484
|
end
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
485
|
+
end
|
486
|
+
|
487
|
+
# Summary row (if only one on the report)
|
488
|
+
trial_balance.summary.cells.map { | cell | cell.value }
|
489
|
+
|
490
|
+
# All report rows (including HeaderRow, SectionRow, Row and SummaryRow)
|
491
|
+
trial_balance.rows.each do | row |
|
492
|
+
case row
|
493
|
+
when Xeroizer::Report::HeaderRow
|
494
|
+
# do something with header
|
495
|
+
|
496
|
+
when Xeroizer::Report::SectionRow
|
497
|
+
# do something with section, will need to step into the rows for this section
|
498
|
+
|
499
|
+
when Xeroizer::Report::Row
|
500
|
+
# do something for standard report rows
|
501
|
+
|
502
|
+
when Xeroizer::Report::SummaryRow
|
503
|
+
# do something for summary rows
|
504
|
+
|
467
505
|
end
|
506
|
+
end
|
507
|
+
```
|
468
508
|
|
469
509
|
Xero API Rate Limits
|
470
510
|
--------------------
|
@@ -481,7 +521,9 @@ If required, the library can handle these exceptions internally by sleeping
|
|
481
521
|
for a configurable number of seconds and then repeating the last request.
|
482
522
|
You can set this option when initializing an application:
|
483
523
|
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
524
|
+
```ruby
|
525
|
+
# Sleep for 2 seconds every time the rate limit is exceeded.
|
526
|
+
client = Xeroizer::PublicApplication.new(YOUR_OAUTH_CONSUMER_KEY,
|
527
|
+
YOUR_OAUTH_CONSUMER_SECRET,
|
528
|
+
:rate_limit_sleep => 2)
|
529
|
+
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.15.0
|
@@ -25,6 +25,7 @@ module Xeroizer
|
|
25
25
|
string :line_amount_types
|
26
26
|
string :narration
|
27
27
|
string :url
|
28
|
+
string :external_link_provider_name # only seems to be read-only at the moment
|
28
29
|
boolean :show_on_cash_basis_reports
|
29
30
|
datetime :updated_date_utc, :api_name => 'UpdatedDateUTC'
|
30
31
|
|
data/lib/xeroizer/record/base.rb
CHANGED
data/xeroizer.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "xeroizer"
|
8
|
-
s.version = "
|
8
|
+
s.version = "2.15.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Wayne Robinson"]
|
@@ -368,7 +368,6 @@ Gem::Specification.new do |s|
|
|
368
368
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
369
369
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
370
370
|
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
371
|
-
s.add_runtime_dependency(%q<yard>, [">= 0"])
|
372
371
|
s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
|
373
372
|
s.add_runtime_dependency(%q<oauth>, [">= 0.3.6"])
|
374
373
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
@@ -381,7 +380,6 @@ Gem::Specification.new do |s|
|
|
381
380
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
382
381
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
383
382
|
s.add_dependency(%q<i18n>, [">= 0"])
|
384
|
-
s.add_dependency(%q<yard>, [">= 0"])
|
385
383
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
386
384
|
s.add_dependency(%q<oauth>, [">= 0.3.6"])
|
387
385
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
@@ -395,7 +393,6 @@ Gem::Specification.new do |s|
|
|
395
393
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
396
394
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
397
395
|
s.add_dependency(%q<i18n>, [">= 0"])
|
398
|
-
s.add_dependency(%q<yard>, [">= 0"])
|
399
396
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
400
397
|
s.add_dependency(%q<oauth>, [">= 0.3.6"])
|
401
398
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xeroizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 51
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
7
|
- 2
|
10
|
-
|
8
|
+
- 15
|
9
|
+
- 0
|
10
|
+
version: 2.15.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Wayne Robinson
|
@@ -94,20 +94,6 @@ dependencies:
|
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
prerelease: false
|
96
96
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
hash: 3
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
version: "0"
|
105
|
-
requirement: *id006
|
106
|
-
name: yard
|
107
|
-
type: :runtime
|
108
|
-
- !ruby/object:Gem::Dependency
|
109
|
-
prerelease: false
|
110
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
111
97
|
none: false
|
112
98
|
requirements:
|
113
99
|
- - ">="
|
@@ -118,12 +104,12 @@ dependencies:
|
|
118
104
|
- 1
|
119
105
|
- 2
|
120
106
|
version: 2.1.2
|
121
|
-
requirement: *
|
107
|
+
requirement: *id006
|
122
108
|
name: builder
|
123
109
|
type: :runtime
|
124
110
|
- !ruby/object:Gem::Dependency
|
125
111
|
prerelease: false
|
126
|
-
version_requirements: &
|
112
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
127
113
|
none: false
|
128
114
|
requirements:
|
129
115
|
- - ">="
|
@@ -134,12 +120,12 @@ dependencies:
|
|
134
120
|
- 3
|
135
121
|
- 6
|
136
122
|
version: 0.3.6
|
137
|
-
requirement: *
|
123
|
+
requirement: *id007
|
138
124
|
name: oauth
|
139
125
|
type: :runtime
|
140
126
|
- !ruby/object:Gem::Dependency
|
141
127
|
prerelease: false
|
142
|
-
version_requirements: &
|
128
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
143
129
|
none: false
|
144
130
|
requirements:
|
145
131
|
- - ">="
|
@@ -148,12 +134,12 @@ dependencies:
|
|
148
134
|
segments:
|
149
135
|
- 0
|
150
136
|
version: "0"
|
151
|
-
requirement: *
|
137
|
+
requirement: *id008
|
152
138
|
name: activesupport
|
153
139
|
type: :runtime
|
154
140
|
- !ruby/object:Gem::Dependency
|
155
141
|
prerelease: false
|
156
|
-
version_requirements: &
|
142
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
157
143
|
none: false
|
158
144
|
requirements:
|
159
145
|
- - ">="
|
@@ -162,12 +148,12 @@ dependencies:
|
|
162
148
|
segments:
|
163
149
|
- 0
|
164
150
|
version: "0"
|
165
|
-
requirement: *
|
151
|
+
requirement: *id009
|
166
152
|
name: nokogiri
|
167
153
|
type: :runtime
|
168
154
|
- !ruby/object:Gem::Dependency
|
169
155
|
prerelease: false
|
170
|
-
version_requirements: &
|
156
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
171
157
|
none: false
|
172
158
|
requirements:
|
173
159
|
- - ">="
|
@@ -176,12 +162,12 @@ dependencies:
|
|
176
162
|
segments:
|
177
163
|
- 0
|
178
164
|
version: "0"
|
179
|
-
requirement: *
|
165
|
+
requirement: *id010
|
180
166
|
name: mocha
|
181
167
|
type: :development
|
182
168
|
- !ruby/object:Gem::Dependency
|
183
169
|
prerelease: false
|
184
|
-
version_requirements: &
|
170
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
185
171
|
none: false
|
186
172
|
requirements:
|
187
173
|
- - ">="
|
@@ -190,7 +176,7 @@ dependencies:
|
|
190
176
|
segments:
|
191
177
|
- 0
|
192
178
|
version: "0"
|
193
|
-
requirement: *
|
179
|
+
requirement: *id011
|
194
180
|
name: shoulda
|
195
181
|
type: :development
|
196
182
|
description: Ruby library for the Xero accounting system API.
|