xero-ruby 2.0.0 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -5
- data/README.md +18 -3
- data/build_notes.md +7 -2
- data/lib/xero-ruby/api_client.rb +11 -6
- data/lib/xero-ruby/version.rb +1 -1
- data/spec/api_client_spec.rb +92 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 333abb6f3c4cb576451f3fa4f47be4843502e06acb09be2a918ec2f2f313b4c2
|
4
|
+
data.tar.gz: adba7b3e9fac9cd66ea70935598c08fcc3506221fb27219200686d9630a2b3ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a07d78ad0a2f8c3be6f2ee677342a85dfc862b075095820cc193a572329218ad0bc055d0a1d2fe9484e7cf208056dfd55040b2f1b6dd6b6600589caee3253d5
|
7
|
+
data.tar.gz: a7578f993ff86feaa3ef0d221188a64210f5b8ceec35e0fbdb7749424532c8f83a49cfdb9f76cb5b0e832f5d526b9b063a1413743752632906a7f89e332e154a
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
xero-ruby (0.
|
5
|
-
faraday (~> 0.
|
4
|
+
xero-ruby (2.0.1)
|
5
|
+
faraday (~> 1.0.1, >= 1.0.1)
|
6
6
|
json (~> 2.1, >= 2.1.0)
|
7
7
|
|
8
8
|
GEM
|
@@ -12,10 +12,10 @@ GEM
|
|
12
12
|
byebug (11.1.3)
|
13
13
|
coderay (1.1.3)
|
14
14
|
diff-lcs (1.3)
|
15
|
-
faraday (0.
|
15
|
+
faraday (1.0.1)
|
16
16
|
multipart-post (>= 1.2, < 3)
|
17
17
|
jaro_winkler (1.5.4)
|
18
|
-
json (2.3.
|
18
|
+
json (2.3.1)
|
19
19
|
method_source (1.0.0)
|
20
20
|
multipart-post (2.1.1)
|
21
21
|
parallel (1.19.1)
|
@@ -60,7 +60,7 @@ PLATFORMS
|
|
60
60
|
DEPENDENCIES
|
61
61
|
pry-byebug
|
62
62
|
rake (~> 12.3.3)
|
63
|
-
rspec
|
63
|
+
rspec (~> 3.6, >= 3.6.0)
|
64
64
|
rubocop (~> 0.66.0)
|
65
65
|
xero-ruby!
|
66
66
|
|
data/README.md
CHANGED
@@ -129,7 +129,7 @@ Here is the basic workflow of using SDK once you have a valid `access_token` (an
|
|
129
129
|
# reference `Authorization & Callback` to first store a valid token_set on the `xero_client`
|
130
130
|
xero_client.refresh_token_set(user.token_set)
|
131
131
|
|
132
|
-
# Accounting API set (https://github.com/XeroAPI/xero-ruby/blob/master/accounting/lib/xero-ruby/api/accounting_api.rb)
|
132
|
+
# Using the Accounting API set (https://github.com/XeroAPI/xero-ruby/blob/master/accounting/lib/xero-ruby/api/accounting_api.rb)
|
133
133
|
|
134
134
|
# Examples
|
135
135
|
invoices = xero_client.accounting_api.get_invoices(user.active_tenant_id).invoices
|
@@ -140,10 +140,25 @@ Here is the basic workflow of using SDK once you have a valid `access_token` (an
|
|
140
140
|
invoices = { invoices: [{ type: XeroRuby::Accounting::Invoice::ACCREC, contact: { contact_id: contacts[0].contact_id }, line_items: [{ description: "Acme Tires", quantity: BigDecimal("2.0"), unit_amount: BigDecimal("20.99"), account_code: "600", tax_type: XeroRuby::Accounting::TaxType::NONE }], date: "2019-03-11", due_date: "2018-12-10", reference: "Website Design", status: XeroRuby::Accounting::Invoice::DRAFT }]}
|
141
141
|
invoice = xero_client.accounting_api.create_invoices(current_user.active_tenant_id, invoices).invoices.first
|
142
142
|
|
143
|
+
# all money and fields requiring advanced precision utilize BigDecimal
|
144
|
+
puts invoice.unit_amount
|
145
|
+
=> 0.2099e2
|
146
|
+
|
147
|
+
puts invoice.unit_amount.class
|
148
|
+
=> BigDecimal
|
149
|
+
|
150
|
+
puts invoice.unit_amount.to_s("F")
|
151
|
+
=> "20.99"
|
152
|
+
|
153
|
+
# or if using Rails https://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_currency
|
154
|
+
number_to_currency(invoice.unit_amount, :unit => "$")
|
155
|
+
|
156
|
+
# creating an object History record
|
143
157
|
payment = xero_client.accounting_api.get_payments(current_user.active_tenant_id).payments.first
|
144
158
|
history_records = { history_records:[ { details: "This payment now has some History #{rand(10000)}" } ]}
|
145
159
|
payment_history = xero_client.accounting_api.create_payment_history(user.active_tenant_id, payment.payment_id, history_records)
|
146
160
|
|
161
|
+
# creating an object Attachment record
|
147
162
|
account = xero_client.accounting_api.get_accounts(current_user.active_tenant_id).accounts.first
|
148
163
|
file_name = "an-account-filename.png"
|
149
164
|
opts = {
|
@@ -152,7 +167,7 @@ Here is the basic workflow of using SDK once you have a valid `access_token` (an
|
|
152
167
|
file = File.read(Rails.root.join('app/assets/images/xero-api.png'))
|
153
168
|
attachment = xero_client.accounting_api.create_account_attachment_by_file_name(current_user.active_tenant_id, @account.account_id, file_name, file, opts)
|
154
169
|
|
155
|
-
# Asset API set (https://github.com/XeroAPI/xero-ruby/blob/master/accounting/lib/xero-ruby/api/asset_api.rb)
|
170
|
+
# Using the Asset API set (https://github.com/XeroAPI/xero-ruby/blob/master/accounting/lib/xero-ruby/api/asset_api.rb)
|
156
171
|
asset = {
|
157
172
|
"assetName": "AssetName: #{rand(10000)}",
|
158
173
|
"assetNumber": "Asset: #{rand(10000)}",
|
@@ -160,7 +175,7 @@ Here is the basic workflow of using SDK once you have a valid `access_token` (an
|
|
160
175
|
}
|
161
176
|
asset = xero_client.asset_api.create_asset(current_user.active_tenant_id, asset)
|
162
177
|
|
163
|
-
# Project API set (https://github.com/XeroAPI/xero-ruby/blob/master/docs/projects/ProjectApi.md)
|
178
|
+
# Using the Project API set (https://github.com/XeroAPI/xero-ruby/blob/master/docs/projects/ProjectApi.md)
|
164
179
|
projects = xero_client.project_api.get_projects(current_user.active_tenant_id).items
|
165
180
|
```
|
166
181
|
|
data/build_notes.md
CHANGED
@@ -9,9 +9,14 @@ mv xero-ruby-<vsn>.gem xero-ruby.gem
|
|
9
9
|
> xero-ruby-oauth2-app
|
10
10
|
|
11
11
|
Replace gem file with local path:
|
12
|
-
`gem 'xero-ruby', path: '/Users/chris.knight/code/sdks/xero-ruby/'`
|
13
12
|
```bash
|
13
|
+
gem 'xero-ruby', path: '/Users/chris.knight/code/sdks/xero-ruby/'
|
14
14
|
bundle install
|
15
15
|
```
|
16
16
|
|
17
|
-
Deploying to Rubygems
|
17
|
+
Deploying to Rubygems
|
18
|
+
|
19
|
+
```bash
|
20
|
+
gem build
|
21
|
+
gem push xero-ruby-<vsn>.gem
|
22
|
+
```
|
data/lib/xero-ruby/api_client.rb
CHANGED
@@ -500,30 +500,35 @@ module XeroRuby
|
|
500
500
|
elsif key.is_a? String
|
501
501
|
camelize(key, first_upper)
|
502
502
|
else
|
503
|
-
key #
|
503
|
+
key # can't camelize anything except strings and symbols
|
504
504
|
end
|
505
505
|
end
|
506
506
|
|
507
|
-
def camelize(
|
507
|
+
def camelize(word, first_upper = true)
|
508
508
|
if first_upper
|
509
|
-
str =
|
509
|
+
str = word.to_s
|
510
510
|
str = gsubbed(str, /(?:^|_)([^_\s]+)/)
|
511
511
|
str = gsubbed(str, %r{/([^/]*)}, "::")
|
512
512
|
str
|
513
513
|
else
|
514
|
-
parts =
|
514
|
+
parts = word.split("_", 2)
|
515
515
|
parts[0] << camelize(parts[1]) if parts.size > 1
|
516
516
|
parts[0] || ""
|
517
517
|
end
|
518
518
|
end
|
519
519
|
|
520
520
|
def gsubbed(str, pattern, extra = "")
|
521
|
-
key_map_scronyms = { "id"
|
521
|
+
key_map_scronyms = { "id": "ID" }
|
522
522
|
str = str.gsub(pattern) do
|
523
|
-
extra + (key_map_scronyms[Regexp.last_match(1)] || Regexp.last_match(1)
|
523
|
+
extra + (key_map_scronyms[Regexp.last_match(1)] || capitalize_first(Regexp.last_match(1)))
|
524
524
|
end
|
525
525
|
str
|
526
526
|
end
|
527
|
+
|
528
|
+
def capitalize_first(word)
|
529
|
+
split = word.split('')
|
530
|
+
"#{split[0].capitalize}#{split[1..-1].join}"
|
531
|
+
end
|
527
532
|
# END - Re-serializes snake_cased params to PascalCase required by XeroAPI
|
528
533
|
|
529
534
|
# Build parameter value according to the given collection format.
|
data/lib/xero-ruby/version.rb
CHANGED
data/spec/api_client_spec.rb
CHANGED
@@ -81,14 +81,103 @@ describe XeroRuby::ApiClient do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
describe "#object_to_hash modifies a hash from snake_case to PascalCase" do
|
84
|
-
|
84
|
+
contact_after = {:Contacts=>[{:Name=>"Bruce Banner", :EmailAddress=>"hulk@avengers.com", :Phones=>[{:PhoneType=>"MOBILE", :PhoneNumber=>"555-1212", :PhoneAreaCode=>"415"}], :PaymentTerms=>{:Bills=>{:Day=>15, :Type=>"OFCURRENTMONTH"}, :Sales=>{:Day=>10, :Type=>"DAYSAFTERBILLMONTH"}}}]}
|
85
|
+
|
86
|
+
it 'Serializes snake_case object correctly' do
|
85
87
|
contact_before = {:contacts=>[{:name=>"Bruce Banner", :email_address=>"hulk@avengers.com", :phones=>[{:phone_type=>"MOBILE", :phone_number=>"555-1212", :phone_area_code=>"415"}], :payment_terms=>{:bills=>{:day=>15, :type=>"OFCURRENTMONTH"}, :sales=>{:day=>10, :type=>"DAYSAFTERBILLMONTH"}}}]}
|
86
|
-
contact_after = {:Contacts=>[{:Name=>"Bruce Banner", :EmailAddress=>"hulk@avengers.com", :Phones=>[{:PhoneType=>"MOBILE", :PhoneNumber=>"555-1212", :PhoneAreaCode=>"415"}], :PaymentTerms=>{:Bills=>{:Day=>15, :Type=>"OFCURRENTMONTH"}, :Sales=>{:Day=>10, :Type=>"DAYSAFTERBILLMONTH"}}}]}
|
87
88
|
api_client = XeroRuby::ApiClient.new
|
88
89
|
expect(api_client.object_to_hash(contact_before)).to eq(contact_after)
|
89
90
|
end
|
90
91
|
|
91
|
-
|
92
|
+
it 'Serializes camelCase object correctly' do
|
93
|
+
json_before = {
|
94
|
+
type: "ACCREC",
|
95
|
+
invoiceNumber: "INV-01",
|
96
|
+
dueDate: "2020-01-01",
|
97
|
+
lineItems: [
|
98
|
+
{ quantity: 1.0, unitAmount: 20 }
|
99
|
+
]
|
100
|
+
}
|
101
|
+
json_after = {
|
102
|
+
Type: "ACCREC",
|
103
|
+
InvoiceNumber: "INV-01",
|
104
|
+
DueDate: "2020-01-01",
|
105
|
+
LineItems: [
|
106
|
+
{ Quantity: 1.0, UnitAmount: 20 }
|
107
|
+
]
|
108
|
+
}
|
109
|
+
api_client = XeroRuby::ApiClient.new
|
110
|
+
expect(api_client.object_to_hash(json_before)).to eq(json_after)
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'Serializes json with multiple nested objects correctly' do
|
114
|
+
json_before = {
|
115
|
+
"line_Items":[
|
116
|
+
{
|
117
|
+
"quantity":1.0,
|
118
|
+
"unit_amount":20,
|
119
|
+
"sub_Items":[
|
120
|
+
{
|
121
|
+
"quantity":1.0,
|
122
|
+
"unit_amount":20
|
123
|
+
},
|
124
|
+
{
|
125
|
+
"quantity":1.0,
|
126
|
+
"Unit_amount":20,
|
127
|
+
"Deep_Items":[
|
128
|
+
{
|
129
|
+
"quantity":1.0,
|
130
|
+
"unit_amount":20
|
131
|
+
},
|
132
|
+
{
|
133
|
+
"quantity":1.0,
|
134
|
+
"unit_Amount":20
|
135
|
+
}
|
136
|
+
]
|
137
|
+
}
|
138
|
+
]
|
139
|
+
}
|
140
|
+
]
|
141
|
+
}
|
142
|
+
|
143
|
+
json_after = {
|
144
|
+
"LineItems":[
|
145
|
+
{
|
146
|
+
"UnitAmount":20,
|
147
|
+
"Quantity":1.0,
|
148
|
+
"SubItems":[
|
149
|
+
{
|
150
|
+
"UnitAmount":20,
|
151
|
+
"Quantity":1.0
|
152
|
+
},
|
153
|
+
{
|
154
|
+
"UnitAmount":20,
|
155
|
+
"Quantity":1.0,
|
156
|
+
"DeepItems":[
|
157
|
+
{
|
158
|
+
"UnitAmount":20,
|
159
|
+
"Quantity":1.0
|
160
|
+
},
|
161
|
+
{
|
162
|
+
"UnitAmount":20,
|
163
|
+
"Quantity":1.0
|
164
|
+
}
|
165
|
+
]
|
166
|
+
}
|
167
|
+
]
|
168
|
+
}
|
169
|
+
]
|
170
|
+
}
|
171
|
+
api_client = XeroRuby::ApiClient.new
|
172
|
+
expect(api_client.object_to_hash(json_before)).to eq(json_after)
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'Serializes mixed cased keys correctly' do
|
176
|
+
contact_after = { :Contacts=>[{:Name=>"Bruce Banner", :EmailAddress=>"hulk@avengers.com", :Phones=>[{:PhoneType=>"MOBILE", :PhoneNumber=>"555-1212", :PhoneAreaCode=>"415"}], :PaymentTerms=>{:Bills=>{:Day=>15, :Type=>"OFCURRENTMONTH"}, :Sales=>{:Day=>10, :Type=>"DAYSAFTERBILLMONTH"}}}]}
|
177
|
+
contact_before = {:contacts=>[{:name=>"Bruce Banner", :emailAddress=>"hulk@avengers.com", :phones=>[{:phoneType=>"MOBILE", :phone_number=>"555-1212", :phone_areaCode=>"415"}], :Payment_terms=>{:bills=>{:day=>15, :type=>"OFCURRENTMONTH"}, :sales=>{:day=>10, :type=>"DAYSAFTERBILLMONTH"}}}]}
|
178
|
+
api_client = XeroRuby::ApiClient.new
|
179
|
+
expect(api_client.object_to_hash(contact_before)).to eq(contact_after)
|
180
|
+
end
|
92
181
|
end
|
93
182
|
|
94
183
|
describe '#build_collection_param' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xero-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xero API Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|