fastbill-automatic 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE +23 -0
  6. data/README.md +203 -0
  7. data/Rakefile +8 -0
  8. data/doc/API-Doku_FBA_V1-8.pdf +0 -0
  9. data/fastbill-automatic.gemspec +20 -0
  10. data/lib/data/fastbill.crt +17 -0
  11. data/lib/fastbill-automatic/article.rb +14 -0
  12. data/lib/fastbill-automatic/base.rb +35 -0
  13. data/lib/fastbill-automatic/coupon.rb +12 -0
  14. data/lib/fastbill-automatic/customer.rb +16 -0
  15. data/lib/fastbill-automatic/invoice.rb +25 -0
  16. data/lib/fastbill-automatic/item.rb +10 -0
  17. data/lib/fastbill-automatic/request/base.rb +36 -0
  18. data/lib/fastbill-automatic/request/connection.rb +37 -0
  19. data/lib/fastbill-automatic/request/info.rb +32 -0
  20. data/lib/fastbill-automatic/request/validator.rb +33 -0
  21. data/lib/fastbill-automatic/services/cancel.rb +22 -0
  22. data/lib/fastbill-automatic/services/changearticle.rb +19 -0
  23. data/lib/fastbill-automatic/services/complete.rb +22 -0
  24. data/lib/fastbill-automatic/services/create.rb +19 -0
  25. data/lib/fastbill-automatic/services/delete.rb +22 -0
  26. data/lib/fastbill-automatic/services/delete_item.rb +21 -0
  27. data/lib/fastbill-automatic/services/get.rb +28 -0
  28. data/lib/fastbill-automatic/services/sendbyemail.rb +19 -0
  29. data/lib/fastbill-automatic/services/sendbypost.rb +22 -0
  30. data/lib/fastbill-automatic/services/setaddon.rb +19 -0
  31. data/lib/fastbill-automatic/services/setpaid.rb +19 -0
  32. data/lib/fastbill-automatic/services/setusagedata.rb +21 -0
  33. data/lib/fastbill-automatic/services/sign.rb +22 -0
  34. data/lib/fastbill-automatic/services/update.rb +28 -0
  35. data/lib/fastbill-automatic/subscription.rb +16 -0
  36. data/lib/fastbill-automatic/template.rb +12 -0
  37. data/lib/fastbill-automatic/usage_data.rb +171 -0
  38. data/lib/fastbill-automatic/version.rb +5 -0
  39. data/lib/fastbill-automatic.rb +93 -0
  40. data/spec/fastbill-automatic/base_spec.rb +35 -0
  41. data/spec/fastbill-automatic/customer_spec.rb +100 -0
  42. data/spec/fastbill-automatic/subscription_spec.rb +61 -0
  43. data/spec/fastbill-automatic/usage_data_spec.rb +340 -0
  44. data/spec/fastbill-automatic_spec.rb +37 -0
  45. data/spec/spec_helper.rb +10 -0
  46. metadata +116 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b1fd723a730eb7892d3ded62364d414f43ba603
4
+ data.tar.gz: 5baecfd6d6cd8d66edc9b2e46b2ddac57200579f
5
+ SHA512:
6
+ metadata.gz: cf0bac650fc90c0c61c480616dee3bd943503b45d3de6d9bed84d0a160864f7f73e12e1f019cc49ad4c027a372133e4b69b254831e9f1f680eec9d28e917ffa8
7
+ data.tar.gz: e4d0036c4d2d464dd686625cb357308a1f101a1eab3ab9c93df47fb16f2d0a21ff0880607124519f0ce4b06f292db00f59f2f0fc19574dfdbb9672c1dcf96282
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.html
6
+ /.rvmrc
7
+ .project
8
+ .ruby-version
9
+ .ruby-gemset
10
+
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "rspec"
6
+ gem "rake"
7
+ gem "webmock"
8
+ gem "pry"
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2013 Sascha Korth
4
+ Copyright (c) 2013 Reputami GmbH
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,203 @@
1
+ Fastbill Automatic
2
+ ==================
3
+
4
+ This is a Ruby wrapper for FastBill's Automatic API based on API-Documentation v1.8 (PA. 04.09.2013)
5
+
6
+ Usage
7
+ ======
8
+
9
+ First, you've to install the gem
10
+
11
+ gem 'fastbill-automatic', git: 'git://github.com/reputami/fastbill-automatic.git', tag: 'v0.0.3'
12
+
13
+ and require it
14
+
15
+ require "fastbill-automatic"
16
+
17
+ Then you have to set your Email Adress & API key:
18
+
19
+ Fastbill::Automatic.api_key = "your-api-key"
20
+ Fastbill::Automatic.email = "your-email-adress"
21
+
22
+ Article
23
+ -------
24
+
25
+ Find existing articles (see API limits):
26
+
27
+ Fastbill::Automatic::Article.get()
28
+
29
+ Due to the API implementation the result is an array.
30
+
31
+ Coupon
32
+ ------
33
+
34
+ Find existing coupons (see API limits):
35
+
36
+ Fastbill::Automatic::Coupon.get()
37
+
38
+ Due to the API implementation the result is an array.
39
+
40
+ Customer
41
+ --------
42
+
43
+ Creating a new customer:
44
+
45
+ Fastbill::Automatic::Customer.create(customer_type: 'business', organization: 'Company name', country_code: 'DE', payment_type: 1)
46
+
47
+ Find existing customers (see API limits):
48
+
49
+ Fastbill::Automatic::Customer.get(customer_id: "123456") # With filters
50
+ Fastbill::Automatic::Customer.get() # Without filters
51
+
52
+ Due to the API implementation the result in both cases is an array.
53
+
54
+ Updating an existing customer only works on an instance:
55
+
56
+ customer = Fastbill::Automatic::Customer.get(customer_id: "123456").first
57
+ customer.update_attributes(first_name: 'Max', last_name: 'Mustermann')
58
+
59
+ Deleting a customer:
60
+
61
+ Fastbill::Automatic::Customer.delete("123456")
62
+
63
+
64
+ Subscription
65
+ ------------
66
+
67
+ Creating a new subscription:
68
+
69
+ Fastbill::Automatic::Subscription.create(article_number: '123', customer_id: '123456')
70
+
71
+ Find existing subscriptions (see API limits):
72
+
73
+ Fastbill::Automatic::Subscription.get(customer_id: '123456') # With filter
74
+ Fastbill::Automatic::Subscription.get(subscription_id: '1234') # # With filter
75
+ Fastbill::Automatic::Subscription.get() # Without filters
76
+
77
+ Due to the API implementation the result in both cases is an array.
78
+
79
+ Updating an existing subscription only works on an instance:
80
+
81
+ subscription = Fastbill::Automatic::Subscription.get(subscription_id: "123456").first
82
+ subscription.update_attributes(next_event: '2013-07-10')
83
+
84
+ Changing an article for a given subscription:
85
+
86
+ Fastbill::Automatic::Subscription.changearticle(subscription_id: '1234', article_number: '123')
87
+
88
+ Create new addon for a given subscription:
89
+
90
+ Fastbill::Automatic::Subscription.setaddon(subscription_id: '1234', article_number: '123', quantity: '10')
91
+
92
+ API Bug! => (Subscription Error: Missing / invalid field: ARTICLE_NUMBER)
93
+
94
+ Set usage data for given subscription:
95
+
96
+ Fastbill::Automatic::Subscription.setusagedata(subscription_id: '1234', article_number: '123', quantity: '10')
97
+
98
+ Cancel a subscription:
99
+
100
+ Fastbill::Subscription.cancel('1234')
101
+
102
+ Invoice
103
+ -------
104
+
105
+ Creating a new invoice:
106
+
107
+ item = {description: 'Some info text', unit_price: '60.00', vat_percent: '19.00'}
108
+ items = (Array.new << item)
109
+
110
+ Fastbill::Automatic::Invoice.create(customer_id: '123456', items: items)
111
+
112
+ Find existing invoices (see API limits):
113
+
114
+ Fastbill::Automatic::Invoive.get(invoice_id: '123456') # With filter
115
+ Fastbill::Automatic::Invoive.get(customer_id: '123456') # # With filter
116
+ Fastbill::Automatic::Invoive.get() # Without filters
117
+
118
+ Due to the API implementation the result in both cases is an array.
119
+
120
+ Updating an existing invoice only works on an instance:
121
+
122
+ invoice = Fastbill::Automatic::Invoice.get(invoice_id: '123456').first
123
+ invoice.update_attributes(currency_code: 'USD', introtext: 'Some intro text')
124
+
125
+ Deleting an invoice (type needs to be 'draft'):
126
+
127
+ Fastbill::Automatic::Invoice.delete('123456')
128
+
129
+ Complete an invoice (type needs to be 'draft'):
130
+
131
+ Fastbill::Automatic::Invoice.complete('123456')
132
+
133
+ Cancel an invoice (type needs to be 'draft'):
134
+
135
+ Fastbill::Automatic::Invoice.cancel('123456')
136
+
137
+ Sign and invoice:
138
+
139
+ Fastbill::Automatic::Invoice.sign('123456')
140
+
141
+ Send invoice via email:
142
+
143
+ Fastbill::Automatic::Invoice.sendbyemail(invoice_id: '123456', recipient: { to: 'info@example.com', cc: 'support@example.com' }, subject: 'Some subject text', message: 'Some message text')
144
+
145
+ Send invoice by post:
146
+
147
+ Fastbill::Automatic::Invoice.sendbypost('123456')
148
+
149
+ Set invoice as paid:
150
+
151
+ Fastbill::Automatic::Invoice.setpaid(invoice_id: '123456', paid_date: '2013-03-05')
152
+
153
+ Item
154
+ ----
155
+
156
+ Find existing items (see API limits):
157
+
158
+ Fastbill::Automatic::Item.get(invoice_id: '123456') # With filter
159
+ Fastbill::Automatic::Item.get() # Without filters
160
+
161
+ Due to the API implementation the result in both cases is an array.
162
+
163
+ Deleting an item:
164
+
165
+ Fastbill::Automatic::Item.delete('123456')
166
+
167
+ Template
168
+ --------
169
+
170
+ Find existing templates (see API limits):
171
+
172
+ Fastbill::Automatic::Template.get()
173
+
174
+ Due to the API implementation the result is an array.
175
+
176
+
177
+ Testing
178
+ =======
179
+
180
+ To make testing easier in your app use change the default request mode from `:https` to:
181
+
182
+ Fastbill::Automatic.request_method = :test
183
+
184
+ Instead of actual requests you find an array with the request infos that you can inspect:
185
+
186
+ Fastbill::Automatic::Base.request_infos
187
+
188
+ To clear the request infos before or after your test runs do:
189
+
190
+ Fastbill::Automatic::Base.clear_request_infos
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require "rspec/core/rake_task"
4
+ RSpec::Core::RakeTask.new(:spec) do |spec|
5
+ spec.pattern = FileList['spec/**/*_spec.rb']
6
+ end
7
+
8
+ task default: :spec
Binary file
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "fastbill-automatic/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "fastbill-automatic"
7
+ s.version = Fastbill::Automatic::VERSION
8
+ s.authors = ["Sascha Korth"]
9
+ s.email = ["sascha.korth@zweitag.de"]
10
+ s.homepage = "https://github.com/skorth/fastbill-automatic"
11
+ s.summary = %q{API wrapper for Fastbill.}
12
+ s.description = %q{API wrapper for Fastbill.}
13
+ s.license = "MIT"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_dependency "json"
19
+ s.add_development_dependency "rspec"
20
+ end
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
3
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
4
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
5
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
6
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
7
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
8
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
9
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
10
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
11
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
12
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
13
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
14
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
15
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
16
+ UCemDaYj+bvLpgcUQg==
17
+ -----END CERTIFICATE-----
@@ -0,0 +1,14 @@
1
+ module Fastbill
2
+ module Automatic
3
+ class Article < Base
4
+
5
+ attr_reader :article_number, :title, :description, :unit_price, :allow_multiple, :is_addon, :currency_code,
6
+ :vat_percent, :setup_fee, :subscription_interval, :subscription_number_events, :subscription_trail,
7
+ :subscription_duration, :subscription_cancellation, :return_url_success, :return_url_cancel, :checkout_url
8
+
9
+ def self.create(attributes)
10
+ raise FastbillError.new('Create method not implemented.')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,35 @@
1
+ module Fastbill
2
+ module Automatic
3
+ class Base
4
+ include Fastbill::Automatic::Services::Get
5
+ include Fastbill::Automatic::Services::Create
6
+
7
+ attr_accessor :attributes
8
+
9
+ @@request_infos = []
10
+
11
+ def self.request_infos
12
+ @@request_infos
13
+ end
14
+
15
+ def self.request_infos=(info_array)
16
+ @@request_infos = info_array
17
+ end
18
+
19
+ def self.clear_request_infos
20
+ @@request_infos = []
21
+ end
22
+
23
+ def initialize(attributes = {})
24
+ self.attributes = attributes
25
+ set_attributes(attributes)
26
+ end
27
+
28
+ def set_attributes(attributes)
29
+ attributes.each_pair do |key, value|
30
+ instance_variable_set("@#{key.downcase}", value)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ module Fastbill
2
+ module Automatic
3
+ class Coupon < Base
4
+
5
+ attr_reader :code, :title, :discount, :discount_period, :valid_from, :valid_to, :assigned_articles
6
+
7
+ def self.create(attributes)
8
+ raise FastbillError.new('Create method not implemented.')
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Fastbill
2
+ module Automatic
3
+ class Customer < Base
4
+ include Fastbill::Automatic::Services::Update
5
+ include Fastbill::Automatic::Services::Delete
6
+
7
+ attr_accessor :customer_number, :country_code, :city, :term, :comment, :changedata_url, :paymill_token,
8
+ :customer_ext_uid, :customer_type, :organization, :position, :salutation, :first_name, :last_name,
9
+ :address, :address_2, :zipcode, :phone, :phone_2, :fax, :mobile, :email, :account_receivable, :currency_code,
10
+ :vat_id, :days_for_payment, :payment_type, :show_payment_notice, :bank_name, :bank_code, :bank_account_number,
11
+ :bank_account_owner, :newsletter_optin, :language_code
12
+
13
+ attr_reader :customer_id, :dashboard_url, :changedata_url, :status
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ module Fastbill
2
+ module Automatic
3
+ class Invoice < Base
4
+ include Fastbill::Automatic::Services::Update
5
+ include Fastbill::Automatic::Services::Delete
6
+ include Fastbill::Automatic::Services::Complete
7
+ include Fastbill::Automatic::Services::Cancel
8
+ include Fastbill::Automatic::Services::Sign
9
+ include Fastbill::Automatic::Services::Sendbyemail
10
+ include Fastbill::Automatic::Services::Sendbypost
11
+ include Fastbill::Automatic::Services::Setpaid
12
+
13
+ attr_accessor :invoice_id, :type, :customer_id, :customer_number, :customer_costcenter_id,
14
+ :organization, :salutation, :first_name, :last_name, :address, :address_2,
15
+ :zipcode, :city, :comment, :payment_type, :days_for_payment, :bank_name,
16
+ :bank_account_number, :bank_code, :bank_account_owner, :bank_iban, :bank_bic,
17
+ :affiliate, :country_code, :vat_id, :currency_code, :template_id, :subscription_id,
18
+ :subscription_invoice_counter, :invoice_number, :invoice_title, :introtext, :paid_date,
19
+ :is_canceled, :invoice_date, :due_date, :delivery_date, :cash_discount_percent, :cash_discount_days,
20
+ :sub_total, :vat_total, :vat_items, :items, :total, :payment_info, :document_url, :paypal_url
21
+
22
+ attr_reader :remaining_credits
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ module Fastbill
2
+ module Automatic
3
+ class Item < Base
4
+ include Fastbill::Automatic::Services::DeleteItem
5
+
6
+ attr_accessor :invoice_id, :invoice_item_id, :article_number, :description,
7
+ :quantity, :unit_price, :vat_percent, :sort_order
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,36 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Request
4
+ class Base
5
+ attr_reader :info
6
+ attr_accessor :response
7
+
8
+ def initialize(info)
9
+ @info = info
10
+ end
11
+
12
+ def perform
13
+ raise AuthenticationError if Fastbill::Automatic.api_key.nil? || Fastbill::Automatic.email.nil?
14
+ connection.setup_https
15
+ send_request
16
+
17
+ validator.validated_data_for(response)
18
+ end
19
+
20
+ protected
21
+
22
+ def send_request
23
+ self.response = connection.request
24
+ end
25
+
26
+ def connection
27
+ @connection ||= Connection.new(info)
28
+ end
29
+
30
+ def validator
31
+ @validator ||= Validator.new(info)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,37 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Request
4
+ class Connection
5
+ attr_reader :https
6
+
7
+ def initialize(request_info)
8
+ @info = request_info
9
+ end
10
+
11
+ def setup_https
12
+ @https = Net::HTTP.new(API_BASE, Net::HTTP.https_default_port)
13
+ @https.use_ssl = true
14
+ @https.verify_mode = OpenSSL::SSL::VERIFY_PEER
15
+ @https.ca_file = File.join(ROOT_PATH, "data/fastbill.crt")
16
+ end
17
+
18
+ def request
19
+ https.start do |connection|
20
+ https.request(https_request)
21
+ end
22
+ end
23
+
24
+ protected
25
+
26
+ def https_request
27
+ https_request = Net::HTTP::Post.new(@info.url)
28
+ https_request.basic_auth(Fastbill::Automatic.email, Fastbill::Automatic.api_key)
29
+ body = {service: @info.service}
30
+ body[(@info.service.include?('.get') ? :filter : :data)] = @info.data
31
+ https_request.body = body.to_json
32
+ https_request
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Request
4
+ class Info
5
+ attr_accessor :service, :data
6
+
7
+ def ==(other)
8
+ @service == other.service && @data == other.data
9
+ end
10
+
11
+ def initialize(service, data)
12
+ @service = service
13
+ @data = data
14
+ end
15
+
16
+ def url
17
+ url = "/api/#{API_VERSION}/api.php"
18
+ url
19
+ end
20
+
21
+ def path_with_params(path, params)
22
+ unless params.empty?
23
+ encoded_params = URI.encode_www_form(params)
24
+ [path, encoded_params].join("?")
25
+ else
26
+ path
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Request
4
+ class Validator
5
+ attr_reader :info
6
+ attr_accessor :response
7
+
8
+ def initialize(info)
9
+ @info = info
10
+ end
11
+
12
+ def validated_data_for(incoming_response)
13
+ self.response = incoming_response
14
+ verify_response_code
15
+ info.data = JSON.parse(response.body)
16
+ validate_response_data
17
+ info.data
18
+ end
19
+
20
+ protected
21
+
22
+ def verify_response_code
23
+ raise AuthenticationError if response.code.to_i == 401
24
+ raise APIError if response.code.to_i >= 500
25
+ end
26
+
27
+ def validate_response_data
28
+ raise APIError.new(info.data["RESPONSE"]["ERRORS"]) if info.data["RESPONSE"]["ERRORS"]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Services
4
+ module Cancel
5
+ module ClassMethods
6
+
7
+ def cancel(id)
8
+ id_attribute = "#{self.name.split("::").last.downcase}_id".to_sym
9
+ attributes = {}
10
+ attributes[id_attribute] = id
11
+ response = Fastbill::Automatic.request("#{self.name.split("::").last.downcase}.cancel", attributes)
12
+ true
13
+ end
14
+ end
15
+
16
+ def self.included(base)
17
+ base.extend(ClassMethods)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Services
4
+ module Changearticle
5
+ module ClassMethods
6
+
7
+ def changearticle(attributes)
8
+ response = Fastbill::Automatic.request("#{self.name.split("::").last.downcase}.changearticle", attributes)
9
+ true
10
+ end
11
+ end
12
+
13
+ def self.included(base)
14
+ base.extend(ClassMethods)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Services
4
+ module Complete
5
+ module ClassMethods
6
+
7
+ def complete(id)
8
+ id_attribute = "#{self.name.split("::").last.downcase}_id".to_sym
9
+ attributes = {}
10
+ attributes[id_attribute] = id
11
+ response = Fastbill::Automatic.request("#{self.name.split("::").last.downcase}.complete", attributes)
12
+ true
13
+ end
14
+ end
15
+
16
+ def self.included(base)
17
+ base.extend(ClassMethods)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Services
4
+ module Create
5
+ module ClassMethods
6
+
7
+ def create(attributes)
8
+ response = Fastbill::Automatic.request("#{self.name.split("::").last.downcase}.create", attributes)
9
+ self.new(response["RESPONSE"])
10
+ end
11
+ end
12
+
13
+ def self.included(base)
14
+ base.extend(ClassMethods)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module Fastbill
2
+ module Automatic
3
+ module Services
4
+ module Delete
5
+ module ClassMethods
6
+
7
+ def delete(id)
8
+ id_attribute = "#{self.name.split("::").last.downcase}_id".to_sym
9
+ attributes = {}
10
+ attributes[id_attribute] = id
11
+ response = Fastbill::Automatic.request("#{self.name.split("::").last.downcase}.delete", attributes)
12
+ true
13
+ end
14
+ end
15
+
16
+ def self.included(base)
17
+ base.extend(ClassMethods)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end