bc-to_xls 0.0.1 → 0.1.0
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/.gitignore +2 -0
- data/VERSION +1 -1
- data/bc-to_xls.gemspec +6 -6
- data/lib/to_xls.rb +11 -6
- data/test/test_helper.rb +3 -1
- data/test/to_xls_test.rb +94 -13
- metadata +3 -2
    
        data/.gitignore
    ADDED
    
    
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.0 | 
| 1 | 
            +
            0.1.0
         | 
    
        data/bc-to_xls.gemspec
    CHANGED
    
    | @@ -1,22 +1,23 @@ | |
| 1 1 | 
             
            # Generated by jeweler
         | 
| 2 | 
            -
            # DO NOT EDIT THIS FILE | 
| 3 | 
            -
            # Instead, edit Jeweler::Tasks in Rakefile, and run  | 
| 2 | 
            +
            # DO NOT EDIT THIS FILE
         | 
| 3 | 
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
         | 
| 4 4 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{bc-to_xls}
         | 
| 8 | 
            -
              s.version = "0.0 | 
| 8 | 
            +
              s.version = "0.1.0"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Jo\303\243o Jesus", "Vasco Andrade e Silva"]
         | 
| 12 | 
            -
              s.date = %q{2010-02- | 
| 12 | 
            +
              s.date = %q{2010-02-14}
         | 
| 13 13 | 
             
              s.description = %q{to_xls from http://github.com/arydjmal/to_xls with i18n support}
         | 
| 14 14 | 
             
              s.email = %q{info@byclosure.com}
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
| 16 16 | 
             
                "README.rdoc"
         | 
| 17 17 | 
             
              ]
         | 
| 18 18 | 
             
              s.files = [
         | 
| 19 | 
            -
                " | 
| 19 | 
            +
                ".gitignore",
         | 
| 20 | 
            +
                 "MIT-LICENSE",
         | 
| 20 21 | 
             
                 "README.rdoc",
         | 
| 21 22 | 
             
                 "Rakefile",
         | 
| 22 23 | 
             
                 "VERSION",
         | 
| @@ -55,4 +56,3 @@ Gem::Specification.new do |s| | |
| 55 56 | 
             
                s.add_dependency(%q<activerecord>, [">= 1.1"])
         | 
| 56 57 | 
             
              end
         | 
| 57 58 | 
             
            end
         | 
| 58 | 
            -
             | 
    
        data/lib/to_xls.rb
    CHANGED
    
    | @@ -5,27 +5,32 @@ class Array | |
| 5 5 |  | 
| 6 6 | 
             
                if self.any?
         | 
| 7 7 | 
             
                  instance = self.first
         | 
| 8 | 
            -
                  attributes = instance.attributes.keys.map { |c| c.to_sym }
         | 
| 8 | 
            +
                  attributes = instance.attributes.keys.sort.map { |c| c.to_sym }
         | 
| 9 9 |  | 
| 10 10 | 
             
                  if options[:only]
         | 
| 11 11 | 
             
                    # the "& attributes" get rid of invalid columns
         | 
| 12 | 
            -
                    columns = options[:only] | 
| 12 | 
            +
                    columns = Array(options[:only]) & attributes
         | 
| 13 13 | 
             
                  else
         | 
| 14 | 
            -
                    columns = attributes - options[:except] | 
| 14 | 
            +
                    columns = attributes - Array(options[:except])
         | 
| 15 15 | 
             
                  end
         | 
| 16 | 
            -
             | 
| 16 | 
            +
             | 
| 17 17 | 
             
                  columns += options[:methods].to_a
         | 
| 18 18 |  | 
| 19 19 | 
             
                  if columns.any?
         | 
| 20 20 | 
             
                    unless options[:headers] == false
         | 
| 21 21 | 
             
                      output << "<Row>"
         | 
| 22 | 
            -
                      columns.each  | 
| 22 | 
            +
                      columns.each do |column|
         | 
| 23 | 
            +
                        output << "<Cell><Data ss:Type=\"String\">#{instance.class.human_attribute_name(column)}</Data></Cell>"
         | 
| 24 | 
            +
                      end
         | 
| 23 25 | 
             
                      output << "</Row>"
         | 
| 24 26 | 
             
                    end    
         | 
| 25 27 |  | 
| 26 28 | 
             
                    self.each do |item|
         | 
| 27 29 | 
             
                      output << "<Row>"
         | 
| 28 | 
            -
                      columns.each  | 
| 30 | 
            +
                      columns.each do |column|
         | 
| 31 | 
            +
                        value = item.send(column)
         | 
| 32 | 
            +
                        output << "<Cell><Data ss:Type=\"#{value.kind_of?(Integer) ? 'Number' : 'String'}\">#{value}</Data></Cell>"
         | 
| 33 | 
            +
                      end
         | 
| 29 34 | 
             
                      output << "</Row>"
         | 
| 30 35 | 
             
                    end
         | 
| 31 36 | 
             
                  end
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -4,7 +4,9 @@ RAILS_ROOT = plugin_test_dir | |
| 4 4 |  | 
| 5 5 | 
             
            require 'rubygems'
         | 
| 6 6 | 
             
            require 'test/unit'
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            require 'active_support'
         | 
| 8 | 
            +
            require 'multi_rails_init'
         | 
| 9 | 
            +
            require "test_help"
         | 
| 8 10 | 
             
            require plugin_test_dir + '/../rails/init.rb'
         | 
| 9 11 |  | 
| 10 12 | 
             
            TestCaseClass = ActiveSupport::TestCase rescue Test::Unit::TestCase
         | 
    
        data/test/to_xls_test.rb
    CHANGED
    
    | @@ -1,7 +1,37 @@ | |
| 1 1 | 
             
            require 'test_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            class  | 
| 3 | 
            +
            class User < ActiveRecord::Base
         | 
| 4 | 
            +
              def is_old?
         | 
| 5 | 
            +
                age > 22
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
            end
         | 
| 4 8 |  | 
| 9 | 
            +
            class ToXlsTest < TestCaseClass
         | 
| 10 | 
            +
              def xls_doc(content)
         | 
| 11 | 
            +
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Workbook xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:html=\"http://www.w3.org/TR/REC-html40\" xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">#{content}</Workbook>"
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
              
         | 
| 14 | 
            +
              def worksheet(name, content)
         | 
| 15 | 
            +
                "<Worksheet ss:Name=\"#{name}\">#{content}</Worksheet>"
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              def worksheet_doc(worksheet_name, content)
         | 
| 19 | 
            +
                xls_doc(worksheet(worksheet_name, content))
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              def cell(type, content)
         | 
| 23 | 
            +
                "<Cell><Data ss:Type=\"#{type}\">#{content}</Data></Cell>"
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
              
         | 
| 26 | 
            +
              def row(*cells)
         | 
| 27 | 
            +
                "<Row>#{cells.join}</Row>"
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
              
         | 
| 30 | 
            +
              def table(*rows)
         | 
| 31 | 
            +
                "<Table>#{rows.join}</Table>"
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
              
         | 
| 34 | 
            +
              # *****
         | 
| 5 35 | 
             
              def setup
         | 
| 6 36 | 
             
                @users = []
         | 
| 7 37 | 
             
                @users << User.new(:id => 1, :name => 'Ary', :age => 24)
         | 
| @@ -9,45 +39,96 @@ class ToXlsTest < TestCaseClass | |
| 9 39 | 
             
              end
         | 
| 10 40 |  | 
| 11 41 | 
             
              def test_with_empty_array
         | 
| 12 | 
            -
                assert_equal( " | 
| 42 | 
            +
                assert_equal( worksheet_doc("Sheet1", table), [].to_xls )
         | 
| 13 43 | 
             
              end
         | 
| 14 44 |  | 
| 15 45 | 
             
              def test_with_no_options
         | 
| 16 | 
            -
                assert_equal( " | 
| 46 | 
            +
                assert_equal( worksheet_doc("Sheet1", table(
         | 
| 47 | 
            +
                  row(cell("String", "Age"), cell("String", "Name")),
         | 
| 48 | 
            +
                  row(cell("Number", 24), cell("String", "Ary")),
         | 
| 49 | 
            +
                  row(cell("Number", 21), cell("String", "Nati")))),
         | 
| 50 | 
            +
                  @users.to_xls
         | 
| 51 | 
            +
                )
         | 
| 17 52 | 
             
              end
         | 
| 18 53 |  | 
| 19 54 | 
             
              def test_with_no_headers
         | 
| 20 | 
            -
                assert_equal( | 
| 55 | 
            +
                assert_equal(worksheet_doc("Sheet1", table(
         | 
| 56 | 
            +
                  row(cell("Number", 24), cell("String", "Ary")),
         | 
| 57 | 
            +
                  row(cell("Number", 21), cell("String", "Nati")))),
         | 
| 58 | 
            +
                  @users.to_xls(:headers => false)
         | 
| 59 | 
            +
                ) 
         | 
| 21 60 | 
             
              end
         | 
| 22 61 |  | 
| 23 62 | 
             
              def test_with_only
         | 
| 24 | 
            -
                assert_equal( " | 
| 63 | 
            +
                assert_equal( worksheet_doc("Sheet1", table(
         | 
| 64 | 
            +
                  row(cell("String", "Name")),
         | 
| 65 | 
            +
                  row(cell("String", "Ary")),
         | 
| 66 | 
            +
                  row(cell("String", "Nati")))),
         | 
| 67 | 
            +
                  @users.to_xls(:only => :name)
         | 
| 68 | 
            +
                )
         | 
| 25 69 | 
             
              end
         | 
| 26 70 |  | 
| 27 71 | 
             
              def test_with_empty_only
         | 
| 28 | 
            -
                assert_equal( " | 
| 72 | 
            +
                assert_equal( worksheet_doc("Sheet1", table), @users.to_xls(:only => "") )
         | 
| 29 73 | 
             
              end
         | 
| 30 74 |  | 
| 31 75 | 
             
              def test_with_only_and_wrong_column_names
         | 
| 32 | 
            -
                assert_equal( " | 
| 76 | 
            +
                assert_equal( worksheet_doc("Sheet1", table(
         | 
| 77 | 
            +
                  row(cell("String", "Name")),
         | 
| 78 | 
            +
                  row(cell("String", "Ary")),
         | 
| 79 | 
            +
                  row(cell("String", "Nati")))),
         | 
| 80 | 
            +
                  @users.to_xls(:only => [:name, :yoyo])
         | 
| 81 | 
            +
                )
         | 
| 33 82 | 
             
              end
         | 
| 34 83 |  | 
| 35 84 | 
             
              def test_with_except
         | 
| 36 | 
            -
                assert_equal( " | 
| 85 | 
            +
                assert_equal( worksheet_doc("Sheet1", table(
         | 
| 86 | 
            +
                  row(cell("String", "Age")),
         | 
| 87 | 
            +
                  row(cell("Number", 24)),
         | 
| 88 | 
            +
                  row(cell("Number", 21)))),
         | 
| 89 | 
            +
                  @users.to_xls(:except => [:id, :name])
         | 
| 90 | 
            +
                )
         | 
| 37 91 | 
             
              end
         | 
| 38 92 |  | 
| 39 93 | 
             
              def test_with_except_and_only_should_listen_to_only
         | 
| 40 | 
            -
                assert_equal( " | 
| 94 | 
            +
                assert_equal( worksheet_doc("Sheet1", table(
         | 
| 95 | 
            +
                  row(cell("String", "Name")),
         | 
| 96 | 
            +
                  row(cell("String", "Ary")),
         | 
| 97 | 
            +
                  row(cell("String", "Nati")))),
         | 
| 98 | 
            +
                  @users.to_xls(:except => [:id, :name], :only => :name)
         | 
| 99 | 
            +
                )
         | 
| 41 100 | 
             
              end
         | 
| 42 101 |  | 
| 43 | 
            -
              def  | 
| 44 | 
            -
                assert_equal( " | 
| 102 | 
            +
              def test_with_methods
         | 
| 103 | 
            +
                assert_equal( worksheet_doc("Sheet1", table(
         | 
| 104 | 
            +
                  row(cell("String", "Age"), cell("String", "Name"), cell("String", "Is old?")),
         | 
| 105 | 
            +
                  row(cell("Number", 24), cell("String", "Ary"), cell("String", "true")),
         | 
| 106 | 
            +
                  row(cell("Number", 21), cell("String", "Nati"), cell("String", "false")))),
         | 
| 107 | 
            +
                  @users.to_xls(:methods => [:is_old?])
         | 
| 108 | 
            +
                )
         | 
| 45 109 | 
             
              end
         | 
| 46 110 |  | 
| 47 111 | 
             
              def test_with_i18n
         | 
| 112 | 
            +
                old_locale = I18n.locale
         | 
| 48 113 | 
             
                I18n.locale = "pt-PT"
         | 
| 49 | 
            -
                 | 
| 50 | 
            -
             | 
| 114 | 
            +
                I18n.backend.store_translations("pt-PT", {
         | 
| 115 | 
            +
                  "activerecord" => {
         | 
| 116 | 
            +
                    "attributes" => {
         | 
| 117 | 
            +
                      "user" => {
         | 
| 118 | 
            +
                        "name" => "Nome",
         | 
| 119 | 
            +
                        "age" => "Idade"
         | 
| 120 | 
            +
                      }
         | 
| 121 | 
            +
                    }
         | 
| 122 | 
            +
                  }
         | 
| 123 | 
            +
                })
         | 
| 124 | 
            +
                assert_equal( worksheet_doc("Sheet1", table(
         | 
| 125 | 
            +
                  row(cell("String", "Idade"), cell("String", "Nome")),
         | 
| 126 | 
            +
                  row(cell("Number", 24), cell("String", "Ary")),
         | 
| 127 | 
            +
                  row(cell("Number", 21), cell("String", "Nati")))),
         | 
| 128 | 
            +
                  @users.to_xls
         | 
| 129 | 
            +
                )
         | 
| 130 | 
            +
              ensure
         | 
| 131 | 
            +
                I18n.locale = old_locale
         | 
| 51 132 | 
             
              end
         | 
| 52 133 |  | 
| 53 134 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: bc-to_xls
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - "Jo\xC3\xA3o Jesus"
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2010-02- | 
| 13 | 
            +
            date: 2010-02-14 00:00:00 +00:00
         | 
| 14 14 | 
             
            default_executable: 
         | 
| 15 15 | 
             
            dependencies: 
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -32,6 +32,7 @@ extensions: [] | |
| 32 32 | 
             
            extra_rdoc_files: 
         | 
| 33 33 | 
             
            - README.rdoc
         | 
| 34 34 | 
             
            files: 
         | 
| 35 | 
            +
            - .gitignore
         | 
| 35 36 | 
             
            - MIT-LICENSE
         | 
| 36 37 | 
             
            - README.rdoc
         | 
| 37 38 | 
             
            - Rakefile
         |