spreadsheet 1.3.3 → 1.3.5

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/bin/irb +29 -0
  3. data/bin/racc +29 -0
  4. data/bin/rdbg +29 -0
  5. data/bin/rdoc +29 -0
  6. data/bin/ri +29 -0
  7. data/bin/rubocop +29 -0
  8. data/bin/ruby-parse +29 -0
  9. data/bin/ruby-rewrite +29 -0
  10. data/bin/standardrb +29 -0
  11. data/bin/test-unit +29 -0
  12. data/lib/parseexcel/parseexcel.rb +66 -58
  13. data/lib/parseexcel/parser.rb +1 -1
  14. data/lib/parseexcel.rb +1 -1
  15. data/lib/spreadsheet/column.rb +13 -10
  16. data/lib/spreadsheet/compatibility.rb +3 -1
  17. data/lib/spreadsheet/datatypes.rb +150 -147
  18. data/lib/spreadsheet/encodings.rb +20 -16
  19. data/lib/spreadsheet/errors.rb +2 -2
  20. data/lib/spreadsheet/excel/error.rb +23 -22
  21. data/lib/spreadsheet/excel/internals/biff5.rb +11 -11
  22. data/lib/spreadsheet/excel/internals/biff8.rb +13 -13
  23. data/lib/spreadsheet/excel/internals.rb +451 -451
  24. data/lib/spreadsheet/excel/offset.rb +34 -31
  25. data/lib/spreadsheet/excel/password_hash.rb +18 -18
  26. data/lib/spreadsheet/excel/reader/biff5.rb +34 -35
  27. data/lib/spreadsheet/excel/reader/biff8.rb +235 -222
  28. data/lib/spreadsheet/excel/reader.rb +1331 -1274
  29. data/lib/spreadsheet/excel/rgb.rb +91 -91
  30. data/lib/spreadsheet/excel/row.rb +99 -91
  31. data/lib/spreadsheet/excel/sst_entry.rb +41 -38
  32. data/lib/spreadsheet/excel/workbook.rb +87 -76
  33. data/lib/spreadsheet/excel/worksheet.rb +126 -107
  34. data/lib/spreadsheet/excel/writer/biff8.rb +57 -55
  35. data/lib/spreadsheet/excel/writer/format.rb +274 -256
  36. data/lib/spreadsheet/excel/writer/n_worksheet.rb +838 -798
  37. data/lib/spreadsheet/excel/writer/workbook.rb +672 -635
  38. data/lib/spreadsheet/excel/writer/worksheet.rb +899 -861
  39. data/lib/spreadsheet/excel/writer.rb +1 -1
  40. data/lib/spreadsheet/excel.rb +19 -12
  41. data/lib/spreadsheet/font.rb +31 -26
  42. data/lib/spreadsheet/format.rb +75 -59
  43. data/lib/spreadsheet/link.rb +8 -5
  44. data/lib/spreadsheet/note.rb +7 -6
  45. data/lib/spreadsheet/noteObject.rb +6 -5
  46. data/lib/spreadsheet/row.rb +35 -24
  47. data/lib/spreadsheet/version.rb +1 -1
  48. data/lib/spreadsheet/workbook.rb +28 -13
  49. data/lib/spreadsheet/worksheet.rb +103 -68
  50. data/lib/spreadsheet/writer.rb +3 -0
  51. data/lib/spreadsheet.rb +12 -15
  52. data/test/data/test_row_record_empty_range.xls +0 -0
  53. data/test/excel/reader.rb +8 -8
  54. data/test/excel/row.rb +35 -31
  55. data/test/excel/writer/workbook.rb +18 -16
  56. data/test/excel/writer/worksheet.rb +10 -8
  57. data/test/font.rb +44 -32
  58. data/test/format.rb +38 -33
  59. data/test/integration.rb +641 -598
  60. data/test/row.rb +5 -3
  61. data/test/suite.rb +7 -7
  62. data/test/workbook.rb +15 -14
  63. data/test/workbook_protection.rb +5 -5
  64. data/test/worksheet.rb +36 -34
  65. metadata +59 -6
@@ -1,4 +1,4 @@
1
- require 'spreadsheet/helpers'
1
+ require "spreadsheet/helpers"
2
2
 
3
3
  module Spreadsheet
4
4
  ##
@@ -18,19 +18,21 @@ module Spreadsheet
18
18
  # #height:: The height of this Row in points (defaults to 12).
19
19
  class Row < Array
20
20
  include Datatypes
21
+
21
22
  class << self
22
23
  def format_updater *keys
23
24
  keys.each do |key|
24
- unless instance_methods.include? "unupdated_#{key}="
25
+ unless method_defined?("unupdated_#{key}=")
25
26
  alias_method :"unupdated_#{key}=", :"#{key}="
26
- define_method "#{key}=" do |value|
27
- send "unupdated_#{key}=", value
28
- @worksheet.row_updated @idx, self if @worksheet
27
+ define_method :"#{key}=" do |value|
28
+ send :"unupdated_#{key}=", value
29
+ @worksheet&.row_updated @idx, self
29
30
  value
30
31
  end
31
32
  end
32
33
  end
33
34
  end
35
+
34
36
  def updater *keys
35
37
  keys.each do |key|
36
38
  ## Passing blocks to methods defined with define_method is not possible
@@ -38,10 +40,10 @@ module Spreadsheet
38
40
  # http://groups.google.com/group/ruby-talk-google/msg/778184912b769e5f
39
41
  # use class_eval as suggested by someone else in
40
42
  # http://rubyforge.org/tracker/index.php?func=detail&aid=25732&group_id=678&atid=2677
41
- class_eval <<-SRC, __FILE__, __LINE__
43
+ class_eval <<-SRC, __FILE__, __LINE__ + 1
42
44
  def #{key}(*args)
43
45
  res = super(*args)
44
- @worksheet.row_updated @idx, self if @worksheet
46
+ @worksheet&.row_updated @idx, self
45
47
  res
46
48
  end
47
49
  SRC
@@ -53,43 +55,49 @@ module Spreadsheet
53
55
  boolean :hidden, :collapsed
54
56
  enum :outline_level, 0, Integer
55
57
  updater :[]=, :clear, :concat, :delete, :delete_if, :fill, :insert, :map!,
56
- :pop, :push, :reject!, :replace, :reverse!, :shift, :slice!,
57
- :sort!, :uniq!, :unshift
58
+ :pop, :push, :reject!, :replace, :reverse!, :shift, :slice!,
59
+ :sort!, :uniq!, :unshift
58
60
  format_updater :collapsed, :height, :hidden, :outline_level
59
- def initialize worksheet, idx, cells=[]
61
+ def initialize worksheet, idx, cells = []
60
62
  @default_format = nil
61
63
  @worksheet = worksheet
62
64
  @idx = idx
63
- super cells
65
+ super(cells)
64
66
  @formats = []
65
67
  @height = 12.1
66
68
  end
69
+
67
70
  ##
68
71
  # The default Format of this Row, if you have set one.
69
72
  # Returns the Worksheet's default or the Workbook's default Format otherwise.
70
73
  def default_format
71
- @default_format || @worksheet.default_format || @workbook.default_format
74
+ @default_format || @worksheet&.default_format || @workbook.default_format
72
75
  end
76
+
73
77
  ##
74
78
  # Set the default Format used when writing a Cell if no explicit Format is
75
79
  # stored for the cell.
76
80
  def default_format= format
77
- @worksheet.add_format format if @worksheet
81
+ @worksheet&.add_format format
78
82
  @default_format = format
79
83
  end
80
84
  format_updater :default_format
81
85
  ##
82
86
  # #first_used the 0-based index of the first non-blank Cell.
83
87
  def first_used
84
- [ index_of_first(self), index_of_first(@formats) ].compact.min
88
+ [index_of_first(self), index_of_first(@formats)].compact.min
85
89
  end
90
+
86
91
  ##
87
92
  # The Format for the Cell at _idx_ (0-based), or the first valid Format in
88
93
  # Row#default_format, Column#default_format and Worksheet#default_format.
89
94
  def format idx
90
- @formats[idx] || @default_format \
91
- || @worksheet.column(idx).default_format if @worksheet
95
+ if @worksheet
96
+ @formats[idx] || @default_format \
97
+ || @worksheet.column(idx).default_format
98
+ end
92
99
  end
100
+
93
101
  ##
94
102
  # Returns a copy of self with nil-values appended for empty cells that have
95
103
  # an associated Format.
@@ -102,30 +110,32 @@ module Spreadsheet
102
110
  end
103
111
  copy
104
112
  end
113
+
105
114
  ##
106
115
  # Same as Row#size, but takes into account formatted empty cells
107
116
  def formatted_size
108
117
  Helpers.rcompact(@formats)
109
118
  sz = size
110
119
  fs = @formats.size
111
- fs > sz ? fs : sz
120
+ (fs > sz) ? fs : sz
112
121
  end
113
122
  ##
114
123
  # #first_unused (really last used + 1) - the 0-based index of the first of
115
124
  # all remaining contiguous blank Cells.
116
- alias :first_unused :formatted_size
125
+ alias_method :first_unused, :formatted_size
117
126
  def inspect
118
127
  variables = instance_variables.collect do |name|
119
128
  "%s=%s" % [name, instance_variable_get(name)]
120
- end.join(' ')
129
+ end.join(" ")
121
130
  sprintf "#<%s:0x%014x %s %s>", self.class, object_id, variables, super
122
131
  end
132
+
123
133
  ##
124
134
  # Set the Format for the Cell at _idx_ (0-based).
125
135
  def set_format idx, fmt
126
136
  @formats[idx] = fmt
127
- @worksheet.add_format fmt
128
- @worksheet.row_updated @idx, self if @worksheet
137
+ @worksheet&.add_format fmt
138
+ @worksheet&.row_updated @idx, self
129
139
  fmt
130
140
  end
131
141
 
@@ -137,13 +147,14 @@ module Spreadsheet
137
147
  fmt.font = fmt.font.clone
138
148
  @formats[idx] = fmt.update_format(opts)
139
149
  end
140
- @worksheet.add_format @formats[idx]
141
- @worksheet.row_updated @idx, self if @worksheet
150
+ @worksheet&.add_format @formats[idx]
151
+ @worksheet&.row_updated @idx, self
142
152
  end
143
153
 
144
154
  private
155
+
145
156
  def index_of_first ary # :nodoc:
146
- if first = ary.find do |elm| !elm.nil? end
157
+ if (first = ary.find { |elm| !elm.nil? })
147
158
  ary.index first
148
159
  end
149
160
  end
@@ -3,5 +3,5 @@
3
3
  module Spreadsheet
4
4
  ##
5
5
  # The version of Spreadsheet you are using.
6
- VERSION = '1.3.3'
6
+ VERSION = "1.3.5"
7
7
  end
@@ -1,5 +1,5 @@
1
- require 'spreadsheet/format'
2
- require 'spreadsheet/encodings'
1
+ require "spreadsheet/format"
2
+ require "spreadsheet/encodings"
3
3
 
4
4
  module Spreadsheet
5
5
  ##
@@ -12,19 +12,21 @@ module Spreadsheet
12
12
  # Row#default_format or Worksheet#default_format.
13
13
  class Workbook
14
14
  include Spreadsheet::Encodings
15
+
15
16
  attr_reader :io, :worksheets, :formats, :fonts, :palette
16
17
  attr_accessor :active_worksheet, :encoding, :default_format, :version
17
- def initialize io = nil, opts={:default_format => Format.new}
18
+ def initialize io = nil, opts = {default_format: Format.new}
18
19
  @worksheets = []
19
20
  @io = io
20
21
  @fonts = []
21
22
  @palette = {}
22
23
  @formats = []
23
24
  @formats_set = {}
24
- if @default_format = opts[:default_format]
25
+ if (@default_format = opts[:default_format])
25
26
  add_format @default_format
26
27
  end
27
28
  end
29
+
28
30
  ##
29
31
  # Add a Font to the Workbook. Used by the parser. You should not need to
30
32
  # use this Method.
@@ -32,6 +34,7 @@ module Spreadsheet
32
34
  @fonts.push(font).uniq! if font
33
35
  font
34
36
  end
37
+
35
38
  ##
36
39
  # Add a Format to the Workbook. If you use Row#set_format, you should not
37
40
  # need to use this Method.
@@ -42,6 +45,7 @@ module Spreadsheet
42
45
  end
43
46
  format
44
47
  end
48
+
45
49
  ##
46
50
  # Add a Worksheet to the Workbook.
47
51
  def add_worksheet worksheet
@@ -49,18 +53,21 @@ module Spreadsheet
49
53
  @worksheets.push worksheet
50
54
  worksheet
51
55
  end
56
+
52
57
  ##
53
58
  # Delete a Worksheet from Workbook by it's index
54
59
  def delete_worksheet worksheet_index
55
60
  @worksheets.delete_at worksheet_index
56
61
  end
62
+
57
63
  ##
58
64
  # Change the RGB components of the elements in the colour palette.
59
65
  def set_custom_color idx, red, green, blue
60
- raise 'Invalid format' if [red, green, blue].find { |c| ! (0..255).include?(c) }
66
+ raise "Invalid format" if [red, green, blue].find { |c| !(0..255).cover?(c) }
61
67
 
62
68
  @palette[idx] = [red, green, blue]
63
69
  end
70
+
64
71
  ##
65
72
  # Create a new Worksheet in this Workbook.
66
73
  # Used without options this creates a Worksheet with the name 'WorksheetN'
@@ -69,20 +76,23 @@ module Spreadsheet
69
76
  # Use the option <em>:name => 'My pretty Name'</em> to override this
70
77
  # behavior.
71
78
  def create_worksheet opts = {}
72
- opts[:name] ||= client("Worksheet#{@worksheets.size.next}", 'UTF-8')
79
+ opts[:name] ||= client("Worksheet#{@worksheets.size.next}", "UTF-8")
73
80
  add_worksheet Worksheet.new(opts)
74
81
  end
82
+
75
83
  ##
76
84
  # Returns the count of total worksheets present.
77
85
  # Takes no arguments. Just returns the length of @worksheets array.
78
86
  def sheet_count
79
87
  @worksheets.length
80
88
  end
89
+
81
90
  ##
82
91
  # The Font at _idx_
83
92
  def font idx
84
93
  @fonts[idx]
85
94
  end
95
+
86
96
  ##
87
97
  # The Format at _idx_, or - if _idx_ is a String -
88
98
  # the Format with name == _idx_
@@ -91,23 +101,26 @@ module Spreadsheet
91
101
  when Integer
92
102
  @formats[idx] || @default_format || Format.new
93
103
  when String
94
- @formats.find do |fmt| fmt.name == idx end
104
+ @formats.find { |fmt| fmt.name == idx }
95
105
  end
96
106
  end
107
+
97
108
  def inspect
98
109
  variables = (instance_variables - uninspect_variables).collect do |name|
99
110
  "%s=%s" % [name, instance_variable_get(name)]
100
- end.join(' ')
111
+ end.join(" ")
101
112
  uninspect = uninspect_variables.collect do |name|
102
113
  var = instance_variable_get name
103
114
  "%s=%s[%i]" % [name, var.class, var.size]
104
- end.join(' ')
115
+ end.join(" ")
105
116
  sprintf "#<%s:0x%014x %s %s>", self.class, object_id,
106
- variables, uninspect
117
+ variables, uninspect
107
118
  end
119
+
108
120
  def uninspect_variables # :nodoc:
109
- %w{@formats @fonts @worksheets}
121
+ %w[@formats @fonts @worksheets]
110
122
  end
123
+
111
124
  ##
112
125
  # The Worksheet at _idx_, or - if _idx_ is a String -
113
126
  # the Worksheet with name == _idx_
@@ -116,9 +129,10 @@ module Spreadsheet
116
129
  when Integer
117
130
  @worksheets[idx]
118
131
  when String
119
- @worksheets.find do |sheet| sheet.name == idx end
132
+ @worksheets.find { |sheet| sheet.name == idx }
120
133
  end
121
134
  end
135
+
122
136
  ##
123
137
  # Write this Workbook to a File, IO Stream or Writer Object. The latter will
124
138
  # make more sense once there are more than just an Excel-Writer available.
@@ -129,10 +143,11 @@ module Spreadsheet
129
143
  writer(io_path_or_writer).write(self)
130
144
  end
131
145
  end
146
+
132
147
  ##
133
148
  # Returns a new instance of the default Writer class for this Workbook (can
134
149
  # only be an Excel::Writer::Workbook at this time)
135
- def writer io_or_path, type=Excel, version=self.version
150
+ def writer io_or_path, type = Excel, version = self.version
136
151
  if type == Excel
137
152
  Excel::Writer::Workbook.new io_or_path
138
153
  else