slim2pdf 0.0.1 → 0.0.2

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.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Slim2pdf [![Code Climate](https://codeclimate.com/github/macuk/slim2pdf.png)](https://codeclimate.com/github/macuk/slim2pdf)
2
2
 
3
- Slim2pdf renders slim template with data hash and save the results as pdf file.
3
+ Slim2pdf renders [slim template](http://slim-lang.com/) with data hash and saves the results as pdf file.
4
4
 
5
5
  ## Installation
6
6
 
@@ -23,55 +23,78 @@ Or install it yourself as:
23
23
  ### Create writer object
24
24
 
25
25
  writer = Slim2pdf::Writer.new
26
- writer.template = 'path/to/template.slim'
27
- writer.data = {key1: value1, key2: value2}
26
+ writer.template = 'template.slim'
27
+ writer.data = {name: 'John', surname: 'Doe'}
28
28
 
29
29
  ### Set parameters in initializer
30
30
 
31
- writer = Slim2pdf::Writer.new('tpl.slim', {key1: 'a', key2: 'b'})
31
+ writer = Slim2pdf::Writer.new('template.slim', {name: 'John', surname: 'Doe'})
32
32
 
33
33
  ### Possible actions
34
34
 
35
35
  writer.render_to_html # return rendered html as string
36
36
 
37
- writer.save_to_html(html_path) # saves rendered html to file
37
+ writer.save_to_html('output.html') # saves rendered html to file
38
38
 
39
- writer.save_to_pdf(pdf_path) # saves rendered html as pdf file
39
+ writer.save_to_pdf('output.pdf') # saves rendered html as pdf file
40
+
41
+ ### Changing default wkhtmltopdf command
42
+
43
+ writer = Slim2pdf::Writer.new
44
+ writer.wkhtmltopdf_command = '/your/path/to/wkhtmltopdf --your --params'
45
+
46
+ Input (html) and output (pdf) files will be added automatically.
40
47
 
41
48
  ## Examples
42
49
 
43
- ### Change slim template to pdf file (doc/examples/simple/).
50
+ ### Save simple slim template without data to pdf file
44
51
 
45
52
  require 'slim2pdf'
46
53
 
47
- writer = Slim2pdf::Writer.new('doc/examples/simple/template.slim')
48
- writer.save_to_pdf('doc/examples/simple/output.pdf')
54
+ writer = Slim2pdf::Writer.new('simple.slim')
55
+ writer.save_to_pdf('simple.pdf')
49
56
 
50
- ### Generate agreement (doc/examples/agreement/).
57
+ See: [doc/examples/simple](https://github.com/macuk/slim2pdf/tree/master/doc/examples/simple)
58
+
59
+ ### Generate agreement with footer
51
60
 
52
61
  require 'slim2pdf'
53
62
 
54
- w = Slim2pdf::Writer.new
55
- w.template = 'doc/examples/agreement/template.slim'
56
- w.data = {date: '2014-01-14', part1: 'Google', part2: 'Microsoft'}
57
- w.footer_text = 'Agreement footer'
58
- w.save_to_pdf('doc/examples/agreement/output.pdf')
63
+ writer = Slim2pdf::Writer.new('agreement.slim')
64
+ writer.data = {date: '2014-01-14', part1: 'Google', part2: 'Microsoft'}
65
+ writer.footer_text = 'Agreement footer'
66
+ writer.save_to_pdf('agreement.pdf')
67
+
68
+ See: [doc/examples/agreement](https://github.com/macuk/slim2pdf/tree/master/doc/examples/agreement)
59
69
 
60
- ### Generate bulk invoices (doc/examples/invoices/).
70
+ ### Generate bulk invoices
61
71
 
62
72
  require 'slim2pdf'
63
73
 
64
- w = Slim2pdf::Writer.new('doc/examples/invoices/template.slim')
74
+ writer = Slim2pdf::Writer.new('invoice.slim')
65
75
  buyers = ['Buyer A', 'Buyer B', 'Buyer C', 'Buyer D']
66
76
  buyers.each_with_index do |buyer, index|
67
77
  number = index + 1
68
- w.data = {
78
+ writer.data = {
69
79
  seller: 'Seller', buyer: buyer, number: "#{number}/2014",
70
80
  item_name: 'Service', price: '$100', date: '2014-01-14'
71
81
  }
72
- w.save_to_pdf("doc/examples/invoices/output-#{number}.pdf")
82
+ writer.save_to_pdf("invoice-#{number}.pdf")
73
83
  end
74
84
 
85
+ See: [doc/examples/invoices](https://github.com/macuk/slim2pdf/tree/master/doc/examples/invoices)
86
+
87
+ ## Debuging
88
+
89
+ ### Setting logger
90
+
91
+ require 'logger'
92
+
93
+ writer = Slim2pdf::Writer.new
94
+ writer.logger = Logger.new(STDERR)
95
+
96
+ If you use Slim2pdf with Rails, the Rails.logger will be set automatically.
97
+
75
98
  ## Contributing
76
99
 
77
100
  1. Fork it
@@ -1,7 +1,7 @@
1
1
  require 'slim2pdf'
2
2
 
3
- w = Slim2pdf::Writer.new
4
- w.template = 'doc/examples/agreement/template.slim'
5
- w.data = {date: '2014-01-14', part1: 'Google', part2: 'Microsoft'}
6
- w.footer_text = 'Agreement footer'
7
- w.save_to_pdf('doc/examples/agreement/output.pdf')
3
+ writer = Slim2pdf::Writer.new
4
+ writer.template = 'doc/examples/agreement/template.slim'
5
+ writer.data = {date: '2014-01-14', part1: 'Google', part2: 'Microsoft'}
6
+ writer.footer_text = 'Agreement footer'
7
+ writer.save_to_pdf('doc/examples/agreement/output.pdf')
@@ -1,12 +1,12 @@
1
1
  require 'slim2pdf'
2
2
 
3
- w = Slim2pdf::Writer.new('doc/examples/invoices/template.slim')
3
+ writer = Slim2pdf::Writer.new('doc/examples/invoices/template.slim')
4
4
  buyers = ['Buyer A', 'Buyer B', 'Buyer C', 'Buyer D']
5
5
  buyers.each_with_index do |buyer, index|
6
6
  number = index + 1
7
- w.data = {
7
+ writer.data = {
8
8
  seller: 'Seller', buyer: buyer, number: "#{number}/2014",
9
9
  item_name: 'Service', price: '$100', date: '2014-01-14'
10
10
  }
11
- w.save_to_pdf("doc/examples/invoices/output-#{number}.pdf")
11
+ writer.save_to_pdf("doc/examples/invoices/output-#{number}.pdf")
12
12
  end
@@ -1,3 +1,3 @@
1
1
  module Slim2pdf
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,7 +1,9 @@
1
1
  module Slim2pdf
2
2
  class Writer
3
3
  attr_accessor :template, :data
4
+ attr_accessor :wkhtmltopdf_command
4
5
  attr_accessor :footer_text, :footer_font, :footer_font_size
6
+ attr_accessor :logger
5
7
 
6
8
  def initialize(template=nil, data={})
7
9
  @template = template
@@ -15,17 +17,26 @@ module Slim2pdf
15
17
  def save_to_html(path)
16
18
  create_dir(path)
17
19
  File.write(path, render_to_html)
20
+ logger.info "[Slim2pdf] HTML file saved: #{path}" if logger
18
21
  end
19
22
 
20
23
  def save_to_pdf(path)
21
24
  create_dir(path)
22
25
  html = create_tmp_html
23
- `#{wkhtmltopdf_command(html.path, path)}`
26
+ full_command = "#{wkhtmltopdf_command} #{html.path} #{path}"
27
+ logger.debug "[Slim2pdf] Run command: #{full_command}" if logger
28
+ `#{full_command}`
24
29
  html.unlink
30
+ logger.info "[Slim2pdf] PDF file saved: #{path}" if logger
25
31
  end
26
32
 
27
- def wkhtmltopdf_command(html_path, pdf_path)
28
- "wkhtmltopdf #{footer_params} -q #{html_path} #{pdf_path}"
33
+ # wkhtmltopdf command without html and pdf file params
34
+ def wkhtmltopdf_command
35
+ @wkhtmltopdf_command || "wkhtmltopdf #{footer_params} -q"
36
+ end
37
+
38
+ def logger
39
+ @logger ||= defined?(Rails) ? Rails.logger : nil
29
40
  end
30
41
 
31
42
  private
data/test/writer_test.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'test_helper'
2
+ require 'logger'
3
+ require 'stringio'
2
4
 
3
5
  module Slim2pdf
4
6
  class WriterTest < MiniTest::Unit::TestCase
@@ -59,17 +61,45 @@ module Slim2pdf
59
61
  assert_equal false, File.exists?(path)
60
62
  end
61
63
 
64
+ def test_wkhtmltopdf_command
65
+ assert_match /wkhtmltopdf/, @writer.wkhtmltopdf_command
66
+ assert_match /-q/, @writer.wkhtmltopdf_command
67
+ @writer.wkhtmltopdf_command = 'test -a -b -c'
68
+ assert_equal 'test -a -b -c', @writer.wkhtmltopdf_command
69
+ end
70
+
62
71
  def test_footer_params
63
72
  @writer.footer_text = 'Footer'
64
- command = @writer.wkhtmltopdf_command('tmp.html', 'out.pdf')
73
+ command = @writer.wkhtmltopdf_command
65
74
  assert_match /Footer/, command
66
75
  assert_match /10/, command
67
76
  assert_match /verdana/, command
68
77
  @writer.footer_font = 'arial'
69
78
  @writer.footer_font_size = 14
70
- command = @writer.wkhtmltopdf_command('tmp.html', 'out.pdf')
79
+ command = @writer.wkhtmltopdf_command
71
80
  assert_match /14/, command
72
81
  assert_match /arial/, command
73
82
  end
83
+
84
+ def test_logger_accessor
85
+ assert_nil @writer.logger
86
+ stderr = Logger.new(STDERR)
87
+ @writer.logger = stderr
88
+ assert_equal stderr, @writer.logger
89
+ end
90
+
91
+ def test_logging
92
+ sio = StringIO.new
93
+ @writer.logger = Logger.new(sio)
94
+ @writer.logger.level = Logger::DEBUG
95
+ @writer.save_to_html('/tmp/out.html')
96
+ File.unlink('/tmp/out.html')
97
+ @writer.save_to_pdf('/tmp/out.pdf')
98
+ File.unlink('/tmp/out.pdf')
99
+ log = sio.string
100
+ assert_match %r(/tmp/out.html), log
101
+ assert_match %r(/tmp/out.pdf), log
102
+ assert_match /Run command: wkhtmltopdf/, log
103
+ end
74
104
  end
75
105
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slim2pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-14 00:00:00.000000000 Z
12
+ date: 2014-01-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -138,7 +138,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
138
  version: '0'
139
139
  segments:
140
140
  - 0
141
- hash: 613998296001512521
141
+ hash: -782601368619973164
142
142
  required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  none: false
144
144
  requirements:
@@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  version: '0'
148
148
  segments:
149
149
  - 0
150
- hash: 613998296001512521
150
+ hash: -782601368619973164
151
151
  requirements: []
152
152
  rubyforge_project:
153
153
  rubygems_version: 1.8.25