waveapps 0.1.4 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e66215891bf39f8cf100360c1a040333352a3e858fb8dc9066e9416609da11f
4
- data.tar.gz: 5b81d1efa4eb8cbb64851268aaeac04560972fa5233a706d9dd40d21c95017fa
3
+ metadata.gz: 0cfd2cadda9a1b89374e0a887abf1372db8a66e312eef095d46ee0bd24a4196a
4
+ data.tar.gz: 58c8f49781184a986b8d4770426750f4ed20a4acdb484b9ab1c2026e023ec8a5
5
5
  SHA512:
6
- metadata.gz: f00d6ea26923a895c71322889959293e416f53ca0e398aabcbb6e50e828c1f0d8b17b36be22936de7f76014d6ce7d1e0ef4bd00fe1d79c20096006fee7fa5d74
7
- data.tar.gz: bc707487b8a151e6fa30604e57b92bd727bb538566de40b2f208d6e0f8bbf4c40c14b42ecaf4005f0dfdce6e7866c43c24486506bdfe52b56c8febf8a434da57
6
+ metadata.gz: 2155906045ed527d4549c8a298710b25af9732a4523ad8301e4f162e63cca140ce98d3bb0728993e772492d8be82706dafeade722520447394f23624e6a132d4
7
+ data.tar.gz: fe76a4d5ff85406621adf1dcea78ea9ad6efa52b36ea2ccb1b2b6a008bcd48aeee2b3c4569c8119a4ffb0fa9598bde11e032bf49e110bacfbc403b451ca9b5c8
data/README.md CHANGED
@@ -28,21 +28,7 @@ The library needs to be configured with your account's access token which is ava
28
28
  require "waveapps"
29
29
  Waveapps.access_token = "sjblah_..."
30
30
  ```
31
-
32
-
33
- ### Create invoices
34
- Replace `<BUSINESS_ID>`, `<CUSTOMER_ID>`, and `<PRODUCT_ID>` with real ids.
35
-
36
- ```ruby
37
- Waveapps::Invoice.create_invoice(business_id: <BUSINESS_ID>, customer_id: <CUSTOMER_ID>, items: [{product_id: <PRODUCT_ID>}])
38
- ```
39
- Optional arguments
40
-
41
- `status`, `currency`, `title`, `invoice_number`,
42
- `po_number`, `invoice_date`, `exchange_rate`, `due_date`,
43
- `memo`, `footer`, `disable_amex_payments`, `disable_credit_card_payments`,
44
- `disable_bank_payments`, `item_title`, `unit_title`, `price_title`, `amount_title`, `hide_name`, `hide_description`, `hide_unit`, `hide_price`, `hide_amount`
45
-
31
+ See [examples](/examples) for specific methods
46
32
 
47
33
  ## Development
48
34
 
@@ -0,0 +1,60 @@
1
+ # Invoice
2
+
3
+ ## Create invoice
4
+
5
+ ```ruby
6
+ Waveapps::Invoice.create_invoice(business_id: <BUSINESS_ID>, customer_id: <CUSTOMER_ID>, items: [{product_id: <PRODUCT_ID>}])
7
+ ```
8
+ Optional arguments
9
+
10
+ `status`, `currency`, `title`, `invoice_number`,
11
+ `po_number`, `invoice_date`, `exchange_rate`, `due_date`,
12
+ `memo`, `footer`, `disable_amex_payments`, `disable_credit_card_payments`,
13
+ `disable_bank_payments`, `item_title`, `unit_title`, `price_title`, `amount_title`, `hide_name`, `hide_description`, `hide_unit`, `hide_price`, `hide_amount`
14
+
15
+ ## List invoices
16
+ ```ruby
17
+ Waveapps::Invoice.list_invoices(business_id: <BUSINESS_ID>)
18
+ ```
19
+
20
+ ## Send invoice
21
+
22
+ Provide email of recipients in the `to` argument. Note that this must be an array.
23
+
24
+ ```ruby
25
+ Waveapps::Invoice.send_invoice(invoice_id: <INVOICE_ID>, to: [<EMAIL>])
26
+ ```
27
+
28
+ Optional arguments
29
+
30
+ `subject`, `message`, `attach_pdf`
31
+
32
+ The default value of `attach_pdf` is `false`
33
+
34
+
35
+ ## Approve invoice
36
+
37
+ ```ruby
38
+ Waveapps::Invoice.approve_invoice(invoice_id: <INVOICE_ID>)
39
+ ```
40
+
41
+ ## Delete invoice
42
+
43
+ ```ruby
44
+ Waveapps::Invoice.delete_invoice(invoice_id: <INVOICE_ID>)
45
+ ```
46
+
47
+ ## Mark invoice as sent
48
+
49
+ Provide one of the following for `send_method`
50
+ `EXPORT_PDF`, `GMAIL`, `MARKED_SENT`, `NOT_SENT`, `OUTLOOK`, `SHARED_LINK`, `SKIPPED`, `WAVE`, `YAHOO`
51
+
52
+ ```ruby
53
+ Waveapps::Invoice.mark_as_sent(invoice_id: <INVOICE_ID>, send_method: <SEND_METHOD>)
54
+ ```
55
+
56
+ Optional arguments
57
+
58
+ `sent_at`
59
+
60
+ If `sent_at` is not provided, Wave will use the current time
data/lib/waveapps/api.rb CHANGED
@@ -26,5 +26,26 @@ module Waveapps
26
26
  # Schema = GraphQL::Client.load_schema("./tmp/schema.json")
27
27
 
28
28
  Client = GraphQL::Client.new(schema: Schema, execute: HTTP)
29
+
30
+ def self.handle_errors(response, mutation)
31
+ # Parse/validation errors will have `response.data = nil`. The top level
32
+ # errors object will report these.
33
+ if response.errors.any?
34
+ # "Could not resolve to a node with the global id of 'abc'"
35
+ message = response.errors[:data].join(", ")
36
+ return ::Waveapps::Error.new(message)
37
+
38
+ # The server will likely give us a message about why the node()
39
+ # lookup failed.
40
+ elsif data = response.data
41
+ # "Could not resolve to a node with the global id of 'abc'"
42
+ if data.errors[mutation].any?
43
+ message = data.errors[mutation].join(", ")
44
+ return ::Waveapps::Error.new(message)
45
+ end
46
+ else
47
+ Waveapps::Error.new("Something went wrong!")
48
+ end
49
+ end
29
50
  end
30
51
  end
@@ -125,12 +125,15 @@ module Waveapps
125
125
  GRAPHQL
126
126
 
127
127
  def self.list_invoices(page: 1, page_size: 10, business_id:)
128
- result = Waveapps::Api::Client.query(ListInvoicesQuery, variables: {
129
- businessId: business_id, page: page, pageSize: page_size
130
- }).data
131
- return nil if result.business.nil?
128
+ response = Waveapps::Api::Client.query(
129
+ ListInvoicesQuery, variables: {
130
+ businessId: business_id, page: page, pageSize: page_size
131
+ })
132
132
 
133
- result.business.invoices.edges.map(&:node)
133
+ if response.data && response.data.business
134
+ return response.data.business.invoices.edges.map(&:node)
135
+ end
136
+ Waveapps::Api.handle_errors(response, :business)
134
137
  end
135
138
 
136
139
  CreateInvoiceQuery = Waveapps::Api::Client.parse <<-'GRAPHQL'
@@ -259,42 +262,48 @@ module Waveapps
259
262
  hide_price: nil, hide_amount: nil, items:, business_id:, customer_id:
260
263
  )
261
264
 
262
- Waveapps::Api::Client.query(CreateInvoiceQuery, variables: {
263
- input: {
264
- businessId: business_id,
265
- customerId: customer_id,
266
- items: items.map do |pid|
267
- {
268
- productId: pid[:product_id],
269
- quantity: pid[:quantity],
270
- description: pid[:description],
271
- unitPrice: pid[:unit_price]
272
- }
273
- end,
274
- status: status,
275
- currency: currency,
276
- title: title,
277
- invoiceNumber: invoice_number,
278
- poNumber: po_number,
279
- invoiceDate: invoice_date,
280
- exchangeRate: exchange_rate,
281
- dueDate: due_date,
282
- memo: memo,
283
- footer: footer,
284
- disableAmexPayments: disable_amex_payments,
285
- disableCreditCardPayments: disable_credit_card_payments,
286
- disableBankPayments: disable_bank_payments,
287
- itemTitle: item_title,
288
- unitTitle: unit_title,
289
- priceTitle: price_title,
290
- amountTitle: amount_title,
291
- hideName: hide_name,
292
- hideDescription: hide_description,
293
- hideUnit: hide_unit,
294
- hidePrice: hide_price,
295
- hideAmount: hide_amount
296
- }
297
- })
265
+ response = Waveapps::Api::Client.query(
266
+ CreateInvoiceQuery, variables: {
267
+ input: {
268
+ businessId: business_id,
269
+ customerId: customer_id,
270
+ items: items.map do |pid|
271
+ {
272
+ productId: pid[:product_id],
273
+ quantity: pid[:quantity],
274
+ description: pid[:description],
275
+ unitPrice: pid[:unit_price]
276
+ }
277
+ end,
278
+ status: status,
279
+ currency: currency,
280
+ title: title,
281
+ invoiceNumber: invoice_number,
282
+ poNumber: po_number,
283
+ invoiceDate: invoice_date,
284
+ exchangeRate: exchange_rate,
285
+ dueDate: due_date,
286
+ memo: memo,
287
+ footer: footer,
288
+ disableAmexPayments: disable_amex_payments,
289
+ disableCreditCardPayments: disable_credit_card_payments,
290
+ disableBankPayments: disable_bank_payments,
291
+ itemTitle: item_title,
292
+ unitTitle: unit_title,
293
+ priceTitle: price_title,
294
+ amountTitle: amount_title,
295
+ hideName: hide_name,
296
+ hideDescription: hide_description,
297
+ hideUnit: hide_unit,
298
+ hidePrice: hide_price,
299
+ hideAmount: hide_amount
300
+ }
301
+ })
302
+
303
+ if response.data && response.data.invoice_create
304
+ return response.data.invoice_create
305
+ end
306
+ Waveapps::Api.handle_errors(response, :invoice_create)
298
307
  end
299
308
 
300
309
  DeleteInvoiceQuery = Waveapps::Api::Client.parse <<-'GRAPHQL'
@@ -310,9 +319,99 @@ module Waveapps
310
319
  }
311
320
  GRAPHQL
312
321
 
313
- def self.delete_invoice(id)
314
- result = Waveapps::Api::Client.query(DeleteInvoiceQuery, variables: { input: { id: id } })
315
- result.data
322
+ def self.delete_invoice(invoice_id:)
323
+ response = Waveapps::Api::Client.query(DeleteInvoiceQuery, variables:
324
+ { input: { invoiceId: invoice_id }
325
+ })
326
+
327
+ if response.data && response.data.invoice_delete
328
+ return response.data.invoice_delete
329
+ end
330
+ Waveapps::Api.handle_errors(response, :invoice_delete)
331
+ end
332
+
333
+ SendInvoiceQuery = Waveapps::Api::Client.parse <<-'GRAPHQL'
334
+ mutation ($input: InvoiceSendInput!) {
335
+ invoiceSend(input: $input) {
336
+ didSucceed
337
+ inputErrors {
338
+ message
339
+ code
340
+ path
341
+ }
342
+ }
343
+ }
344
+ GRAPHQL
345
+
346
+ def self.send_invoice(subject: "", message: "", attach_pdf: false, invoice_id:, to: )
347
+ response = Waveapps::Api::Client.query(
348
+ SendInvoiceQuery, variables: {
349
+ input: {
350
+ invoiceId: invoice_id,
351
+ to: to,
352
+ attachPDF: attach_pdf,
353
+ subject: subject,
354
+ message: message
355
+ }
356
+ })
357
+
358
+ if response.data && response.data.invoice_send
359
+ return response.data.invoice_send
360
+ end
361
+ Waveapps::Api.handle_errors(response, :invoice_send)
362
+ end
363
+
364
+ ApproveInvoiceQuery = Waveapps::Api::Client.parse <<-'GRAPHQL'
365
+ mutation ($input: InvoiceApproveInput!) {
366
+ invoiceApprove(input: $input) {
367
+ didSucceed
368
+ inputErrors {
369
+ message
370
+ code
371
+ path
372
+ }
373
+ }
374
+ }
375
+ GRAPHQL
376
+
377
+ def self.approve_invoice(invoice_id: )
378
+ response = Waveapps::Api::Client.query(ApproveInvoiceQuery, variables: {
379
+ input: { invoiceId: invoice_id }
380
+ })
381
+
382
+ if response.data && response.data.invoice_approve
383
+ return response.data.invoice_approve
384
+ end
385
+ Waveapps::Api.handle_errors(response, :invoice_approve)
386
+ end
387
+
388
+ MarkSentInvoiceQuery = Waveapps::Api::Client.parse <<-'GRAPHQL'
389
+ mutation ($input: InvoiceMarkSentInput!) {
390
+ invoiceMarkSent(input: $input) {
391
+ didSucceed
392
+ inputErrors {
393
+ message
394
+ code
395
+ path
396
+ }
397
+ }
398
+ }
399
+ GRAPHQL
400
+
401
+ def self.mark_as_sent(sent_at: nil, send_method: , invoice_id: )
402
+ response = Waveapps::Api::Client.query(
403
+ MarkSentInvoiceQuery, variables: {
404
+ input: {
405
+ invoiceId: invoice_id,
406
+ sentAt: sent_at,
407
+ sendMethod: send_method
408
+ }
409
+ })
410
+
411
+ if response.data && response.data.invoice_mark_sent
412
+ return response.data.invoice_mark_sent
413
+ end
414
+ Waveapps::Api.handle_errors(response, :invoice_mark_sent)
316
415
  end
317
416
  end
318
417
  end
@@ -1,5 +1,5 @@
1
1
  module Waveapps
2
2
  module Ruby
3
- VERSION = "0.1.4"
3
+ VERSION = "0.1.5"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waveapps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hannah Masila
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-09 00:00:00.000000000 Z
11
+ date: 2020-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -85,6 +85,7 @@ files:
85
85
  - Rakefile
86
86
  - bin/console
87
87
  - bin/setup
88
+ - examples/invoice.md
88
89
  - lib/tasks/schema.rake
89
90
  - lib/waveapps.rb
90
91
  - lib/waveapps/api.rb