prawnto 0.0.1

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/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 cracklabs.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,12 @@
1
+ Prawnto
2
+ =======
3
+
4
+ a rails plugin providing templating abilities
5
+ for generating pdf files leveraging the new kick-ass prawn library
6
+
7
+ full documentation/demos at: http://cracklabs.com/prawnto
8
+
9
+
10
+
11
+
12
+ Copyright (c) 2008 cracklabs.com, released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,47 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+ require 'rake/gempackagetask'
5
+
6
+ desc 'Default: run unit tests.'
7
+ task :default => :test
8
+
9
+ #desc 'Test the prawnto plugin.'
10
+ #Rake::TestTask.new(:test) do |t|
11
+ #t.libs << 'lib'
12
+ #t.pattern = 'test/**/*_test.rb'
13
+ #t.verbose = true
14
+ #end
15
+
16
+ desc 'Generate documentation for the prawnto plugin.'
17
+ Rake::RDocTask.new(:rdoc) do |rdoc|
18
+ rdoc.rdoc_dir = 'rdoc'
19
+ rdoc.title = 'Prawnto'
20
+ rdoc.options << '--line-numbers' << '--inline-source'
21
+ rdoc.rdoc_files.include('README')
22
+ rdoc.rdoc_files.include('lib/**/*.rb')
23
+ end
24
+
25
+ PKG_FILES = FileList[ '[a-zA-Z]*', 'lib/**/*', 'test/*', 'rails/*' ]
26
+
27
+ spec = Gem::Specification.new do |s|
28
+ s.name = "prawnto"
29
+ s.version = "0.0.1"
30
+ s.author = "smecsia"
31
+ s.email = "smecsia@gmail.com"
32
+ #s.homepage = ""
33
+ s.platform = Gem::Platform::RUBY
34
+ s.summary = "Prawnto rails plugin implemented as a gem (see prawnto)"
35
+ s.add_dependency('rails', '>=2.1')
36
+ s.add_dependency('prawn')
37
+ s.files = PKG_FILES.to_a
38
+ s.require_path = "lib"
39
+ s.has_rdoc = true
40
+ s.extra_rdoc_files = ["README"]
41
+ end
42
+
43
+ desc 'Turn this plugin into a gem.'
44
+ Rake::GemPackageTask.new(spec) do |pkg|
45
+ pkg.gem_spec = spec
46
+ end
47
+
@@ -0,0 +1,45 @@
1
+ module Prawnto
2
+ module ActionControllerMixin
3
+
4
+ DEFAULT_PRAWNTO_OPTIONS = {:inline=>true}
5
+
6
+ def self.included(base)
7
+ base.extend ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def prawnto(options)
12
+ prawn_options, prawnto_options = breakdown_prawnto_options options
13
+ write_inheritable_hash(:prawn, prawn_options)
14
+ write_inheritable_hash(:prawnto, prawnto_options)
15
+ end
16
+
17
+ private
18
+
19
+ def breakdown_prawnto_options(options)
20
+ prawnto_options = options.dup
21
+ prawn_options = (prawnto_options.delete(:prawn) || {}).dup
22
+ [prawn_options, prawnto_options]
23
+ end
24
+ end
25
+
26
+ def prawnto(options)
27
+ @prawnto_options ||= DEFAULT_PRAWNTO_OPTIONS.dup
28
+ @prawnto_options.merge! options
29
+ end
30
+
31
+
32
+ private
33
+
34
+ def compute_prawnto_options
35
+ @prawnto_options ||= DEFAULT_PRAWNTO_OPTIONS.dup
36
+ @prawnto_options[:prawn] ||= {}
37
+ @prawnto_options[:prawn].merge!(self.class.read_inheritable_attribute(:prawn) || {}) {|k,o,n| o}
38
+ @prawnto_options.merge!(self.class.read_inheritable_attribute(:prawnto) || {}) {|k,o,n| o}
39
+ @prawnto_options
40
+ end
41
+
42
+ end
43
+ end
44
+
45
+
@@ -0,0 +1,12 @@
1
+ module Prawnto
2
+ module ActionViewMixin
3
+
4
+ private
5
+ def _prawnto_compile_setup(dsl_setup = false)
6
+ compile_support = Prawnto::TemplateHandler::CompileSupport.new(controller)
7
+ @prawnto_options = compile_support.options
8
+ end
9
+
10
+ end
11
+ end
12
+
@@ -0,0 +1,72 @@
1
+ module Prawnto
2
+ module TemplateHandler
3
+
4
+ class CompileSupport
5
+ extend ActiveSupport::Memoizable
6
+
7
+ attr_reader :options
8
+
9
+ def initialize(controller)
10
+ @controller = controller
11
+ @options = pull_options
12
+ set_headers
13
+ end
14
+
15
+ def pull_options
16
+ @controller.send :compute_prawnto_options || {}
17
+ end
18
+
19
+ def set_headers
20
+ set_pragma
21
+ set_cache_control
22
+ set_content_type
23
+ set_disposition
24
+ end
25
+
26
+ # TODO: kept around from railspdf-- maybe not needed anymore? should check.
27
+ def ie_request?
28
+ @controller.request.env['HTTP_USER_AGENT'] =~ /msie/i
29
+ end
30
+ memoize :ie_request?
31
+
32
+ # added to make ie happy with ssl pdf's (per naisayer)
33
+ def ssl_request?
34
+ @controller.request.env['SERVER_PROTOCOL'].downcase == "https"
35
+ end
36
+ memoize :ssl_request?
37
+
38
+ # TODO: kept around from railspdf-- maybe not needed anymore? should check.
39
+ def set_pragma
40
+ if ssl_request? && ie_request?
41
+ @controller.headers['Pragma'] = 'public' # added to make ie ssl pdfs work (per naisayer)
42
+ else
43
+ @controller.headers['Pragma'] ||= ie_request? ? 'no-cache' : ''
44
+ end
45
+ end
46
+
47
+ # TODO: kept around from railspdf-- maybe not needed anymore? should check.
48
+ def set_cache_control
49
+ if ssl_request? && ie_request?
50
+ @controller.headers['Cache-Control'] = 'maxage=1' # added to make ie ssl pdfs work (per naisayer)
51
+ else
52
+ @controller.headers['Cache-Control'] ||= ie_request? ? 'no-cache, must-revalidate' : ''
53
+ end
54
+ end
55
+
56
+ def set_content_type
57
+ @controller.response.content_type ||= Mime::PDF
58
+ end
59
+
60
+ def set_disposition
61
+ inline = options[:inline] ? 'inline' : 'attachment'
62
+ filename = options[:filename] ? "filename=#{options[:filename]}" : nil
63
+ @controller.headers["Content-Disposition"] = [inline,filename].compact.join(';')
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+ end
70
+
71
+
72
+
@@ -0,0 +1,16 @@
1
+ module Prawnto
2
+ module TemplateHandlers
3
+ class Base < ::ActionView::TemplateHandler
4
+ include ::ActionView::TemplateHandlers::Compilable
5
+
6
+ def compile(template)
7
+ "_prawnto_compile_setup;" +
8
+ "pdf = Prawn::Document.new(@prawnto_options[:prawn]);" +
9
+ "#{template.source}\n" +
10
+ "pdf.render;"
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+
@@ -0,0 +1,16 @@
1
+ module Prawnto
2
+ module TemplateHandlers
3
+ class Dsl < Base
4
+
5
+ def compile(template)
6
+ "_prawnto_compile_setup(true);" +
7
+ "pdf = Prawn::Document.new(@prawnto_options[:prawn]);" +
8
+ "pdf.instance_eval do; #{template.source}\nend;" +
9
+ "pdf.render;"
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+
16
+
@@ -0,0 +1,64 @@
1
+ module Prawnto
2
+ module TemplateHandlers
3
+ class Raw < Base
4
+
5
+ def compile(template)
6
+ #TODO: what's up with filename here? not used is it?
7
+ source,filename = massage_template_source(template)
8
+ "_prawnto_compile_setup;" +
9
+ # (filename ? "@prawnto_options[:filename] = filename" : "") +
10
+ source
11
+ end
12
+
13
+ # attr_reader :run_environment
14
+
15
+ GENERATE_REGULAR_EXPRESSION = /^\s*Prawn\:\:Document\.generate(\(?)(.*?)(\,(.*))?(\s*\)?\s+do(.*?))$/m
16
+ RENDER_FILE_REGULAR_EXPRESSION = /(\w+)\.render_file\(?(.*?)\)?\s*$/
17
+
18
+ =begin
19
+ def render(template)
20
+ setup_run_environment
21
+ pull_prawnto_options
22
+ source,filename = massage_template_source(template)
23
+ @prawnto_options[:filename] = filename if filename
24
+ build_headers
25
+ @run_environment.instance_eval(source, template.filename, 0) #run in anonymous class
26
+ end
27
+
28
+
29
+ protected
30
+
31
+ def setup_run_environment
32
+ @run_environment = Object.new
33
+ end
34
+
35
+ =end
36
+ protected
37
+ def massage_template_source(template)
38
+ source = template.source.dup
39
+ variable_name = '_pdf'
40
+ filename = nil
41
+
42
+ source.gsub! /^(\s*?)(\$LOAD_PATH)/, '\1#\2'
43
+ source.gsub! /^(\s*?)(require\(?\s*['"]rubygems['"]\s*\)?\s*)$/, '\1#\2'
44
+ source.gsub! /^(\s*?)(require\(?\s*['"]prawn['"]\s*\)?\s*)$/, '\1#\2'
45
+
46
+ if (source =~ GENERATE_REGULAR_EXPRESSION)
47
+ filename = $2
48
+ source.sub! GENERATE_REGULAR_EXPRESSION, "#{variable_name} = Prawn::Document.new\\1\\4\\5"
49
+ elsif (source =~ RENDER_FILE_REGULAR_EXPRESSION)
50
+ variable_name = $1
51
+ filename = $2
52
+ source.sub! RENDER_FILE_REGULAR_EXPRESSION, '#\0'
53
+ end
54
+ source.gsub! /^(\s*)(class\s|def\s).*?\n\1end/m do |match|
55
+ eval "class <<@run_environment; #{match}; end;"
56
+ "\n" * match.count("\n")
57
+ end
58
+ source += "\n[#{variable_name}.render,#{filename}]\n"
59
+ source
60
+ end
61
+
62
+ end
63
+ end
64
+ end
data/lib/prawnto.rb ADDED
@@ -0,0 +1,28 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ module Prawnto
5
+ autoload :ActionControllerMixin, 'prawnto/action_controller_mixin'
6
+ autoload :ActionViewMixin, 'prawnto/action_view_mixin'
7
+ module TemplateHandlers
8
+ autoload :Base, 'prawnto/template_handlers/base'
9
+ autoload :Dsl, 'prawnto/template_handlers/dsl'
10
+ autoload :Raw, 'prawnto/template_handlers/raw'
11
+ end
12
+
13
+ module TemplateHandler
14
+ autoload :CompileSupport, 'prawnto/template_handler/compile_support'
15
+ end
16
+
17
+ class << self
18
+ def enable
19
+ ActionController::Base.send :include, Prawnto::ActionControllerMixin
20
+ ActionView::Base.send :include, Prawnto::ActionViewMixin
21
+ Mime::Type.register "application/pdf", :pdf
22
+ ActionView::Template.register_template_handler 'prawn', Prawnto::TemplateHandlers::Base
23
+ ActionView::Template.register_template_handler 'prawn_dsl', Prawnto::TemplateHandlers::Dsl
24
+ ActionView::Template.register_template_handler 'prawn_xxx', Prawnto::TemplateHandlers::Raw
25
+ end
26
+ end
27
+ end
28
+
data/rails/init.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'prawnto'
2
+ if defined? Rails && defined? RAILS_ROOT && defined? Prawn
3
+ Prawnto.enable
4
+ else
5
+ throw "Should be enabled only if Rails && Prawn are both defined"
6
+ end
data/reference_pdfs ADDED
File without changes
@@ -0,0 +1,38 @@
1
+ require 'rubygems'
2
+ require 'action_controller'
3
+ require 'action_controller/test_process'
4
+ require 'action_view'
5
+
6
+ require 'test/unit'
7
+ require File.dirname(__FILE__) + '/../lib/prawnto'
8
+
9
+
10
+ class ActionControllerTest < Test::Unit::TestCase
11
+ class PrawntoController < ActionController::Base
12
+ prawnto :inline=>true, :prawn=>{:page_orientation=>:landscape}
13
+
14
+ def test
15
+ prawnto :inline=>false, :prawn=>{:page_size=>'A4'}
16
+ end
17
+ end
18
+
19
+ def test_inheritable_options
20
+ assert_equal({:page_orientation=>:landscape}, PrawntoController.read_inheritable_attribute(:prawn))
21
+ assert_equal({:inline=>true}, PrawntoController.read_inheritable_attribute(:prawnto))
22
+ end
23
+
24
+ def test_computed_options
25
+ controller = PrawntoController.new
26
+ test_process(controller)
27
+ assert_equal({:inline=>false, :prawn=>{:page_orientation=>:landscape, :page_size=>'A4'}}, controller.send(:compute_prawnto_options))
28
+ end
29
+
30
+ protected
31
+ def test_process(controller, action = "test")
32
+ request = ActionController::TestRequest.new
33
+ request.action = action
34
+ controller.process(request, ActionController::TestResponse.new)
35
+ end
36
+
37
+ end
38
+
@@ -0,0 +1,39 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/template_handler_test_mocks'
4
+ require File.dirname(__FILE__) + '/../lib/prawnto'
5
+ #require File.dirname(__FILE__) + '/../init'
6
+
7
+
8
+ #TODO: ruby1.9: pull same testing scheme from Raw once we're on 1.9
9
+ class BaseTemplateHandlerTest < Test::Unit::TestCase
10
+ include TemplateHandlerTestMocks
11
+
12
+ def setup
13
+ @view = ActionView.new
14
+ @handler = Prawnto::TemplateHandlers::Base.new(@view)
15
+ @controller = @view.controller
16
+ end
17
+
18
+ def test_headers_disposition_inline_and_filename
19
+ @controller.prawnto :filename=>'xxx.pdf', :inline=>true
20
+ @handler.pull_prawnto_options
21
+ @handler.set_disposition
22
+ assert_equal 'inline;filename=xxx.pdf', @view.headers['Content-Disposition']
23
+ end
24
+
25
+ def test_headers_disposition_attachment_and_filename
26
+ @controller.prawnto :filename=>'xxx.pdf', :inline=>false
27
+ @handler.pull_prawnto_options
28
+ @handler.set_disposition
29
+ assert_equal 'attachment;filename=xxx.pdf', @view.headers['Content-Disposition']
30
+ end
31
+
32
+ def test_headers_disposition_default
33
+ @handler.pull_prawnto_options
34
+ @handler.set_disposition
35
+ assert_equal 'inline', @view.headers['Content-Disposition']
36
+ end
37
+
38
+ end
39
+
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/template_handler_test_mocks'
4
+ require File.dirname(__FILE__) + '/../lib/prawnto'
5
+ #require File.dirname(__FILE__) + '/../init'
6
+
7
+
8
+ #TODO: ruby1.9: pull same testing scheme from Raw once we're on 1.9
9
+ class DslTemplateHandlerTest < Test::Unit::TestCase
10
+ include TemplateHandlerTestMocks
11
+
12
+ def setup
13
+ @view = ActionView.new
14
+ @handler = Prawnto::TemplateHandlers::Dsl.new(@view)
15
+ @controller = @view.controller
16
+ end
17
+
18
+ def test_prawnto_options_dsl_hash
19
+ @y = 3231; @x = 5322
20
+ @controller.prawnto :dsl=> {'x'=>:@x, :y=>'@y'}
21
+ @handler.pull_prawnto_options
22
+ source = @handler.build_source_to_establish_locals(Template.new(""))
23
+
24
+ assert_equal @x, eval(source + "\nx")
25
+ assert_equal @y, eval(source + "\ny")
26
+ end
27
+
28
+ def test_prawnto_options_dsl_array
29
+ @y = 3231; @x = 5322
30
+ @controller.prawnto :dsl=> ['x', :@y]
31
+ @handler.pull_prawnto_options
32
+ source = @handler.build_source_to_establish_locals(Template.new(""))
33
+
34
+ assert_equal @x, eval(source + "\nx")
35
+ assert_equal @y, eval(source + "\ny")
36
+ end
37
+
38
+
39
+ end
40
+
@@ -0,0 +1,163 @@
1
+ # uncomment and edit below if you want to get off gem version
2
+ #$LOAD_PATH.unshift '~/cracklabs/vendor/gems/prawn-0.0.0.1/lib/' #to force picup of latest prawn (instead of stable gem)
3
+
4
+ require 'rubygems'
5
+ require 'action_controller'
6
+ require 'action_view'
7
+
8
+ require 'test/unit'
9
+ require File.dirname(__FILE__) + '/../lib/prawnto'
10
+ require File.dirname(__FILE__) + '/template_handler_test_mocks'
11
+
12
+
13
+ class RawTemplateHandlerTest < Test::Unit::TestCase
14
+ include TemplateHandlerTestMocks
15
+ class ::ApplicationHelper
16
+ end
17
+
18
+ def setup
19
+ @view = ActionView.new
20
+ @handler = Prawnto::TemplateHandlers::Raw.new(@view)
21
+ end
22
+
23
+
24
+ def test_massage_template_source_header_comments
25
+ expected_commented_lines = [0,2,3]
26
+ source = <<EOS
27
+ require 'prawn'
28
+ require 'hello'
29
+ require "rubygems"
30
+ $LOAD_PATH.unshift blah blah
31
+ LOAD_PATH.unshift blah blah
32
+ EOS
33
+ output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
34
+ output_lines.each_with_index do |line, i|
35
+ method = expected_commented_lines.include?(i) ? :assert_match : :assert_no_match
36
+ self.send method, /^\s*\#/, line
37
+ end
38
+ end
39
+
40
+ def test_massage_template_source_generate
41
+ @handler.pull_prawnto_options
42
+ changed_lines = [0,2,3]
43
+ source = <<EOS
44
+ Prawn::Document.generate('hello.pdf') do |pdf|
45
+ end
46
+ EOS
47
+ output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
48
+ assert_match(/^\s*(\S+)\s*\=\s*Prawn\:\:Document\.new\(?\s*\)?\s*do\s*\|pdf\|/, output_lines.first)
49
+ variable = $1
50
+ assert_match(/^\s*\[(\S+)\.render\s*\,\s*\'hello\.pdf\'\s*\]\s*$/, output_lines.last)
51
+ assert_equal variable, $1
52
+ end
53
+
54
+ def test_massage_template_source_new
55
+ @handler.pull_prawnto_options
56
+ unchanged_lines = [0,1,2]
57
+ source = <<EOS
58
+ x = Prawn::Document.new do |pdf|
59
+ text.blah blah blah
60
+ end
61
+ x.render_file('hello.pdf')
62
+ EOS
63
+ source_lines = source.split("\n")
64
+ output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
65
+ output_lines.each_with_index do |line, i|
66
+ method = unchanged_lines.include?(i) ? :assert_equal : :assert_not_equal
67
+ self.send method, source_lines[i], line
68
+ end
69
+ assert_match(/^\s*\#\s*x\.render\_file\(\'hello.pdf\'\)/, output_lines[3])
70
+ assert_match(/^\s*\[\s*x\.render\s*\,\s*\'hello\.pdf\'\s*\]\s*$/, output_lines.last)
71
+ end
72
+
73
+ def test_massage_template_source_classes_methods
74
+ source = <<EOS
75
+ class Foo
76
+ def initialize
77
+ @foo = true
78
+ end
79
+ end
80
+
81
+ def bar(*args)
82
+ if args[0]==true
83
+ z = false
84
+ end
85
+ end
86
+ EOS
87
+ @handler.send :setup_run_environment
88
+ output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
89
+ output_lines.pop
90
+ output_lines.each {|l| assert_match(/^\s*$/, l)}
91
+ assert @handler.run_environment.methods(false).include?('bar')
92
+ assert class <<@handler.run_environment; self; end.constants.include?('Foo')
93
+ end
94
+
95
+ CURRENT_PATH = Pathname('.').realpath
96
+ PRAWN_PATH = Pathname(Prawn::BASEDIR).realpath
97
+ REFERENCE_PATH = Pathname('reference_pdfs').realpath
98
+ INPUT_PATH = PRAWN_PATH + 'examples'
99
+ IGNORE_LIST = %w(table_bench ruport_formatter page_geometry)
100
+ INPUTS = INPUT_PATH.children.select {|p| p.extname==".rb" && !IGNORE_LIST.include?(p.basename('.rb').to_s)}
101
+
102
+ def self.ensure_reference_pdfs_are_recent
103
+ head_lines = (INPUT_PATH + "../.git/HEAD").read.split("\n")
104
+ head_hash = Hash[*head_lines.map {|line| line.split(':').map{|v| v.strip}}.flatten]
105
+ head_version = (INPUT_PATH + "../.git" + head_hash['ref'])
106
+
107
+ REFERENCE_PATH.mkpath
108
+ current_version = REFERENCE_PATH + 'HEAD'
109
+ if !current_version.exist? || current_version.read!=head_version.read
110
+ puts "\n!!!! reference pdfs are determined to be old-- repopulating...\n\n"
111
+ require 'fileutils'
112
+ FileUtils.instance_eval do
113
+ rm REFERENCE_PATH + '*', :force=>true
114
+ INPUTS.each do |path|
115
+ pre_brood = INPUT_PATH.children
116
+ cd INPUT_PATH
117
+ system("ruby #{path.basename}")
118
+ post_brood = INPUT_PATH.children
119
+ new_kids = post_brood - pre_brood
120
+ new_kids.each {|p| mv p, REFERENCE_PATH + p.basename}
121
+ cd CURRENT_PATH
122
+ end
123
+ cp head_version, current_version
124
+ end
125
+ else
126
+ puts "\n reference pdfs are current-- continuing...\n"
127
+ end
128
+ end
129
+
130
+ #TODO: ruby 1.9: uncomment below line when on 1.9
131
+ #ensure_reference_pdfs_are_recent
132
+
133
+
134
+ def assert_renders_correctly(name, path)
135
+ input_source = path.read
136
+ output_source = @handler.compile(Template.new(input_source))
137
+ value = @view.instance_eval output_source
138
+ reference = (REFERENCE_PATH + @view.prawnto_options[:filename]).read
139
+
140
+ message = "template: #{name}\n"
141
+ message += ">"*30 + " original template: " + ">"*20 + "\n"
142
+ message += input_source + "\n"*2
143
+ message += ">"*30 + " manipulated template: " + ">"*20 + "\n"
144
+ message += output_source + "\n" + "<"*60 + "\n"
145
+
146
+ assert_equal reference, value, message
147
+ end
148
+
149
+ #!!! Can't actually verify pdf equality until ruby 1.9
150
+ # (cuz hash orders are messed up otherwise and no other way to test equality at the moment)
151
+ INPUTS.each do |path|
152
+ name = path.basename('.rb')
153
+ define_method "test_template_should_render_correctly [template: #{name}] " do
154
+ # assert_renders_correctly name, path
155
+ assert true
156
+ end
157
+ end
158
+
159
+
160
+
161
+
162
+ end
163
+
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+ require File.dirname(__FILE__) + '/../lib/prawnto'
3
+
4
+ module TemplateHandlerTestMocks
5
+
6
+ class Template
7
+ attr_reader :source, :locals, :filename
8
+
9
+ def initialize(source, locals={})
10
+ @source = source
11
+ @locals = locals
12
+ @filename = "blah.pdf"
13
+ end
14
+ end
15
+
16
+
17
+ class Response
18
+ def initialize
19
+ @headers = {}
20
+ end
21
+
22
+ def headers
23
+ @headers
24
+ end
25
+
26
+ def content_type=(value)
27
+ end
28
+ end
29
+
30
+ class Request
31
+ def env
32
+ {}
33
+ end
34
+ end
35
+
36
+ class ActionController
37
+
38
+ include Prawnto::ActionController
39
+
40
+ def response
41
+ @response ||= Response.new
42
+ end
43
+
44
+ def request
45
+ @request ||= Request.new
46
+ end
47
+
48
+ def headers
49
+ response.headers
50
+ end
51
+ end
52
+
53
+ class ActionView
54
+ def controller
55
+ @controller ||= ActionController.new
56
+ end
57
+
58
+ def response
59
+ controller.response
60
+ end
61
+
62
+ def request
63
+ controller.request
64
+ end
65
+
66
+ def headers
67
+ controller.headers
68
+ end
69
+
70
+ def prawnto_options
71
+ controller.get_instance_variable(:@prawnto_options)
72
+ end
73
+ end
74
+
75
+
76
+ end
77
+
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prawnto
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - smecsia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-03-17 00:00:00 +03:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "2.1"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: prawn
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description:
36
+ email: smecsia@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README
43
+ files:
44
+ - reference_pdfs
45
+ - README
46
+ - Rakefile
47
+ - MIT-LICENSE
48
+ - lib/prawnto/action_view_mixin.rb
49
+ - lib/prawnto/action_controller_mixin.rb
50
+ - lib/prawnto/template_handler/compile_support.rb
51
+ - lib/prawnto/template_handlers/raw.rb
52
+ - lib/prawnto/template_handlers/dsl.rb
53
+ - lib/prawnto/template_handlers/base.rb
54
+ - lib/prawnto.rb
55
+ - test/base_template_handler_test.rb
56
+ - test/action_controller_test.rb
57
+ - test/dsl_template_handler_test.rb
58
+ - test/template_handler_test_mocks.rb
59
+ - test/raw_template_handler_test.rb
60
+ - rails/init.rb
61
+ has_rdoc: true
62
+ homepage:
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options: []
67
+
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "0"
75
+ version:
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
81
+ version:
82
+ requirements: []
83
+
84
+ rubyforge_project:
85
+ rubygems_version: 1.3.5
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: Prawnto rails plugin implemented as a gem (see prawnto)
89
+ test_files: []
90
+