quaderno 1.9.1 → 1.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -6
  3. data/Gemfile.lock +8 -5
  4. data/README.md +7 -1
  5. data/VERSION +1 -1
  6. data/changelog.md +5 -0
  7. data/lib/quaderno-ruby/behavior/crud.rb +30 -36
  8. data/lib/quaderno-ruby/behavior/payment.rb +12 -19
  9. data/lib/quaderno-ruby/behavior/retrieve.rb +20 -0
  10. data/lib/quaderno-ruby/contact.rb +1 -0
  11. data/lib/quaderno-ruby/payment.rb +0 -2
  12. data/lib/quaderno-ruby/tax.rb +3 -3
  13. data/lib/quaderno-ruby/webhook.rb +0 -2
  14. data/lib/quaderno-ruby.rb +1 -1
  15. data/quaderno.gemspec +15 -3
  16. data/test/fixtures/quaderno_cassettes/all_contacts.yml +295 -31
  17. data/test/fixtures/quaderno_cassettes/all_estimates.yml +28 -36
  18. data/test/fixtures/quaderno_cassettes/all_expenses.yml +60 -34
  19. data/test/fixtures/quaderno_cassettes/all_invoices.yml +2888 -36
  20. data/test/fixtures/quaderno_cassettes/all_items.yml +22 -27
  21. data/test/fixtures/quaderno_cassettes/all_receipts.yml +56 -0
  22. data/test/fixtures/quaderno_cassettes/all_webhooks.yml +98 -126
  23. data/test/fixtures/quaderno_cassettes/calculate_tax.yml +38 -62
  24. data/test/fixtures/quaderno_cassettes/create_estimate_on_downgraded_API.yml +428 -0
  25. data/test/fixtures/quaderno_cassettes/create_expense_on_downgraded_API.yml +510 -0
  26. data/test/fixtures/quaderno_cassettes/create_invoice_on_downgraded_API.yml +432 -0
  27. data/test/fixtures/quaderno_cassettes/create_receipt_on_downgraded_API.yml +193 -0
  28. data/test/fixtures/quaderno_cassettes/deleted_contact.yml +642 -113
  29. data/test/fixtures/quaderno_cassettes/deleted_estimate.yml +385 -120
  30. data/test/fixtures/quaderno_cassettes/deleted_expense.yml +414 -118
  31. data/test/fixtures/quaderno_cassettes/deleted_invoice.yml +3249 -120
  32. data/test/fixtures/quaderno_cassettes/deleted_item.yml +60 -75
  33. data/test/fixtures/quaderno_cassettes/deleted_receipt.yml +222 -0
  34. data/test/fixtures/quaderno_cassettes/deleted_webhook.yml +120 -152
  35. data/test/fixtures/quaderno_cassettes/delivered_estimate.yml +76 -89
  36. data/test/fixtures/quaderno_cassettes/delivered_invoice.yml +2935 -89
  37. data/test/fixtures/quaderno_cassettes/delivered_receipt.yml +140 -0
  38. data/test/fixtures/quaderno_cassettes/found_contact.yml +319 -60
  39. data/test/fixtures/quaderno_cassettes/found_estimate.yml +53 -69
  40. data/test/fixtures/quaderno_cassettes/found_expense.yml +121 -65
  41. data/test/fixtures/quaderno_cassettes/found_invoice.yml +2916 -67
  42. data/test/fixtures/quaderno_cassettes/found_item.yml +50 -60
  43. data/test/fixtures/quaderno_cassettes/found_receipt.yml +101 -0
  44. data/test/fixtures/quaderno_cassettes/found_webhook.yml +60 -76
  45. data/test/fixtures/quaderno_cassettes/new_contact.yml +22 -29
  46. data/test/fixtures/quaderno_cassettes/new_estimate.yml +357 -84
  47. data/test/fixtures/quaderno_cassettes/new_expense.yml +414 -118
  48. data/test/fixtures/quaderno_cassettes/new_invoice.yml +361 -84
  49. data/test/fixtures/quaderno_cassettes/new_item.yml +22 -29
  50. data/test/fixtures/quaderno_cassettes/new_receipt.yml +169 -0
  51. data/test/fixtures/quaderno_cassettes/new_webhook.yml +38 -50
  52. data/test/fixtures/quaderno_cassettes/paid_expense.yml +79 -63
  53. data/test/fixtures/quaderno_cassettes/paid_invoice.yml +2907 -65
  54. data/test/fixtures/quaderno_cassettes/rate_limit.yml +22 -26
  55. data/test/fixtures/quaderno_cassettes/unpay_an_expense.yml +98 -85
  56. data/test/fixtures/quaderno_cassettes/unpay_an_invoice.yml +2926 -87
  57. data/test/fixtures/quaderno_cassettes/updated_contact.yml +318 -62
  58. data/test/fixtures/quaderno_cassettes/updated_estimate.yml +402 -116
  59. data/test/fixtures/quaderno_cassettes/updated_expense.yml +395 -113
  60. data/test/fixtures/quaderno_cassettes/updated_invoice.yml +410 -116
  61. data/test/fixtures/quaderno_cassettes/updated_item.yml +49 -61
  62. data/test/fixtures/quaderno_cassettes/updated_receipt.yml +214 -0
  63. data/test/fixtures/quaderno_cassettes/updated_webhook.yml +82 -105
  64. data/test/fixtures/quaderno_cassettes/wrong_token.yml +11 -25
  65. data/test/helper.rb +4 -0
  66. data/test/unit/test_quaderno_contacts.rb +18 -19
  67. data/test/unit/test_quaderno_estimates.rb +58 -31
  68. data/test/unit/test_quaderno_expenses.rb +68 -41
  69. data/test/unit/test_quaderno_invoices.rb +74 -47
  70. data/test/unit/test_quaderno_items.rb +27 -26
  71. data/test/unit/test_quaderno_receipts.rb +156 -0
  72. data/test/unit/test_quaderno_tax.rb +10 -10
  73. data/test/unit/test_quaderno_webhooks.rb +19 -20
  74. metadata +14 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6699c1ffde675d6d20e1bc6a89b411c24a5e684
4
- data.tar.gz: 56b5cd78c82c019eebe55d28cd100e7f124b047d
3
+ metadata.gz: ba3feaca76f5023f241d8fd0b6014bfa44c1f428
4
+ data.tar.gz: 16c5c2dae1a59d643531a94fae1ebae837d25b5d
5
5
  SHA512:
6
- metadata.gz: c1ac26cc48424b25301e43fa60a36dfbab5fccf0214e87577b69ca6b2f84f7603e8459a3110c9dc58a5067d4309245dde28f1a1a88a940bc55b59be76680e58d
7
- data.tar.gz: 79e42d2edfd106aba7cc750e03fe408da27aada6bd96b60e084b83d1a3cf5ec86e683b68cb25fb68b0dc409bbd963cb89a4fefef68f61a70b96b8a98db83c1af
6
+ metadata.gz: b6cfe30aed9a4441fa0c1ce7ad42f8bbed1059f5001ce018b4339a5fdbd338648542bb799729653c8968a0d7ebd13b0a723c576f785d54d4066fbe451913f1e1
7
+ data.tar.gz: 64d9a7b1c72c1b2c75865032208033715644e8c18dbe506fbc73acf4749b5ee939997e45bf03d49e37f373579a1663fe5c836d89b51289ab51b99cb70c1b5175
data/Gemfile CHANGED
@@ -1,17 +1,17 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gem 'httparty', '~> 0.13.1'
4
4
 
5
5
  group :development do
6
- gem "jeweler", "~> 2.0.1"
7
- gem "rdoc", "~> 3.12"
6
+ gem 'jeweler', '~> 2.0.1'
7
+ gem 'rdoc', '~> 3.12'
8
8
  end
9
9
 
10
10
  group :test do
11
- gem "bundler", ">= 1.0.0"
11
+ gem 'bundler', '>= 1.0.0'
12
12
  gem 'fakeweb'
13
13
  gem 'minitest', '~> 4.7.5 '
14
- gem "simplecov", ">= 0"
15
- gem "shoulda", ">= 0"
14
+ gem 'simplecov', '>= 0'
15
+ gem 'shoulda', '>= 0'
16
16
  gem 'vcr', :require => 'vcr'
17
17
  end
data/Gemfile.lock CHANGED
@@ -11,7 +11,7 @@ GEM
11
11
  builder (3.2.2)
12
12
  descendants_tracker (0.0.4)
13
13
  thread_safe (~> 0.3, >= 0.3.1)
14
- docile (1.1.4)
14
+ docile (1.1.5)
15
15
  fakeweb (1.3.0)
16
16
  faraday (0.9.0)
17
17
  multipart-post (>= 1.2, < 3)
@@ -64,11 +64,11 @@ GEM
64
64
  shoulda-context (1.2.1)
65
65
  shoulda-matchers (2.6.1)
66
66
  activesupport (>= 3.0.0)
67
- simplecov (0.8.2)
67
+ simplecov (0.11.2)
68
68
  docile (~> 1.1.0)
69
- multi_json
70
- simplecov-html (~> 0.8.0)
71
- simplecov-html (0.8.0)
69
+ json (~> 1.8)
70
+ simplecov-html (~> 0.10.0)
71
+ simplecov-html (0.10.0)
72
72
  thread_safe (0.3.4)
73
73
  tzinfo (0.3.39)
74
74
  vcr (2.9.2)
@@ -86,3 +86,6 @@ DEPENDENCIES
86
86
  shoulda
87
87
  simplecov
88
88
  vcr
89
+
90
+ BUNDLED WITH
91
+ 1.11.2
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Quaderno-ruby is a ruby wrapper for [Quaderno API] (https://github.com/quaderno/quaderno-api).
4
4
  As the API, it's mostly CRUD.
5
5
 
6
- Current version is 1.9.1 See the changelog [here](https://github.com/quaderno/quaderno-ruby/blob/master/changelog.md)
6
+ Current version is 1.9.2 See the changelog [here](https://github.com/quaderno/quaderno-ruby/blob/master/changelog.md)
7
7
 
8
8
  ## Installation & Configuration
9
9
 
@@ -87,6 +87,12 @@ Quaderno-ruby parses all the json responses in human readable data, so you can a
87
87
 
88
88
  will return the contact with the id passed as parameter.
89
89
 
90
+ ## Retrieving a customer contact by its payment gatewaycustomer ID
91
+ ```ruby
92
+ Quaderno::Contact.retrieve_customer(PAYMENT_GATEWAY_CUSTOMER_ID, PAYMENT_GATEWAY) #=> Quaderno::Contact
93
+ ```
94
+ will return the contact with the customer id passed as parameter.
95
+
90
96
  ### Creating a new contact
91
97
  ```ruby
92
98
  Quaderno::Contact.create(params) #=> Quaderno::Contact
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.1
1
+ 1.9.2
data/changelog.md CHANGED
@@ -1,5 +1,10 @@
1
1
  #Changelog
2
2
 
3
+ ##1.9.2
4
+ * Added `Quaderno::Contact.retrieve` method
5
+ * Code cleanup
6
+ * Update tests
7
+
3
8
  ##1.9.1
4
9
  * `Quaderno::Base.authorization` raises `Quaderno::Exceptions::InvalidSubdomainOrToken` instead returning false on wrong credentials
5
10
  * Inherit from `StandardError` instead of `Exception` for `Quaderno::Exceptions` by **@mvelikov**
@@ -6,37 +6,30 @@ module Quaderno
6
6
  end
7
7
 
8
8
  module ClassMethods
9
- def to_instance(klass, hash)
10
- klass.new hash
11
- end
12
-
13
- # Parse nested elements of a document
14
- def parse(element)
15
- payments_collection = []
16
- (element['payments'] || []).each do |payment|
17
- payments_collection << api_model.to_instance(Quaderno::Payment, payment)
18
- end unless api_model == Quaderno::Estimate
19
- element['payments'] = payments_collection
20
-
21
- items_collection = []
22
- element['items'].each do |item|
23
- items_collection << api_model.to_instance(Quaderno::DocumentItem, item)
9
+ def parse_nested(element)
10
+ if element.has_key?('payments')
11
+ payments_collection = Array.new
12
+ (element['payments'] || Array.new).each { |payment| payments_collection << Quaderno::Payment.new(payment) }
13
+ element['payments'] = payments_collection
24
14
  end
15
+
16
+ items_collection = Array.new
17
+ element['items'].each { |item| items_collection << Quaderno::DocumentItem.new(item) }
25
18
  element['items'] = items_collection
19
+ element['contact'] = Quaderno::Contact.new(element['contact'])
26
20
 
27
- contact = api_model.to_instance(Quaderno::Contact, element['contact'])
28
- element['contact'] = contact
21
+ element
29
22
  end
30
23
 
31
24
  def all(filter = nil)
32
- party_response = get("#{api_model.url}#{ api_model.api_path }.json", body: filter, basic_auth: { username: api_model.auth_token }, headers: version_header)
33
- check_exception_for(party_response, { rate_limit: true, subdomain_or_token: true })
34
- array = party_response.parsed_response
35
- collection = []
25
+ response = get("#{api_model.url}#{ api_model.api_path }.json", body: filter, basic_auth: { username: api_model.auth_token }, headers: version_header)
26
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true })
27
+ array = response.parsed_response
28
+ collection = Array.new
36
29
 
37
30
  if is_a_document?
38
31
  array.each do |element|
39
- api_model.parse(element)
32
+ api_model.parse_nested(element)
40
33
  collection << (new element)
41
34
  end
42
35
  else
@@ -47,38 +40,39 @@ module Quaderno
47
40
  end
48
41
 
49
42
  def find(id)
50
- party_response = get "#{api_model.url}#{ api_model.api_path }/#{ id }.json", basic_auth: { username: api_model.auth_token }, headers: version_header
51
- check_exception_for(party_response, { rate_limit: true, subdomain_or_token: true, id: true })
52
- hash = party_response.parsed_response
43
+ response = get "#{api_model.url}#{ api_model.api_path }/#{ id }.json", basic_auth: { username: api_model.auth_token }, headers: version_header
44
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
45
+ hash = response.parsed_response
53
46
 
54
- api_model.parse(hash) if is_a_document?
47
+ api_model.parse_nested(hash) if is_a_document?
55
48
 
56
49
  new hash
57
50
  end
58
51
 
59
52
  def create(params)
60
- party_response = post "#{api_model.url}#{ api_model.api_path }.json", body: params, basic_auth: { username: api_model.auth_token }, headers: version_header
61
- check_exception_for(party_response, { rate_limit: true, subdomain_or_token: true, required_fields: true })
62
- hash = party_response.parsed_response
53
+ response = post "#{api_model.url}#{ api_model.api_path }.json", body: params, basic_auth: { username: api_model.auth_token }, headers: version_header
54
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true, required_fields: true })
55
+ hash = response.parsed_response
63
56
 
64
- api_model.parse(hash) if is_a_document?
57
+ api_model.parse_nested(hash) if is_a_document?
65
58
 
66
59
  new hash
67
60
  end
68
61
 
69
62
  def update(id, params)
70
- party_response = put "#{api_model.url}#{ api_model.api_path }/#{ id }.json", body: params, basic_auth: { username: api_model.auth_token }, headers: version_header
71
- check_exception_for(party_response, { rate_limit: true, required_fields: true, subdomain_or_token: true, id: true })
72
- hash = party_response.parsed_response
63
+ response = put "#{api_model.url}#{ api_model.api_path }/#{ id }.json", body: params, basic_auth: { username: api_model.auth_token }, headers: version_header
64
+ check_exception_for(response, { rate_limit: true, required_fields: true, subdomain_or_token: true, id: true })
65
+ hash = response.parsed_response
73
66
 
74
- api_model.parse(hash) if is_a_document?
67
+ api_model.parse_nested(hash) if is_a_document?
75
68
 
76
69
  new hash
77
70
  end
78
71
 
79
72
  def delete(id)
80
- party_response = HTTParty.delete "#{api_model.url}#{ api_model.api_path }/#{ id }.json", basic_auth: { username: api_model.auth_token }, headers: version_header
81
- check_exception_for(party_response, { rate_limit: true, subdomain_or_token: true, id: true, has_documents: true })
73
+ response = HTTParty.delete "#{api_model.url}#{ api_model.api_path }/#{ id }.json", basic_auth: { username: api_model.auth_token }, headers: version_header
74
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true, has_documents: true })
75
+
82
76
  true
83
77
  end
84
78
  end
@@ -6,30 +6,23 @@ module Quaderno
6
6
  end
7
7
 
8
8
  module InstanceMethods
9
- def to_instance(klass, parsed)
10
- klass.new(parsed)
11
- end
12
9
 
13
10
  def add_payment(params)
14
- party_response = api_model.post "#{api_model.url}#{ api_model.api_path }/#{ id }/payments.json", body: params, basic_auth: { username: api_model.auth_token }, headers: self.class.version_header
15
- api_model.check_exception_for(party_response, { rate_limit: true, subdomain_or_token: true, required_fields: true })
16
- parsed = JSON::parse party_response.body
17
- instance = to_instance(Quaderno::Payment, parsed)
18
- payments << instance
19
- Quaderno::Payment.new parsed
11
+ response = api_model.post "#{api_model.url}#{ api_model.api_path }/#{ id }/payments.json", body: params, basic_auth: { username: api_model.auth_token }, headers: self.class.version_header
12
+ api_model.check_exception_for(response, { rate_limit: true, subdomain_or_token: true, required_fields: true })
13
+
14
+ instance = Quaderno::Payment.new(response.parsed_response)
15
+ self.payments << instance
16
+
17
+ Quaderno::Payment.new instance
20
18
  end
21
19
 
22
20
  def remove_payment(payment_id)
23
- party_response = HTTParty.delete "#{api_model.url}#{ api_model.api_path }/#{ id }/payments/#{ payment_id }.json", basic_auth: { username: api_model.auth_token }, headers: self.class.version_header
24
- to_delete = nil
25
- payments.each do |payment|
26
- if payment.id == payment_id
27
- to_delete = payment
28
- break
29
- end
30
- end
31
- payments.delete(to_delete)
32
- api_model.check_exception_for(party_response, { rate_limit: true, subdomain_or_token: true, id: true })
21
+ response = HTTParty.delete "#{api_model.url}#{ api_model.api_path }/#{ id }/payments/#{ payment_id }.json", basic_auth: { username: api_model.auth_token }, headers: self.class.version_header
22
+ api_model.check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
23
+
24
+ self.payments.delete_if { |payment| payment.id == payment_id }
25
+
33
26
  true
34
27
  end
35
28
  end
@@ -0,0 +1,20 @@
1
+ module Quaderno
2
+ module Behavior
3
+ module Retrieve
4
+ def self.included(receiver)
5
+ receiver.send :extend, ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ def retrieve_customer(customer_id, gateway = nil)
11
+ response = get "#{api_model.url}#{gateway || 'stripe'}/customers/#{customer_id}.json", basic_auth: { username: api_model.auth_token }, headers: version_header
12
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
13
+ hash = response.parsed_response
14
+
15
+ new hash
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,6 @@
1
1
  module Quaderno
2
2
  class Contact < Base
3
+ include Quaderno::Behavior::Retrieve
3
4
 
4
5
  api_model Quaderno::Contact
5
6
  api_path 'contacts'
@@ -1,6 +1,4 @@
1
1
  module Quaderno
2
-
3
2
  class Payment < OpenStruct
4
3
  end
5
-
6
4
  end
@@ -2,11 +2,11 @@ module Quaderno
2
2
  class Tax < Base
3
3
  api_model Quaderno::Tax
4
4
  api_path 'taxes'
5
-
5
+
6
6
  class << self
7
- undef :all, :find, :create, :update, :delete, :parse
7
+ undef :all, :find, :create, :update, :delete, :parse_nested
8
8
  end
9
-
9
+
10
10
  def self.calculate(params)
11
11
  party_response = get("#{self.url}taxes/calculate.json", query: params, basic_auth: { username: api_model.auth_token } )
12
12
  check_exception_for(party_response, { rate_limit: true, subdomain_or_token: true, id: true })
@@ -1,8 +1,6 @@
1
1
  module Quaderno
2
2
  class Webhook < Base
3
-
4
3
  api_model Quaderno::Webhook
5
4
  api_path 'webhooks'
6
-
7
5
  end
8
6
  end
data/lib/quaderno-ruby.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'ostruct'
2
2
 
3
3
  require 'quaderno-ruby/exceptions/exceptions'
4
- %w(crud deliver payment).each { |filename| require "quaderno-ruby/behavior/#{ filename }" }
4
+ %w(crud deliver payment retrieve).each { |filename| require "quaderno-ruby/behavior/#{ filename }" }
5
5
  %w(base contact item invoice receipt credit estimate expense recurring document_item payment webhook tax).each { |filename| require "quaderno-ruby/#{ filename }" }
6
6
 
7
7
  module Quaderno
data/quaderno.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: quaderno 1.9.1 ruby lib
5
+ # stub: quaderno 1.9.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "quaderno"
9
- s.version = "1.9.1"
9
+ s.version = "1.9.2"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Recrea"]
14
- s.date = "2016-06-21"
14
+ s.date = "2016-06-23"
15
15
  s.description = " A ruby wrapper for Quaderno API "
16
16
  s.email = "carlos@recrea.es"
17
17
  s.extra_rdoc_files = [
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "lib/quaderno-ruby/behavior/crud.rb",
34
34
  "lib/quaderno-ruby/behavior/deliver.rb",
35
35
  "lib/quaderno-ruby/behavior/payment.rb",
36
+ "lib/quaderno-ruby/behavior/retrieve.rb",
36
37
  "lib/quaderno-ruby/contact.rb",
37
38
  "lib/quaderno-ruby/credit.rb",
38
39
  "lib/quaderno-ruby/document_item.rb",
@@ -53,27 +54,36 @@ Gem::Specification.new do |s|
53
54
  "test/fixtures/quaderno_cassettes/all_expenses.yml",
54
55
  "test/fixtures/quaderno_cassettes/all_invoices.yml",
55
56
  "test/fixtures/quaderno_cassettes/all_items.yml",
57
+ "test/fixtures/quaderno_cassettes/all_receipts.yml",
56
58
  "test/fixtures/quaderno_cassettes/all_webhooks.yml",
57
59
  "test/fixtures/quaderno_cassettes/calculate_tax.yml",
60
+ "test/fixtures/quaderno_cassettes/create_estimate_on_downgraded_API.yml",
61
+ "test/fixtures/quaderno_cassettes/create_expense_on_downgraded_API.yml",
62
+ "test/fixtures/quaderno_cassettes/create_invoice_on_downgraded_API.yml",
63
+ "test/fixtures/quaderno_cassettes/create_receipt_on_downgraded_API.yml",
58
64
  "test/fixtures/quaderno_cassettes/deleted_contact.yml",
59
65
  "test/fixtures/quaderno_cassettes/deleted_estimate.yml",
60
66
  "test/fixtures/quaderno_cassettes/deleted_expense.yml",
61
67
  "test/fixtures/quaderno_cassettes/deleted_invoice.yml",
62
68
  "test/fixtures/quaderno_cassettes/deleted_item.yml",
69
+ "test/fixtures/quaderno_cassettes/deleted_receipt.yml",
63
70
  "test/fixtures/quaderno_cassettes/deleted_webhook.yml",
64
71
  "test/fixtures/quaderno_cassettes/delivered_estimate.yml",
65
72
  "test/fixtures/quaderno_cassettes/delivered_invoice.yml",
73
+ "test/fixtures/quaderno_cassettes/delivered_receipt.yml",
66
74
  "test/fixtures/quaderno_cassettes/found_contact.yml",
67
75
  "test/fixtures/quaderno_cassettes/found_estimate.yml",
68
76
  "test/fixtures/quaderno_cassettes/found_expense.yml",
69
77
  "test/fixtures/quaderno_cassettes/found_invoice.yml",
70
78
  "test/fixtures/quaderno_cassettes/found_item.yml",
79
+ "test/fixtures/quaderno_cassettes/found_receipt.yml",
71
80
  "test/fixtures/quaderno_cassettes/found_webhook.yml",
72
81
  "test/fixtures/quaderno_cassettes/new_contact.yml",
73
82
  "test/fixtures/quaderno_cassettes/new_estimate.yml",
74
83
  "test/fixtures/quaderno_cassettes/new_expense.yml",
75
84
  "test/fixtures/quaderno_cassettes/new_invoice.yml",
76
85
  "test/fixtures/quaderno_cassettes/new_item.yml",
86
+ "test/fixtures/quaderno_cassettes/new_receipt.yml",
77
87
  "test/fixtures/quaderno_cassettes/new_webhook.yml",
78
88
  "test/fixtures/quaderno_cassettes/paid_expense.yml",
79
89
  "test/fixtures/quaderno_cassettes/paid_invoice.yml",
@@ -85,6 +95,7 @@ Gem::Specification.new do |s|
85
95
  "test/fixtures/quaderno_cassettes/updated_expense.yml",
86
96
  "test/fixtures/quaderno_cassettes/updated_invoice.yml",
87
97
  "test/fixtures/quaderno_cassettes/updated_item.yml",
98
+ "test/fixtures/quaderno_cassettes/updated_receipt.yml",
88
99
  "test/fixtures/quaderno_cassettes/updated_webhook.yml",
89
100
  "test/fixtures/quaderno_cassettes/wrong_token.yml",
90
101
  "test/helper.rb",
@@ -93,6 +104,7 @@ Gem::Specification.new do |s|
93
104
  "test/unit/test_quaderno_expenses.rb",
94
105
  "test/unit/test_quaderno_invoices.rb",
95
106
  "test/unit/test_quaderno_items.rb",
107
+ "test/unit/test_quaderno_receipts.rb",
96
108
  "test/unit/test_quaderno_tax.rb",
97
109
  "test/unit/test_quaderno_webhooks.rb"
98
110
  ]