axlsx 1.2.3 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +3 -2
 - data/CHANGELOG.md +34 -1
 - data/README.md +26 -37
 - data/Rakefile +1 -1
 - data/examples/auto_filter.rb +16 -0
 - data/examples/auto_filter.xlsx +0 -0
 - data/examples/example.rb +3 -2
 - data/examples/example.xlsx +0 -0
 - data/examples/example_streamed.xlsx +0 -0
 - data/examples/no-use_autowidth.xlsx +0 -0
 - data/examples/shared_strings_example.xlsx +0 -0
 - data/examples/skydrive/real_example.rb +6 -6
 - data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
 - data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
 - data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
 - data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
 - data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
 - data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
 - data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
 - data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
 - data/examples/sprk2012/basics.rb +1 -0
 - data/examples/sprk2012/basics.xlsx +0 -0
 - data/examples/sprk2012/gravatar.jpeg +0 -0
 - data/examples/sprk2012/hair_club.jpg +0 -0
 - data/examples/sprk2012/images.rb +7 -12
 - data/examples/sprk2012/images.xlsx +0 -0
 - data/examples/sprk2012/line_chart.rb +56 -0
 - data/examples/sprk2012/line_chart.xlsx +0 -0
 - data/examples/sprk2012/sprk2012.key +0 -0
 - data/examples/sprk2012/styles.rb +13 -12
 - data/examples/sprk2012/styles.xlsx +0 -0
 - data/examples/styles.rb +62 -0
 - data/examples/styles.xlsx +0 -0
 - data/lib/axlsx.rb +8 -1
 - data/lib/axlsx/stylesheet/styles.rb +4 -0
 - data/lib/axlsx/util/constants.rb +90 -5
 - data/lib/axlsx/util/validators.rb +26 -8
 - data/lib/axlsx/version.rb +2 -2
 - data/lib/axlsx/workbook/workbook.rb +4 -1
 - data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
 - data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
 - data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
 - data/lib/axlsx/workbook/worksheet/cell.rb +9 -4
 - data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
 - data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +47 -0
 - data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
 - data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -4
 - data/lib/axlsx/workbook/worksheet/table.rb +8 -1
 - data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
 - data/lib/axlsx/workbook/worksheet/worksheet.rb +18 -3
 - data/test/stylesheet/tc_styles.rb +13 -0
 - data/test/util/tc_validators.rb +8 -1
 - data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
 - data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
 - data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
 - data/test/workbook/worksheet/tc_cell.rb +5 -0
 - data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
 - data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
 - data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
 - data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +6 -1
 - data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
 - data/test/workbook/worksheet/tc_worksheet.rb +17 -3
 - metadata +45 -7
 - data/examples/~$extractive.xlsx +0 -0
 - data/lib/axlsx/workbook/worksheet/auto_filter.rb +0 -35
 
| 
         @@ -28,6 +28,7 @@ module Axlsx 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  @sheet = sheet
         
     | 
| 
       29 
29 
     | 
    
         
             
                  @style = nil
         
     | 
| 
       30 
30 
     | 
    
         
             
                  @sheet.workbook.tables << self
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @table_style_info = TableStyleInfo.new(options[:style_info]) if options[:style_info]
         
     | 
| 
       31 
32 
     | 
    
         
             
                  @name = "Table#{index+1}"
         
     | 
| 
       32 
33 
     | 
    
         
             
                  options.each do |o|
         
     | 
| 
       33 
34 
     | 
    
         
             
                    self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
         
     | 
| 
         @@ -62,6 +63,12 @@ module Axlsx 
     | 
|
| 
       62 
63 
     | 
    
         
             
                    @name = v
         
     | 
| 
       63 
64 
     | 
    
         
             
                  end
         
     | 
| 
       64 
65 
     | 
    
         
             
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
                
         
     | 
| 
      
 67 
     | 
    
         
            +
                # TableStyleInfo for the table. 
         
     | 
| 
      
 68 
     | 
    
         
            +
                # initialization can be fed via the :style_info option
         
     | 
| 
      
 69 
     | 
    
         
            +
                def table_style_info
         
     | 
| 
      
 70 
     | 
    
         
            +
                  @table_style_info ||= TableStyleInfo.new
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
       65 
72 
     | 
    
         | 
| 
       66 
73 
     | 
    
         
             
                # Serializes the object
         
     | 
| 
       67 
74 
     | 
    
         
             
                # @param [String] str
         
     | 
| 
         @@ -77,7 +84,7 @@ module Axlsx 
     | 
|
| 
       77 
84 
     | 
    
         
             
                  end
         
     | 
| 
       78 
85 
     | 
    
         
             
                  str << '</tableColumns>'
         
     | 
| 
       79 
86 
     | 
    
         
             
                  #TODO implement tableStyleInfo
         
     | 
| 
       80 
     | 
    
         
            -
                  str  
     | 
| 
      
 87 
     | 
    
         
            +
                  table_style_info.to_xml_string(str) # '<tableStyleInfo showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0" name="TableStyleMedium9" />'
         
     | 
| 
       81 
88 
     | 
    
         
             
                  str << '</table>'
         
     | 
| 
       82 
89 
     | 
    
         
             
                end
         
     | 
| 
       83 
90 
     | 
    
         | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Axlsx
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              # The table style info class manages style attributes for defined tables in
         
     | 
| 
      
 4 
     | 
    
         
            +
              # a worksheet
         
     | 
| 
      
 5 
     | 
    
         
            +
              class TableStyleInfo
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                # boolean attributes for this object
         
     | 
| 
      
 8 
     | 
    
         
            +
                BOOLEAN_ATTRIBUTES = %w(show_first_column show_last_column show_row_stripes show_column_stripes)
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # creates a new TableStyleInfo instance
         
     | 
| 
      
 11 
     | 
    
         
            +
                # @param [Hash] options
         
     | 
| 
      
 12 
     | 
    
         
            +
                # @option [Boolean] show_first_column indicates if the first column should
         
     | 
| 
      
 13 
     | 
    
         
            +
                #                   be shown
         
     | 
| 
      
 14 
     | 
    
         
            +
                # @option [Boolean] show_last_column indicates if the last column should
         
     | 
| 
      
 15 
     | 
    
         
            +
                #                   be shown
         
     | 
| 
      
 16 
     | 
    
         
            +
                # @option [Boolean] show_column_stripes indicates if column stripes should
         
     | 
| 
      
 17 
     | 
    
         
            +
                #                   be shown
         
     | 
| 
      
 18 
     | 
    
         
            +
                # @option [Boolean] show_row_stripes indicates if row stripes should be shown
         
     | 
| 
      
 19 
     | 
    
         
            +
                # @option [String] name The name of the style to apply to your table. 
         
     | 
| 
      
 20 
     | 
    
         
            +
                #                  Only predefined styles are currently supported.
         
     | 
| 
      
 21 
     | 
    
         
            +
                #                  @see Annex G. (normative) Predefined SpreadsheetML Style Definitions in part 1 of the specification.
         
     | 
| 
      
 22 
     | 
    
         
            +
                def initialize(options = {})
         
     | 
| 
      
 23 
     | 
    
         
            +
                  initialize_defaults
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @name = 'TableStyleMedium9'
         
     | 
| 
      
 25 
     | 
    
         
            +
                  options.each do |k, v|
         
     | 
| 
      
 26 
     | 
    
         
            +
                    send("#{k}=", v) if respond_to? "#{k}="
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                # Dynamically create accessors for boolean attriubtes
         
     | 
| 
      
 31 
     | 
    
         
            +
                BOOLEAN_ATTRIBUTES.each do |attr|
         
     | 
| 
      
 32 
     | 
    
         
            +
                  class_eval %{
         
     | 
| 
      
 33 
     | 
    
         
            +
                  # The #{attr} attribute reader
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # @return [Boolean]
         
     | 
| 
      
 35 
     | 
    
         
            +
                  attr_reader :#{attr} 
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  # The #{attr} writer
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # @param [Boolean] value The value to assign to #{attr}
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # @return [Boolean]
         
     | 
| 
      
 40 
     | 
    
         
            +
                  def #{attr}=(value)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    Axlsx::validate_boolean(value)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @#{attr} = value
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  }
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                # Initialize all the values to false as Excel requires them to
         
     | 
| 
      
 48 
     | 
    
         
            +
                # explicitly be disabled or all will show.
         
     | 
| 
      
 49 
     | 
    
         
            +
                def initialize_defaults
         
     | 
| 
      
 50 
     | 
    
         
            +
                  BOOLEAN_ATTRIBUTES.each do |attr|
         
     | 
| 
      
 51 
     | 
    
         
            +
                    self.send("#{attr}=", 0)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                # The name of the table style.
         
     | 
| 
      
 56 
     | 
    
         
            +
                attr_accessor :name
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                # seralizes this object to an xml string
         
     | 
| 
      
 59 
     | 
    
         
            +
                # @param [String] str the string to contact this objects serialization to.
         
     | 
| 
      
 60 
     | 
    
         
            +
                def to_xml_string(str = '')
         
     | 
| 
      
 61 
     | 
    
         
            +
                  str << '<tableStyleInfo '
         
     | 
| 
      
 62 
     | 
    
         
            +
                  instance_values.each do |key, value|
         
     | 
| 
      
 63 
     | 
    
         
            +
                    str << Axlsx::camel(key, false) << "='#{value}' "
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                  str << '/>'
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -42,6 +42,12 @@ module Axlsx 
     | 
|
| 
       42 
42 
     | 
    
         
             
                def name
         
     | 
| 
       43 
43 
     | 
    
         
             
                  @name ||=  "Sheet" + (index+1).to_s
         
     | 
| 
       44 
44 
     | 
    
         
             
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
         
     | 
| 
      
 46 
     | 
    
         
            +
                # The sheet calculation properties
         
     | 
| 
      
 47 
     | 
    
         
            +
                # @return [SheetCalcPr]
         
     | 
| 
      
 48 
     | 
    
         
            +
                def sheet_calc_pr
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @sheet_calc_pr ||= SheetCalcPr.new
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
       45 
51 
     | 
    
         | 
| 
       46 
52 
     | 
    
         
             
                # The sheet protection object for this workbook
         
     | 
| 
       47 
53 
     | 
    
         
             
                # @return [SheetProtection]
         
     | 
| 
         @@ -491,15 +497,24 @@ module Axlsx 
     | 
|
| 
       491 
497 
     | 
    
         
             
                # This intentionally does not use nokogiri for performance reasons
         
     | 
| 
       492 
498 
     | 
    
         
             
                # @return [String]
         
     | 
| 
       493 
499 
     | 
    
         
             
                def to_xml_string
         
     | 
| 
      
 500 
     | 
    
         
            +
                  auto_filter.apply if auto_filter.range
         
     | 
| 
       494 
501 
     | 
    
         
             
                  str = '<?xml version="1.0" encoding="UTF-8"?>'
         
     | 
| 
       495 
502 
     | 
    
         
             
                  str << worksheet_node
         
     | 
| 
       496 
503 
     | 
    
         
             
                  serializable_parts.each do |item|
         
     | 
| 
       497 
504 
     | 
    
         
             
                    item.to_xml_string(str) if item
         
     | 
| 
       498 
505 
     | 
    
         
             
                  end
         
     | 
| 
       499 
506 
     | 
    
         
             
                  str << '</worksheet>'
         
     | 
| 
       500 
     | 
    
         
            -
                  str 
     | 
| 
      
 507 
     | 
    
         
            +
                  sanitize(str)
         
     | 
| 
       501 
508 
     | 
    
         
             
                end
         
     | 
| 
       502 
509 
     | 
    
         | 
| 
      
 510 
     | 
    
         
            +
                # returns the provided string with all invalid control charaters
         
     | 
| 
      
 511 
     | 
    
         
            +
                # removed.
         
     | 
| 
      
 512 
     | 
    
         
            +
                # @param [String] str The sting to process
         
     | 
| 
      
 513 
     | 
    
         
            +
                # @return [String]
         
     | 
| 
      
 514 
     | 
    
         
            +
                def sanitize(str)
         
     | 
| 
      
 515 
     | 
    
         
            +
                  str.gsub(CONTROL_CHAR_REGEX, '')
         
     | 
| 
      
 516 
     | 
    
         
            +
                end
         
     | 
| 
      
 517 
     | 
    
         
            +
                
         
     | 
| 
       503 
518 
     | 
    
         
             
                # The worksheet relationships. This is managed automatically by the worksheet
         
     | 
| 
       504 
519 
     | 
    
         
             
                # @return [Relationships]
         
     | 
| 
       505 
520 
     | 
    
         
             
                def relationships
         
     | 
| 
         @@ -556,7 +571,7 @@ module Axlsx 
     | 
|
| 
       556 
571 
     | 
    
         | 
| 
       557 
572 
     | 
    
         | 
| 
       558 
573 
     | 
    
         
             
                private
         
     | 
| 
       559 
     | 
    
         
            -
             
     | 
| 
      
 574 
     | 
    
         
            +
               
         
     | 
| 
       560 
575 
     | 
    
         
             
                def validate_sheet_name(name)
         
     | 
| 
       561 
576 
     | 
    
         
             
                  DataTypeValidator.validate "Worksheet.name", String, name
         
     | 
| 
       562 
577 
     | 
    
         
             
                  raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.size > 31
         
     | 
| 
         @@ -569,7 +584,7 @@ module Axlsx 
     | 
|
| 
       569 
584 
     | 
    
         | 
| 
       570 
585 
     | 
    
         
             
                def serializable_parts
         
     | 
| 
       571 
586 
     | 
    
         
             
                  [sheet_pr, dimension, sheet_view, column_info,
         
     | 
| 
       572 
     | 
    
         
            -
                   sheet_data, @sheet_protection, protected_ranges,
         
     | 
| 
      
 587 
     | 
    
         
            +
                   sheet_data, sheet_calc_pr, @sheet_protection, protected_ranges,
         
     | 
| 
       573 
588 
     | 
    
         
             
                   auto_filter, merged_cells, conditional_formattings,
         
     | 
| 
       574 
589 
     | 
    
         
             
                   data_validations, hyperlinks, print_options, page_margins,
         
     | 
| 
       575 
590 
     | 
    
         
             
                   page_setup, worksheet_drawing, worksheet_comments,
         
     | 
| 
         @@ -105,6 +105,19 @@ class TestStyles < Test::Unit::TestCase 
     | 
|
| 
       105 
105 
     | 
    
         
             
                assert(@styles.parse_alignment_options(:alignment => {}).is_a?(Axlsx::CellAlignment))
         
     | 
| 
       106 
106 
     | 
    
         
             
              end
         
     | 
| 
       107 
107 
     | 
    
         | 
| 
      
 108 
     | 
    
         
            +
              def test_parse_font_using_defaults
         
     | 
| 
      
 109 
     | 
    
         
            +
                original = @styles.fonts.first
         
     | 
| 
      
 110 
     | 
    
         
            +
                @styles.add_style :b => 1, :sz => 99
         
     | 
| 
      
 111 
     | 
    
         
            +
                created = @styles.fonts.last
         
     | 
| 
      
 112 
     | 
    
         
            +
                original_attributes = original.instance_values
         
     | 
| 
      
 113 
     | 
    
         
            +
                assert_equal(1, created.b)
         
     | 
| 
      
 114 
     | 
    
         
            +
                assert_equal(99, created.sz)
         
     | 
| 
      
 115 
     | 
    
         
            +
                copied = original_attributes.reject{ |key, value| %w(b sz).include? key }
         
     | 
| 
      
 116 
     | 
    
         
            +
                copied.each do |key, value|
         
     | 
| 
      
 117 
     | 
    
         
            +
                  assert_equal(created.instance_values[key], value)
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
              end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
       108 
121 
     | 
    
         
             
              def test_parse_font_options
         
     | 
| 
       109 
122 
     | 
    
         
             
                options = {
         
     | 
| 
       110 
123 
     | 
    
         
             
                  :fg_color => "FF050505",
         
     | 
    
        data/test/util/tc_validators.rb
    CHANGED
    
    | 
         @@ -158,4 +158,11 @@ class TestValidators < Test::Unit::TestCase 
     | 
|
| 
       158 
158 
     | 
    
         
             
                assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
         
     | 
| 
       159 
159 
     | 
    
         
             
                assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
         
     | 
| 
       160 
160 
     | 
    
         
             
              end
         
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
              def test_range_validation
         
     | 
| 
      
 163 
     | 
    
         
            +
                 # exclusive
         
     | 
| 
      
 164 
     | 
    
         
            +
                 assert_raise(ArgumentError) { Axlsx::RangeValidator.validate('foo', 1, 10, 10, false) } 
         
     | 
| 
      
 165 
     | 
    
         
            +
                 # inclusive by default
         
     | 
| 
      
 166 
     | 
    
         
            +
                 assert_nothing_raised { Axlsx::RangeValidator.validate('foo', 1, 10, 10) }
         
     | 
| 
      
 167 
     | 
    
         
            +
              end
         
     | 
| 
      
 168 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tc_helper.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class TestAutoFilter < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 6 
     | 
    
         
            +
                ws = Axlsx::Package.new.workbook.add_worksheet
         
     | 
| 
      
 7 
     | 
    
         
            +
                3.times { |index| ws.add_row [1*index,2*index,3*index] }
         
     | 
| 
      
 8 
     | 
    
         
            +
                @auto_filter = ws.auto_filter
         
     | 
| 
      
 9 
     | 
    
         
            +
                @auto_filter.range = 'A1:C3'
         
     | 
| 
      
 10 
     | 
    
         
            +
                @auto_filter.add_column 0, :filters, :filter_items => [1]
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_defined_name
         
     | 
| 
      
 14 
     | 
    
         
            +
                assert_equal("'Sheet1'!$A$1:$C$3", @auto_filter.defined_name)
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def test_to_xml_string
         
     | 
| 
      
 18 
     | 
    
         
            +
                doc = Nokogiri::XML(@auto_filter.to_xml_string)
         
     | 
| 
      
 19 
     | 
    
         
            +
                assert(doc.xpath("autoFilter[@ref='#{@auto_filter.range}']"))
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def test_columns
         
     | 
| 
      
 23 
     | 
    
         
            +
                assert @auto_filter.columns.is_a?(Axlsx::SimpleTypedList)
         
     | 
| 
      
 24 
     | 
    
         
            +
                assert_equal @auto_filter.columns.allowed_types, [Axlsx::FilterColumn]
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def test_add_column
         
     | 
| 
      
 28 
     | 
    
         
            +
                @auto_filter.add_column(0, :filters) do |column|
         
     | 
| 
      
 29 
     | 
    
         
            +
                  assert column.is_a? FilterColumn
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def test_applya
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_equal nil, @auto_filter.worksheet.rows.last.hidden
         
     | 
| 
      
 35 
     | 
    
         
            +
                @auto_filter.apply
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal true, @auto_filter.worksheet.rows.last.hidden
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,76 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tc_helper.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class TestFilterColumn < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 6 
     | 
    
         
            +
                @filter_column = Axlsx::FilterColumn.new(0, :filters, :filter_items => [200])
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def test_initialize_col_id
         
     | 
| 
      
 11 
     | 
    
         
            +
                assert_raise ArgumentError do
         
     | 
| 
      
 12 
     | 
    
         
            +
                  Axlsx::FilterColumn.new(0, :bobs_house_of_filter)
         
     | 
| 
      
 13 
     | 
    
         
            +
                end 
         
     | 
| 
      
 14 
     | 
    
         
            +
                assert_raise ArgumentError do 
         
     | 
| 
      
 15 
     | 
    
         
            +
                  Axlsx::FilterColumn.new(:penut, :filters)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end 
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def test_initailize_filter_type
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert @filter_column.filter.is_a?(Axlsx::Filters)
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal 1, @filter_column.filter.filter_items.size
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def test_initialize_filter_type_filters_with_options
         
     | 
| 
      
 25 
     | 
    
         
            +
                assert_equal 200, @filter_column.filter.filter_items.first.val
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def test_initialize_with_block
         
     | 
| 
      
 29 
     | 
    
         
            +
                filter_column = Axlsx::FilterColumn.new(0, :filters) do |filters|
         
     | 
| 
      
 30 
     | 
    
         
            +
                  filters.filter_items = [700, 100, 5]
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                assert_equal 3, filter_column.filter.filter_items.size
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_equal 700, filter_column.filter.filter_items.first.val
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert_equal 5, filter_column.filter.filter_items.last.val
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              def test_default_show_button
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert_equal true, @filter_column.show_button
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              def test_default_hidden_button
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_equal false, @filter_column.hidden_button
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              def test_show_button
         
     | 
| 
      
 46 
     | 
    
         
            +
                assert_raise ArgumentError do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @filter_column.show_button = :foo 
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                assert_nothing_raised { @filter_column.show_button = false }
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              def test_hidden_button
         
     | 
| 
      
 53 
     | 
    
         
            +
                assert_raise ArgumentError do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @filter_column.hidden_button = :hoge
         
     | 
| 
      
 55 
     | 
    
         
            +
                end 
         
     | 
| 
      
 56 
     | 
    
         
            +
                assert_nothing_raised { @filter_column.hidden_button = true }
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              def test_col_id=
         
     | 
| 
      
 60 
     | 
    
         
            +
                assert_raise ArgumentError do 
         
     | 
| 
      
 61 
     | 
    
         
            +
                @filter_column.col_id = :bar
         
     | 
| 
      
 62 
     | 
    
         
            +
                end 
         
     | 
| 
      
 63 
     | 
    
         
            +
              assert_nothing_raised { @filter_column.col_id = 7 }
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              def test_to_xml_string
         
     | 
| 
      
 67 
     | 
    
         
            +
                doc = Nokogiri::XML(@filter_column.to_xml_string)
         
     | 
| 
      
 68 
     | 
    
         
            +
                assert doc.xpath("//filterColumn[@colId=#{@filter_column.col_id}]")
         
     | 
| 
      
 69 
     | 
    
         
            +
                assert doc.xpath("//filterColumn[@hiddenButton=#{@filter_column.hidden_button}]")
         
     | 
| 
      
 70 
     | 
    
         
            +
                assert doc.xpath("//filterColumn[@showButton=#{@filter_column.show_button}]")
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                assert doc.xpath("//filterColumn/filters")
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tc_helper.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class TestFilters < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 5 
     | 
    
         
            +
                @filters = Axlsx::Filters.new(:filter_items => [1, 'a'], 
         
     | 
| 
      
 6 
     | 
    
         
            +
                                              :date_group_items =>[ { :date_time_grouping => :year, :year => 2011, :month => 11, :day => 11, :hour => 0, :minute => 0, :second => 0 } ] , 
         
     | 
| 
      
 7 
     | 
    
         
            +
                                              :blank => true)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def test_blank
         
     | 
| 
      
 11 
     | 
    
         
            +
                assert_equal true, @filters.blank
         
     | 
| 
      
 12 
     | 
    
         
            +
                assert_raise(ArgumentError) { @filters.blank = :only_if_you_want_it }
         
     | 
| 
      
 13 
     | 
    
         
            +
                @filters.blank = true
         
     | 
| 
      
 14 
     | 
    
         
            +
                assert_equal true, @filters.blank
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def test_calendar_type
         
     | 
| 
      
 18 
     | 
    
         
            +
                assert_raise(ArgumentError) { @filters.calendar_type = 'monkey calendar' }
         
     | 
| 
      
 19 
     | 
    
         
            +
                @filters.calendar_type = 'japan'
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal('japan', @filters.calendar_type)
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def test_filters_items
         
     | 
| 
      
 24 
     | 
    
         
            +
                assert @filters.filter_items.is_a?(Array)
         
     | 
| 
      
 25 
     | 
    
         
            +
                assert_equal 2, @filters.filter_items.size
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def test_date_group_items
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert @filters.date_group_items.is_a?(Array)
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal 1, @filters.date_group_items.size
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
         
     | 
| 
      
 33 
     | 
    
         
            +
              def test_apply_is_false_for_matching_values
         
     | 
| 
      
 34 
     | 
    
         
            +
                keeper = Object.new
         
     | 
| 
      
 35 
     | 
    
         
            +
                def keeper.value; 'a'; end 
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal false, @filters.apply(keeper)
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              def test_apply_is_true_for_non_matching_values
         
     | 
| 
      
 40 
     | 
    
         
            +
                hidden = Object.new 
         
     | 
| 
      
 41 
     | 
    
         
            +
                def hidden.value; 'b'; end
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_equal true, @filters.apply(hidden)
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              def test_to_xml_string
         
     | 
| 
      
 46 
     | 
    
         
            +
                doc = Nokogiri::XML(@filters.to_xml_string)
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal(1, doc.xpath('//filters[@blank="true"]').size)
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
         @@ -275,6 +275,11 @@ class TestCell < Test::Unit::TestCase 
     | 
|
| 
       275 
275 
     | 
    
         
             
                assert_equal(sz, @c.row.worksheet.workbook.styles.fonts.first.sz)
         
     | 
| 
       276 
276 
     | 
    
         
             
              end
         
     | 
| 
       277 
277 
     | 
    
         | 
| 
      
 278 
     | 
    
         
            +
              def test_font_size_with_bolding
         
     | 
| 
      
 279 
     | 
    
         
            +
                @c.style = @c.row.worksheet.workbook.styles.add_style :b => true
         
     | 
| 
      
 280 
     | 
    
         
            +
                assert_equal(@c.row.worksheet.workbook.styles.fonts.first.sz * 1.5, @c.send(:font_size))
         
     | 
| 
      
 281 
     | 
    
         
            +
              end
         
     | 
| 
      
 282 
     | 
    
         
            +
             
     | 
| 
       278 
283 
     | 
    
         
             
              def test_font_size_with_custom_sz
         
     | 
| 
       279 
284 
     | 
    
         
             
                @c.style = @c.row.worksheet.workbook.styles.add_style :sz => 52
         
     | 
| 
       280 
285 
     | 
    
         
             
                sz = @c.send(:font_size)
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tc_helper.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class TestPageSetUpPr < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
             def setup
         
     | 
| 
      
 5 
     | 
    
         
            +
               @page_setup_pr = Axlsx::PageSetUpPr.new(:fit_to_page => true, :auto_page_breaks => true)
         
     | 
| 
      
 6 
     | 
    
         
            +
             end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
             def test_fit_to_page
         
     | 
| 
      
 9 
     | 
    
         
            +
               assert_equal true, @page_setup_pr.fit_to_page
         
     | 
| 
      
 10 
     | 
    
         
            +
             end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
             def test_auto_page_breaks
         
     | 
| 
      
 13 
     | 
    
         
            +
               assert_equal true, @page_setup_pr.auto_page_breaks
         
     | 
| 
      
 14 
     | 
    
         
            +
             end
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tc_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class TestSheetCalcPr < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 6 
     | 
    
         
            +
                @sheet_calc_pr = Axlsx::SheetCalcPr.new(:full_calc_on_load => false)
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def test_full_calc_on_load
         
     | 
| 
      
 10 
     | 
    
         
            +
                assert_equal false, @sheet_calc_pr.full_calc_on_load
         
     | 
| 
      
 11 
     | 
    
         
            +
                assert Axlsx::SheetCalcPr.new.full_calc_on_load
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def test_to_xml_string
         
     | 
| 
      
 15 
     | 
    
         
            +
                doc = Nokogiri::XML(@sheet_calc_pr.to_xml_string)
         
     | 
| 
      
 16 
     | 
    
         
            +
                assert_equal 1, doc.xpath('//sheetCalcPr[@fullCalcOnLoad="false"]').size
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'tc_helper.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class TestSheetPr < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 7 
     | 
    
         
            +
                worksheet = Axlsx::Package.new.workbook.add_worksheet
         
     | 
| 
      
 8 
     | 
    
         
            +
                @options = { 
         
     | 
| 
      
 9 
     | 
    
         
            +
                  :sync_horizontal => false,
         
     | 
| 
      
 10 
     | 
    
         
            +
                  :sync_vertical => false,
         
     | 
| 
      
 11 
     | 
    
         
            +
                  :transtion_evaluation => true,
         
     | 
| 
      
 12 
     | 
    
         
            +
                  :transition_entry => true,
         
     | 
| 
      
 13 
     | 
    
         
            +
                  :published => false,
         
     | 
| 
      
 14 
     | 
    
         
            +
                  :filter_mode => true,
         
     | 
| 
      
 15 
     | 
    
         
            +
                  :enable_format_conditions_calculation => false,
         
     | 
| 
      
 16 
     | 
    
         
            +
                  :code_name => '007',
         
     | 
| 
      
 17 
     | 
    
         
            +
                  :sync_ref => 'foo'
         
     | 
| 
      
 18 
     | 
    
         
            +
                }
         
     | 
| 
      
 19 
     | 
    
         
            +
                @sheet_pr = Axlsx::SheetPr.new(worksheet, @options)
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def test_initialization
         
     | 
| 
      
 23 
     | 
    
         
            +
                @options.each do |key, value|
         
     | 
| 
      
 24 
     | 
    
         
            +
                  assert_equal value, @sheet_pr.send(key)
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -15,6 +15,12 @@ class TestTable < Test::Unit::TestCase 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
              end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
      
 18 
     | 
    
         
            +
              def test_table_style_info
         
     | 
| 
      
 19 
     | 
    
         
            +
                table = @ws.add_table('A1:D5', :name => 'foo', :style_info => { :show_row_stripes => true, :name => "TableStyleMedium25" })
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal('TableStyleMedium25', table.table_style_info.name)
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal(true, table.table_style_info.show_row_stripes)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       18 
24 
     | 
    
         
             
              def test_add_table
         
     | 
| 
       19 
25 
     | 
    
         
             
                name = "test"
         
     | 
| 
       20 
26 
     | 
    
         
             
                table = @ws.add_table("A1:D5", :name => name)
         
     | 
| 
         @@ -22,7 +28,6 @@ class TestTable < Test::Unit::TestCase 
     | 
|
| 
       22 
28 
     | 
    
         
             
                assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
         
     | 
| 
       23 
29 
     | 
    
         
             
                assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
         
     | 
| 
       24 
30 
     | 
    
         
             
                assert_equal(table.name, name, "options for name are applied")
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
31 
     | 
    
         
             
              end
         
     | 
| 
       27 
32 
     | 
    
         | 
| 
       28 
33 
     | 
    
         
             
              def test_pn
         
     |