xeroizer 0.5.2 → 2.15.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.
- 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.
|