prawnto_2 0.1.2 → 0.2.0.beta

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.
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 .