crayfish 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/MIT-LICENSE +1 -1
 - data/README.md +52 -60
 - data/lib/crayfish/action_controller.rb +1 -1
 - data/lib/crayfish/action_view.rb +19 -45
 - data/lib/crayfish/html.rb +233 -0
 - data/lib/crayfish/rails/base.rb +5 -3
 - data/lib/crayfish/rails/pdf.rb +1 -1
 - data/lib/crayfish/version.rb +23 -1
 - data/lib/crayfish.rb +2 -6
 - data/test/crayfish_test.rb +1 -1
 - data/test/test_helper.rb +1 -1
 - metadata +24 -17
 - data/lib/crayfish/elements/cell_helper.rb +0 -70
 - data/lib/crayfish/elements/container.rb +0 -64
 - data/lib/crayfish/elements/form.rb +0 -161
 - data/lib/crayfish/elements/row.rb +0 -70
 - data/lib/crayfish/elements/table.rb +0 -51
 
    
        data/MIT-LICENSE
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,6 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Crayfish
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            PDF templating for Rails.
         
     | 
| 
      
 4 
     | 
    
         
            +
            Crayfish basically translates HTML to PDF.
         
     | 
| 
      
 5 
     | 
    
         
            +
            The idea is that you can use your existing view helpers in your PDF's.
         
     | 
| 
      
 6 
     | 
    
         
            +
            The HTML support is quite limited at the moment.
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            You can also use the prawn API in your templates.
         
     | 
| 
       4 
9 
     | 
    
         | 
| 
       5 
10 
     | 
    
         
             
            ## Installation
         
     | 
| 
       6 
11 
     | 
    
         | 
| 
         @@ -17,70 +22,57 @@ gem 'prawn', :git => 'git://github.com/teknobingo/prawn.git', :branch => 'master 
     | 
|
| 
       17 
22 
     | 
    
         | 
| 
       18 
23 
     | 
    
         
             
            ## Example (say app/views/main/show.pdf.crayfish):
         
     | 
| 
       19 
24 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            ```  
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
               
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
               
     | 
| 
       35 
     | 
    
         
            -
               
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
               
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
               
     | 
| 
       53 
     | 
    
         
            -
               
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
               
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
              <% end -%>
         
     | 
| 
       65 
     | 
    
         
            -
              <% f.row do |r| %>
         
     | 
| 
       66 
     | 
    
         
            -
                <% r.label 'Cash';  r.span; r.text '    ' %>
         
     | 
| 
       67 
     | 
    
         
            -
              <% end -%>
         
     | 
| 
       68 
     | 
    
         
            -
              <% f.row do |r| %>
         
     | 
| 
       69 
     | 
    
         
            -
                <% r.label 'Organizer';          r.span; r.text 'Crayfish' %>
         
     | 
| 
       70 
     | 
    
         
            -
              <% end -%>
         
     | 
| 
       71 
     | 
    
         
            -
              <% f.row_for @location do |r| %>
         
     | 
| 
       72 
     | 
    
         
            -
                <% r.field :label => 'Location' , :value => @location[:name] %>
         
     | 
| 
       73 
     | 
    
         
            -
                <% r.field :zip_code %>
         
     | 
| 
       74 
     | 
    
         
            -
                <% r.field :city %>
         
     | 
| 
       75 
     | 
    
         
            -
              <% end -%>
         
     | 
| 
       76 
     | 
    
         
            -
            <% end -%>
         
     | 
| 
      
 25 
     | 
    
         
            +
            ``` html
         
     | 
| 
      
 26 
     | 
    
         
            +
            <table>
         
     | 
| 
      
 27 
     | 
    
         
            +
             <tr>
         
     | 
| 
      
 28 
     | 
    
         
            +
              <th colspan="6" align="center" style="background-color:#aaffaa">Time Table</th>
         
     | 
| 
      
 29 
     | 
    
         
            +
             </tr>
         
     | 
| 
      
 30 
     | 
    
         
            +
             <tr>
         
     | 
| 
      
 31 
     | 
    
         
            +
              <th rowspan="6" style="background-color:#aaffaa">Hours</th>
         
     | 
| 
      
 32 
     | 
    
         
            +
              <th style="background-color:#ffaaaa">Mon</th>
         
     | 
| 
      
 33 
     | 
    
         
            +
              <th style="background-color:#ffaaaa">Tue</th>
         
     | 
| 
      
 34 
     | 
    
         
            +
              <th style="background-color:#ffaaaa">Wed</th>
         
     | 
| 
      
 35 
     | 
    
         
            +
              <th style="background-color:#ffaaaa">Thu</th>
         
     | 
| 
      
 36 
     | 
    
         
            +
              <th style="background-color:#ffaaaa">Fri</th>
         
     | 
| 
      
 37 
     | 
    
         
            +
             </tr>
         
     | 
| 
      
 38 
     | 
    
         
            +
             <tr>
         
     | 
| 
      
 39 
     | 
    
         
            +
              <td>Science</td>
         
     | 
| 
      
 40 
     | 
    
         
            +
              <td>Maths</td>
         
     | 
| 
      
 41 
     | 
    
         
            +
              <td>Science</td>
         
     | 
| 
      
 42 
     | 
    
         
            +
              <td>Maths</td>
         
     | 
| 
      
 43 
     | 
    
         
            +
              <td>Arts</td>
         
     | 
| 
      
 44 
     | 
    
         
            +
             </tr>
         
     | 
| 
      
 45 
     | 
    
         
            +
             <tr>
         
     | 
| 
      
 46 
     | 
    
         
            +
              <td>Social</td>
         
     | 
| 
      
 47 
     | 
    
         
            +
              <td>History</td>
         
     | 
| 
      
 48 
     | 
    
         
            +
              <td>English</td>
         
     | 
| 
      
 49 
     | 
    
         
            +
              <td>Social</td>
         
     | 
| 
      
 50 
     | 
    
         
            +
              <td>Sports</td>
         
     | 
| 
      
 51 
     | 
    
         
            +
             </tr>
         
     | 
| 
      
 52 
     | 
    
         
            +
             <tr>
         
     | 
| 
      
 53 
     | 
    
         
            +
              <th colspan="5" align="center">Lunch</th>
         
     | 
| 
      
 54 
     | 
    
         
            +
             </tr>
         
     | 
| 
      
 55 
     | 
    
         
            +
             <tr>
         
     | 
| 
      
 56 
     | 
    
         
            +
              <td>Science</td>
         
     | 
| 
      
 57 
     | 
    
         
            +
              <td>Maths</td>
         
     | 
| 
      
 58 
     | 
    
         
            +
              <td>Science</td>
         
     | 
| 
      
 59 
     | 
    
         
            +
              <td>Maths</td>
         
     | 
| 
      
 60 
     | 
    
         
            +
              <td rowspan="2">Project</td>
         
     | 
| 
      
 61 
     | 
    
         
            +
             </tr>
         
     | 
| 
      
 62 
     | 
    
         
            +
             <tr>
         
     | 
| 
      
 63 
     | 
    
         
            +
              <td>Social</td>
         
     | 
| 
      
 64 
     | 
    
         
            +
              <td>History</Td>
         
     | 
| 
      
 65 
     | 
    
         
            +
              <td>English</td>
         
     | 
| 
      
 66 
     | 
    
         
            +
              <td>Social</td>
         
     | 
| 
      
 67 
     | 
    
         
            +
             </tr>
         
     | 
| 
      
 68 
     | 
    
         
            +
            </table>
         
     | 
| 
       77 
69 
     | 
    
         
             
            ```
         
     | 
| 
       78 
70 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
            Which gives:
         
     | 
| 
      
 71 
     | 
    
         
            +
            Which gives you a single paged PDF looking like this:
         
     | 
| 
       80 
72 
     | 
    
         | 
| 
       81 
73 
     | 
    
         
             
             
         
     | 
| 
       82 
74 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
            You  
     | 
| 
      
 75 
     | 
    
         
            +
            You can also use Prawn directly:
         
     | 
| 
       84 
76 
     | 
    
         | 
| 
       85 
77 
     | 
    
         
             
            ``` Ruby
         
     | 
| 
       86 
78 
     | 
    
         
             
            <% table [
         
     | 
| 
         @@ -105,7 +97,7 @@ You could also use Prawn directly if you want to: 
     | 
|
| 
       105 
97 
     | 
    
         | 
| 
       106 
98 
     | 
    
         
             
            (The MIT License)
         
     | 
| 
       107 
99 
     | 
    
         | 
| 
       108 
     | 
    
         
            -
            Copyright (c) 2012  
     | 
| 
      
 100 
     | 
    
         
            +
            Copyright (c) 2012 Bingoentreprenøren AS  
         
     | 
| 
       109 
101 
     | 
    
         
             
            Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       110 
102 
     | 
    
         | 
| 
       111 
103 
     | 
    
         
             
            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:
         
     | 
    
        data/lib/crayfish/action_view.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012  
     | 
| 
      
 1 
     | 
    
         
            +
            # Copyright (c) 2012 Bingoentreprenøren AS
         
     | 
| 
       2 
2 
     | 
    
         
             
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
         @@ -20,15 +20,16 @@ 
     | 
|
| 
       20 
20 
     | 
    
         
             
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       21 
21 
     | 
    
         
             
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            require 'erubis'
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
23 
     | 
    
         
             
            module Crayfish
         
     | 
| 
       26 
24 
     | 
    
         
             
              module ActionView
         
     | 
| 
       27 
25 
     | 
    
         | 
| 
       28 
26 
     | 
    
         
             
                def render *args
         
     | 
| 
       29 
27 
     | 
    
         
             
                  if @branch_level
         
     | 
| 
       30 
28 
     | 
    
         
             
                    @branch_level += 1
         
     | 
| 
      
 29 
     | 
    
         
            +
                    stack = @output_buffer
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @output_buffer = ::ActionView::OutputBuffer.new
         
     | 
| 
       31 
31 
     | 
    
         
             
                    super
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @output_buffer = stack
         
     | 
| 
       32 
33 
     | 
    
         
             
                    @branch_level -= 1
         
     | 
| 
       33 
34 
     | 
    
         
             
                  else
         
     | 
| 
       34 
35 
     | 
    
         
             
                    super
         
     | 
| 
         @@ -45,23 +46,27 @@ module Crayfish 
     | 
|
| 
       45 
46 
     | 
    
         
             
                    end
         
     | 
| 
       46 
47 
     | 
    
         
             
                  end
         
     | 
| 
       47 
48 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                  def  
     | 
| 
      
 49 
     | 
    
         
            +
                  def output_buffer
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @output_buffer ||= ::ActionView::OutputBuffer.new
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  def paint template,raw=false
         
     | 
| 
       49 
54 
     | 
    
         
             
                    begin
         
     | 
| 
       50 
     | 
    
         
            -
                       
     | 
| 
       51 
     | 
    
         
            -
                       
     | 
| 
      
 55 
     | 
    
         
            +
                      html = raw ? template : eval(template)
         
     | 
| 
      
 56 
     | 
    
         
            +
                      CrayHtml.new(self,@pdf).draw(html)
         
     | 
| 
       52 
57 
     | 
    
         
             
                    rescue => e
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
      
 58 
     | 
    
         
            +
                       no = 0
         
     | 
| 
      
 59 
     | 
    
         
            +
                       ::Rails.logger.debug template.split("\n").map{ |line| no+=1; "#{no}: #{line}" }.join("\n")
         
     | 
| 
      
 60 
     | 
    
         
            +
                       ::Rails.logger.debug e.message
         
     | 
| 
      
 61 
     | 
    
         
            +
                       ::Rails.logger.debug e.backtrace.join("\n")
         
     | 
| 
       57 
62 
     | 
    
         
             
                    end
         
     | 
| 
       58 
     | 
    
         
            -
                    @pdf.render if @branch_level == 0
         
     | 
| 
      
 63 
     | 
    
         
            +
                    @pdf.render if @branch_level == 0 and !raw
         
     | 
| 
       59 
64 
     | 
    
         
             
                  end
         
     | 
| 
       60 
65 
     | 
    
         | 
| 
       61 
66 
     | 
    
         
             
                  def flush paint=true
         
     | 
| 
       62 
     | 
    
         
            -
                    buf = @ 
     | 
| 
       63 
     | 
    
         
            -
                     
     | 
| 
       64 
     | 
    
         
            -
                    @ 
     | 
| 
      
 67 
     | 
    
         
            +
                    buf = @output_buffer.to_s || ''
         
     | 
| 
      
 68 
     | 
    
         
            +
                    paint(buf,true) if paint
         
     | 
| 
      
 69 
     | 
    
         
            +
                    @output_buffer = ::ActionView::OutputBuffer.new
         
     | 
| 
       65 
70 
     | 
    
         
             
                    buf
         
     | 
| 
       66 
71 
     | 
    
         
             
                  end
         
     | 
| 
       67 
72 
     | 
    
         | 
| 
         @@ -74,37 +79,6 @@ module Crayfish 
     | 
|
| 
       74 
79 
     | 
    
         
             
                    end
         
     | 
| 
       75 
80 
     | 
    
         
             
                  end
         
     | 
| 
       76 
81 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
                  def form *args, &block
         
     | 
| 
       78 
     | 
    
         
            -
                    flush
         
     | 
| 
       79 
     | 
    
         
            -
                    if block_given?
         
     | 
| 
       80 
     | 
    
         
            -
                      pdf = CrayForm.new(self,@pdf)
         
     | 
| 
       81 
     | 
    
         
            -
                      block.call pdf
         
     | 
| 
       82 
     | 
    
         
            -
                      pdf.draw @_out_buf
         
     | 
| 
       83 
     | 
    
         
            -
                    else
         
     | 
| 
       84 
     | 
    
         
            -
                      form    = args[0] || ''
         
     | 
| 
       85 
     | 
    
         
            -
                      options = args[1] || {}
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                      pdf = CrayForm.new(self,@pdf,options.merge(:span => /\|/, :element => /%c{[^}]*}/))
         
     | 
| 
       88 
     | 
    
         
            -
                      pdf.heading options[:title] if options[:title]
         
     | 
| 
       89 
     | 
    
         
            -
                      pdf.send(:form_body,form,options)
         
     | 
| 
       90 
     | 
    
         
            -
                      pdf.draw @_out_buf
         
     | 
| 
       91 
     | 
    
         
            -
                    end
         
     | 
| 
       92 
     | 
    
         
            -
                    @_out_buf = ''
         
     | 
| 
       93 
     | 
    
         
            -
                  end
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                  def table *args, &block
         
     | 
| 
       96 
     | 
    
         
            -
                    if block_given?
         
     | 
| 
       97 
     | 
    
         
            -
                      flush
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                      pdf = CrayTable.new(self,@pdf)
         
     | 
| 
       100 
     | 
    
         
            -
                      block.call pdf
         
     | 
| 
       101 
     | 
    
         
            -
                      pdf.draw @_out_buf
         
     | 
| 
       102 
     | 
    
         
            -
                    else
         
     | 
| 
       103 
     | 
    
         
            -
                      flush
         
     | 
| 
       104 
     | 
    
         
            -
                      @pdf.table *args
         
     | 
| 
       105 
     | 
    
         
            -
                    end
         
     | 
| 
       106 
     | 
    
         
            -
                  end
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
82 
     | 
    
         
             
              end
         
     | 
| 
       109 
83 
     | 
    
         
             
            end
         
     | 
| 
       110 
84 
     | 
    
         | 
| 
         @@ -0,0 +1,233 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Copyright (c) 2012 Bingoentreprenøren AS
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 5 
     | 
    
         
            +
            # a copy of this software and associated documentation files (the
         
     | 
| 
      
 6 
     | 
    
         
            +
            # "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 7 
     | 
    
         
            +
            # without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 8 
     | 
    
         
            +
            # distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 9 
     | 
    
         
            +
            # permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 10 
     | 
    
         
            +
            # the following conditions:
         
     | 
| 
      
 11 
     | 
    
         
            +
            #
         
     | 
| 
      
 12 
     | 
    
         
            +
            # The above copyright notice and this permission notice shall be
         
     | 
| 
      
 13 
     | 
    
         
            +
            # included in all copies or substantial portions of the Software.
         
     | 
| 
      
 14 
     | 
    
         
            +
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 16 
     | 
    
         
            +
            # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 17 
     | 
    
         
            +
            # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 18 
     | 
    
         
            +
            # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 19 
     | 
    
         
            +
            # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 20 
     | 
    
         
            +
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 21 
     | 
    
         
            +
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            require 'nokogiri'
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            module Prawn
         
     | 
| 
      
 26 
     | 
    
         
            +
              class Table
         
     | 
| 
      
 27 
     | 
    
         
            +
                class Cell
         
     | 
| 
      
 28 
     | 
    
         
            +
                  class Subtable
         
     | 
| 
      
 29 
     | 
    
         
            +
                    # prawn suicide prevention
         
     | 
| 
      
 30 
     | 
    
         
            +
                    def inline_format= something
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                attr_accessor :post_resize
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            module Crayfish
         
     | 
| 
      
 40 
     | 
    
         
            +
              class CrayHtml
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                attr_reader :pdf
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                def initialize fish,pdf
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @fish    = fish
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @pdf     = pdf
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def apply_style cell,style
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # background-color:#ccccff
         
     | 
| 
      
 51 
     | 
    
         
            +
                  style.split(';').each do |style|
         
     | 
| 
      
 52 
     | 
    
         
            +
                    if /^background-color:#(?<color>.*)$/ =~ style
         
     | 
| 
      
 53 
     | 
    
         
            +
                      cell.background_color = color
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                def traverse_children node,path,params={ :table => nil, :tr => nil }
         
     | 
| 
      
 59 
     | 
    
         
            +
                  count = {}
         
     | 
| 
      
 60 
     | 
    
         
            +
                  node.children.each{ |node| count[node.name.to_sym] = (count[node.name.to_sym]||0) + 1 }
         
     | 
| 
      
 61 
     | 
    
         
            +
                  counters = Hash[*count.map{ |k,v| [k,0] }.flatten]
         
     | 
| 
      
 62 
     | 
    
         
            +
                  node.children.map do |node|
         
     | 
| 
      
 63 
     | 
    
         
            +
                    postfix = ''
         
     | 
| 
      
 64 
     | 
    
         
            +
                    if count[node.name.to_sym] > 1
         
     | 
| 
      
 65 
     | 
    
         
            +
                      postfix = "[#{counters[node.name.to_sym]}]"
         
     | 
| 
      
 66 
     | 
    
         
            +
                      counters[node.name.to_sym] += 1
         
     | 
| 
      
 67 
     | 
    
         
            +
                    end
         
     | 
| 
      
 68 
     | 
    
         
            +
                    compile node, "#{path}/#{node.name}#{postfix}", '', params
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                def style cell,node,scope
         
     | 
| 
      
 73 
     | 
    
         
            +
                  cell[:colspan] = node.attributes['colspan'].value.to_i if node.attributes['colspan']
         
     | 
| 
      
 74 
     | 
    
         
            +
                  cell[:rowspan] = node.attributes['rowspan'].value.to_i if node.attributes['rowspan']
         
     | 
| 
      
 75 
     | 
    
         
            +
                  cell[:valign]  = :center if cell[:rowspan]
         
     | 
| 
      
 76 
     | 
    
         
            +
                  cell[:align]   = node.attributes['align'].value.to_sym if node.attributes['align']
         
     | 
| 
      
 77 
     | 
    
         
            +
                  scope[:table_styles] << { :row => scope[:table].size, :col => scope[:tr].size, :style => node.attributes['style'].value } if node.attributes['style']
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                def compile node, path = "/#{node.name}", postfix='',scope={ :table => nil, :tr => nil }
         
     | 
| 
      
 81 
     | 
    
         
            +
                  name = node.name.to_sym
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  case name
         
     | 
| 
      
 84 
     | 
    
         
            +
                  when :img
         
     | 
| 
      
 85 
     | 
    
         
            +
                    # we would really like to use image_path here
         
     | 
| 
      
 86 
     | 
    
         
            +
                    image = {:image => "app#{node.attributes['src'].value}"}
         
     | 
| 
      
 87 
     | 
    
         
            +
                    image[:width]  = node.attributes['width'].value.to_f  if node.attributes['width']
         
     | 
| 
      
 88 
     | 
    
         
            +
                    image[:height] = node.attributes['height'].value.to_f if node.attributes['height']
         
     | 
| 
      
 89 
     | 
    
         
            +
                    return image
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                  when :table
         
     | 
| 
      
 92 
     | 
    
         
            +
                    table = []
         
     | 
| 
      
 93 
     | 
    
         
            +
                    table_styles = []
         
     | 
| 
      
 94 
     | 
    
         
            +
                    traverse_children node, "#{path}#{postfix}", :table => table, :table_styles => table_styles, :tr => nil
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                    # apply style
         
     | 
| 
      
 97 
     | 
    
         
            +
                    full_width = 540
         
     | 
| 
      
 98 
     | 
    
         
            +
                    attribs = { :cell_style => { :inline_format => true } }
         
     | 
| 
      
 99 
     | 
    
         
            +
                    if node.attributes['width'] and /^(?<percent>.*)%$/ =~ node.attributes['width'].value
         
     | 
| 
      
 100 
     | 
    
         
            +
                      attribs[:post_resize] = "#{percent}%"
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
      
 102 
     | 
    
         
            +
                    attribs[:cell_style][:borders] = [] if node.attributes['border'] and node.attributes['border'].value=='0'
         
     | 
| 
      
 103 
     | 
    
         
            +
                    table = @pdf.make_table(table, attribs)
         
     | 
| 
      
 104 
     | 
    
         
            +
                    table_styles.each do |style|
         
     | 
| 
      
 105 
     | 
    
         
            +
                      apply_style(table.row(style[:row]).column(style[:col]),style[:style]) 
         
     | 
| 
      
 106 
     | 
    
         
            +
                    end
         
     | 
| 
      
 107 
     | 
    
         
            +
                    scope[:td] << table if scope[:td]
         
     | 
| 
      
 108 
     | 
    
         
            +
                    return table
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                  when :tr
         
     | 
| 
      
 111 
     | 
    
         
            +
                    row = []
         
     | 
| 
      
 112 
     | 
    
         
            +
                    traverse_children node, "#{path}#{postfix}", :table => scope[:table], :table_styles => scope[:table_styles], :tr => row
         
     | 
| 
      
 113 
     | 
    
         
            +
                    scope[:table] << row
         
     | 
| 
      
 114 
     | 
    
         
            +
                    return :tr => row
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                  when :td
         
     | 
| 
      
 117 
     | 
    
         
            +
                    cells = []
         
     | 
| 
      
 118 
     | 
    
         
            +
                    traverse_children node, "#{path}#{postfix}", :table => scope[:table], :table_styles => scope[:table_styles], :tr => scope[:tr], :td => cells
         
     | 
| 
      
 119 
     | 
    
         
            +
                    if cells.size <= 1
         
     | 
| 
      
 120 
     | 
    
         
            +
                      cells << "" if cells.size == 0
         
     | 
| 
      
 121 
     | 
    
         
            +
                      cell = { :content => cells.first.kind_of?(String) ? cells.first.strip : cells.first }
         
     | 
| 
      
 122 
     | 
    
         
            +
                      style cell,node,scope
         
     | 
| 
      
 123 
     | 
    
         
            +
                      scope[:tr] << cell
         
     | 
| 
      
 124 
     | 
    
         
            +
                    else
         
     | 
| 
      
 125 
     | 
    
         
            +
                      scope[:tr] << cells
         
     | 
| 
      
 126 
     | 
    
         
            +
                    end
         
     | 
| 
      
 127 
     | 
    
         
            +
                    return
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                  when :th
         
     | 
| 
      
 130 
     | 
    
         
            +
                    cells = []
         
     | 
| 
      
 131 
     | 
    
         
            +
                    traverse_children node, "#{path}#{postfix}", :table => scope[:table], :table_styles => scope[:table_styles], :tr => scope[:tr], :td => cells
         
     | 
| 
      
 132 
     | 
    
         
            +
                    if cells.size <= 1
         
     | 
| 
      
 133 
     | 
    
         
            +
                      cells << "" if cells.size == 0
         
     | 
| 
      
 134 
     | 
    
         
            +
                      cell = { :content => "<b>#{cells.first.strip}</b>", :align => :center }
         
     | 
| 
      
 135 
     | 
    
         
            +
                      style cell,node,scope
         
     | 
| 
      
 136 
     | 
    
         
            +
                      scope[:tr] << cell
         
     | 
| 
      
 137 
     | 
    
         
            +
                    else
         
     | 
| 
      
 138 
     | 
    
         
            +
                      scope[:tr] << cells
         
     | 
| 
      
 139 
     | 
    
         
            +
                    end
         
     | 
| 
      
 140 
     | 
    
         
            +
                    return
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                  when :text
         
     | 
| 
      
 143 
     | 
    
         
            +
                    if scope[:td] and node.content.strip.size > 0
         
     | 
| 
      
 144 
     | 
    
         
            +
                      scope[:td] << node.content.strip
         
     | 
| 
      
 145 
     | 
    
         
            +
                    end
         
     | 
| 
      
 146 
     | 
    
         
            +
                  when :html
         
     | 
| 
      
 147 
     | 
    
         
            +
                  when :body
         
     | 
| 
      
 148 
     | 
    
         
            +
                  else
         
     | 
| 
      
 149 
     | 
    
         
            +
                    ::Rails.logger.debug "\e[1;31munknown node #{node.name} in CrayHtml\e[0m"
         
     | 
| 
      
 150 
     | 
    
         
            +
                  end
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                  traverse_children node, "#{path}#{postfix}"
         
     | 
| 
      
 153 
     | 
    
         
            +
                end
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                # pp debug_dump(prawn_table)
         
     | 
| 
      
 156 
     | 
    
         
            +
                # def debug_dump node
         
     | 
| 
      
 157 
     | 
    
         
            +
                #   if node.kind_of? Prawn::Table
         
     | 
| 
      
 158 
     | 
    
         
            +
                #     (0..node.row_length).map do |n|
         
     | 
| 
      
 159 
     | 
    
         
            +
                #       debug_dump node.row(n).map{ |c| debug_dump c }
         
     | 
| 
      
 160 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 161 
     | 
    
         
            +
                #   elsif node.kind_of? Prawn::Table::Cell::Text
         
     | 
| 
      
 162 
     | 
    
         
            +
                #     node.content
         
     | 
| 
      
 163 
     | 
    
         
            +
                #   elsif node.kind_of? Array
         
     | 
| 
      
 164 
     | 
    
         
            +
                #     node.map{ |c| debug_dump c }
         
     | 
| 
      
 165 
     | 
    
         
            +
                #   elsif node.kind_of? String
         
     | 
| 
      
 166 
     | 
    
         
            +
                #     node
         
     | 
| 
      
 167 
     | 
    
         
            +
                #   elsif node.kind_of? Fixnum
         
     | 
| 
      
 168 
     | 
    
         
            +
                #     node
         
     | 
| 
      
 169 
     | 
    
         
            +
                #   elsif node.kind_of? Hash
         
     | 
| 
      
 170 
     | 
    
         
            +
                #     node.map{ |k,v| [k,debug_dump(v)] }
         
     | 
| 
      
 171 
     | 
    
         
            +
                #   else
         
     | 
| 
      
 172 
     | 
    
         
            +
                #     node.class.name
         
     | 
| 
      
 173 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 174 
     | 
    
         
            +
                # end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                def post_resize node,parent_width
         
     | 
| 
      
 177 
     | 
    
         
            +
                  if node.kind_of?(Prawn::Table::Cell::Subtable)
         
     | 
| 
      
 178 
     | 
    
         
            +
                    post_resize node.subtable,parent_width
         
     | 
| 
      
 179 
     | 
    
         
            +
                  elsif node.kind_of?(Prawn::Table)
         
     | 
| 
      
 180 
     | 
    
         
            +
                    if node.post_resize
         
     | 
| 
      
 181 
     | 
    
         
            +
                      if /^(?<size>.*)%$/ =~ node.post_resize
         
     | 
| 
      
 182 
     | 
    
         
            +
                        node.instance_variable_set '@column_widths', nil
         
     | 
| 
      
 183 
     | 
    
         
            +
                        # reset constraints
         
     | 
| 
      
 184 
     | 
    
         
            +
                        node.cells.each do |cell|
         
     | 
| 
      
 185 
     | 
    
         
            +
                          cell.instance_variable_set '@max_width', parent_width
         
     | 
| 
      
 186 
     | 
    
         
            +
                        end
         
     | 
| 
      
 187 
     | 
    
         
            +
                        node.width = parent_width
         
     | 
| 
      
 188 
     | 
    
         
            +
                        node.send(:set_column_widths)
         
     | 
| 
      
 189 
     | 
    
         
            +
                        node.send(:position_cells)
         
     | 
| 
      
 190 
     | 
    
         
            +
                      end
         
     | 
| 
      
 191 
     | 
    
         
            +
                    end
         
     | 
| 
      
 192 
     | 
    
         
            +
                    column_widths = node.column_widths
         
     | 
| 
      
 193 
     | 
    
         
            +
                    (0..node.row_length).map do |n|
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                      row = node.row(n).columns(0..-1)
         
     | 
| 
      
 196 
     | 
    
         
            +
                      
         
     | 
| 
      
 197 
     | 
    
         
            +
                      row.each_with_index do |cell,i|
         
     | 
| 
      
 198 
     | 
    
         
            +
                        colspan = 1
         
     | 
| 
      
 199 
     | 
    
         
            +
                        row.to_a[i+1..-1].each do |cell|
         
     | 
| 
      
 200 
     | 
    
         
            +
                          break unless cell.kind_of?(Prawn::Table::Cell::SpanDummy)
         
     | 
| 
      
 201 
     | 
    
         
            +
                          colspan += 1
         
     | 
| 
      
 202 
     | 
    
         
            +
                        end
         
     | 
| 
      
 203 
     | 
    
         
            +
                        post_resize cell,column_widths[i..(i+colspan-1)].sum
         
     | 
| 
      
 204 
     | 
    
         
            +
                      end
         
     | 
| 
      
 205 
     | 
    
         
            +
                    end
         
     | 
| 
      
 206 
     | 
    
         
            +
                  elsif node.kind_of? Array
         
     | 
| 
      
 207 
     | 
    
         
            +
                    node.each{ |c| post_resize c,parent_width }
         
     | 
| 
      
 208 
     | 
    
         
            +
                  elsif node.kind_of? Hash
         
     | 
| 
      
 209 
     | 
    
         
            +
                    node.each do |k,v|
         
     | 
| 
      
 210 
     | 
    
         
            +
                      post_resize v,parent_width
         
     | 
| 
      
 211 
     | 
    
         
            +
                    end
         
     | 
| 
      
 212 
     | 
    
         
            +
                  end
         
     | 
| 
      
 213 
     | 
    
         
            +
                end
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
                def draw text
         
     | 
| 
      
 216 
     | 
    
         
            +
                  doc = Nokogiri::HTML(text)
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
                  doc.children.map do |element|
         
     | 
| 
      
 219 
     | 
    
         
            +
                    compile element
         
     | 
| 
      
 220 
     | 
    
         
            +
                  end.flatten.each do |prawn|
         
     | 
| 
      
 221 
     | 
    
         
            +
                    if prawn.kind_of? Hash
         
     | 
| 
      
 222 
     | 
    
         
            +
                      if prawn.has_key? :image
         
     | 
| 
      
 223 
     | 
    
         
            +
                        pdf.image prawn[:image], prawn
         
     | 
| 
      
 224 
     | 
    
         
            +
                      end
         
     | 
| 
      
 225 
     | 
    
         
            +
                    else
         
     | 
| 
      
 226 
     | 
    
         
            +
                      post_resize prawn,540
         
     | 
| 
      
 227 
     | 
    
         
            +
                      prawn.draw
         
     | 
| 
      
 228 
     | 
    
         
            +
                    end
         
     | 
| 
      
 229 
     | 
    
         
            +
                  end
         
     | 
| 
      
 230 
     | 
    
         
            +
                end
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
              end
         
     | 
| 
      
 233 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/crayfish/rails/base.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012  
     | 
| 
      
 1 
     | 
    
         
            +
            # Copyright (c) 2012 Bingoentreprenøren AS
         
     | 
| 
       2 
2 
     | 
    
         
             
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
         @@ -22,11 +22,13 @@ 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
            module Crayfish
         
     | 
| 
       24 
24 
     | 
    
         
             
              module Rails
         
     | 
| 
       25 
     | 
    
         
            -
                class Base
         
     | 
| 
      
 25 
     | 
    
         
            +
                class Base < ::ActionView::Base
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                  def self.call template
         
     | 
| 
       28 
28 
     | 
    
         
             
                    "setup;" +
         
     | 
| 
       29 
     | 
    
         
            -
                    "paint \" 
     | 
| 
      
 29 
     | 
    
         
            +
                    "paint <<__this_is_quite_unique__\n" + 
         
     | 
| 
      
 30 
     | 
    
         
            +
                    ::ActionView::Template::Handlers::ERB.call(template) +
         
     | 
| 
      
 31 
     | 
    
         
            +
                    "\n__this_is_quite_unique__\n"
         
     | 
| 
       30 
32 
     | 
    
         
             
                  end
         
     | 
| 
       31 
33 
     | 
    
         | 
| 
       32 
34 
     | 
    
         
             
                end
         
     | 
    
        data/lib/crayfish/rails/pdf.rb
    CHANGED
    
    
    
        data/lib/crayfish/version.rb
    CHANGED
    
    | 
         @@ -1,3 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Copyright (c) 2012 Bingoentreprenøren AS
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 5 
     | 
    
         
            +
            # a copy of this software and associated documentation files (the
         
     | 
| 
      
 6 
     | 
    
         
            +
            # "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 7 
     | 
    
         
            +
            # without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 8 
     | 
    
         
            +
            # distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 9 
     | 
    
         
            +
            # permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 10 
     | 
    
         
            +
            # the following conditions:
         
     | 
| 
      
 11 
     | 
    
         
            +
            #
         
     | 
| 
      
 12 
     | 
    
         
            +
            # The above copyright notice and this permission notice shall be
         
     | 
| 
      
 13 
     | 
    
         
            +
            # included in all copies or substantial portions of the Software.
         
     | 
| 
      
 14 
     | 
    
         
            +
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 16 
     | 
    
         
            +
            # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 17 
     | 
    
         
            +
            # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 18 
     | 
    
         
            +
            # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 19 
     | 
    
         
            +
            # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 20 
     | 
    
         
            +
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 21 
     | 
    
         
            +
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       1 
23 
     | 
    
         
             
            module Crayfish
         
     | 
| 
       2 
     | 
    
         
            -
              VERSION = "0.0. 
     | 
| 
      
 24 
     | 
    
         
            +
              VERSION = "0.0.2"
         
     | 
| 
       3 
25 
     | 
    
         
             
            end
         
     | 
    
        data/lib/crayfish.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012  
     | 
| 
      
 1 
     | 
    
         
            +
            # Copyright (c) 2012 Bingoentreprenøren AS
         
     | 
| 
       2 
2 
     | 
    
         
             
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
         @@ -33,11 +33,7 @@ require 'crayfish/action_controller' 
     | 
|
| 
       33 
33 
     | 
    
         
             
            require 'crayfish/action_view'
         
     | 
| 
       34 
34 
     | 
    
         
             
            require 'crayfish/rails/pdf'
         
     | 
| 
       35 
35 
     | 
    
         
             
            require 'crayfish/rails/base'
         
     | 
| 
       36 
     | 
    
         
            -
            require 'crayfish/ 
     | 
| 
       37 
     | 
    
         
            -
            require 'crayfish/elements/cell_helper.rb'
         
     | 
| 
       38 
     | 
    
         
            -
            require 'crayfish/elements/row.rb'
         
     | 
| 
       39 
     | 
    
         
            -
            require 'crayfish/elements/table.rb'
         
     | 
| 
       40 
     | 
    
         
            -
            require 'crayfish/elements/form.rb'
         
     | 
| 
      
 36 
     | 
    
         
            +
            require 'crayfish/html.rb'
         
     | 
| 
       41 
37 
     | 
    
         | 
| 
       42 
38 
     | 
    
         
             
            class ActionController::Base
         
     | 
| 
       43 
39 
     | 
    
         
             
              include Crayfish::ActionController
         
     | 
    
        data/test/crayfish_test.rb
    CHANGED
    
    
    
        data/test/test_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: crayfish
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.2
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,11 +9,11 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012-03- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-03-13 00:00:00.000000000Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rails
         
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &70349031035300 !ruby/object:Gem::Requirement
         
     | 
| 
       17 
17 
     | 
    
         
             
                none: false
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
19 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -21,10 +21,10 @@ dependencies: 
     | 
|
| 
       21 
21 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *70349031035300
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: prawn
         
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &70349031033800 !ruby/object:Gem::Requirement
         
     | 
| 
       28 
28 
     | 
    
         
             
                none: false
         
     | 
| 
       29 
29 
     | 
    
         
             
                requirements:
         
     | 
| 
       30 
30 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -32,10 +32,21 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       33 
33 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       34 
34 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       35 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *70349031033800
         
     | 
| 
      
 36 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 37 
     | 
    
         
            +
              name: nokogiri
         
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &70349031031560 !ruby/object:Gem::Requirement
         
     | 
| 
      
 39 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 40 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 41 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 42 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 43 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 44 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 45 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *70349031031560
         
     | 
| 
       36 
47 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
48 
     | 
    
         
             
              name: sqlite3
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 49 
     | 
    
         
            +
              requirement: &70349031029500 !ruby/object:Gem::Requirement
         
     | 
| 
       39 
50 
     | 
    
         
             
                none: false
         
     | 
| 
       40 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       41 
52 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -43,10 +54,10 @@ dependencies: 
     | 
|
| 
       43 
54 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       44 
55 
     | 
    
         
             
              type: :development
         
     | 
| 
       45 
56 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       46 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 57 
     | 
    
         
            +
              version_requirements: *70349031029500
         
     | 
| 
       47 
58 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       48 
59 
     | 
    
         
             
              name: mocha
         
     | 
| 
       49 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 60 
     | 
    
         
            +
              requirement: &70349031027420 !ruby/object:Gem::Requirement
         
     | 
| 
       50 
61 
     | 
    
         
             
                none: false
         
     | 
| 
       51 
62 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
63 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -54,7 +65,7 @@ dependencies: 
     | 
|
| 
       54 
65 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       55 
66 
     | 
    
         
             
              type: :development
         
     | 
| 
       56 
67 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       57 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 68 
     | 
    
         
            +
              version_requirements: *70349031027420
         
     | 
| 
       58 
69 
     | 
    
         
             
            description: Crayfish - PDF templating for Rails
         
     | 
| 
       59 
70 
     | 
    
         
             
            email:
         
     | 
| 
       60 
71 
     | 
    
         
             
            - patrick.hanevold@gmail.com
         
     | 
| 
         @@ -64,11 +75,7 @@ extra_rdoc_files: [] 
     | 
|
| 
       64 
75 
     | 
    
         
             
            files:
         
     | 
| 
       65 
76 
     | 
    
         
             
            - lib/crayfish/action_controller.rb
         
     | 
| 
       66 
77 
     | 
    
         
             
            - lib/crayfish/action_view.rb
         
     | 
| 
       67 
     | 
    
         
            -
            - lib/crayfish/ 
     | 
| 
       68 
     | 
    
         
            -
            - lib/crayfish/elements/container.rb
         
     | 
| 
       69 
     | 
    
         
            -
            - lib/crayfish/elements/form.rb
         
     | 
| 
       70 
     | 
    
         
            -
            - lib/crayfish/elements/row.rb
         
     | 
| 
       71 
     | 
    
         
            -
            - lib/crayfish/elements/table.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/crayfish/html.rb
         
     | 
| 
       72 
79 
     | 
    
         
             
            - lib/crayfish/rails/base.rb
         
     | 
| 
       73 
80 
     | 
    
         
             
            - lib/crayfish/rails/pdf.rb
         
     | 
| 
       74 
81 
     | 
    
         
             
            - lib/crayfish/version.rb
         
     | 
| 
         @@ -123,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       123 
130 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       124 
131 
     | 
    
         
             
                  segments:
         
     | 
| 
       125 
132 
     | 
    
         
             
                  - 0
         
     | 
| 
       126 
     | 
    
         
            -
                  hash: - 
     | 
| 
      
 133 
     | 
    
         
            +
                  hash: -3931493668150893834
         
     | 
| 
       127 
134 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       128 
135 
     | 
    
         
             
              none: false
         
     | 
| 
       129 
136 
     | 
    
         
             
              requirements:
         
     | 
| 
         @@ -132,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       132 
139 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       133 
140 
     | 
    
         
             
                  segments:
         
     | 
| 
       134 
141 
     | 
    
         
             
                  - 0
         
     | 
| 
       135 
     | 
    
         
            -
                  hash: - 
     | 
| 
      
 142 
     | 
    
         
            +
                  hash: -3931493668150893834
         
     | 
| 
       136 
143 
     | 
    
         
             
            requirements: []
         
     | 
| 
       137 
144 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       138 
145 
     | 
    
         
             
            rubygems_version: 1.8.15
         
     | 
| 
         @@ -1,70 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012 Bingoentrepenøren AS
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
     | 
    
         
            -
            #
         
     | 
| 
       4 
     | 
    
         
            -
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       5 
     | 
    
         
            -
            # a copy of this software and associated documentation files (the
         
     | 
| 
       6 
     | 
    
         
            -
            # "Software"), to deal in the Software without restriction, including
         
     | 
| 
       7 
     | 
    
         
            -
            # without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
       8 
     | 
    
         
            -
            # distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
       9 
     | 
    
         
            -
            # permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
       10 
     | 
    
         
            -
            # the following conditions:
         
     | 
| 
       11 
     | 
    
         
            -
            #
         
     | 
| 
       12 
     | 
    
         
            -
            # The above copyright notice and this permission notice shall be
         
     | 
| 
       13 
     | 
    
         
            -
            # included in all copies or substantial portions of the Software.
         
     | 
| 
       14 
     | 
    
         
            -
            #
         
     | 
| 
       15 
     | 
    
         
            -
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
       16 
     | 
    
         
            -
            # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
       17 
     | 
    
         
            -
            # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
       18 
     | 
    
         
            -
            # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
       19 
     | 
    
         
            -
            # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
       20 
     | 
    
         
            -
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       21 
     | 
    
         
            -
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            module Crayfish
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              class CellHelper < Prawn::Table::Cell::Text
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                def initialize cell, options={}
         
     | 
| 
       28 
     | 
    
         
            -
                  @pdf = cell.instance_variable_get('@pdf')
         
     | 
| 
       29 
     | 
    
         
            -
                  @type = options[:type] || :text
         
     | 
| 
       30 
     | 
    
         
            -
                  super @pdf,cell.instance_variable_get('@point'),{ :content => cell.instance_variable_get('@content') }
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                def width val=nil
         
     | 
| 
       34 
     | 
    
         
            -
                  if val
         
     | 
| 
       35 
     | 
    
         
            -
                    self.width = val
         
     | 
| 
       36 
     | 
    
         
            -
                    self
         
     | 
| 
       37 
     | 
    
         
            -
                  else
         
     | 
| 
       38 
     | 
    
         
            -
                    super()
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
     | 
    
         
            -
                end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                def draw_content
         
     | 
| 
       43 
     | 
    
         
            -
                  if @type == :field
         
     | 
| 
       44 
     | 
    
         
            -
                    x = -5.25 # FIXME: guesswork
         
     | 
| 
       45 
     | 
    
         
            -
                    y = @pdf.cursor + padding[1] - (@pdf.font.line_gap + @pdf.font.descender)/2 + 3 # FIXME: guesswork
         
     | 
| 
       46 
     | 
    
         
            -
                    w = spanned_content_width + FPTolerance + padding[2] + padding[3]
         
     | 
| 
       47 
     | 
    
         
            -
                    h = @pdf.font.height + padding[0] + padding[1]
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                    old = @pdf.fill_color
         
     | 
| 
       50 
     | 
    
         
            -
                    @pdf.fill_color = 'ffffff'
         
     | 
| 
       51 
     | 
    
         
            -
                    @pdf.rectangle [x, y], w, h
         
     | 
| 
       52 
     | 
    
         
            -
                    @pdf.fill
         
     | 
| 
       53 
     | 
    
         
            -
                    @pdf.fill_color = old
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                    @pdf.stroke_line([x,   y],  [w+x, y])
         
     | 
| 
       56 
     | 
    
         
            -
                    @pdf.stroke_line([w+x, y],  [w+x, y-h])
         
     | 
| 
       57 
     | 
    
         
            -
                    @pdf.stroke_line([w+x, y-h],[x,   y-h])
         
     | 
| 
       58 
     | 
    
         
            -
                    @pdf.stroke_line([x,   y-h],[x,   y])
         
     | 
| 
       59 
     | 
    
         
            -
                  end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                  super
         
     | 
| 
       62 
     | 
    
         
            -
                end
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                def inspect
         
     | 
| 
       65 
     | 
    
         
            -
                  "<CellHelper \"#{content}\">"
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
              end
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,64 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012 Bingoentrepenøren AS
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
     | 
    
         
            -
            #
         
     | 
| 
       4 
     | 
    
         
            -
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       5 
     | 
    
         
            -
            # a copy of this software and associated documentation files (the
         
     | 
| 
       6 
     | 
    
         
            -
            # "Software"), to deal in the Software without restriction, including
         
     | 
| 
       7 
     | 
    
         
            -
            # without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
       8 
     | 
    
         
            -
            # distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
       9 
     | 
    
         
            -
            # permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
       10 
     | 
    
         
            -
            # the following conditions:
         
     | 
| 
       11 
     | 
    
         
            -
            #
         
     | 
| 
       12 
     | 
    
         
            -
            # The above copyright notice and this permission notice shall be
         
     | 
| 
       13 
     | 
    
         
            -
            # included in all copies or substantial portions of the Software.
         
     | 
| 
       14 
     | 
    
         
            -
            #
         
     | 
| 
       15 
     | 
    
         
            -
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
       16 
     | 
    
         
            -
            # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
       17 
     | 
    
         
            -
            # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
       18 
     | 
    
         
            -
            # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
       19 
     | 
    
         
            -
            # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
       20 
     | 
    
         
            -
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       21 
     | 
    
         
            -
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            module Crayfish
         
     | 
| 
       24 
     | 
    
         
            -
              class CrayContainer
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                attr_accessor :raw
         
     | 
| 
       27 
     | 
    
         
            -
                attr_reader :options,:tokens,:pdf
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                def initialize fish, pdf, options = {}
         
     | 
| 
       30 
     | 
    
         
            -
                  @fish    = fish
         
     | 
| 
       31 
     | 
    
         
            -
                  @pdf     = pdf
         
     | 
| 
       32 
     | 
    
         
            -
                  @raw     = []
         
     | 
| 
       33 
     | 
    
         
            -
                  @options = options
         
     | 
| 
       34 
     | 
    
         
            -
                  @tokens = { :span => options[:span] || /%\|/, :element => options[:element] || /%c{[^}]*}/ }
         
     | 
| 
       35 
     | 
    
         
            -
                end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                def append stuff, options={}
         
     | 
| 
       38 
     | 
    
         
            -
                  @raw << stuff
         
     | 
| 
       39 
     | 
    
         
            -
                end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                def field str
         
     | 
| 
       42 
     | 
    
         
            -
                  "%c{#{str}}"
         
     | 
| 
       43 
     | 
    
         
            -
                end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                def span
         
     | 
| 
       46 
     | 
    
         
            -
                  '%|'
         
     | 
| 
       47 
     | 
    
         
            -
                end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                def row *args, &block
         
     | 
| 
       50 
     | 
    
         
            -
                  raise "row must have block" unless block_given?
         
     | 
| 
       51 
     | 
    
         
            -
                  row = CrayRow.new(@fish,pdf,self)
         
     | 
| 
       52 
     | 
    
         
            -
                  block.call row
         
     | 
| 
       53 
     | 
    
         
            -
                  row.draw ''
         
     | 
| 
       54 
     | 
    
         
            -
                end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                def row_for *args, &block
         
     | 
| 
       57 
     | 
    
         
            -
                  raise "row_for must have block" unless block_given?
         
     | 
| 
       58 
     | 
    
         
            -
                  row = CrayRow.new(@fish,pdf,self,args.first)
         
     | 
| 
       59 
     | 
    
         
            -
                  block.call row
         
     | 
| 
       60 
     | 
    
         
            -
                  row.draw ''
         
     | 
| 
       61 
     | 
    
         
            -
                end
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,161 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012 Bingoentrepenøren AS
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
     | 
    
         
            -
            #
         
     | 
| 
       4 
     | 
    
         
            -
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       5 
     | 
    
         
            -
            # a copy of this software and associated documentation files (the
         
     | 
| 
       6 
     | 
    
         
            -
            # "Software"), to deal in the Software without restriction, including
         
     | 
| 
       7 
     | 
    
         
            -
            # without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
       8 
     | 
    
         
            -
            # distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
       9 
     | 
    
         
            -
            # permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
       10 
     | 
    
         
            -
            # the following conditions:
         
     | 
| 
       11 
     | 
    
         
            -
            #
         
     | 
| 
       12 
     | 
    
         
            -
            # The above copyright notice and this permission notice shall be
         
     | 
| 
       13 
     | 
    
         
            -
            # included in all copies or substantial portions of the Software.
         
     | 
| 
       14 
     | 
    
         
            -
            #
         
     | 
| 
       15 
     | 
    
         
            -
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
       16 
     | 
    
         
            -
            # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
       17 
     | 
    
         
            -
            # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
       18 
     | 
    
         
            -
            # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
       19 
     | 
    
         
            -
            # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
       20 
     | 
    
         
            -
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       21 
     | 
    
         
            -
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            module Crayfish
         
     | 
| 
       24 
     | 
    
         
            -
              class CrayForm < CrayContainer
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                def initialize fish, pdf, options = {}
         
     | 
| 
       27 
     | 
    
         
            -
                  @fish=fish
         
     | 
| 
       28 
     | 
    
         
            -
                  @spans = []
         
     | 
| 
       29 
     | 
    
         
            -
                  super
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                # Flush accumulated text and append a (prawn) element
         
     | 
| 
       33 
     | 
    
         
            -
                def append stuff, options={}
         
     | 
| 
       34 
     | 
    
         
            -
                  buf = @fish.send(:flush,false)
         
     | 
| 
       35 
     | 
    
         
            -
                  @spans << (options[:spans] || [])
         
     | 
| 
       36 
     | 
    
         
            -
                  super
         
     | 
| 
       37 
     | 
    
         
            -
                  #form_body(buf) if buf.strip != ''
         
     | 
| 
       38 
     | 
    
         
            -
                  buf
         
     | 
| 
       39 
     | 
    
         
            -
                end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                def heading str
         
     | 
| 
       42 
     | 
    
         
            -
                  append [form_body(str,:spacing => 0)]
         
     | 
| 
       43 
     | 
    
         
            -
                end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                # Draws the form in all its glory
         
     | 
| 
       46 
     | 
    
         
            -
                def draw text
         
     | 
| 
       47 
     | 
    
         
            -
                  form_body(text,@options)
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  allign_spans
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                  table = pdf.make_table raw, :width => 540, :cell_style => { :padding => [0,0,0,0], :border_width => 1 }
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                  pdf.fill_color 'CCCCFF'
         
     | 
| 
       54 
     | 
    
         
            -
                  pdf.fill { @pdf.rectangle [0, pdf.cursor], table.width, table.height }
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                  pdf.fill_color '000000'
         
     | 
| 
       57 
     | 
    
         
            -
                  table.draw
         
     | 
| 
       58 
     | 
    
         
            -
                  table
         
     | 
| 
       59 
     | 
    
         
            -
                end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
              private
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                def allign_spans
         
     | 
| 
       64 
     | 
    
         
            -
                  # group by span count
         
     | 
| 
       65 
     | 
    
         
            -
                  # in the future we may want to group by span id's or paths to allow much more fine grained controll of span allignment
         
     | 
| 
       66 
     | 
    
         
            -
                  groups = @spans.map{ |row| row.max }.uniq.select{ |cnt| cnt }
         
     | 
| 
       67 
     | 
    
         
            -
                  i = -1
         
     | 
| 
       68 
     | 
    
         
            -
                  indexed = @spans.map{ |span| i+=1; {:index => i, :row => raw[i] } }
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                  groups.each do |group_cnt|
         
     | 
| 
       71 
     | 
    
         
            -
                    # all rows with group_cnt number of spans
         
     | 
| 
       72 
     | 
    
         
            -
                    considder = indexed.select{ |row| @spans[row[:index]].max == group_cnt }.map{ |row| row[:index] }
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                    # the span width map
         
     | 
| 
       75 
     | 
    
         
            -
                    width_map = considder.map do |index|
         
     | 
| 
       76 
     | 
    
         
            -
                      spans  = @spans[index]
         
     | 
| 
       77 
     | 
    
         
            -
                      row    = raw[index].first[:content]
         
     | 
| 
       78 
     | 
    
         
            -
                      widths = row.row(0).columns(0..-1).map{ |cell| cell.natural_content_width }
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                      i = 0
         
     | 
| 
       81 
     | 
    
         
            -
                      spans.map do |span_index|
         
     | 
| 
       82 
     | 
    
         
            -
                        span = widths[i..span_index-1]
         
     | 
| 
       83 
     | 
    
         
            -
                        i=span_index
         
     | 
| 
       84 
     | 
    
         
            -
                        span.sum
         
     | 
| 
       85 
     | 
    
         
            -
                      end
         
     | 
| 
       86 
     | 
    
         
            -
                    end
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                    alligned_widths = width_map.transpose.map{ |col| col.max }
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                    # allign cells
         
     | 
| 
       91 
     | 
    
         
            -
                    considder.each do |index|
         
     | 
| 
       92 
     | 
    
         
            -
                      row_width = reminding_width = raw[index].first[:content].row(0).width
         
     | 
| 
       93 
     | 
    
         
            -
                      raw[index].first[:content].row(0).columns(0..alligned_widths.size-1).each_with_index do |cell,i|
         
     | 
| 
       94 
     | 
    
         
            -
                        cell.width = alligned_widths[i]
         
     | 
| 
       95 
     | 
    
         
            -
                        reminding_width -= cell.width
         
     | 
| 
       96 
     | 
    
         
            -
                      end
         
     | 
| 
       97 
     | 
    
         
            -
                      # fit reminding cells in row
         
     | 
| 
       98 
     | 
    
         
            -
                      # TODO: respect constraints!
         
     | 
| 
       99 
     | 
    
         
            -
                      x = row_width-reminding_width
         
     | 
| 
       100 
     | 
    
         
            -
                      w = reminding_width / raw[index].first[:content].row(0).columns(alligned_widths.size..-1).size
         
     | 
| 
       101 
     | 
    
         
            -
                      raw[index].first[:content].row(0).columns(alligned_widths.size..-1).each do |cell|
         
     | 
| 
       102 
     | 
    
         
            -
                        cell.x = x
         
     | 
| 
       103 
     | 
    
         
            -
                        cell.width = w
         
     | 
| 
       104 
     | 
    
         
            -
                        x += w
         
     | 
| 
       105 
     | 
    
         
            -
                      end
         
     | 
| 
       106 
     | 
    
         
            -
                    end
         
     | 
| 
       107 
     | 
    
         
            -
                  end
         
     | 
| 
       108 
     | 
    
         
            -
                end
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                def _text text,options = {}
         
     | 
| 
       111 
     | 
    
         
            -
                  Crayfish::CellHelper.new(Prawn::Table::Cell.make(pdf, text), options)
         
     | 
| 
       112 
     | 
    
         
            -
                end
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                def _field width=nil
         
     | 
| 
       115 
     | 
    
         
            -
                  cell = _text('', { :type => :field })
         
     | 
| 
       116 
     | 
    
         
            -
                  cell.width(width) if width
         
     | 
| 
       117 
     | 
    
         
            -
                  cell
         
     | 
| 
       118 
     | 
    
         
            -
                end
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                def _space width=nil
         
     | 
| 
       121 
     | 
    
         
            -
                  cell = _text('')
         
     | 
| 
       122 
     | 
    
         
            -
                  cell.width(width) if width
         
     | 
| 
       123 
     | 
    
         
            -
                end
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
                def form_body form,options = {}
         
     | 
| 
       126 
     | 
    
         
            -
                  color = 'CCCCFF'
         
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
                  space_width = 10
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
                  lines = form.split("\n").map{ |line| line.strip }.select{ |line| line.size > 0 }
         
     | 
| 
       131 
     | 
    
         
            -
                  return unless lines.size > 0
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                  spans_per_line = lines.map{ |line| line.split(tokens[:span]).size-1 }
         
     | 
| 
       134 
     | 
    
         
            -
                  raise 'the number of spans must be the same on all lines' unless spans_per_line.uniq.size <= 1
         
     | 
| 
       135 
     | 
    
         
            -
                  spans_per_line = spans_per_line.first
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
                  span_table = lines.map{ |line| line.split(tokens[:span]) }
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
                  # split text from fields in all spans
         
     | 
| 
       140 
     | 
    
         
            -
                  table = span_table.map do |row|
         
     | 
| 
       141 
     | 
    
         
            -
                    row.map do |span|
         
     | 
| 
       142 
     | 
    
         
            -
                      span.split(tokens[:element]).zip(span.scan(tokens[:element])).flatten
         
     | 
| 
       143 
     | 
    
         
            -
                    end
         
     | 
| 
       144 
     | 
    
         
            -
                  end
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
                  # translate each span into a subtable
         
     | 
| 
       147 
     | 
    
         
            -
                  table.map! do |row|
         
     | 
| 
       148 
     | 
    
         
            -
                    row.map do |span|
         
     | 
| 
       149 
     | 
    
         
            -
                      pdf.make_table [ span.map{ |cell| cell =~ /^#{tokens[:element].source}$/ ? _field(cell.count(' ')*space_width) : _text(cell) } ],:cell_style => { :borders => [] }
         
     | 
| 
       150 
     | 
    
         
            -
                    end
         
     | 
| 
       151 
     | 
    
         
            -
                  end
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
                  padding = options[:spacing] || (pdf.font.line_gap + pdf.font.descender)
         
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
                  # note that the spans above are in sub-tables, we need adressable spans (like xpath) if we want to use them further
         
     | 
| 
       156 
     | 
    
         
            -
                  # for now, pass a empty span list for this row (this form body is appended as a single row)
         
     | 
| 
       157 
     | 
    
         
            -
                  append [pdf.make_table(table, :width => 540, :cell_style => {:padding => [padding,0,padding,0], :borders => [] })], :spans => []
         
     | 
| 
       158 
     | 
    
         
            -
                end
         
     | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
              end
         
     | 
| 
       161 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,70 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012 Bingoentrepenøren AS
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
     | 
    
         
            -
            #
         
     | 
| 
       4 
     | 
    
         
            -
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       5 
     | 
    
         
            -
            # a copy of this software and associated documentation files (the
         
     | 
| 
       6 
     | 
    
         
            -
            # "Software"), to deal in the Software without restriction, including
         
     | 
| 
       7 
     | 
    
         
            -
            # without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
       8 
     | 
    
         
            -
            # distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
       9 
     | 
    
         
            -
            # permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
       10 
     | 
    
         
            -
            # the following conditions:
         
     | 
| 
       11 
     | 
    
         
            -
            #
         
     | 
| 
       12 
     | 
    
         
            -
            # The above copyright notice and this permission notice shall be
         
     | 
| 
       13 
     | 
    
         
            -
            # included in all copies or substantial portions of the Software.
         
     | 
| 
       14 
     | 
    
         
            -
            #
         
     | 
| 
       15 
     | 
    
         
            -
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
       16 
     | 
    
         
            -
            # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
       17 
     | 
    
         
            -
            # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
       18 
     | 
    
         
            -
            # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
       19 
     | 
    
         
            -
            # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
       20 
     | 
    
         
            -
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       21 
     | 
    
         
            -
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            module Crayfish
         
     | 
| 
       24 
     | 
    
         
            -
              class CrayRow < CrayContainer
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                def initialize fish,pdf,table,model=nil
         
     | 
| 
       27 
     | 
    
         
            -
                  @table = table
         
     | 
| 
       28 
     | 
    
         
            -
                  @color = 'CCCCFF'
         
     | 
| 
       29 
     | 
    
         
            -
                  @spans = []
         
     | 
| 
       30 
     | 
    
         
            -
                  @model = model
         
     | 
| 
       31 
     | 
    
         
            -
                  super fish,pdf
         
     | 
| 
       32 
     | 
    
         
            -
                end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                def label label
         
     | 
| 
       35 
     | 
    
         
            -
                  append :content => label, :background_color => @color
         
     | 
| 
       36 
     | 
    
         
            -
                end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                def text text
         
     | 
| 
       39 
     | 
    
         
            -
                  append :content => text, :background_color => 'ffffff'
         
     | 
| 
       40 
     | 
    
         
            -
                end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                def span
         
     | 
| 
       43 
     | 
    
         
            -
                  @spans << @raw.size
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                def field *args
         
     | 
| 
       47 
     | 
    
         
            -
                  label = ''
         
     | 
| 
       48 
     | 
    
         
            -
                  value = ''
         
     | 
| 
       49 
     | 
    
         
            -
                  if args.first.kind_of? Symbol
         
     | 
| 
       50 
     | 
    
         
            -
                    raise "you must use row_for(model) to reference with symbols" unless @model
         
     | 
| 
       51 
     | 
    
         
            -
                    label = I18n.t args.first, :scope => [:activerecord, :attributes, @model.class.name.underscore.to_sym], :default => args.first.to_s.titleize
         
     | 
| 
       52 
     | 
    
         
            -
                    value = @model.respond_to?(args.first) ? @model.send(args.first) : @model[args.first]
         
     | 
| 
       53 
     | 
    
         
            -
                  else
         
     | 
| 
       54 
     | 
    
         
            -
                    label = args.first[:label]
         
     | 
| 
       55 
     | 
    
         
            -
                    value = args.first[:value]
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
                  self.label label
         
     | 
| 
       58 
     | 
    
         
            -
                  text value
         
     | 
| 
       59 
     | 
    
         
            -
                end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                def draw text
         
     | 
| 
       62 
     | 
    
         
            -
                  if @table.kind_of? CrayForm
         
     | 
| 
       63 
     | 
    
         
            -
                    @table.append [ { :content => @table.pdf.make_table([raw], :width => 540) } ], :spans => @spans
         
     | 
| 
       64 
     | 
    
         
            -
                  else
         
     | 
| 
       65 
     | 
    
         
            -
                    @table.append raw
         
     | 
| 
       66 
     | 
    
         
            -
                  end
         
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
              end
         
     | 
| 
       70 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,51 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Copyright (c) 2012 Bingoentrepenøren AS
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (c) 2012 Patrick Hanevold
         
     | 
| 
       3 
     | 
    
         
            -
            #
         
     | 
| 
       4 
     | 
    
         
            -
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       5 
     | 
    
         
            -
            # a copy of this software and associated documentation files (the
         
     | 
| 
       6 
     | 
    
         
            -
            # "Software"), to deal in the Software without restriction, including
         
     | 
| 
       7 
     | 
    
         
            -
            # without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
       8 
     | 
    
         
            -
            # distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
       9 
     | 
    
         
            -
            # permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
       10 
     | 
    
         
            -
            # the following conditions:
         
     | 
| 
       11 
     | 
    
         
            -
            #
         
     | 
| 
       12 
     | 
    
         
            -
            # The above copyright notice and this permission notice shall be
         
     | 
| 
       13 
     | 
    
         
            -
            # included in all copies or substantial portions of the Software.
         
     | 
| 
       14 
     | 
    
         
            -
            #
         
     | 
| 
       15 
     | 
    
         
            -
            # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
       16 
     | 
    
         
            -
            # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
       17 
     | 
    
         
            -
            # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
       18 
     | 
    
         
            -
            # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
       19 
     | 
    
         
            -
            # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
       20 
     | 
    
         
            -
            # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       21 
     | 
    
         
            -
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            module Crayfish
         
     | 
| 
       24 
     | 
    
         
            -
              class CrayTable < CrayContainer
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                attr_reader :pdf
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                def initialize fish,pdf
         
     | 
| 
       29 
     | 
    
         
            -
                  @color = 'CCCCFF'
         
     | 
| 
       30 
     | 
    
         
            -
                  super
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                def field *args
         
     | 
| 
       34 
     | 
    
         
            -
                  label = ''
         
     | 
| 
       35 
     | 
    
         
            -
                  value = ''
         
     | 
| 
       36 
     | 
    
         
            -
                  if args.first.kind_of? Symbol
         
     | 
| 
       37 
     | 
    
         
            -
                    label = args.first.to_s
         
     | 
| 
       38 
     | 
    
         
            -
                    value = ''
         
     | 
| 
       39 
     | 
    
         
            -
                  else
         
     | 
| 
       40 
     | 
    
         
            -
                    label = args.first[:label]
         
     | 
| 
       41 
     | 
    
         
            -
                    value = args.first[:value]
         
     | 
| 
       42 
     | 
    
         
            -
                  end
         
     | 
| 
       43 
     | 
    
         
            -
                  append [{ :content => label,   :background_color => @color},  value]
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                def draw text
         
     | 
| 
       47 
     | 
    
         
            -
                  pdf.table raw, :width => 540
         
     | 
| 
       48 
     | 
    
         
            -
                end
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
            end
         
     |