spreadsheet 1.3.3 → 1.3.4

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