quaderno 1.11.2 → 1.12.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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +53 -1
  4. data/VERSION +1 -1
  5. data/changelog.md +3 -0
  6. data/lib/quaderno-ruby/base.rb +12 -2
  7. data/lib/quaderno-ruby/behavior/crud.rb +56 -11
  8. data/lib/quaderno-ruby/behavior/deliver.rb +10 -2
  9. data/lib/quaderno-ruby/behavior/payment.rb +23 -4
  10. data/lib/quaderno-ruby/behavior/retrieve.rb +11 -2
  11. data/lib/quaderno-ruby/collection.rb +22 -0
  12. data/lib/quaderno-ruby/helpers/authentication.rb +26 -0
  13. data/lib/quaderno-ruby.rb +4 -1
  14. data/quaderno.gemspec +16 -5
  15. data/test/fixtures/quaderno_cassettes/all_contacts.yml +11 -282
  16. data/test/fixtures/quaderno_cassettes/all_contacts_by_access_token.yml +56 -0
  17. data/test/fixtures/quaderno_cassettes/all_contacts_by_authentication_token.yml +57 -0
  18. data/test/fixtures/quaderno_cassettes/all_estimates.yml +10 -14
  19. data/test/fixtures/quaderno_cassettes/all_expenses.yml +14 -47
  20. data/test/fixtures/quaderno_cassettes/all_invoices.yml +13 -2873
  21. data/test/fixtures/quaderno_cassettes/all_items.yml +8 -8
  22. data/test/fixtures/quaderno_cassettes/all_receipts.yml +11 -14
  23. data/test/fixtures/quaderno_cassettes/all_webhooks.yml +40 -36
  24. data/test/fixtures/quaderno_cassettes/create_estimate_on_downgraded_API.yml +46 -318
  25. data/test/fixtures/quaderno_cassettes/create_expense_on_downgraded_API.yml +125 -357
  26. data/test/fixtures/quaderno_cassettes/create_invoice_on_downgraded_API.yml +45 -318
  27. data/test/fixtures/quaderno_cassettes/create_receipt_on_downgraded_API.yml +56 -53
  28. data/test/fixtures/quaderno_cassettes/deleted_contact.yml +40 -592
  29. data/test/fixtures/quaderno_cassettes/deleted_contact_by_access_token.yml +199 -0
  30. data/test/fixtures/quaderno_cassettes/deleted_contact_by_authentication_token.yml +199 -0
  31. data/test/fixtures/quaderno_cassettes/deleted_estimate.yml +40 -334
  32. data/test/fixtures/quaderno_cassettes/deleted_expense.yml +43 -364
  33. data/test/fixtures/quaderno_cassettes/deleted_invoice.yml +44 -3199
  34. data/test/fixtures/quaderno_cassettes/deleted_item.yml +22 -22
  35. data/test/fixtures/quaderno_cassettes/deleted_receipt.yml +43 -42
  36. data/test/fixtures/quaderno_cassettes/deleted_webhook.yml +48 -44
  37. data/test/fixtures/quaderno_cassettes/delivered_estimate.yml +25 -32
  38. data/test/fixtures/quaderno_cassettes/delivered_invoice.yml +29 -2888
  39. data/test/fixtures/quaderno_cassettes/delivered_receipt.yml +29 -29
  40. data/test/fixtures/quaderno_cassettes/evidence_invoice.yml +19 -354
  41. data/test/fixtures/quaderno_cassettes/found_contact.yml +19 -291
  42. data/test/fixtures/quaderno_cassettes/found_contact_by_access_token.yml +99 -0
  43. data/test/fixtures/quaderno_cassettes/found_contact_by_authentication_token.yml +100 -0
  44. data/test/fixtures/quaderno_cassettes/found_estimate.yml +20 -24
  45. data/test/fixtures/quaderno_cassettes/found_expense.yml +24 -94
  46. data/test/fixtures/quaderno_cassettes/found_invoice.yml +22 -2886
  47. data/test/fixtures/quaderno_cassettes/found_item.yml +18 -16
  48. data/test/fixtures/quaderno_cassettes/found_receipt.yml +21 -24
  49. data/test/fixtures/quaderno_cassettes/found_webhook.yml +24 -22
  50. data/test/fixtures/quaderno_cassettes/new_contact.yml +9 -7
  51. data/test/fixtures/quaderno_cassettes/new_contact_by_access_token.yml +48 -0
  52. data/test/fixtures/quaderno_cassettes/new_contact_by_authentication_token.yml +48 -0
  53. data/test/fixtures/quaderno_cassettes/new_estimate.yml +29 -320
  54. data/test/fixtures/quaderno_cassettes/new_evidence.yml +10 -8
  55. data/test/fixtures/quaderno_cassettes/new_expense.yml +42 -363
  56. data/test/fixtures/quaderno_cassettes/new_invoice.yml +29 -324
  57. data/test/fixtures/quaderno_cassettes/new_item.yml +10 -8
  58. data/test/fixtures/quaderno_cassettes/new_receipt.yml +28 -24
  59. data/test/fixtures/quaderno_cassettes/new_webhook.yml +16 -14
  60. data/test/fixtures/quaderno_cassettes/paid_expense.yml +22 -52
  61. data/test/fixtures/quaderno_cassettes/paid_invoice.yml +22 -2879
  62. data/test/fixtures/quaderno_cassettes/rate_limit.yml +5 -5
  63. data/test/fixtures/quaderno_cassettes/unpay_an_expense.yml +29 -61
  64. data/test/fixtures/quaderno_cassettes/unpay_an_invoice.yml +28 -2888
  65. data/test/fixtures/quaderno_cassettes/updated_contact.yml +22 -292
  66. data/test/fixtures/quaderno_cassettes/updated_contact_by_access_token.yml +101 -0
  67. data/test/fixtures/quaderno_cassettes/updated_contact_by_authentication_token.yml +102 -0
  68. data/test/fixtures/quaderno_cassettes/updated_estimate.yml +44 -353
  69. data/test/fixtures/quaderno_cassettes/updated_expense.yml +43 -346
  70. data/test/fixtures/quaderno_cassettes/updated_invoice.yml +43 -361
  71. data/test/fixtures/quaderno_cassettes/updated_item.yml +21 -17
  72. data/test/fixtures/quaderno_cassettes/updated_receipt.yml +47 -41
  73. data/test/fixtures/quaderno_cassettes/updated_webhook.yml +35 -31
  74. data/test/helper.rb +2 -1
  75. data/test/unit/test_quaderno_contacts.rb +1 -1
  76. data/test/unit/test_quaderno_contacts_thread_safe.rb +104 -0
  77. data/test/unit/test_quaderno_expenses.rb +5 -5
  78. metadata +15 -4
  79. data/test/fixtures/quaderno_cassettes/calculate_tax.yml +0 -85
  80. data/test/fixtures/quaderno_cassettes/wrong_token.yml +0 -36
@@ -5,10 +5,12 @@ http_interactions:
5
5
  uri: http://sk_test_B7xXrTspfeGukQqGN1pK@development.lvh.me:3000/api/contacts.json
6
6
  body:
7
7
  encoding: UTF-8
8
- string: first_name=Test%20customer
8
+ string: '{"first_name":"Test customer"}'
9
9
  headers:
10
10
  accept:
11
11
  - application/json; api_version=20160602
12
+ content-type:
13
+ - application/json
12
14
  authorization:
13
15
  - Basic c2tfdGVzdF9CN3hYclRzcGZlR3VrUXFHTjFwSzo=
14
16
  response:
@@ -21,38 +23,40 @@ http_interactions:
21
23
  x-ratelimit-limit:
22
24
  - '2000'
23
25
  x-ratelimit-reset:
24
- - '13'
26
+ - '1'
25
27
  x-ratelimit-remaining:
26
- - '97'
28
+ - '91'
27
29
  content-type:
28
30
  - application/json; charset=utf-8
29
31
  etag:
30
- - '"8cd0ec65a32e0b36089531371235d7cb"'
32
+ - '"f710d0238ce57e50b83b3da2b7ecfe0d"'
31
33
  cache-control:
32
34
  - max-age=0, private, must-revalidate
33
35
  x-request-id:
34
- - 4341ff66-d336-426d-beaf-f2bca6c64d7f
36
+ - 3170e289-db15-444c-a66a-c4f2a710b344
35
37
  x-runtime:
36
- - '0.496498'
38
+ - '1.638696'
37
39
  connection:
38
40
  - close
39
41
  server:
40
42
  - thin
41
43
  body:
42
44
  encoding: UTF-8
43
- string: '{"id":90,"kind":"company","created_at":1466681292,"full_name":"Test
44
- customer","contact_name":null,"street_line_1":null,"street_line_2":null,"postal_code":null,"city":null,"region":null,"country":"ES","phone_1":null,"phone_2":null,"fax":null,"email":null,"web":null,"discount":null,"tax_id":null,"vat_number":null,"bank_account":null,"language":"ES","notes":null,"secure_id":"ea7a341abb4da4705a8a5942aca120e706f3fb65","permalink":"http://development.lvh.me:3000/billing/ea7a341abb4da4705a8a5942aca120e706f3fb65","url":"http://development.lvh.me:3000/api/contacts/90"}'
45
+ string: '{"id":53,"kind":"company","created_at":1497268179,"full_name":"Test
46
+ customer","contact_name":null,"street_line_1":null,"street_line_2":null,"postal_code":null,"city":null,"region":null,"country":"ES","phone_1":null,"phone_2":null,"fax":null,"email":null,"web":null,"discount":null,"tax_id":null,"vat_number":null,"bank_account":null,"language":"ES","notes":null,"secure_id":"658db8fdb0ae926ce37a239aab1619bf5f8fc4f4","permalink":"http://development.lvh.me:3000/billing/658db8fdb0ae926ce37a239aab1619bf5f8fc4f4","url":"http://development.lvh.me:3000/api/contacts/53"}'
45
47
  http_version: '1.1'
46
- recorded_at: Thu, 23 Jun 2016 11:28:12 GMT
48
+ recorded_at: Mon, 12 Jun 2017 11:49:40 GMT
47
49
  - request:
48
50
  method: post
49
51
  uri: http://sk_test_B7xXrTspfeGukQqGN1pK@development.lvh.me:3000/api/receipts.json
50
52
  body:
51
53
  encoding: UTF-8
52
- string: contact_id=90&currency=EUR&items_attributes[][description]=Aircraft&items_attributes[][quantity]=1.0&items_attributes[][unit_price]=0.0&tags=tnt&payment_method=cash&notes=
54
+ string: '{"contact_id":53,"currency":"EUR","items_attributes":[{"description":"Aircraft","quantity":"1.0","unit_price":"0.0"}],"tags":"tnt","payment_method":"cash","notes":""}'
53
55
  headers:
54
56
  accept:
55
57
  - application/json; api_version=20160602
58
+ content-type:
59
+ - application/json
56
60
  authorization:
57
61
  - Basic c2tfdGVzdF9CN3hYclRzcGZlR3VrUXFHTjFwSzo=
58
62
  response:
@@ -65,19 +69,19 @@ http_interactions:
65
69
  x-ratelimit-limit:
66
70
  - '2000'
67
71
  x-ratelimit-reset:
68
- - '13'
72
+ - '0'
69
73
  x-ratelimit-remaining:
70
- - '96'
74
+ - '90'
71
75
  content-type:
72
76
  - application/json; charset=utf-8
73
77
  etag:
74
- - '"65e000b93eee76e35dc5d1514dfb8a1d"'
78
+ - '"f7bfc685efa964fc8fad6e84b042358c"'
75
79
  cache-control:
76
80
  - max-age=0, private, must-revalidate
77
81
  x-request-id:
78
- - 15b016d9-1f14-47ee-ba85-483a76dda856
82
+ - 923be158-1857-4184-8631-54001e3d8835
79
83
  x-runtime:
80
- - '3.251276'
84
+ - '4.633702'
81
85
  connection:
82
86
  - close
83
87
  server:
@@ -85,36 +89,35 @@ http_interactions:
85
89
  body:
86
90
  encoding: ASCII-8BIT
87
91
  string: !binary |-
88
- eyJpZCI6MTA3MSwibnVtYmVyIjoiMDAwMDAwNiIsImlzc3VlX2RhdGUiOiIy
89
- MDE2LTA2LTIzIiwiY3JlYXRlZF9hdCI6MTQ2NjY4MTI5MiwiY29udGFjdCI6
90
- eyJpZCI6OTAsImZ1bGxfbmFtZSI6IlRlc3QgY3VzdG9tZXIifSwic3RyZWV0
91
- X2xpbmVfMSI6bnVsbCwic3RyZWV0X2xpbmVfMiI6bnVsbCwiY2l0eSI6bnVs
92
- bCwicmVnaW9uIjpudWxsLCJwb3N0YWxfY29kZSI6bnVsbCwicG9fbnVtYmVy
93
- IjpudWxsLCJjdXJyZW5jeSI6IkVVUiIsImV4Y2hhbmdlX3JhdGUiOiIxLjk1
94
- NTgiLCJpdGVtcyI6W3siaWQiOjMwOTAsImRlc2NyaXB0aW9uIjoiQWlyY3Jh
95
- ZnQiLCJxdWFudGl0eSI6IjEuMCIsInVuaXRfcHJpY2UiOiIwLjAiLCJkaXNj
96
- b3VudF9yYXRlIjoiMC4wIiwidGF4XzFfbmFtZSI6bnVsbCwidGF4XzFfcmF0
97
- ZSI6bnVsbCwidGF4XzJfbmFtZSI6bnVsbCwidGF4XzJfcmF0ZSI6bnVsbCwi
98
- cmVmZXJlbmNlIjpudWxsLCJzdWJ0b3RhbCI6IjAuMDAg4oKsIiwiZGlzY291
99
- bnQiOiIwLjAwIOKCrCIsImdyb3NzX2Ftb3VudCI6IjAuMDAg4oKsIn1dLCJz
100
- dWJ0b3RhbCI6IjAuMDAg4oKsIiwiZGlzY291bnQiOiIwLjAwIOKCrCIsInRh
101
- eGVzIjpbXSwidG90YWwiOiIwLjAwIOKCrCIsInBheW1lbnRzIjpbeyJpZCI6
102
- MzQsImRhdGUiOiIyMDE2LTA2LTIzIiwicGF5bWVudF9tZXRob2QiOiJjYXNo
103
- IiwiYW1vdW50IjoiMC4wMCDigqwifV0sIm5vdGVzIjpudWxsLCJzdGF0ZSI6
104
- InBhaWQiLCJ0YWdfbGlzdCI6W10sInNlY3VyZV9pZCI6IjkwMzg2YWUwMTBi
105
- ZDVjODY4MjM4NWJjNDYyYTZmOTMwZGM5NDQ2NjMiLCJwZXJtYWxpbmsiOiJo
106
- dHRwOi8vZGV2ZWxvcG1lbnQubHZoLm1lOjMwMDAvcmVjZWlwdC85MDM4NmFl
107
- MDEwYmQ1Yzg2ODIzODViYzQ2MmE2ZjkzMGRjOTQ0NjYzIiwicGRmIjoiaHR0
108
- cDovL2RldmVsb3BtZW50Lmx2aC5tZTozMDAwL3JlY2VpcHQvOTAzODZhZTAx
109
- MGJkNWM4NjgyMzg1YmM0NjJhNmY5MzBkYzk0NDY2My5wZGYiLCJ1cmwiOiJo
110
- dHRwOi8vZGV2ZWxvcG1lbnQubHZoLm1lOjMwMDAvYXBpL3JlY2VpcHRzLzEw
111
- NzEuanNvbiIsInByb2Nlc3NvciI6bnVsbCwicHJvY2Vzc29yX2lkIjpudWxs
112
- fQ==
92
+ eyJpZCI6MjAzLCJudW1iZXIiOiIwMDAzIiwiaXNzdWVfZGF0ZSI6IjIwMTct
93
+ MDYtMTIiLCJjcmVhdGVkX2F0IjoxNDk3MjY4MTgxLCJjb250YWN0Ijp7Imlk
94
+ Ijo1MywiZnVsbF9uYW1lIjoiVGVzdCBjdXN0b21lciJ9LCJzdHJlZXRfbGlu
95
+ ZV8xIjpudWxsLCJzdHJlZXRfbGluZV8yIjpudWxsLCJjaXR5IjpudWxsLCJy
96
+ ZWdpb24iOm51bGwsInBvc3RhbF9jb2RlIjpudWxsLCJwb19udW1iZXIiOm51
97
+ bGwsImN1cnJlbmN5IjoiRVVSIiwiaXRlbXMiOlt7ImlkIjoyMDQsImRlc2Ny
98
+ aXB0aW9uIjoiQWlyY3JhZnQiLCJxdWFudGl0eSI6IjEuMCIsInVuaXRfcHJp
99
+ Y2UiOiIwLjAiLCJkaXNjb3VudF9yYXRlIjoiMC4wIiwidGF4XzFfbmFtZSI6
100
+ bnVsbCwidGF4XzFfcmF0ZSI6bnVsbCwidGF4XzJfbmFtZSI6bnVsbCwidGF4
101
+ XzJfcmF0ZSI6bnVsbCwicmVmZXJlbmNlIjpudWxsLCJzdWJ0b3RhbCI6IuKC
102
+ rDAuMDAiLCJkaXNjb3VudCI6IuKCrDAuMDAiLCJncm9zc19hbW91bnQiOiLi
103
+ gqwwLjAwIn1dLCJzdWJ0b3RhbCI6IuKCrDAuMDAiLCJkaXNjb3VudCI6IuKC
104
+ rDAuMDAiLCJ0YXhlcyI6W10sInRvdGFsIjoi4oKsMC4wMCIsInBheW1lbnRz
105
+ IjpbeyJpZCI6NTMsImRhdGUiOiIyMDE3LTA2LTEyIiwicGF5bWVudF9tZXRo
106
+ b2QiOiJjYXNoIiwiYW1vdW50Ijoi4oKsMC4wMCJ9XSwibm90ZXMiOm51bGws
107
+ InN0YXRlIjoicGFpZCIsInRhZ19saXN0IjpbXSwic2VjdXJlX2lkIjoiN2Nl
108
+ Yjg5YmE3ZWRjMWNiOTI2YmU4NDczMjA2N2NkNjYwY2U5MTJlNSIsInBlcm1h
109
+ bGluayI6Imh0dHA6Ly9kZXZlbG9wbWVudC5sdmgubWU6MzAwMC9yZWNlaXB0
110
+ LzdjZWI4OWJhN2VkYzFjYjkyNmJlODQ3MzIwNjdjZDY2MGNlOTEyZTUiLCJw
111
+ ZGYiOiJodHRwOi8vZGV2ZWxvcG1lbnQubHZoLm1lOjMwMDAvcmVjZWlwdC83
112
+ Y2ViODliYTdlZGMxY2I5MjZiZTg0NzMyMDY3Y2Q2NjBjZTkxMmU1LnBkZiIs
113
+ InVybCI6Imh0dHA6Ly9kZXZlbG9wbWVudC5sdmgubWU6MzAwMC9hcGkvcmVj
114
+ ZWlwdHMvMjAzLmpzb24iLCJwcm9jZXNzb3IiOm51bGwsInByb2Nlc3Nvcl9p
115
+ ZCI6bnVsbH0=
113
116
  http_version: '1.1'
114
- recorded_at: Thu, 23 Jun 2016 11:28:15 GMT
117
+ recorded_at: Mon, 12 Jun 2017 11:49:45 GMT
115
118
  - request:
116
119
  method: delete
117
- uri: http://sk_test_B7xXrTspfeGukQqGN1pK@development.lvh.me:3000/api/receipts/1071.json
120
+ uri: http://sk_test_B7xXrTspfeGukQqGN1pK@development.lvh.me:3000/api/receipts/203.json
118
121
  body:
119
122
  encoding: US-ASCII
120
123
  string: ''
@@ -133,15 +136,15 @@ http_interactions:
133
136
  x-ratelimit-limit:
134
137
  - '2000'
135
138
  x-ratelimit-reset:
136
- - '9'
139
+ - '15'
137
140
  x-ratelimit-remaining:
138
- - '95'
141
+ - '100'
139
142
  cache-control:
140
143
  - no-cache
141
144
  x-request-id:
142
- - b13d75b5-fde2-497f-9e74-332a41d47975
145
+ - 804eb5ef-a74e-4e8c-85db-5955b07357d5
143
146
  x-runtime:
144
- - '0.816442'
147
+ - '2.946196'
145
148
  connection:
146
149
  - close
147
150
  server:
@@ -150,10 +153,10 @@ http_interactions:
150
153
  encoding: US-ASCII
151
154
  string: ''
152
155
  http_version: '1.1'
153
- recorded_at: Thu, 23 Jun 2016 11:28:16 GMT
156
+ recorded_at: Mon, 12 Jun 2017 11:49:48 GMT
154
157
  - request:
155
158
  method: delete
156
- uri: http://sk_test_B7xXrTspfeGukQqGN1pK@development.lvh.me:3000/api/contacts/90.json
159
+ uri: http://sk_test_B7xXrTspfeGukQqGN1pK@development.lvh.me:3000/api/contacts/53.json
157
160
  body:
158
161
  encoding: US-ASCII
159
162
  string: ''
@@ -172,15 +175,15 @@ http_interactions:
172
175
  x-ratelimit-limit:
173
176
  - '2000'
174
177
  x-ratelimit-reset:
175
- - '8'
178
+ - '15'
176
179
  x-ratelimit-remaining:
177
- - '94'
180
+ - '99'
178
181
  cache-control:
179
182
  - no-cache
180
183
  x-request-id:
181
- - 3ca5afbf-0bad-4a5b-a88d-9df2749ced18
184
+ - f85ce166-ddd4-4254-bd61-a877fefd13b9
182
185
  x-runtime:
183
- - '0.255832'
186
+ - '1.077894'
184
187
  connection:
185
188
  - close
186
189
  server:
@@ -189,5 +192,5 @@ http_interactions:
189
192
  encoding: US-ASCII
190
193
  string: ''
191
194
  http_version: '1.1'
192
- recorded_at: Thu, 23 Jun 2016 11:28:16 GMT
195
+ recorded_at: Mon, 12 Jun 2017 11:49:49 GMT
193
196
  recorded_with: VCR 2.9.2