invoiced 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -1
- data/lib/invoiced/attachment.rb +1 -1
- data/lib/invoiced/contact.rb +5 -5
- data/lib/invoiced/credit_note.rb +37 -0
- data/lib/invoiced/customer.rb +37 -37
- data/lib/invoiced/email.rb +1 -1
- data/lib/invoiced/error/api_connection_error.rb +2 -2
- data/lib/invoiced/error/api_error.rb +2 -2
- data/lib/invoiced/error/authentication_error.rb +2 -2
- data/lib/invoiced/error/error_base.rb +13 -13
- data/lib/invoiced/error/invalid_request.rb +2 -2
- data/lib/invoiced/estimate.rb +37 -0
- data/lib/invoiced/event.rb +2 -2
- data/lib/invoiced/file.rb +3 -3
- data/lib/invoiced/invoice.rb +33 -33
- data/lib/invoiced/line_item.rb +5 -5
- data/lib/invoiced/list.rb +20 -20
- data/lib/invoiced/object.rb +165 -165
- data/lib/invoiced/operations/create.rb +8 -8
- data/lib/invoiced/operations/delete.rb +10 -10
- data/lib/invoiced/operations/list.rb +12 -12
- data/lib/invoiced/operations/update.rb +19 -19
- data/lib/invoiced/subscription.rb +8 -8
- data/lib/invoiced/transaction.rb +15 -15
- data/lib/invoiced/util.rb +51 -51
- data/lib/invoiced/version.rb +1 -1
- data/lib/invoiced.rb +114 -110
- data/test/invoiced/credit_note_test.rb +126 -0
- data/test/invoiced/estimate_test.rb +126 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f736084452a6d592a98f327acd5d3fc8409b8db
|
4
|
+
data.tar.gz: 4f4ba8787785a2131686c4db8966e3c8460e4022
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 416ba0ed6f5b90cd1ca822b246103b749999e0d32be0c33fdfb566955f16d0ebf76fe382ae45aae11ab4d3114ac6e0cccbe21f8634ba03419db10916cd212aa2
|
7
|
+
data.tar.gz: 82345c29a000f4242968818d9a66979153ab3040d215db97179d829753d45ef77e386dea946bfe1c8857abc0aaa5ecf4073ed95bf758eb43d87898d6a5f9bd96
|
data/Gemfile
CHANGED
@@ -6,4 +6,6 @@ gem 'rest-client', '~> 1.8.0'
|
|
6
6
|
gem 'activesupport', '~> 4.2.3'
|
7
7
|
gem 'coveralls', :require => false, :group => :test
|
8
8
|
gem 'simplecov', '~> 0.10.0', :require => false, :group => :test
|
9
|
-
gem 'simplecov-console', :require => false, :group => :test
|
9
|
+
gem 'simplecov-console', '~> 0.3.1', :require => false, :group => :test
|
10
|
+
gem 'term-ansicolor', '~> 1.3.2', :require => false, :group => :test
|
11
|
+
gem 'tins', '~> 1.6.0', :require => false, :group => :test
|
data/lib/invoiced/attachment.rb
CHANGED
data/lib/invoiced/contact.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Invoiced
|
2
2
|
class Contact < Object
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
include Invoiced::Operations::List
|
4
|
+
include Invoiced::Operations::Create
|
5
|
+
include Invoiced::Operations::Update
|
6
|
+
include Invoiced::Operations::Delete
|
7
|
+
end
|
8
8
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Invoiced
|
2
|
+
class CreditNote < Object
|
3
|
+
include Invoiced::Operations::List
|
4
|
+
include Invoiced::Operations::Create
|
5
|
+
include Invoiced::Operations::Update
|
6
|
+
include Invoiced::Operations::Delete
|
7
|
+
|
8
|
+
def send(opts={})
|
9
|
+
response = @client.request(:post, "#{self.endpoint()}/emails", opts)
|
10
|
+
|
11
|
+
# build email objects
|
12
|
+
email = Email.new(@client)
|
13
|
+
Util.build_objects(email, response[:body])
|
14
|
+
end
|
15
|
+
|
16
|
+
def attachments(opts={})
|
17
|
+
response = @client.request(:get, "#{self.endpoint()}/attachments", opts)
|
18
|
+
|
19
|
+
# ensure each attachment has an ID
|
20
|
+
body = response[:body]
|
21
|
+
body.each do |attachment|
|
22
|
+
if !attachment.has_key?(:id)
|
23
|
+
attachment[:id] = attachment[:file][:id]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# build objects
|
28
|
+
attachment = Attachment.new(@client)
|
29
|
+
attachments = Util.build_objects(attachment, body)
|
30
|
+
|
31
|
+
# store the metadata from the list operation
|
32
|
+
metadata = Invoiced::List.new(response[:headers][:link], response[:headers][:x_total_count])
|
33
|
+
|
34
|
+
return attachments, metadata
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/invoiced/customer.rb
CHANGED
@@ -1,40 +1,40 @@
|
|
1
1
|
module Invoiced
|
2
2
|
class Customer < Object
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
3
|
+
include Invoiced::Operations::List
|
4
|
+
include Invoiced::Operations::Create
|
5
|
+
include Invoiced::Operations::Update
|
6
|
+
include Invoiced::Operations::Delete
|
7
|
+
|
8
|
+
def send_statement(opts={})
|
9
|
+
response = @client.request(:post, "#{self.endpoint()}/emails", opts)
|
10
|
+
|
11
|
+
# build email objects
|
12
|
+
email = Email.new(@client)
|
13
|
+
Util.build_objects(email, response[:body])
|
14
|
+
end
|
15
|
+
|
16
|
+
def balance
|
17
|
+
response = @client.request(:get, "#{self.endpoint()}/balance")
|
18
|
+
|
19
|
+
response[:body]
|
20
|
+
end
|
21
|
+
|
22
|
+
def contacts(opts={})
|
23
|
+
contact = Contact.new(@client)
|
24
|
+
contact.set_endpoint_base(self.endpoint())
|
25
|
+
end
|
26
|
+
|
27
|
+
def line_items(opts={})
|
28
|
+
line = LineItem.new(@client)
|
29
|
+
line.set_endpoint_base(self.endpoint())
|
30
|
+
end
|
31
|
+
|
32
|
+
def invoice(opts={})
|
33
|
+
response = @client.request(:post, "#{self.endpoint()}/invoices", opts)
|
34
|
+
|
35
|
+
# build invoice object
|
36
|
+
invoice = Invoice.new(@client)
|
37
|
+
Util.convert_to_object(invoice, response[:body])
|
38
|
+
end
|
39
|
+
end
|
40
40
|
end
|
data/lib/invoiced/email.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
module Invoiced
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class ErrorBase < StandardError
|
3
|
+
attr_reader :message
|
4
|
+
attr_reader :status_code
|
5
|
+
attr_reader :error
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
def initialize(message=nil, status_code=nil, error=nil)
|
8
|
+
@message = message
|
9
|
+
@status_code = status_code
|
10
|
+
@error = error
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
def to_s
|
14
|
+
"(#{@status_code}): #{@message}"
|
15
|
+
end
|
16
|
+
end
|
17
17
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Invoiced
|
2
|
+
class Estimate < Object
|
3
|
+
include Invoiced::Operations::List
|
4
|
+
include Invoiced::Operations::Create
|
5
|
+
include Invoiced::Operations::Update
|
6
|
+
include Invoiced::Operations::Delete
|
7
|
+
|
8
|
+
def send(opts={})
|
9
|
+
response = @client.request(:post, "#{self.endpoint()}/emails", opts)
|
10
|
+
|
11
|
+
# build email objects
|
12
|
+
email = Email.new(@client)
|
13
|
+
Util.build_objects(email, response[:body])
|
14
|
+
end
|
15
|
+
|
16
|
+
def attachments(opts={})
|
17
|
+
response = @client.request(:get, "#{self.endpoint()}/attachments", opts)
|
18
|
+
|
19
|
+
# ensure each attachment has an ID
|
20
|
+
body = response[:body]
|
21
|
+
body.each do |attachment|
|
22
|
+
if !attachment.has_key?(:id)
|
23
|
+
attachment[:id] = attachment[:file][:id]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# build objects
|
28
|
+
attachment = Attachment.new(@client)
|
29
|
+
attachments = Util.build_objects(attachment, body)
|
30
|
+
|
31
|
+
# store the metadata from the list operation
|
32
|
+
metadata = Invoiced::List.new(response[:headers][:link], response[:headers][:x_total_count])
|
33
|
+
|
34
|
+
return attachments, metadata
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/invoiced/event.rb
CHANGED
data/lib/invoiced/file.rb
CHANGED
data/lib/invoiced/invoice.rb
CHANGED
@@ -1,46 +1,46 @@
|
|
1
1
|
module Invoiced
|
2
2
|
class Invoice < Object
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
include Invoiced::Operations::List
|
4
|
+
include Invoiced::Operations::Create
|
5
|
+
include Invoiced::Operations::Update
|
6
|
+
include Invoiced::Operations::Delete
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
def send(opts={})
|
9
|
+
response = @client.request(:post, "#{self.endpoint()}/emails", opts)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
# build email objects
|
12
|
+
email = Email.new(@client)
|
13
|
+
Util.build_objects(email, response[:body])
|
14
|
+
end
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
def pay
|
17
|
+
response = @client.request(:post, "#{self.endpoint()}/pay")
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
# update the local values with the response
|
20
|
+
refresh_from(response[:body].dup.merge({:id => self.id}))
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
return response[:code] == 200
|
23
|
+
end
|
24
24
|
|
25
|
-
|
26
|
-
|
25
|
+
def attachments(opts={})
|
26
|
+
response = @client.request(:get, "#{self.endpoint()}/attachments", opts)
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
# ensure each attachment has an ID
|
29
|
+
body = response[:body]
|
30
|
+
body.each do |attachment|
|
31
|
+
if !attachment.has_key?(:id)
|
32
|
+
attachment[:id] = attachment[:file][:id]
|
33
|
+
end
|
34
|
+
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
# build objects
|
37
|
+
attachment = Attachment.new(@client)
|
38
|
+
attachments = Util.build_objects(attachment, body)
|
39
39
|
|
40
|
-
|
41
|
-
|
40
|
+
# store the metadata from the list operation
|
41
|
+
metadata = Invoiced::List.new(response[:headers][:link], response[:headers][:x_total_count])
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
return attachments, metadata
|
44
|
+
end
|
45
|
+
end
|
46
46
|
end
|
data/lib/invoiced/line_item.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Invoiced
|
2
2
|
class LineItem < Object
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
include Invoiced::Operations::List
|
4
|
+
include Invoiced::Operations::Create
|
5
|
+
include Invoiced::Operations::Update
|
6
|
+
include Invoiced::Operations::Delete
|
7
|
+
end
|
8
8
|
end
|
data/lib/invoiced/list.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
module Invoiced
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class List
|
3
|
+
attr_reader :links
|
4
|
+
attr_reader :total_count
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
def initialize(link_header, total_count)
|
7
|
+
@links = parse_link_header(link_header)
|
8
|
+
@total_count = total_count
|
9
|
+
end
|
10
10
|
|
11
|
-
|
11
|
+
private
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
def parse_link_header(header)
|
14
|
+
links = Hash.new
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
# Parse each part into a named link
|
17
|
+
header.split(',').each do |part, index|
|
18
|
+
section = part.split(';')
|
19
|
+
url = section[0][/<(.*)>/,1]
|
20
|
+
name = section[1][/rel="(.*)"/,1].to_sym
|
21
|
+
links[name] = url
|
22
|
+
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
return links
|
25
|
+
end
|
26
|
+
end
|
27
27
|
end
|