quickbooks-ruby-base 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +2 -0
- data/README.md +12 -0
- data/lib/quickbooks/base.rb +25 -11
- data/lib/quickbooks/base/finders.rb +10 -4
- data/quickbooks-ruby-base.gemspec +1 -1
- data/spec/fixtures/customer_2.xml +39 -0
- data/spec/fixtures/employee_55.xml +17 -0
- data/spec/fixtures/item_5.xml +26 -0
- data/spec/quickbooks_ruby_base_spec.rb +39 -5
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDViYzQyNTdmNDE1NGQ5MDNiYWI0NzAzZGZiZTA2YmZkZjRiZmI5YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWVjMmE3ODlmMDZhZWUyMzUyMWNjZDNjYjgyZDYzMjY4MGViY2RjYg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGFlMjgyNTI3OTk5MzMzYjBjMzVhNmRhZTZkM2EzNGZmNTZkOWMwYmQwYTUw
|
10
|
+
ZGM4OGY4ZjIzYjg4MjIwZmVlZDY3OWVlZWU1MmFiMWYzMTA4M2Y4NjEzMDA1
|
11
|
+
ZmJlZWE0NmJlMTYyYTRlZGE2NGU2NmMyNWFhNzhhOWQ0OTdiM2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTc3NDI0NmUyNjkxZjM1MTA1ODE5OTdmNzQ3NzA0MzU1Nzc5MWVlZDAwYmQw
|
14
|
+
OTJiNWQ1YjEyNmYxMThkYjljY2U3MmVkY2FiZjBiZWUxMDEyM2I1ZTdhZDAw
|
15
|
+
ZDBlZTJhM2U5YTg2Nzg4N2E4NmQ0MDFiZTRhMGFhOWM0YTY4Njc=
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -68,6 +68,9 @@ base = Quickbooks::Base.new(account, :payment_method)
|
|
68
68
|
# With options
|
69
69
|
>> base.show page:1, per_page: 3
|
70
70
|
=> ["QBID: 5 DESC: American Express", "QBID: 1 DESC: Cash", "QBID: 2 DESC: Check"]
|
71
|
+
# Show another entity
|
72
|
+
>> base.show(entity: :vendor)
|
73
|
+
=> ["QBID: 5 DESC: Hampton's Car Parts", "QBID: 6 DESC: Good Eats", "QBID: 7 DESC: The Flower Shoppe"]
|
71
74
|
|
72
75
|
```
|
73
76
|
|
@@ -76,6 +79,8 @@ Convenience method to fetch an entity by its reference id
|
|
76
79
|
```
|
77
80
|
base = Quickbooks::Base.new(account, :customer)
|
78
81
|
>> base.find_by_id(1)
|
82
|
+
# Second argument to find Employee with id = 55
|
83
|
+
>> base.find_by_id(55, :employee)
|
79
84
|
```
|
80
85
|
|
81
86
|
### find_by_display_name()
|
@@ -87,6 +92,13 @@ base = Quickbooks::Base.new(account, :customer)
|
|
87
92
|
# Generates a query based on the following SQL
|
88
93
|
# "SELECT Id, DisplayName FROM Customer WHERE DisplayName = 'Chuck Russell'"
|
89
94
|
```
|
95
|
+
#### with options
|
96
|
+
```
|
97
|
+
base = Quickbooks::Base.new(account)
|
98
|
+
>> base.find_by_display_name("Jonnie O'Meara", entity: :vendor, select: '*')
|
99
|
+
# Generates a query based on the following SQL
|
100
|
+
# "SELECT * FROM Vendor WHERE DisplayName = 'Jonnie O\\'Meara'"
|
101
|
+
```
|
90
102
|
|
91
103
|
## Configuration
|
92
104
|
|
data/lib/quickbooks/base.rb
CHANGED
@@ -13,8 +13,12 @@ module Quickbooks
|
|
13
13
|
create_service_for(type) if type
|
14
14
|
end
|
15
15
|
|
16
|
+
def qbo_case(type)
|
17
|
+
type.is_a?(Symbol) ? type.to_s.camelcase : type
|
18
|
+
end
|
19
|
+
|
16
20
|
def generate_quickbooks_ruby_namespace(type, variety = 'Model')
|
17
|
-
type = type
|
21
|
+
type = qbo_case(type)
|
18
22
|
"Quickbooks::#{variety}::#{type}"
|
19
23
|
end
|
20
24
|
|
@@ -34,23 +38,25 @@ module Quickbooks
|
|
34
38
|
|
35
39
|
def show(options = {})
|
36
40
|
options = { per_page: 20, page: 1 }.merge(options)
|
37
|
-
|
41
|
+
service = determine_service(options[:entity])
|
42
|
+
service.query(nil, options).entries.collect do |e|
|
38
43
|
"QBID: #{e.id} DESC: #{description(e)}"
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
42
47
|
def description(e)
|
43
|
-
desc = (method = describing_method) =~ /(total)/ ? e.send(method).to_f : e.send(method)
|
48
|
+
desc = (method = describing_method(e)) =~ /(total)/ ? e.send(method).to_f : e.send(method)
|
44
49
|
rescue => e
|
45
50
|
'nil'
|
46
51
|
end
|
47
52
|
|
48
|
-
def entity
|
49
|
-
@service
|
53
|
+
def entity(obj = nil)
|
54
|
+
obj ||= @service
|
55
|
+
obj.class.name.split('::').last
|
50
56
|
end
|
51
57
|
|
52
|
-
def describing_method
|
53
|
-
case entity
|
58
|
+
def describing_method(e)
|
59
|
+
case entity(e)
|
54
60
|
when /(Item|TaxCode|PaymentMethod|Account)/
|
55
61
|
'name'
|
56
62
|
when /(Invoice|CreditMemo)/
|
@@ -82,15 +88,23 @@ module Quickbooks
|
|
82
88
|
send_chain(arr)
|
83
89
|
end
|
84
90
|
|
91
|
+
def service_for(type)
|
92
|
+
service = quickbooks_ruby_service(type)
|
93
|
+
service.access_token = oauth_client
|
94
|
+
service.company_id = company_id
|
95
|
+
service
|
96
|
+
end
|
97
|
+
|
85
98
|
def create_service_for(type)
|
86
|
-
@service =
|
87
|
-
@service.access_token = oauth_client
|
88
|
-
@service.company_id = company_id
|
89
|
-
@service
|
99
|
+
@service = service_for(type)
|
90
100
|
end
|
91
101
|
|
92
102
|
private
|
93
103
|
|
104
|
+
def determine_service(entity)
|
105
|
+
entity ? service_for(entity) : @service
|
106
|
+
end
|
107
|
+
|
94
108
|
def send_chain(arr)
|
95
109
|
arr.inject(@account) {|o, a| o.send(a) }
|
96
110
|
end
|
@@ -2,8 +2,13 @@ module Quickbooks
|
|
2
2
|
class Base
|
3
3
|
module Finders
|
4
4
|
|
5
|
-
def find_by_id(id)
|
6
|
-
|
5
|
+
def find_by_id(id, model = nil)
|
6
|
+
if model
|
7
|
+
new_service = service_for(model)
|
8
|
+
new_service.fetch_by_id(id)
|
9
|
+
else
|
10
|
+
@service.fetch_by_id(id)
|
11
|
+
end
|
7
12
|
end
|
8
13
|
|
9
14
|
def qbuilder
|
@@ -13,7 +18,7 @@ module Quickbooks
|
|
13
18
|
def sql_builder(where, options = {})
|
14
19
|
options[:entity] ||= entity
|
15
20
|
options[:select] ||= '*'
|
16
|
-
"SELECT #{options[:select]} FROM #{options[:entity]} WHERE #{where}"
|
21
|
+
"SELECT #{options[:select]} FROM #{qbo_case(options[:entity])} WHERE #{where}"
|
17
22
|
end
|
18
23
|
|
19
24
|
def display_name_sql(display_name, options = {})
|
@@ -24,7 +29,8 @@ module Quickbooks
|
|
24
29
|
|
25
30
|
def find_by_display_name(display_name, options = {})
|
26
31
|
sql = display_name_sql(display_name, options)
|
27
|
-
|
32
|
+
service = determine_service(options[:entity])
|
33
|
+
service.query(sql)
|
28
34
|
end
|
29
35
|
end
|
30
36
|
end
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'quickbooks-ruby-base'
|
7
|
-
spec.version = '1.
|
7
|
+
spec.version = '1.6.0'
|
8
8
|
spec.authors = ["Christian"]
|
9
9
|
spec.email = ["christian@minimul.com"]
|
10
10
|
spec.summary = %q{Base class to provide common methods for the quickbooks-ruby gem}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
2
|
+
<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2015-08-12T12:29:53.867-07:00">
|
3
|
+
<Customer domain="QBO" sparse="false">
|
4
|
+
<Id>2</Id>
|
5
|
+
<SyncToken>0</SyncToken>
|
6
|
+
<MetaData>
|
7
|
+
<CreateTime>2015-06-24T16:49:28-07:00</CreateTime>
|
8
|
+
<LastUpdatedTime>2015-07-01T12:56:01-07:00</LastUpdatedTime>
|
9
|
+
</MetaData>
|
10
|
+
<GivenName>Bill</GivenName>
|
11
|
+
<FamilyName>Lucchini</FamilyName>
|
12
|
+
<FullyQualifiedName>Bill's Windsurf Shop</FullyQualifiedName>
|
13
|
+
<CompanyName>Bill's Windsurf Shop</CompanyName>
|
14
|
+
<DisplayName>Bill's Windsurf Shop</DisplayName>
|
15
|
+
<PrintOnCheckName>Bill's Windsurf Shop</PrintOnCheckName>
|
16
|
+
<Active>true</Active>
|
17
|
+
<PrimaryPhone>
|
18
|
+
<FreeFormNumber>(415) 444-6538</FreeFormNumber>
|
19
|
+
</PrimaryPhone>
|
20
|
+
<PrimaryEmailAddr>
|
21
|
+
<Address>Surf@Intuit.com</Address>
|
22
|
+
</PrimaryEmailAddr>
|
23
|
+
<Taxable>false</Taxable>
|
24
|
+
<BillAddr>
|
25
|
+
<Id>3</Id>
|
26
|
+
<Line1>12 Ocean Dr.</Line1>
|
27
|
+
<City>Half Moon Bay</City>
|
28
|
+
<CountrySubDivisionCode>CA</CountrySubDivisionCode>
|
29
|
+
<PostalCode>94213</PostalCode>
|
30
|
+
<Lat>37.4307072</Lat>
|
31
|
+
<Long>-122.4295234</Long>
|
32
|
+
</BillAddr>
|
33
|
+
<Job>false</Job>
|
34
|
+
<BillWithParent>false</BillWithParent>
|
35
|
+
<Balance>85.00</Balance>
|
36
|
+
<BalanceWithJobs>85.00</BalanceWithJobs>
|
37
|
+
<PreferredDeliveryMethod>Print</PreferredDeliveryMethod>
|
38
|
+
</Customer>
|
39
|
+
</IntuitResponse>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
2
|
+
<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2015-08-12T12:45:49.202-07:00">
|
3
|
+
<Employee domain="QBO" sparse="false">
|
4
|
+
<Id>55</Id>
|
5
|
+
<SyncToken>0</SyncToken>
|
6
|
+
<MetaData>
|
7
|
+
<CreateTime>2015-06-30T11:21:48-07:00</CreateTime>
|
8
|
+
<LastUpdatedTime>2015-06-30T11:21:48-07:00</LastUpdatedTime>
|
9
|
+
</MetaData>
|
10
|
+
<GivenName>Emily</GivenName>
|
11
|
+
<FamilyName>Platt</FamilyName>
|
12
|
+
<DisplayName>Emily Platt</DisplayName>
|
13
|
+
<PrintOnCheckName>Emily Platt</PrintOnCheckName>
|
14
|
+
<Active>true</Active>
|
15
|
+
<BillableTime>false</BillableTime>
|
16
|
+
</Employee>
|
17
|
+
</IntuitResponse>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
2
|
+
<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2015-08-12T08:05:03.899-07:00">
|
3
|
+
<Item domain="QBO" sparse="false">
|
4
|
+
<Id>5</Id>
|
5
|
+
<SyncToken>2</SyncToken>
|
6
|
+
<MetaData>
|
7
|
+
<CreateTime>2015-06-29T10:42:19-07:00</CreateTime>
|
8
|
+
<LastUpdatedTime>2015-07-02T13:16:17-07:00</LastUpdatedTime>
|
9
|
+
</MetaData>
|
10
|
+
<Name>Rock Fountain</Name>
|
11
|
+
<Description>Rock Fountain</Description>
|
12
|
+
<Active>true</Active>
|
13
|
+
<FullyQualifiedName>Rock Fountain</FullyQualifiedName>
|
14
|
+
<Taxable>true</Taxable>
|
15
|
+
<UnitPrice>275</UnitPrice>
|
16
|
+
<Type>Inventory</Type>
|
17
|
+
<IncomeAccountRef name="Sales of Product Income">79</IncomeAccountRef>
|
18
|
+
<PurchaseDesc>Rock Fountain</PurchaseDesc>
|
19
|
+
<PurchaseCost>125</PurchaseCost>
|
20
|
+
<ExpenseAccountRef name="Cost of Goods Sold">80</ExpenseAccountRef>
|
21
|
+
<AssetAccountRef name="Inventory Asset">81</AssetAccountRef>
|
22
|
+
<TrackQtyOnHand>true</TrackQtyOnHand>
|
23
|
+
<QtyOnHand>2</QtyOnHand>
|
24
|
+
<InvStartDate>2015-07-02</InvStartDate>
|
25
|
+
</Item>
|
26
|
+
</IntuitResponse>
|
@@ -57,6 +57,14 @@ describe Quickbooks::Base do
|
|
57
57
|
expect(qr.show.last).to match /100\.0/
|
58
58
|
end
|
59
59
|
|
60
|
+
it "display another entity using the entity options" do
|
61
|
+
xml = read_fixture('payments')
|
62
|
+
stub_response(xml)
|
63
|
+
qr = Quickbooks::Base.new(full_account, :invoice)
|
64
|
+
expect(qr.show).to be_empty
|
65
|
+
expect(qr.show(entity: :payment).last).to match /100\.0/
|
66
|
+
end
|
67
|
+
|
60
68
|
it "description should display 'nil' as no description fits" do
|
61
69
|
pending 'Need to find a transaction or name entity that does not match txn_date'
|
62
70
|
xml = read_fixture('dummy')
|
@@ -103,8 +111,8 @@ describe Quickbooks::Base do
|
|
103
111
|
describe ".create_service_for" do
|
104
112
|
it "creates a access_token service" do
|
105
113
|
qb = Quickbooks::Base.new(full_account)
|
106
|
-
|
107
|
-
expect(service.class.name).to match /Service::AccessToken/
|
114
|
+
qb.create_service_for :access_token
|
115
|
+
expect(qb.service.class.name).to match /Service::AccessToken/
|
108
116
|
end
|
109
117
|
end
|
110
118
|
|
@@ -116,6 +124,14 @@ describe Quickbooks::Base do
|
|
116
124
|
result = qr.find_by_id(28)
|
117
125
|
expect(result.id).to eq 156
|
118
126
|
end
|
127
|
+
|
128
|
+
it 'grabs object from different entity' do
|
129
|
+
xml = read_fixture('item_5')
|
130
|
+
stub_response(xml)
|
131
|
+
qr = Quickbooks::Base.new(full_account)
|
132
|
+
result = qr.find_by_id(5, :item)
|
133
|
+
expect(result.id).to eq 5
|
134
|
+
end
|
119
135
|
end
|
120
136
|
|
121
137
|
describe ".display_name_sql" do
|
@@ -125,9 +141,27 @@ describe Quickbooks::Base do
|
|
125
141
|
end
|
126
142
|
|
127
143
|
it 'for custom usage' do
|
128
|
-
qr = Quickbooks::Base.new(full_account
|
129
|
-
sql = qr.display_name_sql(
|
130
|
-
expect(sql).to eq "SELECT * FROM Vendor WHERE DisplayName = '
|
144
|
+
qr = Quickbooks::Base.new(full_account)
|
145
|
+
sql = qr.display_name_sql("Jonnie O'Meara", entity: :vendor, select: '*')
|
146
|
+
expect(sql).to eq "SELECT * FROM Vendor WHERE DisplayName = 'Jonnie O\\'Meara'"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe ".find_by_display_name" do
|
151
|
+
it 'use entity on initialization' do
|
152
|
+
xml = read_fixture('employee_55')
|
153
|
+
stub_response(xml)
|
154
|
+
qr = Quickbooks::Base.new(full_account, :employee)
|
155
|
+
result = qr.find_by_display_name("Emily Platt")
|
156
|
+
expect(result.first.id).to eq 55
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'passing in the entity' do
|
160
|
+
xml = read_fixture('customer_2')
|
161
|
+
stub_response(xml)
|
162
|
+
qr = Quickbooks::Base.new(full_account)
|
163
|
+
result = qr.find_by_display_name("Bill's Windsurf Shop", entity: :customer)
|
164
|
+
expect(result.first.id).to eq 2
|
131
165
|
end
|
132
166
|
end
|
133
167
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quickbooks-ruby-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: quickbooks-ruby
|
@@ -83,9 +83,12 @@ files:
|
|
83
83
|
- lib/quickbooks/base/configuration.rb
|
84
84
|
- lib/quickbooks/base/finders.rb
|
85
85
|
- quickbooks-ruby-base.gemspec
|
86
|
+
- spec/fixtures/customer_2.xml
|
86
87
|
- spec/fixtures/dummy.xml
|
88
|
+
- spec/fixtures/employee_55.xml
|
87
89
|
- spec/fixtures/invoice.xml
|
88
90
|
- spec/fixtures/invoices.xml
|
91
|
+
- spec/fixtures/item_5.xml
|
89
92
|
- spec/fixtures/payments.xml
|
90
93
|
- spec/fixtures/tax_codes.xml
|
91
94
|
- spec/fixtures/vendors.xml
|
@@ -116,9 +119,12 @@ signing_key:
|
|
116
119
|
specification_version: 4
|
117
120
|
summary: Base class to provide common methods for the quickbooks-ruby gem
|
118
121
|
test_files:
|
122
|
+
- spec/fixtures/customer_2.xml
|
119
123
|
- spec/fixtures/dummy.xml
|
124
|
+
- spec/fixtures/employee_55.xml
|
120
125
|
- spec/fixtures/invoice.xml
|
121
126
|
- spec/fixtures/invoices.xml
|
127
|
+
- spec/fixtures/item_5.xml
|
122
128
|
- spec/fixtures/payments.xml
|
123
129
|
- spec/fixtures/tax_codes.xml
|
124
130
|
- spec/fixtures/vendors.xml
|