From cac5b8a3240bee9b669fe63bc0585d9294cd5b80 Mon Sep 17 00:00:00 2001 From: Edward Anderson Date: Wed, 2 Jan 2013 18:44:59 -0500 Subject: Don't add worksheets to the workbook when initialize fails Creating a worksheet with an invalid name would still add it to the workbook, despite raising an exception. --- lib/axlsx/workbook/worksheet/worksheet.rb | 2 +- test/workbook/worksheet/tc_worksheet.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index 26385573..b02af18e 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -23,11 +23,11 @@ module Axlsx # @option options [Boolean] show_gridlines indicates if gridlines should be shown for this sheet. def initialize(wb, options={}) self.workbook = wb - @workbook.worksheets << self @sheet_protection = nil initialize_page_options(options) parse_options options + @workbook.worksheets << self end # Initalizes page margin, setup and print options diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb index 8280aca0..b576047d 100644 --- a/test/workbook/worksheet/tc_worksheet.rb +++ b/test/workbook/worksheet/tc_worksheet.rb @@ -492,4 +492,10 @@ class TestWorksheet < Test::Unit::TestCase assert_equal(true, @ws.sheet_view.show_outline_symbols) end + def test_worksheet_does_not_get_added_to_workbook_on_initialize_failure + assert_equal(1, @wb.worksheets.size) + assert_raise(ArgumentError) { @wb.add_worksheet(:name => 'Sheet1') } + assert_equal(1, @wb.worksheets.size) + end + end -- cgit v1.2.3 From 2feb1ba5ae0d64012cff128c87631a32fc18de1a Mon Sep 17 00:00:00 2001 From: Edward Anderson Date: Wed, 2 Jan 2013 19:13:03 -0500 Subject: Worksheet name uniqueness doesn't apply to itself This constraint would prevent you from creating a new worksheet with the name that it would have gotten by default. --- lib/axlsx/workbook/worksheet/worksheet.rb | 4 ++-- test/workbook/worksheet/tc_worksheet.rb | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index b02af18e..5f650263 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -637,14 +637,14 @@ module Axlsx end sheet_view.show_outline_symbols = true end - end + def validate_sheet_name(name) DataTypeValidator.validate "Worksheet.name", String, name raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.size > 31 raise ArgumentError, (ERR_SHEET_NAME_CHARACTER_FORBIDDEN % name) if '[]*/\?:'.chars.any? { |char| name.include? char } name = Axlsx::coder.encode(name) - sheet_names = @workbook.worksheets.map { |s| s.name } + sheet_names = @workbook.worksheets.reject { |s| s == self }.map { |s| s.name } raise ArgumentError, (ERR_DUPLICATE_SHEET_NAME % name) if sheet_names.include?(name) end diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb index b576047d..ed8c7cab 100644 --- a/test/workbook/worksheet/tc_worksheet.rb +++ b/test/workbook/worksheet/tc_worksheet.rb @@ -405,6 +405,11 @@ class TestWorksheet < Test::Unit::TestCase assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) } end + def test_name_unique_only_checks_other_worksheet_names + assert_nothing_raised { @ws.name = @ws.name } + assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' } + end + def test_name_size assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() } assert_nothing_raised { @ws.name = Array.new(31, "A").join() } -- cgit v1.2.3 From a912d34ee779bd50942cc8d5fc6d684eb45dbdb6 Mon Sep 17 00:00:00 2001 From: "Randy Morgan (@morgan_randy)" Date: Thu, 10 Jan 2013 12:52:47 +0900 Subject: Update axlsx.gemspec rewording of gem description --- axlsx.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/axlsx.gemspec b/axlsx.gemspec index be46cb6b..bb5c4881 100644 --- a/axlsx.gemspec +++ b/axlsx.gemspec @@ -11,7 +11,7 @@ Gem::Specification.new do |s| s.summary = "excel OOXML (xlsx) with charts, styles, images and autowidth columns." s.has_rdoc = 'axlsx' s.description = <<-eof - xlsx generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents without having to understand the entire ECMA specification. Check out the README for some examples of how easy it is. Best of all, you can validate your xlsx file before serialization so you know for sure that anything generated is going to load on your client's machine. + xlsx spreadsheet generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx helps you create beautiful Office Open XML Spreadsheet documents ( Excel, Google Spreadsheet, Numbers, LibreOffice) without having to understand the entire ECMA specification. Check out the README for some examples of how easy it is. Best of all, you can validate your xlsx file before serialization so you know for sure that anything generated is going to load on your client's machine. eof s.files = Dir.glob("{lib/**/*,examples/**/*.rb,examples/**/*.jpeg}") + %w{ LICENSE README.md Rakefile CHANGELOG.md .yardopts } s.test_files = Dir.glob("{test/**/*}") -- cgit v1.2.3