quaderno 1.11.2 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
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