clearbooks 0.16.3

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 +7 -0
  2. data/AUTHORS.md +31 -0
  3. data/CHANGELOG.md +0 -0
  4. data/COPYING.md +12 -0
  5. data/FAQ.md +8 -0
  6. data/Gemfile +105 -0
  7. data/LICENSE.md +14 -0
  8. data/MAINTAINERS.md +40 -0
  9. data/README.md +549 -0
  10. data/Rakefile +94 -0
  11. data/Thorfile +80 -0
  12. data/bin/clearbooks +28 -0
  13. data/clearbooks.gemspec +119 -0
  14. data/examples/demo.rb +8 -0
  15. data/lib/clearbooks.rb +92 -0
  16. data/lib/clearbooks/core_ext.rb +8 -0
  17. data/lib/clearbooks/core_ext/array.rb +51 -0
  18. data/lib/clearbooks/core_ext/hash.rb +47 -0
  19. data/lib/clearbooks/core_ext/io_binary_read.rb +20 -0
  20. data/lib/clearbooks/core_ext/string.rb +21 -0
  21. data/lib/clearbooks/error.rb +8 -0
  22. data/lib/clearbooks/error/errors.rb +228 -0
  23. data/lib/clearbooks/interface/rake/cucumber.rb +36 -0
  24. data/lib/clearbooks/interface/rake/default.rb +28 -0
  25. data/lib/clearbooks/interface/rake/documentation.rb +45 -0
  26. data/lib/clearbooks/interface/rake/guard.rb +13 -0
  27. data/lib/clearbooks/interface/rake/helpers.rb +27 -0
  28. data/lib/clearbooks/interface/rake/library.rb +126 -0
  29. data/lib/clearbooks/interface/rake/metric.rb +15 -0
  30. data/lib/clearbooks/interface/rake/rspec.rb +31 -0
  31. data/lib/clearbooks/interface/thor/info.thor +292 -0
  32. data/lib/clearbooks/interface/thor/mixin/config_choice.rb +27 -0
  33. data/lib/clearbooks/interface/thor/mixin/configuration.rb +28 -0
  34. data/lib/clearbooks/interface/thor/mixin/default.rb +30 -0
  35. data/lib/clearbooks/interface/thor/mixin/default_config.rb +31 -0
  36. data/lib/clearbooks/interface/thor/mixin/guess.rb +57 -0
  37. data/lib/clearbooks/interface/thor/mixin/shell.rb +225 -0
  38. data/lib/clearbooks/interface/thor/version.thor +34 -0
  39. data/lib/clearbooks/library/client.rb +257 -0
  40. data/lib/clearbooks/library/configuration.rb +34 -0
  41. data/lib/clearbooks/model/account_code.rb +65 -0
  42. data/lib/clearbooks/model/base.rb +67 -0
  43. data/lib/clearbooks/model/entity.rb +225 -0
  44. data/lib/clearbooks/model/invoice.rb +163 -0
  45. data/lib/clearbooks/model/item.rb +78 -0
  46. data/lib/clearbooks/model/journal.rb +74 -0
  47. data/lib/clearbooks/model/ledger.rb +52 -0
  48. data/lib/clearbooks/model/payment.rb +113 -0
  49. data/lib/clearbooks/model/project.rb +58 -0
  50. data/lib/clearbooks/version.rb +12 -0
  51. data/spec/clearbooks/clearbooks_spec.rb +27 -0
  52. data/spec/clearbooks/model/account_code_spec.rb +52 -0
  53. data/spec/clearbooks/model/entity_spec.rb +107 -0
  54. data/spec/clearbooks/model/invoice_spec.rb +109 -0
  55. data/spec/clearbooks/model/journal_spec.rb +77 -0
  56. data/spec/clearbooks/model/payment_spec.rb +103 -0
  57. data/spec/clearbooks/model/project_spec.rb +72 -0
  58. data/spec/fixtures/response/allocate_payment.xml +12 -0
  59. data/spec/fixtures/response/create_entity.xml +12 -0
  60. data/spec/fixtures/response/create_invoice.xml +11 -0
  61. data/spec/fixtures/response/create_journal.xml +12 -0
  62. data/spec/fixtures/response/create_payment.xml +12 -0
  63. data/spec/fixtures/response/create_project.xml +12 -0
  64. data/spec/fixtures/response/delete_entity.xml +12 -0
  65. data/spec/fixtures/response/delete_journal.xml +12 -0
  66. data/spec/fixtures/response/list_account_codes.xml +168 -0
  67. data/spec/fixtures/response/list_entities.xml +45 -0
  68. data/spec/fixtures/response/list_invoices.xml +56 -0
  69. data/spec/fixtures/response/list_projects.xml +16 -0
  70. data/spec/fixtures/response/no_api_key_fault.xml +8 -0
  71. data/spec/fixtures/response/well_formed_request.xml +10 -0
  72. data/spec/fixtures/response/wrong_api_key_fault.xml +8 -0
  73. data/spec/spec_helper.rb +26 -0
  74. metadata +212 -0
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ # @module Clearbooks
5
+ # @brief Handles Ruby idomatic expression of Clear Books SOAP API
6
+ module Clearbooks
7
+
8
+ # @class Clearbooks Item model
9
+ # @brief Single item from an invoice
10
+ #
11
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
12
+ class Item < Base
13
+
14
+ attr_reader :description, :unit_price, :quantity, :type, :vat, :vat_rate
15
+
16
+ # @!attribute [r] description
17
+ # Required.
18
+ # @return [String]
19
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
20
+
21
+ # @!attribute [r] unit_price
22
+ # Required.
23
+ # @return [BigDecimal] The unit price of an item in pounds.
24
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
25
+
26
+ # @!attribute [r] quantity
27
+ # Required.
28
+ # @return [Fixnum]
29
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
30
+
31
+ # @!attribute [r] type
32
+ # Required. The account code identifying the revenue stream.
33
+ # @return [String]
34
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
35
+
36
+ # @!attribute [r] vat
37
+ # Required. The total amount of VAT in pounds. Use either this field or vat_rate.
38
+ # @return [String]
39
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
40
+
41
+ # @!attribute [r] vat_rate
42
+ # Required. The percentage VAT as a decimal number. Use either this field or vat.
43
+ # @return [String]
44
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
45
+
46
+ # @fn def initialize data {{{
47
+ # @brief Constructor for Item model
48
+ #
49
+ # @param [Hash] data Item attributes. For the list of available options see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
50
+ def initialize data
51
+ @description = data.savon :description
52
+ @unit_price = BigDecimal.new data.savon(:unit_price), 2
53
+ @quantity = data.savon(:quantity).to_i
54
+ @type = data.savon :type
55
+ @vat = data.savon :vat
56
+ @vat_rate = data.savon :vat_rate
57
+ end # }}}
58
+
59
+ # @fn def to_savon {{{
60
+ # @brief Converts given Item (self) to savon readable format
61
+ #
62
+ # @return [Hash] Returns self as Savon readable Hash
63
+ def to_savon
64
+ {
65
+ :@unitPrice => @unit_price.to_f,
66
+ :@quantity => @quantity,
67
+ :@type => @type,
68
+ :@vat => @vat,
69
+ :@vat_rate => @vat_rate,
70
+ :description => @description
71
+ }
72
+ end # }}}
73
+
74
+ end # of class Item
75
+
76
+ end # of module Clearbooks
77
+
78
+ # vim:ts=2:tw=100:wm=100:syntax=ruby
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ # @module Clearbooks
5
+ # @brief Handles Ruby idomatic expression of Clear Books SOAP API
6
+ module Clearbooks
7
+
8
+ # @class Clearbooks Journal model
9
+ # @brief Used to create a new journal via Clearbooks API.
10
+ #
11
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
12
+ class Journal < Base
13
+
14
+ attr_reader :description, :accounting_date, :entity, :project, :ledgers
15
+
16
+ # @!attribute [r] description
17
+ # Required. The description of the journal.
18
+ # return [String]
19
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
20
+
21
+ # @!attribute [r] accounting_date
22
+ # Optional. The accounting date of the journal.
23
+ # return [Date]
24
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
25
+
26
+ # @!attribute [r] entity
27
+ # Optional. The ID of an entity attached to the journal.
28
+ # return [Fixnum]
29
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
30
+
31
+ # @!attribute [r] project
32
+ # Optional. The ID of a project attached to the journal.
33
+ # return [Fixnum]
34
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
35
+
36
+ # @!attribute [r] ledgers
37
+ # Optional. An array of transactions added to the journal. Two items required.
38
+ # return [Array, Ledger]
39
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
40
+
41
+
42
+ # @fn def initialize data {{{
43
+ # @brief Constructor for Journal model
44
+ #
45
+ # @param [Hash] data Journal attributes. For the list of available options see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
46
+ def initialize data
47
+ @description = data.savon :description
48
+ @accounting_date = parse_date data.savon :accounting_date
49
+ @entity = data.savon :entity
50
+ @project = data.savon :project
51
+ @ledgers = Ledger.build data.savon :ledgers
52
+ end # }}}
53
+
54
+ # @fn def to_savon {{{
55
+ # @brief Converts given Journal (self) to savon readable format
56
+ #
57
+ # @return [Hash] Returns self as Savon readable Hash
58
+ def to_savon
59
+ {
60
+ journal: {
61
+ :@description => @description,
62
+ :@accountingDate => @accounting_date.strftime('%F'),
63
+ :@entity => @entity,
64
+ :@project => @project,
65
+ :ledgers => @ledgers.map(&:to_savon)
66
+ }.compact
67
+ }
68
+ end # }}}
69
+
70
+ end # of class Journal
71
+
72
+ end # of module Clearbooks
73
+
74
+ # vim:ts=2:tw=100:wm=100:syntax=ruby
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ # @module Clearbooks
5
+ # @brief Handles Ruby idomatic expression of Clear Books SOAP API
6
+ module Clearbooks
7
+
8
+ # @class Clearbooks Ledger model
9
+ # @brief Represents a transaction item in a Journal
10
+ #
11
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
12
+ class Ledger < Base
13
+
14
+ attr_reader :account, :amount
15
+
16
+ # @!attribute [r] account
17
+ # Optional. Account code for associated transaction.
18
+ # @return [String]
19
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
20
+
21
+ # @!attribute [r] amount
22
+ # Optional. Amount for associated transaction in the journal.
23
+ # @return [BigDecimal]
24
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
25
+
26
+ # @fn def initialize data {{{
27
+ # @brief Constructor for Ledger model
28
+ #
29
+ # @param [Hash] data Ledger attributes. For the list of available options see https://www.clearbooks.co.uk/support/api/docs/soap/createjournal/
30
+ def initialize data
31
+ @account = data.savon :account
32
+ @amount = BigDecimal.new data.savon :amount
33
+ end # }}}
34
+
35
+ # @fn def to_savon {{{
36
+ # @brief Converts given Ledger (self) to savon readable format
37
+ #
38
+ # @return [Hash] Returns self as Savon readable Hash
39
+ def to_savon
40
+ {
41
+ ledger: {
42
+ :@account => @account,
43
+ :@amount => @amount.to_f
44
+ }.compact
45
+ }
46
+ end # }}}
47
+
48
+ end # of class Ledger
49
+
50
+ end # of module Clearbooks
51
+
52
+ # vim:ts=2:tw=100:wm=100:syntax=ruby
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ # @module Clearbooks
5
+ # @brief Handles Ruby idomatic expression of Clear Books SOAP API
6
+ module Clearbooks
7
+
8
+ # @class Clearbooks Payment model
9
+ # @brief Used to create payments in Clearbooks API
10
+ #
11
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
12
+ class Payment < Base
13
+
14
+ attr_reader :accounting_date,
15
+ :type,
16
+ :description,
17
+ :amount,
18
+ :entity_id,
19
+ :payment_method,
20
+ :bank_account,
21
+ :invoices
22
+
23
+
24
+ # @!attribute [r] accounting_date
25
+ # Optional. Date the payment was made.
26
+ # @return [DateTime]
27
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
28
+
29
+ # @!attribute [r] type
30
+ # Optional. String identifying the type of the payment. Value one of: purchases, sales.
31
+ # @return [String]
32
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
33
+
34
+ # @!attribute [r] description
35
+ # Optional.
36
+ # @return [String]
37
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
38
+
39
+ # @!attribute [r] amount
40
+ # Optional. The total amount paid in pounds.
41
+ # @return [BigDecimal]
42
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
43
+
44
+ # @!attribute [r] entity_id
45
+ # Optional. The id of the customer or supplier.
46
+ # @return [Fixnum]
47
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
48
+
49
+ # @!attribute [r] payment_method
50
+ # Optional. The id of the payment method.
51
+ # @return [Fixnum]
52
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
53
+
54
+ # @!attribute [r] bank_account
55
+ # Optional. The account code of the bank account being paid into.
56
+ # @return [String]
57
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
58
+
59
+ # @!attribute [r] invoices
60
+ # Optional. An array of invoice elements.
61
+ # @return [Array]
62
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
63
+
64
+ # @fn def initialize data {{{
65
+ # @brief Constructor for Payment model
66
+ #
67
+ # @param [Hash] data Payment attributes. For the list of available options see https://www.clearbooks.co.uk/support/api/docs/soap/createpayment/
68
+ def initialize data
69
+ @accounting_date = parse_date data.savon :accounting_date
70
+ @type = data.savon :type
71
+ @description = data.savon :description
72
+ @amount = BigDecimal.new data.savon :amount
73
+ @entity_id = data.savon(:entity_id).to_i
74
+ @payment_method = data.savon(:payment_method).to_i
75
+ @bank_account = data.savon :bank_account
76
+ @invoices = data.savon :invoices
77
+ end # }}}
78
+
79
+ # @fn def to_savon {{{
80
+ # @brief Converts given Payment (self) to savon readable format
81
+ #
82
+ # @return [Hash] Returns self as Savon readable Hash
83
+ def to_savon
84
+ {
85
+ payment: {
86
+ :@accountingDate => @accounting_date.strftime('%F'),
87
+ :@type => @type,
88
+ :@amount => @amount.to_f,
89
+ :@entityId => @entity_id,
90
+ :@paymentMethod => @payment_method,
91
+ :@bankAccount => @bank_account,
92
+ :description => @description,
93
+ :invoices => { invoice: savon_invoices }
94
+ }
95
+ }
96
+ end # }}}
97
+
98
+ private
99
+
100
+ def savon_invoices
101
+ @invoices.map do |i|
102
+ {
103
+ :@id => i[:id],
104
+ :@amount => i[:amount]
105
+ }
106
+ end
107
+ end
108
+
109
+ end # of class Payment
110
+
111
+ end # of module Clearbooks
112
+
113
+ # vim:ts=2:tw=100:wm=100:syntax=ruby
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ # @module Clearbooks
5
+ # @brief Handles Ruby idomatic expression of Clear Books SOAP API
6
+ module Clearbooks
7
+
8
+ # @class Clearbooks Project model
9
+ # @brief Used to list existing projects or create new.
10
+ #
11
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createproject/
12
+ class Project < Base
13
+
14
+ attr_reader :id, :description, :project_name, :status
15
+
16
+ # @!attribute [r] description
17
+ # Required. The description of the project.
18
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createproject/
19
+
20
+ # @!attribute [r] project_name
21
+ # Optional. The name of the project.
22
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createproject/
23
+
24
+ # @!attribute [r] status
25
+ # Optional. String identifying the project status. Use one of the following values: "open", "closed" or "deleted".
26
+ # @see https://www.clearbooks.co.uk/support/api/docs/soap/createproject/
27
+
28
+ # @fn def initialize data {{{
29
+ # @brief Constructor for Project model
30
+ #
31
+ # @param [Hash] data Project attributes. For the list of available options see https://www.clearbooks.co.uk/support/api/docs/soap/createproject/
32
+ def initialize data
33
+ @id = data.savon(:id).to_i
34
+ @description = data.savon :description
35
+ @project_name = data.savon :project_name
36
+ @status = data.savon :status
37
+ end # }}}
38
+
39
+ # @fn def to_savon {{{
40
+ # @brief Converts given Project (self) to savon readable format
41
+ #
42
+ # @return [Hash] Returns self as Savon readable Hash
43
+ def to_savon
44
+ {
45
+ project: {
46
+ :@projectName => @project_name,
47
+ :@status => @status,
48
+ :@description => @description
49
+ }
50
+ }
51
+ end # }}}
52
+
53
+
54
+ end # of class Project
55
+
56
+ end # of module Clearbooks
57
+
58
+ # vim:ts=2:tw=100:wm=100:syntax=ruby
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ # @module Clearbooks Module
5
+ # @brief Implements the Clearbooks module wrapper around the Clearbooks API
6
+ module Clearbooks
7
+
8
+ VERSION = `git describe --tags`.split("-").first || "0.1.0-wrong-version"
9
+
10
+ end
11
+
12
+ # vim:ts=2:tw=100:wm=100:syntax=ruby
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # System include
4
+ require 'savon'
5
+
6
+ # Custom include
7
+ require 'spec_helper'
8
+
9
+
10
+ module Clearbooks
11
+
12
+ describe Clearbooks do
13
+
14
+ describe :config do
15
+ it 'has default WSDL url' do
16
+ expect(Clearbooks.config.wsdl).to eq 'https://secure.clearbooks.co.uk/api/wsdl/'
17
+ end
18
+
19
+ it 'has API key' do
20
+ expect(Clearbooks.config.api_key).not_to be_nil
21
+ end
22
+ end
23
+
24
+ end # of describe Clearbooks
25
+
26
+ end # of module Clearbooks
27
+
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ # System include
5
+ require 'savon'
6
+
7
+ # Custom include
8
+ require 'spec_helper'
9
+
10
+
11
+ module Clearbooks
12
+
13
+ describe Clearbooks do
14
+
15
+ before(:all) { savon.mock! }
16
+ after(:all) { savon.unmock! }
17
+
18
+ let(:message) { :any }
19
+
20
+ describe '::list_account_codes' do
21
+ let(:xml) { File.read('spec/fixtures/response/list_account_codes.xml') }
22
+
23
+ let(:account_codes) do
24
+ savon.expects(:list_account_codes).with(message: message).returns(xml)
25
+ Clearbooks.list_account_codes
26
+ end
27
+
28
+ it 'returns list of account_codes' do
29
+ expect(account_codes).to be_an Array
30
+ expect(account_codes.length).to eq 77
31
+ end
32
+
33
+ describe AccountCode do
34
+ let(:account_code) {account_codes.last}
35
+
36
+ it 'has proper attribute values' do
37
+ expect(account_code.id).to eq 6501001
38
+ expect(account_code.account_name).to eq 'Corporation tax'
39
+ expect(account_code.group_name).to eq 'Tax expense'
40
+ expect(account_code.default_vat_rate).to eq '0.00:Out'
41
+ expect(account_code.show_sales).to eq false
42
+ expect(account_code.show_purchases).to eq true
43
+ end
44
+
45
+ end
46
+
47
+ end # of describe '::list_account_codes
48
+
49
+ end # of describe Clearbooks
50
+
51
+ end # of module Clearbooks
52
+