xero-ruby 2.0.0 → 2.0.2
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 +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
|