prawnto_2 0.1.2 → 0.2.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +5 -1
  3. data/README.rdoc +3 -4
  4. data/Rakefile +3 -3
  5. data/lib/prawnto/action_controller_mixin.rb +47 -7
  6. data/lib/prawnto/action_view_mixins/action_view_mixin.rb +15 -0
  7. data/lib/prawnto/action_view_mixins/compile_support.rb +74 -0
  8. data/lib/prawnto/railtie.rb +7 -2
  9. data/lib/prawnto/template_handlers/base.rb +2 -0
  10. data/lib/prawnto.rb +6 -26
  11. data/prawnto.gemspec +2 -2
  12. data/script/rails +6 -0
  13. data/spec/assets/hello_world.pdf +69 -0
  14. data/spec/dummy/.rspec +1 -0
  15. data/spec/dummy/.sass-cache/387f7b3fde13680ae5a79212c089f81d2d418f1e/application.css.scssc +0 -0
  16. data/spec/dummy/.sass-cache/6a18c557e07dbc07a14d0809be02d4f21f1dbe91/_shared.css.scssc +0 -0
  17. data/spec/dummy/.sass-cache/6a18c557e07dbc07a14d0809be02d4f21f1dbe91/ab_tests.css.scssc +0 -0
  18. data/spec/dummy/.sass-cache/6a18c557e07dbc07a14d0809be02d4f21f1dbe91/application.css.scssc +0 -0
  19. data/spec/dummy/.sass-cache/6a18c557e07dbc07a14d0809be02d4f21f1dbe91/metrics.css.scssc +0 -0
  20. data/spec/dummy/.sass-cache/6a18c557e07dbc07a14d0809be02d4f21f1dbe91/reports.css.scssc +0 -0
  21. data/spec/dummy/Rakefile +7 -0
  22. data/spec/dummy/app/assets/javascripts/application.js +10 -0
  23. data/spec/dummy/app/assets/javascripts/highcharts.js +170 -0
  24. data/spec/dummy/app/assets/stylesheets/application.css.scss +78 -0
  25. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  26. data/spec/dummy/app/controllers/test_controller.rb +7 -0
  27. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  28. data/spec/dummy/app/mailers/.gitkeep +0 -0
  29. data/spec/dummy/app/models/.gitkeep +0 -0
  30. data/spec/dummy/app/views/layouts/application.html.erb +23 -0
  31. data/spec/dummy/app/views/test/default_render.pdf.prawn +1 -0
  32. data/spec/dummy/config/application.rb +49 -0
  33. data/spec/dummy/config/boot.rb +10 -0
  34. data/spec/dummy/config/environment.rb +5 -0
  35. data/spec/dummy/config/environments/development.rb +30 -0
  36. data/spec/dummy/config/environments/production.rb +60 -0
  37. data/spec/dummy/config/environments/test.rb +39 -0
  38. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  39. data/spec/dummy/config/initializers/inflections.rb +10 -0
  40. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  41. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  42. data/spec/dummy/config/initializers/session_store.rb +8 -0
  43. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  44. data/spec/dummy/config/locales/en.yml +5 -0
  45. data/spec/dummy/config/routes.rb +4 -0
  46. data/spec/dummy/config.ru +4 -0
  47. data/spec/dummy/lib/assets/.gitkeep +0 -0
  48. data/spec/dummy/log/.gitkeep +0 -0
  49. data/spec/dummy/public/404.html +26 -0
  50. data/spec/dummy/public/422.html +26 -0
  51. data/spec/dummy/public/500.html +26 -0
  52. data/spec/dummy/public/favicon.ico +0 -0
  53. data/spec/dummy/script/delayed_job +5 -0
  54. data/spec/dummy/script/rails +6 -0
  55. data/spec/integrations/test_controller_spec.rb +17 -0
  56. data/spec/spec_helper.rb +29 -0
  57. data/{test → spec/support}/template_handler_test_mocks.rb +0 -0
  58. data/spec/units/action_controller_spec.rb +48 -0
  59. data/spec/units/compile_support_spec.rb +50 -0
  60. metadata +104 -20
  61. data/lib/prawnto/action_controller_mixins/header_methods.rb +0 -68
  62. data/lib/prawnto/action_controller_mixins/options_manager.rb +0 -56
  63. data/lib/prawnto/action_view_mixin.rb +0 -13
  64. data/test/action_controller_test.rb +0 -37
  65. data/test/base_template_handler_test.rb +0 -34
  66. data/test/dsl_template_handler_test.rb +0 -37
  67. data/test/test_helper.rb +0 -17
data/.gitignore CHANGED
@@ -2,3 +2,6 @@
2
2
  **/*.swp
3
3
  *.gem
4
4
  rdoc/
5
+ Gemfile.lock
6
+ spec/dummy/tmp
7
+ spec/dummy/log
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in my_project.gemspec
4
- gemspec
4
+ gemspec
5
+
6
+ gem "spork", "~> 0.9.0.rc9"
7
+ gem "rspec-rails"
8
+ gem "mocha"
data/README.rdoc CHANGED
@@ -1,8 +1,8 @@
1
1
  = Prawnto (prawnto_2)
2
2
 
3
- A rails plugin providing templating abilities for generating pdf files leveraging the new kick-ass prawn library (http://prawn.majesticseacreature.com/)
3
+ A rails plugin providing templating abilities for generating pdf files leveraging the kick-ass prawn library (http://prawn.majesticseacreature.com/)
4
4
 
5
- This is my attempt to merge the various forks of the prawnto gem, and <b>update it for Rails 3.1</b>. I want to thank the many developers who's code I collected together for the gem. Main credit goes to the developer of the initial Prawnto plugin - smecsia.
5
+ This is my attempt to merge the various forks of the prawnto gem, and <b>update it for Rails 3.1+</b>. I want to thank the many developers who's code I collected together for the gem. Main credit goes to the developer of the initial Prawnto plugin - smecsia.
6
6
 
7
7
  <b>Note:</b> It has not been tested with earlier versions of Rails.
8
8
 
@@ -10,7 +10,7 @@ This is my attempt to merge the various forks of the prawnto gem, and <b>update
10
10
 
11
11
  In your <code>Gemfile</code>:
12
12
 
13
- gem "prawnto_2", :require => "prawnto"
13
+ gem "prawnto_2", "0.2.0.beta", :require => "prawnto"
14
14
 
15
15
  Then run:
16
16
 
@@ -30,7 +30,6 @@ In the meantime you can read the original (slightly out of date) documentation/d
30
30
 
31
31
  While I can't promise the most speedy response, I do plan to continue to maintain this gem. Please feel free to report any issues, provide feedback, or make suggestions on the {Issue Tracker}[http://github.com/forrest/prawnto/issues]
32
32
 
33
-
34
33
  ---
35
34
 
36
35
 
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
- require 'rdoc/task'
4
-
3
+ require 'rdoc/task'
4
+ require 'rubygems/package_task'
5
5
 
6
6
  desc 'Default: run unit tests.'
7
7
  task :default => :test
@@ -20,4 +20,4 @@ Rake::TestTask.new(:test) do |t|
20
20
  t.libs << 'lib'
21
21
  t.pattern = 'test/*_test.rb'
22
22
  # t.verbose = true
23
- end
23
+ end
@@ -1,15 +1,55 @@
1
- require "prawnto/action_controller_mixins/options_manager"
2
- require "prawnto/action_controller_mixins/header_methods"
3
-
4
1
  module Prawnto
5
2
  module ActionControllerMixin
3
+ DEFAULT_PRAWNTO_OPTIONS = {:inline=>true}
4
+
6
5
  def self.included(base)
7
- base.class_eval do
8
- include HeaderMethods
9
- include OptionsManager
10
- end
6
+ base.send :attr_reader, :prawnto_options
7
+ base.class_attribute :prawn_hash, :prawnto_hash
8
+ base.prawn_hash = {}
9
+ base.prawnto_hash = {}
10
+ base.extend ClassMethods
11
11
  end
12
+
13
+ module ClassMethods
12
14
 
15
+ # This is the class setter. It lets you set default options for all prawn actions within a controller.
16
+ def prawnto(options)
17
+ prawn_options, prawnto_options = breakdown_prawnto_options options
18
+ self.prawn_hash = prawn_options
19
+ self.prawnto_hash = DEFAULT_PRAWNTO_OPTIONS.dup.merge(prawnto_options)
20
+ end
21
+
22
+ private
23
+
24
+ # splits the :prawn key out into a seperate hash
25
+ def breakdown_prawnto_options(options)
26
+ prawnto_options = options.dup
27
+ prawn_options = (prawnto_options.delete(:prawn) || {}).dup
28
+ [prawn_options, prawnto_options]
29
+ end
30
+ end
31
+
32
+ # Sets the prawn options. Use in the controller method.
33
+ #
34
+ # respond_to {|format|
35
+ # format.pdf { prawnto(:page_orientation => :landscape) }
36
+ # }
37
+ def prawnto(options)
38
+ @prawnto_options ||= {}
39
+ @prawnto_options.merge! options
40
+ end
41
+
42
+ private
43
+
44
+ # this merges the default prawnto options, the controller prawnto options, and the instance prawnto options, and the splits out then joins in the :prawn options.
45
+ # This is called when setting the header information just before render.
46
+ def compute_prawnto_options
47
+ @prawnto_options ||= DEFAULT_PRAWNTO_OPTIONS.dup
48
+ @prawnto_options[:prawn] ||= {}
49
+ @prawnto_options[:prawn].merge!(self.class.prawn_hash || {}) {|k,o,n| o}
50
+ @prawnto_options.merge!(self.class.prawnto_hash || {}) {|k,o,n| o}
51
+ @prawnto_options
52
+ end
13
53
  end
14
54
  end
15
55
 
@@ -0,0 +1,15 @@
1
+ module Prawnto
2
+ module ActionViewMixins
3
+ module ActionViewMixin
4
+
5
+ private
6
+
7
+ def _prawnto_compile_setup
8
+ compile_support = CompileSupport.new(controller)
9
+ @prawnto_options = compile_support.options
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,74 @@
1
+ module Prawnto
2
+ module ActionViewMixins
3
+ class CompileSupport
4
+ attr_reader :options
5
+
6
+ def initialize(controller)
7
+ @controller = controller
8
+ @options = pull_options
9
+ set_headers
10
+ end
11
+
12
+ def pull_options
13
+ @controller.send :compute_prawnto_options || {}
14
+ end
15
+
16
+ def set_headers
17
+ # unless defined?(ActionMailer) && defined?(ActionMailer::Base) && self.is_a?(ActionMailer::Base)
18
+ set_pragma
19
+ set_cache_control
20
+ set_content_type
21
+ set_disposition
22
+ set_other_headers_for_ie_ssl
23
+ # end
24
+ end
25
+
26
+ def ie_request?
27
+ @controller.request.env['HTTP_USER_AGENT'] =~ /msie/i
28
+ end
29
+
30
+ def ssl_request?
31
+ @controller.request.ssl?
32
+ end
33
+
34
+ def set_other_headers_for_ie_ssl
35
+ return unless ssl_request? && ie_request?
36
+ headers['Content-Description'] = 'File Transfer'
37
+ headers['Content-Transfer-Encoding'] = 'binary'
38
+ headers['Expires'] = '0'
39
+ end
40
+
41
+ # TODO: kept around from railspdf-- maybe not needed anymore? should check.
42
+ def set_pragma
43
+ if ssl_request? && ie_request?
44
+ @controller.headers['Pragma'] = 'public' # added to make ie ssl pdfs work (per naisayer)
45
+ else
46
+ @controller.headers['Pragma'] ||= ie_request? ? 'no-cache' : ''
47
+ end
48
+ end
49
+
50
+ # TODO: kept around from railspdf-- maybe not needed anymore? should check.
51
+ def set_cache_control
52
+ if ssl_request? && ie_request?
53
+ @controller.headers['Cache-Control'] = 'maxage=1' # added to make ie ssl pdfs work (per naisayer)
54
+ else
55
+ @controller.headers['Cache-Control'] ||= ie_request? ? 'no-cache, must-revalidate' : ''
56
+ end
57
+ end
58
+
59
+ def set_content_type
60
+ @controller.response.content_type ||= Mime::PDF
61
+ end
62
+
63
+ def set_disposition
64
+ inline = options[:inline] ? 'inline' : 'attachment'
65
+ filename = options[:filename] ? "filename=\"#{options[:filename]}\"" : nil
66
+ @controller.headers["Content-Disposition"] = [inline,filename].compact.join(';')
67
+ end
68
+
69
+ end
70
+ end
71
+ end
72
+
73
+
74
+
@@ -2,13 +2,18 @@ module Prawnto
2
2
  class Railtie < Rails::Railtie
3
3
 
4
4
  # This runs once during initialization.
5
+ # Register the MimeType and the two template handlers.
5
6
  initializer "prawnto.register_handlers" do
6
- Prawnto.on_init
7
+ Mime::Type.register("application/pdf", :pdf) unless Mime::Type.lookup_by_extension(:pdf)
8
+ ActionView::Template.register_template_handler 'prawn', Prawnto::TemplateHandlers::Base
9
+ ActionView::Template.register_template_handler 'prawn_dsl', Prawnto::TemplateHandlers::Dsl
7
10
  end
8
11
 
9
12
  # This will run it once in production and before each load in development.
13
+ # Include the mixins for ActionController and ActionView.
10
14
  config.to_prepare do
11
- Prawnto.on_load
15
+ ActionController::Base.send :include, Prawnto::ActionControllerMixin
16
+ ActionView::Base.send :include, Prawnto::ActionViewMixins::ActionViewMixin
12
17
  end
13
18
 
14
19
  end
@@ -1,3 +1,5 @@
1
+ require "prawn"
2
+
1
3
  module Prawnto
2
4
  module TemplateHandlers
3
5
  class Base
data/lib/prawnto.rb CHANGED
@@ -4,35 +4,15 @@ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname
4
4
  require 'prawnto/railtie' if defined?(Rails)
5
5
 
6
6
  module Prawnto
7
-
8
7
  autoload :ActionControllerMixin, 'prawnto/action_controller_mixin'
9
- autoload :ActionViewMixin, 'prawnto/action_view_mixin'
8
+
9
+ module ActionViewMixins
10
+ autoload :ActionViewMixin, 'prawnto/action_view_mixins/action_view_mixin'
11
+ autoload :CompileSupport, 'prawnto/action_view_mixins/compile_support'
12
+ end
13
+
10
14
  module TemplateHandlers
11
15
  autoload :Base, 'prawnto/template_handlers/base'
12
16
  autoload :Dsl, 'prawnto/template_handlers/dsl'
13
17
  end
14
-
15
- class << self
16
-
17
- # Register the MimeType and the two template handlers.
18
- def on_init
19
- Mime::Type.register "application/pdf", :pdf unless defined?(Mime::PDF)
20
- ActionView::Template.register_template_handler 'prawn', Prawnto::TemplateHandlers::Base
21
- ActionView::Template.register_template_handler 'prawn_dsl', Prawnto::TemplateHandlers::Dsl
22
- end
23
-
24
- # Include the mixins for ActionController and ActionView.
25
- def on_load
26
- ActionController::Base.send :include, Prawnto::ActionControllerMixin
27
- ActionView::Base.send :include, Prawnto::ActionViewMixin
28
- end
29
-
30
- # Runs the registration and include methods. This is used for testing only as railtie.rb usually runs these individually.
31
- def init_both
32
- on_init
33
- on_load
34
- end
35
-
36
- end
37
-
38
18
  end
data/prawnto.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "prawnto_2"
4
- s.version = '0.1.2'
4
+ s.version = '0.2.0.beta'
5
5
  s.author = ["Forrest"]
6
6
  s.email = ["development@forrestzeisler.com"]
7
7
  s.date = Time.now.utc.strftime("%Y-%m-%d")
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.required_rubygems_version = ">= 1.3.6"
16
16
  s.platform = Gem::Platform::RUBY
17
- s.add_dependency('rails', '>=3.1')
17
+ s.add_dependency('rails', '>= 3.1')
18
18
  s.add_dependency('prawn', '>= 0.12.0')
19
19
 
20
20
  s.files = `git ls-files`.split("\n")
data/script/rails ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ #!/usr/bin/env ruby
3
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
4
+
5
+ ENGINE_PATH = File.expand_path('../..', __FILE__)
6
+ load File.expand_path('../../spec/dummy/script/rails', __FILE__)
@@ -0,0 +1,69 @@
1
+ %PDF-1.3
2
+ %����
3
+ 1 0 obj
4
+ << /Creator <feff0050007200610077006e>
5
+ /Producer <feff0050007200610077006e>
6
+ >>
7
+ endobj
8
+ 2 0 obj
9
+ << /Type /Catalog
10
+ /Pages 3 0 R
11
+ >>
12
+ endobj
13
+ 3 0 obj
14
+ << /Type /Pages
15
+ /Count 1
16
+ /Kids [5 0 R]
17
+ >>
18
+ endobj
19
+ 4 0 obj
20
+ << /Length 83
21
+ >>
22
+ stream
23
+ q
24
+
25
+ BT
26
+ 36 747.384 Td
27
+ /F1.0 12 Tf
28
+ [<48656c6c6f2057> 30 <6f72> -15 <6c6421>] TJ
29
+ ET
30
+
31
+ Q
32
+
33
+ endstream
34
+ endobj
35
+ 5 0 obj
36
+ << /Type /Page
37
+ /Parent 3 0 R
38
+ /MediaBox [0 0 612.0 792.0]
39
+ /Contents 4 0 R
40
+ /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
41
+ /Font << /F1.0 6 0 R
42
+ >>
43
+ >>
44
+ >>
45
+ endobj
46
+ 6 0 obj
47
+ << /Type /Font
48
+ /Subtype /Type1
49
+ /BaseFont /Helvetica
50
+ /Encoding /WinAnsiEncoding
51
+ >>
52
+ endobj
53
+ xref
54
+ 0 7
55
+ 0000000000 65535 f
56
+ 0000000015 00000 n
57
+ 0000000109 00000 n
58
+ 0000000158 00000 n
59
+ 0000000215 00000 n
60
+ 0000000348 00000 n
61
+ 0000000526 00000 n
62
+ trailer
63
+ << /Size 7
64
+ /Root 2 0 R
65
+ /Info 1 0 R
66
+ >>
67
+ startxref
68
+ 623
69
+ %%EOF
data/spec/dummy/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,10 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.
6
+ //
7
+ //= require jquery
8
+ //= require jquery-ui
9
+ //= require jquery_ujs
10
+ //= require_tree .