Skip to content

Commit

Permalink
Merge pull request #155 from nilbus/name-validation
Browse files Browse the repository at this point in the history
Fixes related to validating worksheet name uniqueness
  • Loading branch information
randym committed Jan 8, 2013
2 parents f7eeb07 + 2feb1ba commit dc29748
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
6 changes: 3 additions & 3 deletions lib/axlsx/workbook/worksheet/worksheet.rb
Expand Up @@ -23,11 +23,11 @@ def self.thin_chars
# @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
Expand Down Expand Up @@ -637,14 +637,14 @@ def outline(collection, range, level = 1, collapsed = true)
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

Expand Down
11 changes: 11 additions & 0 deletions test/workbook/worksheet/tc_worksheet.rb
Expand Up @@ -405,6 +405,11 @@ def test_name_unique
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() }
Expand Down Expand Up @@ -492,4 +497,10 @@ def test_outline_level_columns
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

0 comments on commit dc29748

Please sign in to comment.