invoice_printer 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env ruby
2
+ # This is an example of a international invoice with Czech labels and English translation.
3
+ #
4
+ # Due to the special characters it requires Overpass-Regular.ttf font to be
5
+ # present in this directory.
6
+
7
+ lib = File.expand_path('../../lib', __FILE__)
8
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
9
+ require 'invoice_printer'
10
+
11
+ labels = {
12
+ name: 'Faktura',
13
+ provider: 'Prodejce',
14
+ purchaser: 'Kupující',
15
+ tax_id: 'IČ',
16
+ tax_id2: 'DIČ',
17
+ payment: 'Forma úhrady',
18
+ payment_by_transfer: 'Platba na následující účet:',
19
+ account_number: 'Číslo účtu',
20
+ issue_date: 'Datum vydání',
21
+ due_date: 'Datum splatnosti',
22
+ item: 'Položka',
23
+ quantity: 'Počet',
24
+ unit: 'MJ',
25
+ price_per_item: 'Cena za položku',
26
+ amount: 'Celkem bez daně',
27
+ subtotal: 'Cena bez daně',
28
+ tax: 'DPH 21 %',
29
+ total: 'Celkem'
30
+ }
31
+
32
+ # Default English labels as sublabels
33
+ sublabels = InvoicePrinter::PDFDocument::DEFAULT_LABELS
34
+ labels.merge!({ sublabels: sublabels })
35
+
36
+ first_item = InvoicePrinter::Document::Item.new(
37
+ name: 'Konzultace',
38
+ quantity: '2',
39
+ unit: 'hod',
40
+ price: 'Kč 500',
41
+ amount: 'Kč 1.000'
42
+ )
43
+
44
+ second_item = InvoicePrinter::Document::Item.new(
45
+ name: 'Programování',
46
+ quantity: '10',
47
+ unit: 'hod',
48
+ price: 'Kč 900',
49
+ amount: 'Kč 9.000'
50
+ )
51
+
52
+ invoice = InvoicePrinter::Document.new(
53
+ number: 'č. 198900000001',
54
+ provider_name: 'Petr Nový',
55
+ provider_tax_id: '56565656',
56
+ provider_street: 'Rolnická',
57
+ provider_street_number: '1',
58
+ provider_postcode: '747 05',
59
+ provider_city: 'Opava',
60
+ provider_city_part: 'Kateřinky',
61
+ purchaser_name: 'Adam Černý',
62
+ purchaser_street: 'Ostravská',
63
+ purchaser_street_number: '1',
64
+ purchaser_postcode: '747 70',
65
+ purchaser_city: 'Opava',
66
+ issue_date: '05/03/2016',
67
+ due_date: '19/03/2016',
68
+ subtotal: 'Kč 10.000',
69
+ tax: 'Kč 2.100',
70
+ total: 'Kč 12.100,-',
71
+ bank_account_number: '156546546465',
72
+ account_iban: 'IBAN464545645',
73
+ account_swift: 'SWIFT5456',
74
+ items: [first_item, second_item],
75
+ note: 'Osoba je zapsána v živnostenském rejstříku.'
76
+ )
77
+
78
+ InvoicePrinter.print(
79
+ document: invoice,
80
+ labels: labels,
81
+ font: File.expand_path('../Overpass-Regular.ttf', __FILE__),
82
+ logo: 'prawn.png',
83
+ file_name: 'international_invoice.pdf'
84
+ )
Binary file
@@ -35,6 +35,6 @@ invoice = InvoicePrinter::Document.new(
35
35
 
36
36
  InvoicePrinter.print(
37
37
  document: invoice,
38
- logo: 'example.jpg',
38
+ logo: 'prawn.png',
39
39
  file_name: 'simple_invoice.pdf'
40
40
  )
data/examples/stamp.png CHANGED
Binary file
@@ -44,7 +44,8 @@ module InvoicePrinter
44
44
  tax3: 'Tax 3',
45
45
  amount: 'Amount',
46
46
  subtotal: 'Subtotal',
47
- total: 'Total'
47
+ total: 'Total',
48
+ sublabels: {}
48
49
  }
49
50
 
50
51
  def self.labels
@@ -66,7 +67,7 @@ module InvoicePrinter
66
67
  raise InvalidInput, 'document is not a type of InvoicePrinter::Document' \
67
68
  unless @document.is_a?(InvoicePrinter::Document)
68
69
 
69
- if @logo && !@logo.empty?
70
+ if used? @logo
70
71
  if File.exist?(@logo)
71
72
  @logo = logo
72
73
  else
@@ -74,7 +75,7 @@ module InvoicePrinter
74
75
  end
75
76
  end
76
77
 
77
- if @font && !@font.empty?
78
+ if used? @font
78
79
  if File.exist?(@font)
79
80
  set_fonts(@font) if @font
80
81
  else
@@ -129,7 +130,10 @@ module InvoicePrinter
129
130
  build_footer
130
131
  end
131
132
 
132
- # Build the document name and number
133
+ # Build the document name and number at the top:
134
+ #
135
+ # NAME NO. 901905374583579
136
+ # Sublabel name
133
137
  def build_header
134
138
  @pdf.text_box(
135
139
  @labels[:name],
@@ -138,6 +142,17 @@ module InvoicePrinter
138
142
  width: 300,
139
143
  align: :left
140
144
  )
145
+
146
+ if used? @labels[:sublabels][:name]
147
+ @pdf.text_box(
148
+ @labels[:sublabels][:name],
149
+ size: 12,
150
+ at: [0, 720 - @push_down - 22],
151
+ width: 300,
152
+ align: :left
153
+ )
154
+ end
155
+
141
156
  @pdf.text_box(
142
157
  @document.number,
143
158
  size: 20,
@@ -146,34 +161,47 @@ module InvoicePrinter
146
161
  align: :right
147
162
  )
148
163
  @pdf.move_down(250)
164
+
165
+ if used? @labels[:sublabels][:name]
166
+ @pdf.move_down(12)
167
+ end
149
168
  end
150
169
 
151
170
  # Build the following provider box:
152
171
  #
153
- # -------------------------------------
154
- # | Provider |
155
- # | PROVIDER co. |
156
- # | 5th Street |
157
- # | 747 27 City |
158
- # | Part of the city |
159
- # | |
160
- # | Identification number: Number |
161
- # | Identification number: Number 2 |
162
- # -------------------------------------
172
+ # ------------------------------------------
173
+ # | Provider Optinal provider sublabel|
174
+ # | PROVIDER co. |
175
+ # | 5th Street |
176
+ # | 747 27 City |
177
+ # | Part of the city |
178
+ # | |
179
+ # | Identification number: Number |
180
+ # | Identification number: Number 2 |
181
+ # ------------------------------------------
163
182
  #
164
183
  def build_provider_box
165
184
  @pdf.text_box(
166
- @labels[:provider],
167
- size: 10,
168
- at: [10, 660 - @push_down],
185
+ @document.provider_name,
186
+ size: 15,
187
+ at: [10, 640 - @push_down],
169
188
  width: 240
170
189
  )
171
190
  @pdf.text_box(
172
- @document.provider_name,
173
- size: 14,
174
- at: [10, 640 - @push_down],
191
+ @labels[:provider],
192
+ size: 11,
193
+ at: [10, 660 - @push_down],
175
194
  width: 240
176
195
  )
196
+ if used? @labels[:sublabels][:provider]
197
+ @pdf.text_box(
198
+ @labels[:sublabels][:provider],
199
+ size: 10,
200
+ at: [10, 660 - @push_down],
201
+ width: 250,
202
+ align: :right
203
+ )
204
+ end
177
205
  @pdf.text_box(
178
206
  "#{@document.provider_street} #{@document.provider_street_number}",
179
207
  size: 10,
@@ -229,30 +257,39 @@ module InvoicePrinter
229
257
 
230
258
  # Build the following purchaser box:
231
259
  #
232
- # -------------------------------------
233
- # | Purchaser |
234
- # | PURCHASER co. |
235
- # | 5th Street |
236
- # | 747 27 City |
237
- # | Part of the city |
238
- # | |
239
- # | Identification number: Number |
240
- # | Identification number: Number 2 |
241
- # -------------------------------------
260
+ # -------------------------------------------
261
+ # | Purchaser Optinal purchaser sublabel|
262
+ # | PURCHASER co. |
263
+ # | 5th Street |
264
+ # | 747 27 City |
265
+ # | Part of the city |
266
+ # | |
267
+ # | Identification number: Number |
268
+ # | Identification number: Number 2 |
269
+ # ------------------------------------------
242
270
  #
243
271
  def build_purchaser_box
244
272
  @pdf.text_box(
245
- @labels[:purchaser],
246
- size: 10,
247
- at: [290, 660 - @push_down],
273
+ @document.purchaser_name,
274
+ size: 15,
275
+ at: [290, 640 - @push_down],
248
276
  width: 240
249
277
  )
250
278
  @pdf.text_box(
251
- @document.purchaser_name,
252
- size: 14,
253
- at: [290, 640 - @push_down],
279
+ @labels[:purchaser],
280
+ size: 11,
281
+ at: [290, 660 - @push_down],
254
282
  width: 240
255
283
  )
284
+
285
+ if used? @labels[:sublabels][:purchaser]
286
+ @pdf.text_box(
287
+ @labels[:sublabels][:purchaser],
288
+ size: 10,
289
+ at: [10, 660 - @push_down],
290
+ align: :right
291
+ )
292
+ end
256
293
  @pdf.text_box(
257
294
  "#{@document.purchaser_street} #{@document.purchaser_street_number}",
258
295
  size: 10,
@@ -310,14 +347,27 @@ module InvoicePrinter
310
347
  #
311
348
  # -----------------------------------------
312
349
  # | Payment on the following bank account: |
313
- # | Number: 3920392032 |
314
- # | SWIFT: ... |
315
- # | IBAN: ... |
350
+ # | Number: 3920392032|
351
+ # | Optional number sublabel |
352
+ # | SWIFT: xy|
353
+ # | Optional SWIFT sublabel |
354
+ # | IBAN: xy|
355
+ # | Optional IBAN sublabel |
316
356
  # -----------------------------------------
317
357
  #
318
358
  # If the bank account number is not provided include a note about payment
319
359
  # in cash.
320
360
  def build_payment_method_box
361
+ @push_down -= 3
362
+
363
+ # Match the height of next box if needed
364
+ # TODO: it's smaller without sublabels
365
+ min_height = 60
366
+ if used?(@document.issue_date) || used?(@document.due_date)
367
+ min_height = (used?(@document.issue_date) && used?(@document.due_date)) ? 75 : 60
368
+ end
369
+ @payment_box_height = min_height
370
+
321
371
  if @document.bank_account_number.empty?
322
372
  @pdf.text_box(
323
373
  @labels[:payment],
@@ -333,8 +383,9 @@ module InvoicePrinter
333
383
  )
334
384
  @pdf.stroke_rounded_rectangle([0, 508 - @push_down], 270, 45, 6)
335
385
  else
336
- box_height = 45
337
- push_iban = 0
386
+ @payment_box_height = 60
387
+ @push_iban = 0
388
+ sublabel_change = 0
338
389
  @pdf.text_box(
339
390
  @labels[:payment_by_transfer],
340
391
  size: 10,
@@ -342,95 +393,178 @@ module InvoicePrinter
342
393
  width: 240
343
394
  )
344
395
  @pdf.text_box(
345
- "#{@labels[:account_number]}:",
346
- size: 10,
396
+ "#{@labels[:account_number]}",
397
+ size: 11,
347
398
  at: [10, 483 - @push_down],
348
- width: 240
399
+ width: 140
349
400
  )
350
401
  @pdf.text_box(
351
402
  @document.bank_account_number,
352
- size: 10,
353
- at: [75, 483 - @push_down],
354
- width: 240
403
+ size: 13,
404
+ at: [21, 483 - @push_down],
405
+ width: 240,
406
+ align: :right
355
407
  )
356
- unless @document.account_swift.empty?
408
+ if used? @labels[:sublabels][:account_number]
357
409
  @pdf.text_box(
358
- "#{@labels[:swift]}:",
410
+ "#{@labels[:sublabels][:account_number]}",
359
411
  size: 10,
360
412
  at: [10, 468 - @push_down],
361
- width: 240
413
+ width: 340
414
+ )
415
+ else
416
+ @payment_box_height -= 10
417
+ sublabel_change -= 10
418
+ end
419
+ unless @document.account_swift.empty?
420
+ @pdf.text_box(
421
+ "#{@labels[:swift]}",
422
+ size: 11,
423
+ at: [10, 453 - @push_down - sublabel_change],
424
+ width: 140
362
425
  )
363
426
  @pdf.text_box(
364
427
  @document.account_swift,
365
- size: 10,
366
- at: [75, 468 - @push_down],
367
- width: 240
428
+ size: 13,
429
+ at: [21, 453 - @push_down - sublabel_change],
430
+ width: 240,
431
+ align: :right
368
432
  )
369
- box_height += 15
370
- push_iban = 15
371
- @push_items_table += 15
433
+
434
+ if used? @labels[:sublabels][:swift]
435
+ @pdf.text_box(
436
+ "#{@labels[:sublabels][:swift]}",
437
+ size: 10,
438
+ at: [10, 438 - @push_down - sublabel_change],
439
+ width: 340
440
+ )
441
+ @push_items_table += 10
442
+ else
443
+ @payment_box_height -= 10
444
+ sublabel_change -= 10
445
+ end
446
+
447
+ @payment_box_height += 30
448
+ @push_iban = 30
449
+ @push_items_table += 18
372
450
  end
373
451
  unless @document.account_iban.empty?
374
452
  @pdf.text_box(
375
- "#{@labels[:iban]}:",
376
- size: 10,
377
- at: [10, 468 - push_iban - @push_down],
378
- width: 240
453
+ "#{@labels[:iban]}",
454
+ size: 11,
455
+ at: [10, 453 - @push_iban - @push_down - sublabel_change],
456
+ width: 140
379
457
  )
380
458
  @pdf.text_box(
381
459
  @document.account_iban,
382
- size: 10,
383
- at: [75, 468 - push_iban - @push_down],
384
- width: 240
460
+ size: 13,
461
+ at: [21, 453 - @push_iban - @push_down - sublabel_change],
462
+ width: 240,
463
+ align: :right
385
464
  )
386
- box_height += 15
387
- @push_items_table += 15
465
+
466
+ if used? @labels[:sublabels][:iban]
467
+ @pdf.text_box(
468
+ "#{@labels[:sublabels][:iban]}",
469
+ size: 10,
470
+ at: [10, 438 - @push_iban - @push_down - sublabel_change],
471
+ width: 340
472
+ )
473
+ @push_items_table += 10
474
+ else
475
+ @payment_box_height -= 10
476
+ end
477
+
478
+ @payment_box_height += 30
479
+ @push_items_table += 18
480
+ end
481
+ if min_height > @payment_box_height
482
+ @payment_box_height = min_height
483
+ @push_items_table += 25
388
484
  end
389
- @pdf.stroke_rounded_rectangle([0, 508 - @push_down], 270, box_height, 6)
485
+
486
+ if !@document.account_swift.empty? && !@document.account_iban.empty?
487
+ @push_items_table += 2
488
+ end
489
+
490
+ @pdf.stroke_rounded_rectangle([0, 508 - @push_down], 270, @payment_box_height, 6)
390
491
  end
391
492
  end
392
493
 
393
494
  # Build the following info box:
394
495
  #
395
496
  # --------------------------------
396
- # | Issue date: 03/03/2016 |
397
- # | Due date: 03/03/2016 |
497
+ # | Issue date: 03/03/2016|
498
+ # | Issue date sublabel |
499
+ # | Due date: 03/03/2016|
500
+ # | Due date sublabel |
398
501
  # --------------------------------
399
502
  #
400
503
  def build_info_box
401
504
  issue_date_present = !@document.issue_date.empty?
402
- due_date_present = !@document.due_date.empty?
505
+
403
506
  if issue_date_present
404
507
  @pdf.text_box(
405
- "#{@labels[:issue_date]}:",
406
- size: 10,
508
+ @labels[:issue_date],
509
+ size: 11,
407
510
  at: [290, 498 - @push_down],
408
511
  width: 240
409
512
  )
410
513
  @pdf.text_box(
411
514
  @document.issue_date,
412
- size: 10,
515
+ size: 13,
413
516
  at: [390, 498 - @push_down],
414
- width: 240
517
+ align: :right
415
518
  )
416
519
  end
417
- if due_date_present
520
+
521
+ if used? @labels[:sublabels][:issue_date]
418
522
  position = issue_date_present ? 483 : 498
523
+
419
524
  @pdf.text_box(
420
- "#{@labels[:due_date]}:",
525
+ @labels[:sublabels][:issue_date],
421
526
  size: 10,
422
527
  at: [290, position - @push_down],
423
528
  width: 240
424
529
  )
530
+ end
531
+
532
+ due_date_present = !@document.due_date.empty?
533
+
534
+ if due_date_present
535
+ position = issue_date_present ? 478 : 493
536
+ position -= 10 if used? @labels[:sublabels][:issue_date]
537
+
538
+ @pdf.text_box(
539
+ @labels[:due_date],
540
+ size: 11,
541
+ at: [290, position - @push_down],
542
+ width: 240
543
+ )
425
544
  @pdf.text_box(
426
545
  @document.due_date,
427
- size: 10,
546
+ size: 13,
428
547
  at: [390, position - @push_down],
548
+ align: :right
549
+ )
550
+ end
551
+
552
+ if used? @labels[:sublabels][:due_date]
553
+ position = issue_date_present ? 463 : 478
554
+ position -= 10 if used? @labels[:sublabels][:issue_date]
555
+
556
+ @pdf.text_box(
557
+ @labels[:sublabels][:due_date],
558
+ size: 10,
559
+ at: [290, position - @push_down],
429
560
  width: 240
430
561
  )
431
562
  end
563
+
432
564
  if issue_date_present || due_date_present
433
- height = (issue_date_present && due_date_present) ? 45 : 30
565
+ height = (issue_date_present && due_date_present) ? 75 : 60
566
+ height = @payment_box_height if @payment_box_height > height
567
+
434
568
  @pdf.stroke_rounded_rectangle([280, 508 - @push_down], 270, height, 6)
435
569
  end
436
570
  end
@@ -438,15 +572,24 @@ module InvoicePrinter
438
572
  # Build the following table for document items:
439
573
  #
440
574
  # =================================================================
441
- # |Item | Quantity | Unit | Price per item | Tax | Total per item |
575
+ # |Item | Quantity| Unit| Price per item| Tax| Total per item|
442
576
  # |-----|----------|------|----------------|-----|----------------|
443
- # | x | 2 | hr | $ 2 | $1 | $ 4 |
577
+ # |x | 2| hr| $2| $1| $4|
444
578
  # =================================================================
445
579
  #
446
580
  # If a specific column miss data, it's omittted.
447
- # Tax2 and tax3 fields can be added as well if necessary.
581
+ # tax2 and tax3 fields can be added as well if necessary.
582
+ #
583
+ # Using sublabels one can change the table to look as:
584
+ #
585
+ # =================================================================
586
+ # |Item | Quantity| Unit| Price per item| Tax| Total per item|
587
+ # |it. | nom.| un.| ppi.| t.| tpi.|
588
+ # |-----|----------|------|----------------|-----|----------------|
589
+ # |x | 2| hr| $2| $1| $4|
590
+ # =================================================================
448
591
  def build_items
449
- @pdf.move_down(25 + @push_items_table + @push_down)
592
+ @pdf.move_down(23 + @push_items_table + @push_down)
450
593
 
451
594
  items_params = determine_items_structure
452
595
  items = build_items_data(items_params)
@@ -465,7 +608,8 @@ module InvoicePrinter
465
608
  5 => :right,
466
609
  6 => :right,
467
610
  7 => :right
468
- }
611
+ },
612
+ font_size: 10
469
613
  }
470
614
 
471
615
  @pdf.table(items, styles) unless items.empty?
@@ -506,17 +650,26 @@ module InvoicePrinter
506
650
  # Include only relevant headers
507
651
  def build_items_header(items_params)
508
652
  headers = []
509
- headers << { text: @labels[:item] } if items_params[:names]
510
- headers << { text: @labels[:quantity] } if items_params[:quantities]
511
- headers << { text: @labels[:unit] } if items_params[:units]
512
- headers << { text: @labels[:price_per_item] } if items_params[:prices]
513
- headers << { text: @labels[:tax] } if items_params[:taxes]
514
- headers << { text: @labels[:tax2] } if items_params[:taxes2]
515
- headers << { text: @labels[:tax3] } if items_params[:taxes3]
516
- headers << { text: @labels[:amount] } if items_params[:amounts]
653
+ headers << { text: label_with_sublabel(:item) } if items_params[:names]
654
+ headers << { text: label_with_sublabel(:quantity) } if items_params[:quantities]
655
+ headers << { text: label_with_sublabel(:unit) } if items_params[:units]
656
+ headers << { text: label_with_sublabel(:price_per_item) } if items_params[:prices]
657
+ headers << { text: label_with_sublabel(:tax) } if items_params[:taxes]
658
+ headers << { text: label_with_sublabel(:tax2) } if items_params[:taxes2]
659
+ headers << { text: label_with_sublabel(:tax3) } if items_params[:taxes3]
660
+ headers << { text: label_with_sublabel(:amount) } if items_params[:amounts]
517
661
  headers
518
662
  end
519
663
 
664
+ # This merge a label with its sublabel on a new line
665
+ def label_with_sublabel(symbol)
666
+ value = @labels[symbol]
667
+ if used? @labels[:sublabels][symbol]
668
+ value += "\n#{@labels[:sublabels][symbol]}"
669
+ end
670
+ value
671
+ end
672
+
520
673
  # Build the following summary:
521
674
  #
522
675
  # Subtotal: 175
@@ -531,10 +684,14 @@ module InvoicePrinter
531
684
  @pdf.move_down(25)
532
685
 
533
686
  items = []
534
- items << ["#{@labels[:subtotal]}:", @document.subtotal] unless @document.subtotal.empty?
535
- items << ["#{@labels[:tax]}:", @document.tax] unless @document.tax.empty?
536
- items << ["#{@labels[:tax2]}:", @document.tax2] unless @document.tax2.empty?
537
- items << ["#{@labels[:tax3]}:", @document.tax3] unless @document.tax3.empty?
687
+ items << ["#{@labels[:subtotal]}:#{build_sublabel_for_total_table(:subtotal)}", @document.subtotal] \
688
+ unless @document.subtotal.empty?
689
+ items << ["#{@labels[:tax]}:#{build_sublabel_for_total_table(:tax)}", @document.tax] \
690
+ unless @document.tax.empty?
691
+ items << ["#{@labels[:tax2]}:#{build_sublabel_for_total_table(:tax2)}", @document.tax2] \
692
+ unless @document.tax2.empty?
693
+ items << ["#{@labels[:tax3]}:#{build_sublabel_for_total_table(:tax3)}", @document.tax3] \
694
+ unless @document.tax3.empty?
538
695
 
539
696
  width = [
540
697
  "#{@labels[:subtotal]}#{@document.subtotal}".size,
@@ -557,12 +714,33 @@ module InvoicePrinter
557
714
 
558
715
  @pdf.move_down(15)
559
716
 
560
- @pdf.text(
561
- "#{@labels[:total]}: #{@document.total}",
562
- size: 16,
563
- align: :right,
564
- style: :bold
565
- )
717
+ unless @document.total.empty?
718
+ @pdf.text(
719
+ "#{@labels[:total]}: #{@document.total}",
720
+ size: 16,
721
+ align: :right,
722
+ style: :bold
723
+ )
724
+
725
+ @pdf.move_down(5)
726
+
727
+ if used? @labels[:sublabels][:total]
728
+ @pdf.text(
729
+ "#{@labels[:sublabels][:total]}: #{@document.total}",
730
+ size: 12,
731
+ align: :right
732
+ )
733
+ end
734
+ end
735
+ end
736
+
737
+ # Return sublabel on a new line or empty string
738
+ def build_sublabel_for_total_table(sublabel)
739
+ if used? @labels[:sublabels][sublabel]
740
+ "\n#{@labels[:sublabels][sublabel]}:"
741
+ else
742
+ ''
743
+ end
566
744
  end
567
745
 
568
746
  # Insert a logotype at the left bottom of the document
@@ -604,5 +782,9 @@ module InvoicePrinter
604
782
  size: 12
605
783
  ) unless @pdf.page_count == 1
606
784
  end
785
+
786
+ def used?(element)
787
+ element && !element.empty?
788
+ end
607
789
  end
608
790
  end
@@ -1,3 +1,3 @@
1
1
  module InvoicePrinter
2
- VERSION = '0.0.8'
2
+ VERSION = '0.0.9'
3
3
  end