Replaced prawnto plugin with rails31 compatible version.
This commit is contained in:
parent
0a1c326f14
commit
78cc423a46
20 changed files with 5 additions and 678 deletions
1
Gemfile
1
Gemfile
|
@ -20,6 +20,7 @@ gem 'jquery-rails'
|
||||||
gem 'mysql2'
|
gem 'mysql2'
|
||||||
gem "fastercsv"
|
gem "fastercsv"
|
||||||
gem "prawn", '<=0.6.3'
|
gem "prawn", '<=0.6.3'
|
||||||
|
gem 'prawnto_2', :require => "prawnto" # Used for prawn view templates
|
||||||
gem 'haml-rails'
|
gem 'haml-rails'
|
||||||
gem "will_paginate", "~> 3.0.pre2"
|
gem "will_paginate", "~> 3.0.pre2"
|
||||||
gem 'client_side_validations'
|
gem 'client_side_validations'
|
||||||
|
|
|
@ -100,6 +100,9 @@ GEM
|
||||||
prawn-core
|
prawn-core
|
||||||
prawn-layout (0.3.2)
|
prawn-layout (0.3.2)
|
||||||
prawn-security (0.1.1)
|
prawn-security (0.1.1)
|
||||||
|
prawnto_2 (0.2.5)
|
||||||
|
prawn (>= 0.6.0)
|
||||||
|
rails (>= 3.1)
|
||||||
rack (1.4.1)
|
rack (1.4.1)
|
||||||
rack-cache (1.2)
|
rack-cache (1.2)
|
||||||
rack (>= 0.4)
|
rack (>= 0.4)
|
||||||
|
@ -174,6 +177,7 @@ DEPENDENCIES
|
||||||
meta_search
|
meta_search
|
||||||
mysql2
|
mysql2
|
||||||
prawn (<= 0.6.3)
|
prawn (<= 0.6.3)
|
||||||
|
prawnto_2
|
||||||
rails (= 3.2.8)
|
rails (= 3.2.8)
|
||||||
rails3_acts_as_paranoid (~> 0.1.4)
|
rails3_acts_as_paranoid (~> 0.1.4)
|
||||||
sass-rails (~> 3.2.3)
|
sass-rails (~> 3.2.3)
|
||||||
|
|
3
vendor/plugins/prawnto/.gitignore
vendored
3
vendor/plugins/prawnto/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
.DS_Store
|
|
||||||
**/*.swp
|
|
||||||
reference_pdfs
|
|
20
vendor/plugins/prawnto/MIT-LICENSE
vendored
20
vendor/plugins/prawnto/MIT-LICENSE
vendored
|
@ -1,20 +0,0 @@
|
||||||
Copyright (c) 2008 cracklabs.com
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
12
vendor/plugins/prawnto/README
vendored
12
vendor/plugins/prawnto/README
vendored
|
@ -1,12 +0,0 @@
|
||||||
Prawnto
|
|
||||||
=======
|
|
||||||
|
|
||||||
a rails (2.1) plugin, providing templating abilities
|
|
||||||
for generating pdf files leveraging the new kick-ass prawn library
|
|
||||||
|
|
||||||
full documentation/demos at: http://cracklabs.com/prawnto
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (c) 2008 cracklabs.com, released under the MIT license
|
|
22
vendor/plugins/prawnto/Rakefile
vendored
22
vendor/plugins/prawnto/Rakefile
vendored
|
@ -1,22 +0,0 @@
|
||||||
require 'rake'
|
|
||||||
require 'rake/testtask'
|
|
||||||
require 'rake/rdoctask'
|
|
||||||
|
|
||||||
desc 'Default: run unit tests.'
|
|
||||||
task :default => :test
|
|
||||||
|
|
||||||
desc 'Test the prawnto plugin.'
|
|
||||||
Rake::TestTask.new(:test) do |t|
|
|
||||||
t.libs << 'lib'
|
|
||||||
t.pattern = 'test/**/*_test.rb'
|
|
||||||
t.verbose = true
|
|
||||||
end
|
|
||||||
|
|
||||||
desc 'Generate documentation for the prawnto plugin.'
|
|
||||||
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
||||||
rdoc.rdoc_dir = 'rdoc'
|
|
||||||
rdoc.title = 'Prawnto'
|
|
||||||
rdoc.options << '--line-numbers' << '--inline-source'
|
|
||||||
rdoc.rdoc_files.include('README')
|
|
||||||
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
||||||
end
|
|
7
vendor/plugins/prawnto/init.rb
vendored
7
vendor/plugins/prawnto/init.rb
vendored
|
@ -1,7 +0,0 @@
|
||||||
require 'prawnto'
|
|
||||||
|
|
||||||
Mime::Type.register "application/pdf", :pdf
|
|
||||||
ActionView::Template.register_template_handler 'prawn', Prawnto::TemplateHandlers::Base
|
|
||||||
ActionView::Template.register_template_handler 'prawn_dsl', Prawnto::TemplateHandlers::Dsl
|
|
||||||
ActionView::Template.register_template_handler 'prawn_xxx', Prawnto::TemplateHandlers::Raw
|
|
||||||
|
|
28
vendor/plugins/prawnto/lib/prawnto.rb
vendored
28
vendor/plugins/prawnto/lib/prawnto.rb
vendored
|
@ -1,28 +0,0 @@
|
||||||
require 'action_controller'
|
|
||||||
require 'action_view'
|
|
||||||
|
|
||||||
require 'prawn'
|
|
||||||
require 'prawnto/action_controller'
|
|
||||||
require 'prawnto/action_view'
|
|
||||||
|
|
||||||
require 'prawnto/template_handler/compile_support'
|
|
||||||
|
|
||||||
require 'prawnto/template_handlers/base'
|
|
||||||
require 'prawn/layout' # Added by benni
|
|
||||||
#require 'prawnto/template_handlers/raw'
|
|
||||||
|
|
||||||
# for now applying to all Controllers
|
|
||||||
# however, could reduce footprint by letting user mixin (i.e. include) only into controllers that need it
|
|
||||||
# but does it really matter performance wise to include in a controller that doesn't need it? doubtful-- depends how much of a hit the before_filter is i guess..
|
|
||||||
#
|
|
||||||
|
|
||||||
class ActionController::Base
|
|
||||||
include Prawnto::ActionController
|
|
||||||
end
|
|
||||||
|
|
||||||
class ActionView::Base
|
|
||||||
include Prawnto::ActionView
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
module Prawnto
|
|
||||||
module ActionController
|
|
||||||
|
|
||||||
DEFAULT_PRAWNTO_OPTIONS = {:inline=>true}
|
|
||||||
|
|
||||||
def self.included(base)
|
|
||||||
base.extend ClassMethods
|
|
||||||
end
|
|
||||||
|
|
||||||
module ClassMethods
|
|
||||||
def prawnto(options)
|
|
||||||
prawn_options, prawnto_options = breakdown_prawnto_options options
|
|
||||||
write_inheritable_hash(:prawn, prawn_options)
|
|
||||||
write_inheritable_hash(:prawnto, prawnto_options)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def breakdown_prawnto_options(options)
|
|
||||||
prawnto_options = options.dup
|
|
||||||
prawn_options = (prawnto_options.delete(:prawn) || {}).dup
|
|
||||||
[prawn_options, prawnto_options]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def prawnto(options)
|
|
||||||
@prawnto_options ||= DEFAULT_PRAWNTO_OPTIONS.dup
|
|
||||||
@prawnto_options.merge! options
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def compute_prawnto_options
|
|
||||||
@prawnto_options ||= DEFAULT_PRAWNTO_OPTIONS.dup
|
|
||||||
@prawnto_options[:prawn] ||= {}
|
|
||||||
@prawnto_options[:prawn].merge!(self.class.read_inheritable_attribute(:prawn) || {}) {|k,o,n| o}
|
|
||||||
@prawnto_options.merge!(self.class.read_inheritable_attribute(:prawnto) || {}) {|k,o,n| o}
|
|
||||||
@prawnto_options
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
module Prawnto
|
|
||||||
module ActionView
|
|
||||||
|
|
||||||
private
|
|
||||||
def _prawnto_compile_setup(dsl_setup = false)
|
|
||||||
compile_support = Prawnto::TemplateHandler::CompileSupport.new(controller)
|
|
||||||
@prawnto_options = compile_support.options
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
module Prawnto
|
|
||||||
module TemplateHandler
|
|
||||||
|
|
||||||
class CompileSupport
|
|
||||||
extend ActiveSupport::Memoizable
|
|
||||||
|
|
||||||
attr_reader :options
|
|
||||||
|
|
||||||
def initialize(controller)
|
|
||||||
@controller = controller
|
|
||||||
@options = pull_options
|
|
||||||
set_headers
|
|
||||||
end
|
|
||||||
|
|
||||||
def pull_options
|
|
||||||
@controller.send :compute_prawnto_options || {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_headers
|
|
||||||
set_pragma
|
|
||||||
set_cache_control
|
|
||||||
set_content_type
|
|
||||||
set_disposition
|
|
||||||
end
|
|
||||||
|
|
||||||
# TODO: kept around from railspdf-- maybe not needed anymore? should check.
|
|
||||||
def ie_request?
|
|
||||||
@controller.request.env['HTTP_USER_AGENT'] =~ /msie/i
|
|
||||||
end
|
|
||||||
memoize :ie_request?
|
|
||||||
|
|
||||||
# added to make ie happy with ssl pdf's (per naisayer)
|
|
||||||
def ssl_request?
|
|
||||||
@controller.request.env['SERVER_PROTOCOL'].downcase == "https"
|
|
||||||
end
|
|
||||||
memoize :ssl_request?
|
|
||||||
|
|
||||||
# TODO: kept around from railspdf-- maybe not needed anymore? should check.
|
|
||||||
def set_pragma
|
|
||||||
if ssl_request? && ie_request?
|
|
||||||
@controller.headers['Pragma'] = 'public' # added to make ie ssl pdfs work (per naisayer)
|
|
||||||
else
|
|
||||||
@controller.headers['Pragma'] ||= ie_request? ? 'no-cache' : ''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# TODO: kept around from railspdf-- maybe not needed anymore? should check.
|
|
||||||
def set_cache_control
|
|
||||||
if ssl_request? && ie_request?
|
|
||||||
@controller.headers['Cache-Control'] = 'maxage=1' # added to make ie ssl pdfs work (per naisayer)
|
|
||||||
else
|
|
||||||
@controller.headers['Cache-Control'] ||= ie_request? ? 'no-cache, must-revalidate' : ''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_content_type
|
|
||||||
@controller.response.content_type ||= Mime::PDF
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_disposition
|
|
||||||
inline = options[:inline] ? 'inline' : 'attachment'
|
|
||||||
filename = options[:filename] ? "filename=#{options[:filename]}" : nil
|
|
||||||
@controller.headers["Content-Disposition"] = [inline,filename].compact.join(';')
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
module Prawnto
|
|
||||||
module TemplateHandlers
|
|
||||||
class Base < ::ActionView::TemplateHandler
|
|
||||||
include ::ActionView::TemplateHandlers::Compilable
|
|
||||||
|
|
||||||
def compile(template)
|
|
||||||
"_prawnto_compile_setup;" +
|
|
||||||
"pdf = Prawn::Document.new(@prawnto_options[:prawn]);" +
|
|
||||||
"#{template.source}\n" +
|
|
||||||
"pdf.render;"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
module Prawnto
|
|
||||||
module TemplateHandlers
|
|
||||||
class Dsl < Base
|
|
||||||
|
|
||||||
def compile(template)
|
|
||||||
"_prawnto_compile_setup(true);" +
|
|
||||||
"pdf = Prawn::Document.new(@prawnto_options[:prawn]);" +
|
|
||||||
"pdf.instance_eval do; #{template.source}\nend;" +
|
|
||||||
"pdf.render;"
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
|
@ -1,64 +0,0 @@
|
||||||
module Prawnto
|
|
||||||
module TemplateHandlers
|
|
||||||
class Raw < Base
|
|
||||||
|
|
||||||
def compile(template)
|
|
||||||
#TODO: what's up with filename here? not used is it?
|
|
||||||
source,filename = massage_template_source(template)
|
|
||||||
"_prawnto_compile_setup;" +
|
|
||||||
# (filename ? "@prawnto_options[:filename] = filename" : "") +
|
|
||||||
source
|
|
||||||
end
|
|
||||||
|
|
||||||
# attr_reader :run_environment
|
|
||||||
|
|
||||||
GENERATE_REGULAR_EXPRESSION = /^\s*Prawn\:\:Document\.generate(\(?)(.*?)(\,(.*))?(\s*\)?\s+do(.*?))$/m
|
|
||||||
RENDER_FILE_REGULAR_EXPRESSION = /(\w+)\.render_file\(?(.*?)\)?\s*$/
|
|
||||||
|
|
||||||
=begin
|
|
||||||
def render(template)
|
|
||||||
setup_run_environment
|
|
||||||
pull_prawnto_options
|
|
||||||
source,filename = massage_template_source(template)
|
|
||||||
@prawnto_options[:filename] = filename if filename
|
|
||||||
build_headers
|
|
||||||
@run_environment.instance_eval(source, template.filename, 0) #run in anonymous class
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def setup_run_environment
|
|
||||||
@run_environment = Object.new
|
|
||||||
end
|
|
||||||
|
|
||||||
=end
|
|
||||||
protected
|
|
||||||
def massage_template_source(template)
|
|
||||||
source = template.source.dup
|
|
||||||
variable_name = '_pdf'
|
|
||||||
filename = nil
|
|
||||||
|
|
||||||
source.gsub! /^(\s*?)(\$LOAD_PATH)/, '\1#\2'
|
|
||||||
source.gsub! /^(\s*?)(require\(?\s*['"]rubygems['"]\s*\)?\s*)$/, '\1#\2'
|
|
||||||
source.gsub! /^(\s*?)(require\(?\s*['"]prawn['"]\s*\)?\s*)$/, '\1#\2'
|
|
||||||
|
|
||||||
if (source =~ GENERATE_REGULAR_EXPRESSION)
|
|
||||||
filename = $2
|
|
||||||
source.sub! GENERATE_REGULAR_EXPRESSION, "#{variable_name} = Prawn::Document.new\\1\\4\\5"
|
|
||||||
elsif (source =~ RENDER_FILE_REGULAR_EXPRESSION)
|
|
||||||
variable_name = $1
|
|
||||||
filename = $2
|
|
||||||
source.sub! RENDER_FILE_REGULAR_EXPRESSION, '#\0'
|
|
||||||
end
|
|
||||||
source.gsub! /^(\s*)(class\s|def\s).*?\n\1end/m do |match|
|
|
||||||
eval "class <<@run_environment; #{match}; end;"
|
|
||||||
"\n" * match.count("\n")
|
|
||||||
end
|
|
||||||
source += "\n[#{variable_name}.render,#{filename}]\n"
|
|
||||||
source
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,4 +0,0 @@
|
||||||
# desc "Explaining what the task does"
|
|
||||||
# task :prawnto do
|
|
||||||
# # Task goes here
|
|
||||||
# end
|
|
|
@ -1,38 +0,0 @@
|
||||||
require 'rubygems'
|
|
||||||
require 'action_controller'
|
|
||||||
require 'action_controller/test_process'
|
|
||||||
require 'action_view'
|
|
||||||
|
|
||||||
require 'test/unit'
|
|
||||||
require File.dirname(__FILE__) + '/../lib/prawnto'
|
|
||||||
|
|
||||||
|
|
||||||
class ActionControllerTest < Test::Unit::TestCase
|
|
||||||
class PrawntoController < ActionController::Base
|
|
||||||
prawnto :inline=>true, :prawn=>{:page_orientation=>:landscape}
|
|
||||||
|
|
||||||
def test
|
|
||||||
prawnto :inline=>false, :prawn=>{:page_size=>'A4'}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_inheritable_options
|
|
||||||
assert_equal({:page_orientation=>:landscape}, PrawntoController.read_inheritable_attribute(:prawn))
|
|
||||||
assert_equal({:inline=>true}, PrawntoController.read_inheritable_attribute(:prawnto))
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_computed_options
|
|
||||||
controller = PrawntoController.new
|
|
||||||
test_process(controller)
|
|
||||||
assert_equal({:inline=>false, :prawn=>{:page_orientation=>:landscape, :page_size=>'A4'}}, controller.send(:compute_prawnto_options))
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
def test_process(controller, action = "test")
|
|
||||||
request = ActionController::TestRequest.new
|
|
||||||
request.action = action
|
|
||||||
controller.process(request, ActionController::TestResponse.new)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
require 'rubygems'
|
|
||||||
require 'test/unit'
|
|
||||||
require File.dirname(__FILE__) + '/template_handler_test_mocks'
|
|
||||||
require File.dirname(__FILE__) + '/../lib/prawnto'
|
|
||||||
#require File.dirname(__FILE__) + '/../init'
|
|
||||||
|
|
||||||
|
|
||||||
#TODO: ruby1.9: pull same testing scheme from Raw once we're on 1.9
|
|
||||||
class BaseTemplateHandlerTest < Test::Unit::TestCase
|
|
||||||
include TemplateHandlerTestMocks
|
|
||||||
|
|
||||||
def setup
|
|
||||||
@view = ActionView.new
|
|
||||||
@handler = Prawnto::TemplateHandlers::Base.new(@view)
|
|
||||||
@controller = @view.controller
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_headers_disposition_inline_and_filename
|
|
||||||
@controller.prawnto :filename=>'xxx.pdf', :inline=>true
|
|
||||||
@handler.pull_prawnto_options
|
|
||||||
@handler.set_disposition
|
|
||||||
assert_equal 'inline;filename=xxx.pdf', @view.headers['Content-Disposition']
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_headers_disposition_attachment_and_filename
|
|
||||||
@controller.prawnto :filename=>'xxx.pdf', :inline=>false
|
|
||||||
@handler.pull_prawnto_options
|
|
||||||
@handler.set_disposition
|
|
||||||
assert_equal 'attachment;filename=xxx.pdf', @view.headers['Content-Disposition']
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_headers_disposition_default
|
|
||||||
@handler.pull_prawnto_options
|
|
||||||
@handler.set_disposition
|
|
||||||
assert_equal 'inline', @view.headers['Content-Disposition']
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
require 'rubygems'
|
|
||||||
require 'test/unit'
|
|
||||||
require File.dirname(__FILE__) + '/template_handler_test_mocks'
|
|
||||||
require File.dirname(__FILE__) + '/../lib/prawnto'
|
|
||||||
#require File.dirname(__FILE__) + '/../init'
|
|
||||||
|
|
||||||
|
|
||||||
#TODO: ruby1.9: pull same testing scheme from Raw once we're on 1.9
|
|
||||||
class DslTemplateHandlerTest < Test::Unit::TestCase
|
|
||||||
include TemplateHandlerTestMocks
|
|
||||||
|
|
||||||
def setup
|
|
||||||
@view = ActionView.new
|
|
||||||
@handler = Prawnto::TemplateHandlers::Dsl.new(@view)
|
|
||||||
@controller = @view.controller
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_prawnto_options_dsl_hash
|
|
||||||
@y = 3231; @x = 5322
|
|
||||||
@controller.prawnto :dsl=> {'x'=>:@x, :y=>'@y'}
|
|
||||||
@handler.pull_prawnto_options
|
|
||||||
source = @handler.build_source_to_establish_locals(Template.new(""))
|
|
||||||
|
|
||||||
assert_equal @x, eval(source + "\nx")
|
|
||||||
assert_equal @y, eval(source + "\ny")
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_prawnto_options_dsl_array
|
|
||||||
@y = 3231; @x = 5322
|
|
||||||
@controller.prawnto :dsl=> ['x', :@y]
|
|
||||||
@handler.pull_prawnto_options
|
|
||||||
source = @handler.build_source_to_establish_locals(Template.new(""))
|
|
||||||
|
|
||||||
assert_equal @x, eval(source + "\nx")
|
|
||||||
assert_equal @y, eval(source + "\ny")
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,163 +0,0 @@
|
||||||
# uncomment and edit below if you want to get off gem version
|
|
||||||
#$LOAD_PATH.unshift '~/cracklabs/vendor/gems/prawn-0.0.0.1/lib/' #to force picup of latest prawn (instead of stable gem)
|
|
||||||
|
|
||||||
require 'rubygems'
|
|
||||||
require 'action_controller'
|
|
||||||
require 'action_view'
|
|
||||||
|
|
||||||
require 'test/unit'
|
|
||||||
require File.dirname(__FILE__) + '/../lib/prawnto'
|
|
||||||
require File.dirname(__FILE__) + '/template_handler_test_mocks'
|
|
||||||
|
|
||||||
|
|
||||||
class RawTemplateHandlerTest < Test::Unit::TestCase
|
|
||||||
include TemplateHandlerTestMocks
|
|
||||||
class ::ApplicationHelper
|
|
||||||
end
|
|
||||||
|
|
||||||
def setup
|
|
||||||
@view = ActionView.new
|
|
||||||
@handler = Prawnto::TemplateHandlers::Raw.new(@view)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def test_massage_template_source_header_comments
|
|
||||||
expected_commented_lines = [0,2,3]
|
|
||||||
source = <<EOS
|
|
||||||
require 'prawn'
|
|
||||||
require 'hello'
|
|
||||||
require "rubygems"
|
|
||||||
$LOAD_PATH.unshift blah blah
|
|
||||||
LOAD_PATH.unshift blah blah
|
|
||||||
EOS
|
|
||||||
output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
|
|
||||||
output_lines.each_with_index do |line, i|
|
|
||||||
method = expected_commented_lines.include?(i) ? :assert_match : :assert_no_match
|
|
||||||
self.send method, /^\s*\#/, line
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_massage_template_source_generate
|
|
||||||
@handler.pull_prawnto_options
|
|
||||||
changed_lines = [0,2,3]
|
|
||||||
source = <<EOS
|
|
||||||
Prawn::Document.generate('hello.pdf') do |pdf|
|
|
||||||
end
|
|
||||||
EOS
|
|
||||||
output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
|
|
||||||
assert_match(/^\s*(\S+)\s*\=\s*Prawn\:\:Document\.new\(?\s*\)?\s*do\s*\|pdf\|/, output_lines.first)
|
|
||||||
variable = $1
|
|
||||||
assert_match(/^\s*\[(\S+)\.render\s*\,\s*\'hello\.pdf\'\s*\]\s*$/, output_lines.last)
|
|
||||||
assert_equal variable, $1
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_massage_template_source_new
|
|
||||||
@handler.pull_prawnto_options
|
|
||||||
unchanged_lines = [0,1,2]
|
|
||||||
source = <<EOS
|
|
||||||
x = Prawn::Document.new do |pdf|
|
|
||||||
text.blah blah blah
|
|
||||||
end
|
|
||||||
x.render_file('hello.pdf')
|
|
||||||
EOS
|
|
||||||
source_lines = source.split("\n")
|
|
||||||
output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
|
|
||||||
output_lines.each_with_index do |line, i|
|
|
||||||
method = unchanged_lines.include?(i) ? :assert_equal : :assert_not_equal
|
|
||||||
self.send method, source_lines[i], line
|
|
||||||
end
|
|
||||||
assert_match(/^\s*\#\s*x\.render\_file\(\'hello.pdf\'\)/, output_lines[3])
|
|
||||||
assert_match(/^\s*\[\s*x\.render\s*\,\s*\'hello\.pdf\'\s*\]\s*$/, output_lines.last)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_massage_template_source_classes_methods
|
|
||||||
source = <<EOS
|
|
||||||
class Foo
|
|
||||||
def initialize
|
|
||||||
@foo = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def bar(*args)
|
|
||||||
if args[0]==true
|
|
||||||
z = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
EOS
|
|
||||||
@handler.send :setup_run_environment
|
|
||||||
output_lines = @handler.send(:massage_template_source, Template.new(source)).split("\n")
|
|
||||||
output_lines.pop
|
|
||||||
output_lines.each {|l| assert_match(/^\s*$/, l)}
|
|
||||||
assert @handler.run_environment.methods(false).include?('bar')
|
|
||||||
assert class <<@handler.run_environment; self; end.constants.include?('Foo')
|
|
||||||
end
|
|
||||||
|
|
||||||
CURRENT_PATH = Pathname('.').realpath
|
|
||||||
PRAWN_PATH = Pathname(Prawn::BASEDIR).realpath
|
|
||||||
REFERENCE_PATH = Pathname('reference_pdfs').realpath
|
|
||||||
INPUT_PATH = PRAWN_PATH + 'examples'
|
|
||||||
IGNORE_LIST = %w(table_bench ruport_formatter page_geometry)
|
|
||||||
INPUTS = INPUT_PATH.children.select {|p| p.extname==".rb" && !IGNORE_LIST.include?(p.basename('.rb').to_s)}
|
|
||||||
|
|
||||||
def self.ensure_reference_pdfs_are_recent
|
|
||||||
head_lines = (INPUT_PATH + "../.git/HEAD").read.split("\n")
|
|
||||||
head_hash = Hash[*head_lines.map {|line| line.split(':').map{|v| v.strip}}.flatten]
|
|
||||||
head_version = (INPUT_PATH + "../.git" + head_hash['ref'])
|
|
||||||
|
|
||||||
REFERENCE_PATH.mkpath
|
|
||||||
current_version = REFERENCE_PATH + 'HEAD'
|
|
||||||
if !current_version.exist? || current_version.read!=head_version.read
|
|
||||||
puts "\n!!!! reference pdfs are determined to be old-- repopulating...\n\n"
|
|
||||||
require 'fileutils'
|
|
||||||
FileUtils.instance_eval do
|
|
||||||
rm REFERENCE_PATH + '*', :force=>true
|
|
||||||
INPUTS.each do |path|
|
|
||||||
pre_brood = INPUT_PATH.children
|
|
||||||
cd INPUT_PATH
|
|
||||||
system("ruby #{path.basename}")
|
|
||||||
post_brood = INPUT_PATH.children
|
|
||||||
new_kids = post_brood - pre_brood
|
|
||||||
new_kids.each {|p| mv p, REFERENCE_PATH + p.basename}
|
|
||||||
cd CURRENT_PATH
|
|
||||||
end
|
|
||||||
cp head_version, current_version
|
|
||||||
end
|
|
||||||
else
|
|
||||||
puts "\n reference pdfs are current-- continuing...\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#TODO: ruby 1.9: uncomment below line when on 1.9
|
|
||||||
#ensure_reference_pdfs_are_recent
|
|
||||||
|
|
||||||
|
|
||||||
def assert_renders_correctly(name, path)
|
|
||||||
input_source = path.read
|
|
||||||
output_source = @handler.compile(Template.new(input_source))
|
|
||||||
value = @view.instance_eval output_source
|
|
||||||
reference = (REFERENCE_PATH + @view.prawnto_options[:filename]).read
|
|
||||||
|
|
||||||
message = "template: #{name}\n"
|
|
||||||
message += ">"*30 + " original template: " + ">"*20 + "\n"
|
|
||||||
message += input_source + "\n"*2
|
|
||||||
message += ">"*30 + " manipulated template: " + ">"*20 + "\n"
|
|
||||||
message += output_source + "\n" + "<"*60 + "\n"
|
|
||||||
|
|
||||||
assert_equal reference, value, message
|
|
||||||
end
|
|
||||||
|
|
||||||
#!!! Can't actually verify pdf equality until ruby 1.9
|
|
||||||
# (cuz hash orders are messed up otherwise and no other way to test equality at the moment)
|
|
||||||
INPUTS.each do |path|
|
|
||||||
name = path.basename('.rb')
|
|
||||||
define_method "test_template_should_render_correctly [template: #{name}] " do
|
|
||||||
# assert_renders_correctly name, path
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
require 'rubygems'
|
|
||||||
require File.dirname(__FILE__) + '/../lib/prawnto'
|
|
||||||
|
|
||||||
module TemplateHandlerTestMocks
|
|
||||||
|
|
||||||
class Template
|
|
||||||
attr_reader :source, :locals, :filename
|
|
||||||
|
|
||||||
def initialize(source, locals={})
|
|
||||||
@source = source
|
|
||||||
@locals = locals
|
|
||||||
@filename = "blah.pdf"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
class Response
|
|
||||||
def initialize
|
|
||||||
@headers = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def headers
|
|
||||||
@headers
|
|
||||||
end
|
|
||||||
|
|
||||||
def content_type=(value)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Request
|
|
||||||
def env
|
|
||||||
{}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class ActionController
|
|
||||||
|
|
||||||
include Prawnto::ActionController
|
|
||||||
|
|
||||||
def response
|
|
||||||
@response ||= Response.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def request
|
|
||||||
@request ||= Request.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def headers
|
|
||||||
response.headers
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class ActionView
|
|
||||||
def controller
|
|
||||||
@controller ||= ActionController.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def response
|
|
||||||
controller.response
|
|
||||||
end
|
|
||||||
|
|
||||||
def request
|
|
||||||
controller.request
|
|
||||||
end
|
|
||||||
|
|
||||||
def headers
|
|
||||||
controller.headers
|
|
||||||
end
|
|
||||||
|
|
||||||
def prawnto_options
|
|
||||||
controller.get_instance_variable(:@prawnto_options)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
Loading…
Reference in a new issue