fastbill-automatic 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+
3
+ describe Fastbill::Automatic::Subscription do
4
+
5
+ let(:valid_attributes) do
6
+ {
7
+ subscription_id: 285664,
8
+ subscription_ext_uid: "",
9
+ hash: "178cdae035d59c637318bf808e78bad3",
10
+ article_code: "1004",
11
+ quantity: "1",
12
+ start_date: "2014-06-16 16:07:57",
13
+ last_event: "2014-06-16 16:07:58",
14
+ next_event: "2014-06-17 16:07:58",
15
+ cancellation_date: "0000-00-00 00:00:00",
16
+ status: "trial",
17
+ expiration_date: "2014-06-17 16:07:58",
18
+ addons: [{article_code: "2101", quantity: "1"}, {article_code: "2001", quantity: "1"}],
19
+ created: "2014-06-16 16:07:59"
20
+ }
21
+
22
+ end
23
+
24
+ let (:subscription) do
25
+ Fastbill::Automatic::Subscription.new(valid_attributes)
26
+ end
27
+
28
+ describe "#initialize" do
29
+
30
+ it "initializes all attributes correctly" do
31
+ subscription.subscription_id.should eql(285664)
32
+ subscription.subscription_ext_uid.should eql("")
33
+ subscription.article_code.should eql("1004")
34
+ subscription.quantity.should eql("1")
35
+ subscription.start_date.should eql("2014-06-16 16:07:57")
36
+ subscription.last_event.should eql("2014-06-16 16:07:58")
37
+ subscription.next_event.should eql("2014-06-17 16:07:58")
38
+ subscription.cancellation_date.should eql("0000-00-00 00:00:00")
39
+ subscription.status.should eql("trial")
40
+ subscription.expiration_date.should eql("2014-06-17 16:07:58")
41
+ subscription.created.should eql("2014-06-16 16:07:59")
42
+ subscription.addons.should eql [{article_code: "2101", quantity: "1"}, {article_code: "2001", quantity: "1"}]
43
+ end
44
+
45
+ it 'should not overwrite the hash method' do
46
+ subscription.hash.class.should eql Fixnum
47
+ end
48
+
49
+ end
50
+
51
+ describe ".attributes" do
52
+ it "makes all attributes accessible by hash" do
53
+ subscription.attributes.should eql(valid_attributes)
54
+ subscription.attributes[:hash].should eql("178cdae035d59c637318bf808e78bad3")
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+
61
+
@@ -0,0 +1,340 @@
1
+ require "spec_helper"
2
+
3
+ describe Fastbill::Automatic::UsageData do
4
+
5
+ let(:valid_attributes) do
6
+ {
7
+ subscription_id: "294282",
8
+ customer_id: "672782",
9
+ article_number: "2458",
10
+ unit_price: '6.0000',
11
+ description: "Standardtermin",
12
+ currency_code: "EUR",
13
+ status: "open",
14
+ usage_date: "2014-06-26 14:46:19",
15
+ created: "2014-06-26 14:46:19",
16
+ quantity: "1"
17
+ }
18
+ end
19
+
20
+ let (:usage_data) do
21
+ Fastbill::Automatic::UsageData.new(valid_attributes)
22
+ end
23
+
24
+ describe "#initialize" do
25
+ it "initializes all attributes correctly" do
26
+ usage_data.customer_id.should eql('672782')
27
+ usage_data.subscription_id.should eql('294282')
28
+ usage_data.article_number.should eql('2458')
29
+ usage_data.unit_price.should eql(6.0)
30
+ usage_data.description.should eql('Standardtermin')
31
+ usage_data.currency_code.should eql('EUR')
32
+ usage_data.status.should eql('open')
33
+ usage_data.usage_date.should eql(Time.local(2014,06,26,14,46,19))
34
+ usage_data.created.should eql(Time.local(2014,6,26,14,46,19))
35
+ usage_data.quantity.should eql(1)
36
+ end
37
+
38
+ it "takes care of wrongly set array on currency_code" do
39
+ usage_data = Fastbill::Automatic::UsageData.new(:currency_code => [])
40
+ usage_data.currency_code.should eql('')
41
+ end
42
+
43
+ end
44
+
45
+ describe '#create' do
46
+
47
+ let(:success_response) do
48
+ {"RESPONSE" => { "STATUS" => "success"}}
49
+ end
50
+
51
+ let(:get_usage_params) do
52
+ {subscription_id: '294282', start: "2014-06-26 14:46:19", end: "2014-06-26 14:46:19"}
53
+ end
54
+
55
+ let (:get_response) do
56
+ {
57
+ "RESPONSE" => {
58
+ "ITEMS"=>[
59
+ {"USAGEDATA_ID"=>"345278",
60
+ "CUSTOMER_ID"=>"285664",
61
+ "SUBSCRIPTION_ID"=>"294282",
62
+ "ARTICLE_NUMBER"=>"2458",
63
+ "UNIT_PRICE"=>"6.0000",
64
+ "DESCRIPTION"=>"Standardtermin",
65
+ "CURRENCY_CODE"=>[],
66
+ "STATUS"=>"open",
67
+ "USAGE_DATE"=>"2014-06-26 14:46:19",
68
+ "CREATED"=>"2014-06-26 15:04:36",
69
+ "QUANTITY"=>"1"}
70
+ ]
71
+ }
72
+ }
73
+ end
74
+
75
+ before do
76
+ Fastbill::Automatic.should_receive(:request).with("subscription.setusagedata", valid_attributes)
77
+ Fastbill::Automatic.should_receive(:request).with("subscription.getusagedata", get_usage_params).
78
+ and_return(get_response)
79
+ end
80
+
81
+ it 'should create and then get the usagedata_id' do
82
+ usage_data.create
83
+ usage_data.usagedata_id.should eql('345278')
84
+ end
85
+
86
+ end
87
+
88
+ describe '#where' do
89
+
90
+ let (:empty_response) do
91
+ {
92
+ "RESPONSE" => { "ITEMS"=>[] }
93
+ }
94
+ end
95
+
96
+ let (:two_items_response) do
97
+ {
98
+ "RESPONSE" => {
99
+ "ITEMS"=>[
100
+ {"USAGEDATA_ID"=>"345278",
101
+ "CUSTOMER_ID"=>"672782",
102
+ "SUBSCRIPTION_ID"=>"294282",
103
+ "ARTICLE_NUMBER"=>"2458",
104
+ "UNIT_PRICE"=>"6.0000",
105
+ "DESCRIPTION"=>"Standardtermin",
106
+ "CURRENCY_CODE"=>"EUR",
107
+ "STATUS"=>"open",
108
+ "USAGE_DATE"=>"2014-06-26 14:46:19",
109
+ "CREATED" => "2014-06-26 14:46:19",
110
+ "QUANTITY"=>"1"},
111
+ {"USAGEDATA_ID"=>"345279",
112
+ "CUSTOMER_ID"=>"672782",
113
+ "SUBSCRIPTION_ID"=>"294282",
114
+ "ARTICLE_NUMBER"=>"2458",
115
+ "UNIT_PRICE"=>"15.0000",
116
+ "DESCRIPTION"=>"Premiumtermin",
117
+ "CURRENCY_CODE"=>"EUR",
118
+ "STATUS"=>"open",
119
+ "USAGE_DATE"=>"2014-06-26 14:48:19",
120
+ "CREATED" => "2014-06-26 14:48:21",
121
+ "QUANTITY"=>"1"}
122
+ ]
123
+ }
124
+ }
125
+ end
126
+
127
+ let (:expected_items) do
128
+ two_items_response["RESPONSE"]["ITEMS"].map do |item_attributes|
129
+ init_hash = Hash[*item_attributes.map{|k,v| [k.downcase.to_sym, v]}.flatten]
130
+ Fastbill::Automatic::UsageData.new(init_hash)
131
+ end
132
+ end
133
+
134
+ context 'no usage data' do
135
+
136
+ before do
137
+ Fastbill::Automatic.should_receive(:request).with("subscription.getusagedata", {
138
+ subscription_id: '294282'}).and_return(empty_response)
139
+ end
140
+
141
+ it 'returns an empty array' do
142
+ Fastbill::Automatic::UsageData.where(:subscription_id => '294282').should eq []
143
+ end
144
+
145
+ end
146
+
147
+ context 'usage data' do
148
+
149
+ before do
150
+ Fastbill::Automatic.should_receive(:request).with("subscription.getusagedata", {
151
+ subscription_id: '294282'}).and_return(two_items_response)
152
+ end
153
+
154
+ it 'returns an empty array' do
155
+ Fastbill::Automatic::UsageData.where(:subscription_id => '294282').should eq(expected_items)
156
+ end
157
+
158
+ end
159
+
160
+
161
+ end
162
+
163
+ describe '#find_by_usage_date' do
164
+
165
+ let(:existing_usagedata) do
166
+ valid_attributes.merge(:usagedata_id => "345278")
167
+ end
168
+
169
+
170
+ def default_response_hash(currency_code = "EUR")
171
+ {
172
+ "RESPONSE" => {
173
+ "ITEMS"=>[
174
+ {"USAGEDATA_ID"=>"345278",
175
+ "CUSTOMER_ID"=>"672782",
176
+ "SUBSCRIPTION_ID"=>"294282",
177
+ "ARTICLE_NUMBER"=>"2458",
178
+ "UNIT_PRICE"=>"6.0000",
179
+ "DESCRIPTION"=>"Standardtermin",
180
+ "CURRENCY_CODE"=>currency_code,
181
+ "STATUS"=>"open",
182
+ "USAGE_DATE"=>"2014-06-26 14:46:19",
183
+ "CREATED" => "2014-06-26 14:46:19",
184
+ "QUANTITY"=>"1"}
185
+ ]
186
+ }
187
+ }
188
+ end
189
+
190
+ let (:unsuccessful_response) do
191
+ {
192
+ "RESPONSE" => { "ITEMS"=>[] }
193
+ }
194
+ end
195
+
196
+ let (:successful_response) { default_response_hash }
197
+ let (:successful_response_without_currency) { default_response_hash([]) }
198
+
199
+
200
+ context 'no currency code in reponse' do
201
+
202
+ it 'doesnt fail with array value instead of currency code' do
203
+
204
+ Fastbill::Automatic.should_receive(:request).with("subscription.getusagedata", {
205
+ subscription_id: '294282',
206
+ start:"2014-06-26 14:46:19",
207
+ end: "2014-06-26 14:46:19" }).and_return(successful_response_without_currency)
208
+
209
+ existing_item = Fastbill::Automatic::UsageData.new(existing_usagedata)
210
+ usage_item = Fastbill::Automatic::UsageData.find_by_usage_date(existing_usagedata[:subscription_id], Time.local(2014,6,26,14,46,19))
211
+ usage_item.currency_code.should eql('')
212
+ end
213
+
214
+ end
215
+
216
+ context 'there exists a booking at that date' do
217
+
218
+ before do
219
+ Fastbill::Automatic.should_receive(:request).with("subscription.getusagedata", {
220
+ subscription_id: '294282',
221
+ start:"2014-06-26 14:46:19",
222
+ end: "2014-06-26 14:46:19" }).and_return(successful_response)
223
+ end
224
+
225
+ it 'finds the corresponding usage booking by date' do
226
+ existing_item = Fastbill::Automatic::UsageData.new(existing_usagedata)
227
+ usage_item = Fastbill::Automatic::UsageData.find_by_usage_date(existing_usagedata[:subscription_id], Time.local(2014,6,26,14,46,19))
228
+ usage_item.should eq Fastbill::Automatic::UsageData.new(existing_usagedata)
229
+ end
230
+ end
231
+
232
+ context 'there does not exists a booking at that date' do
233
+
234
+ before do
235
+ Fastbill::Automatic.should_receive(:request).with("subscription.getusagedata", {
236
+ subscription_id: 'invalid_subscription_id',
237
+ start:"2014-06-26 14:46:20",
238
+ end: "2014-06-26 14:46:20" }).and_return(unsuccessful_response)
239
+ end
240
+
241
+ it 'should return nil' do
242
+ usage_item = Fastbill::Automatic::UsageData.find_by_usage_date(
243
+ 'invalid_subscription_id', Time.local(2014,6,26,14,46,20))
244
+ expect(usage_item).to be_nil
245
+ end
246
+ end
247
+
248
+ end
249
+
250
+ describe '#update_attributes' do
251
+
252
+ let (:existing_usage_item) do
253
+ Fastbill::Automatic::UsageData.new(valid_attributes.merge(usagedata_id: "345278"))
254
+ end
255
+
256
+ let (:delete_params) do
257
+ { usagedata_id: '345278' }
258
+ end
259
+
260
+ let(:update_params) do
261
+ valid_attributes.merge( {
262
+ article_number: "2459",
263
+ unit_price: '26',
264
+ description: "Premiumtermin"
265
+ })
266
+ end
267
+
268
+ let(:get_params) do
269
+ {subscription_id: '294282', start: "2014-06-26 14:46:19", end: "2014-06-26 14:46:19"}
270
+ end
271
+
272
+ let(:success_response) do
273
+ {"RESPONSE" => { "STATUS" => "success"}}
274
+ end
275
+
276
+ let (:get_response) do
277
+ {
278
+ "RESPONSE" => {
279
+ "ITEMS"=>[
280
+ {"USAGEDATA_ID"=>"345279",
281
+ "CUSTOMER_ID"=>"672782",
282
+ "SUBSCRIPTION_ID"=>"294282",
283
+ "ARTICLE_NUMBER"=>"2459",
284
+ "UNIT_PRICE"=>"26.0000",
285
+ "DESCRIPTION"=>"Premiumtermin",
286
+ "CURRENCY_CODE"=>"EUR",
287
+ "STATUS"=>"open",
288
+ "USAGE_DATE"=>"2014-06-26 14:46:19",
289
+ "CREATED" => "2014-06-26 14:56:19",
290
+ "QUANTITY"=>"1"}
291
+ ]
292
+ }
293
+ }
294
+ end
295
+
296
+ before do
297
+ Fastbill::Automatic.should_receive(:request).with("subscription.deleteusagedata", delete_params).
298
+ and_return(success_response)
299
+ Fastbill::Automatic.should_receive(:request).with("subscription.setusagedata", update_params).
300
+ and_return(success_response)
301
+ Fastbill::Automatic.should_receive(:request).with("subscription.getusagedata", get_params).
302
+ and_return(get_response)
303
+ end
304
+
305
+ it 'allows updating attributes in a familiar manner' do
306
+ existing_usage_item.update_attributes(unit_price: 26, article_number: '2459', description: 'Premiumtermin')
307
+ existing_usage_item.unit_price.should eq(26)
308
+ existing_usage_item.article_number.should eql('2459')
309
+ existing_usage_item.description.should eql('Premiumtermin')
310
+ existing_usage_item.usagedata_id.should eql('345279')
311
+ end
312
+
313
+ end
314
+
315
+ describe '#delete' do
316
+
317
+ let (:usage_data_from_fastbill) do
318
+ Fastbill::Automatic::UsageData.new(valid_attributes.merge(usagedata_id: '123456'))
319
+ end
320
+
321
+ let (:delete_params) do
322
+ { usagedata_id: '123456' }
323
+ end
324
+
325
+ let(:success_response) do
326
+ {"RESPONSE" => { "STATUS" => "success"}}
327
+ end
328
+
329
+ before do
330
+ Fastbill::Automatic.should_receive(:request).with("subscription.deleteusagedata", delete_params).
331
+ and_return(success_response)
332
+ end
333
+
334
+ it 'should delete usage data by id' do
335
+ usage_data_from_fastbill.delete
336
+ end
337
+
338
+ end
339
+
340
+ end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+
3
+ describe Fastbill::Automatic do
4
+ describe ".request" do
5
+ context "no api key and no email exists" do
6
+ it "raises an authentication error" do
7
+ expect { Fastbill::Automatic.request("Customer.get", {}) }.to raise_error(Fastbill::Automatic::AuthenticationError)
8
+ end
9
+ end
10
+ end
11
+
12
+ describe ".request_method" do
13
+
14
+ before do
15
+ Fastbill::Automatic.request_method = :https
16
+ end
17
+ after do
18
+ Fastbill::Automatic.request_method = :https
19
+ end
20
+
21
+ context "supported request methods" do
22
+ it "is set to HTTPS by default" do
23
+ Fastbill::Automatic.request_method.should equal(:https)
24
+ end
25
+ it "can be set to :test" do
26
+ Fastbill::Automatic.request_method = :test
27
+ Fastbill::Automatic.request_method.should equal(:test)
28
+ end
29
+ end
30
+ context "non supported request method" do
31
+ it "raises an non supported error" do
32
+ expect { Fastbill::Automatic.request_method = :test123 }.to raise_error(Fastbill::Automatic::NonSupportedRequestMethod)
33
+ end
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+ require "fastbill-automatic"
4
+ require "rspec"
5
+ require "rspec/autorun"
6
+ require "webmock/rspec"
7
+ require "pry"
8
+
9
+ RSpec.configure do |config|
10
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fastbill-automatic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Sascha Korth
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: API wrapper for Fastbill.
42
+ email:
43
+ - sascha.korth@zweitag.de
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - ".rspec"
50
+ - Gemfile
51
+ - LICENSE
52
+ - README.md
53
+ - Rakefile
54
+ - doc/API-Doku_FBA_V1-8.pdf
55
+ - fastbill-automatic.gemspec
56
+ - lib/data/fastbill.crt
57
+ - lib/fastbill-automatic.rb
58
+ - lib/fastbill-automatic/article.rb
59
+ - lib/fastbill-automatic/base.rb
60
+ - lib/fastbill-automatic/coupon.rb
61
+ - lib/fastbill-automatic/customer.rb
62
+ - lib/fastbill-automatic/invoice.rb
63
+ - lib/fastbill-automatic/item.rb
64
+ - lib/fastbill-automatic/request/base.rb
65
+ - lib/fastbill-automatic/request/connection.rb
66
+ - lib/fastbill-automatic/request/info.rb
67
+ - lib/fastbill-automatic/request/validator.rb
68
+ - lib/fastbill-automatic/services/cancel.rb
69
+ - lib/fastbill-automatic/services/changearticle.rb
70
+ - lib/fastbill-automatic/services/complete.rb
71
+ - lib/fastbill-automatic/services/create.rb
72
+ - lib/fastbill-automatic/services/delete.rb
73
+ - lib/fastbill-automatic/services/delete_item.rb
74
+ - lib/fastbill-automatic/services/get.rb
75
+ - lib/fastbill-automatic/services/sendbyemail.rb
76
+ - lib/fastbill-automatic/services/sendbypost.rb
77
+ - lib/fastbill-automatic/services/setaddon.rb
78
+ - lib/fastbill-automatic/services/setpaid.rb
79
+ - lib/fastbill-automatic/services/setusagedata.rb
80
+ - lib/fastbill-automatic/services/sign.rb
81
+ - lib/fastbill-automatic/services/update.rb
82
+ - lib/fastbill-automatic/subscription.rb
83
+ - lib/fastbill-automatic/template.rb
84
+ - lib/fastbill-automatic/usage_data.rb
85
+ - lib/fastbill-automatic/version.rb
86
+ - spec/fastbill-automatic/base_spec.rb
87
+ - spec/fastbill-automatic/customer_spec.rb
88
+ - spec/fastbill-automatic/subscription_spec.rb
89
+ - spec/fastbill-automatic/usage_data_spec.rb
90
+ - spec/fastbill-automatic_spec.rb
91
+ - spec/spec_helper.rb
92
+ homepage: https://github.com/skorth/fastbill-automatic
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.2.2
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: API wrapper for Fastbill.
116
+ test_files: []