ruby-spreadsheet 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/.document +5 -0
  2. data/GUIDE.txt +267 -0
  3. data/Gemfile +12 -0
  4. data/Gemfile.lock +20 -0
  5. data/History.txt +307 -0
  6. data/LICENSE.txt +619 -0
  7. data/README.txt +91 -0
  8. data/Rakefile +53 -0
  9. data/VERSION +1 -0
  10. data/bin/xlsopcodes +18 -0
  11. data/lib/parseexcel.rb +27 -0
  12. data/lib/parseexcel/parseexcel.rb +75 -0
  13. data/lib/parseexcel/parser.rb +11 -0
  14. data/lib/spreadsheet.rb +79 -0
  15. data/lib/spreadsheet/column.rb +71 -0
  16. data/lib/spreadsheet/compatibility.rb +23 -0
  17. data/lib/spreadsheet/datatypes.rb +110 -0
  18. data/lib/spreadsheet/encodings.rb +46 -0
  19. data/lib/spreadsheet/excel.rb +88 -0
  20. data/lib/spreadsheet/excel/error.rb +26 -0
  21. data/lib/spreadsheet/excel/internals.rb +386 -0
  22. data/lib/spreadsheet/excel/internals/biff5.rb +17 -0
  23. data/lib/spreadsheet/excel/internals/biff8.rb +19 -0
  24. data/lib/spreadsheet/excel/offset.rb +41 -0
  25. data/lib/spreadsheet/excel/reader.rb +1173 -0
  26. data/lib/spreadsheet/excel/reader/biff5.rb +22 -0
  27. data/lib/spreadsheet/excel/reader/biff8.rb +193 -0
  28. data/lib/spreadsheet/excel/row.rb +92 -0
  29. data/lib/spreadsheet/excel/sst_entry.rb +46 -0
  30. data/lib/spreadsheet/excel/workbook.rb +80 -0
  31. data/lib/spreadsheet/excel/worksheet.rb +100 -0
  32. data/lib/spreadsheet/excel/writer.rb +1 -0
  33. data/lib/spreadsheet/excel/writer/biff8.rb +75 -0
  34. data/lib/spreadsheet/excel/writer/format.rb +253 -0
  35. data/lib/spreadsheet/excel/writer/workbook.rb +652 -0
  36. data/lib/spreadsheet/excel/writer/worksheet.rb +948 -0
  37. data/lib/spreadsheet/font.rb +92 -0
  38. data/lib/spreadsheet/format.rb +177 -0
  39. data/lib/spreadsheet/formula.rb +9 -0
  40. data/lib/spreadsheet/helpers.rb +11 -0
  41. data/lib/spreadsheet/link.rb +43 -0
  42. data/lib/spreadsheet/row.rb +132 -0
  43. data/lib/spreadsheet/workbook.rb +120 -0
  44. data/lib/spreadsheet/worksheet.rb +279 -0
  45. data/lib/spreadsheet/writer.rb +30 -0
  46. data/ruby-spreadsheet.gemspec +126 -0
  47. data/test/data/test_changes.xls +0 -0
  48. data/test/data/test_copy.xls +0 -0
  49. data/test/data/test_datetime.xls +0 -0
  50. data/test/data/test_empty.xls +0 -0
  51. data/test/data/test_formula.xls +0 -0
  52. data/test/data/test_missing_row.xls +0 -0
  53. data/test/data/test_version_excel5.xls +0 -0
  54. data/test/data/test_version_excel95.xls +0 -0
  55. data/test/data/test_version_excel97.xls +0 -0
  56. data/test/excel/row.rb +35 -0
  57. data/test/excel/writer/worksheet.rb +23 -0
  58. data/test/font.rb +163 -0
  59. data/test/integration.rb +1281 -0
  60. data/test/row.rb +33 -0
  61. data/test/suite.rb +14 -0
  62. data/test/workbook.rb +21 -0
  63. data/test/worksheet.rb +80 -0
  64. metadata +203 -0
@@ -0,0 +1,120 @@
1
+ require 'spreadsheet/format'
2
+ require 'spreadsheet/encodings'
3
+
4
+ module Spreadsheet
5
+ ##
6
+ # The Workbook class represents a Spreadsheet-Document and is the entry point
7
+ # for all Spreadsheet manipulation.
8
+ #
9
+ # Interesting Attributes:
10
+ # #default_format:: The default format used for all cells in this Workbook.
11
+ # that have no format set explicitly or in
12
+ # Row#default_format or Worksheet#default_format.
13
+ class Workbook
14
+ include Spreadsheet::Encodings
15
+ attr_reader :io, :worksheets, :formats, :fonts
16
+ attr_accessor :active_worksheet, :encoding, :default_format, :version
17
+ def initialize io = nil, opts={:default_format => Format.new}
18
+ @worksheets = []
19
+ @io = io
20
+ @fonts = []
21
+ @formats = []
22
+ if @default_format = opts[:default_format]
23
+ @formats.push @default_format
24
+ end
25
+ end
26
+ ##
27
+ # Add a Font to the Workbook. Used by the parser. You should not need to
28
+ # use this Method.
29
+ def add_font font
30
+ @fonts.push(font).uniq! if font
31
+ font
32
+ end
33
+ ##
34
+ # Add a Format to the Workbook. If you use Row#set_format, you should not
35
+ # need to use this Method.
36
+ def add_format format
37
+ @formats.push(format) if format && !@formats.include?(format)
38
+ format
39
+ end
40
+ ##
41
+ # Add a Worksheet to the Workbook.
42
+ def add_worksheet worksheet
43
+ worksheet.workbook = self
44
+ @worksheets.push worksheet
45
+ worksheet
46
+ end
47
+ ##
48
+ # Create a new Worksheet in this Workbook.
49
+ # Used without options this creates a Worksheet with the name 'WorksheetN'
50
+ # where the new Worksheet is the Nth Worksheet in this Workbook.
51
+ #
52
+ # Use the option <em>:name => 'My pretty Name'</em> to override this
53
+ # behavior.
54
+ def create_worksheet opts = {}
55
+ opts[:name] ||= client("Worksheet#{@worksheets.size.next}", 'UTF-8')
56
+ add_worksheet Worksheet.new(opts)
57
+ end
58
+ ##
59
+ # The Font at _idx_
60
+ def font idx
61
+ @fonts[idx]
62
+ end
63
+ ##
64
+ # The Format at _idx_, or - if _idx_ is a String -
65
+ # the Format with name == _idx_
66
+ def format idx
67
+ case idx
68
+ when Integer
69
+ @formats[idx] || @default_format
70
+ when String
71
+ @formats.find do |fmt| fmt.name == idx end
72
+ end
73
+ end
74
+ def inspect
75
+ variables = (instance_variables - uninspect_variables).collect do |name|
76
+ "%s=%s" % [name, instance_variable_get(name)]
77
+ end.join(' ')
78
+ uninspect = uninspect_variables.collect do |name|
79
+ var = instance_variable_get name
80
+ "%s=%s[%i]" % [name, var.class, var.size]
81
+ end.join(' ')
82
+ sprintf "#<%s:0x%014x %s %s>", self.class, object_id,
83
+ variables, uninspect
84
+ end
85
+ def uninspect_variables # :nodoc:
86
+ %w{@formats @fonts @worksheets}
87
+ end
88
+ ##
89
+ # The Worksheet at _idx_, or - if _idx_ is a String -
90
+ # the Worksheet with name == _idx_
91
+ def worksheet idx
92
+ case idx
93
+ when Integer
94
+ @worksheets[idx]
95
+ when String
96
+ @worksheets.find do |sheet| sheet.name == idx end
97
+ end
98
+ end
99
+ ##
100
+ # Write this Workbook to a File, IO Stream or Writer Object. The latter will
101
+ # make more sense once there are more than just an Excel-Writer available.
102
+ def write io_path_or_writer
103
+ if io_path_or_writer.is_a? Writer
104
+ io_path_or_writer.write self
105
+ else
106
+ writer(io_path_or_writer).write(self)
107
+ end
108
+ end
109
+ ##
110
+ # Returns a new instance of the default Writer class for this Workbook (can
111
+ # only be an Excel::Writer::Workbook at this time)
112
+ def writer io_or_path, type=Excel, version=self.version
113
+ if type == Excel
114
+ Excel::Writer::Workbook.new io_or_path
115
+ else
116
+ raise NotImplementedError, "No Writer defined for #{type}"
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,279 @@
1
+ require 'date'
2
+ require 'spreadsheet/column'
3
+ require 'spreadsheet/encodings'
4
+ require 'spreadsheet/row'
5
+
6
+ module Spreadsheet
7
+ ##
8
+ # The Worksheet class. Contains most of the Spreadsheet data in Rows.
9
+ #
10
+ # Interesting Attributes
11
+ # #name :: The Name of this Worksheet.
12
+ # #default_format:: The default format used for all cells in this Workhseet
13
+ # that have no format set explicitly or in
14
+ # Row#default_format.
15
+ # #rows :: The Rows in this Worksheet. It is not recommended to
16
+ # Manipulate this Array directly. If you do, call
17
+ # #updated_from with the smallest modified index.
18
+ # #columns :: The Column formatting in this Worksheet. Column
19
+ # instances may appear at more than one position in #columns.
20
+ # If you modify a Column directly, your changes will be
21
+ # reflected in all those positions.
22
+ # #selected :: When a user chooses to print a Workbook, Excel will include
23
+ # all selected Worksheets. If no Worksheet is selected at
24
+ # Workbook#write, then the first Worksheet is selected by
25
+ # default.
26
+ class Worksheet
27
+ include Spreadsheet::Encodings
28
+ include Enumerable
29
+ attr_accessor :name, :selected, :workbook, :orientation
30
+ attr_accessor :fit_width_to_pages, :fit_height_to_pages
31
+ attr_reader :rows, :columns
32
+ def initialize opts={}
33
+ @default_format = nil
34
+ @selected = opts[:selected]
35
+ @dimensions = [0,0,0,0]
36
+ @orientation = :portrait
37
+ @name = opts[:name] || 'Worksheet'
38
+ @workbook = opts[:workbook]
39
+ @rows = []
40
+ @columns = []
41
+ @links = {}
42
+ end
43
+ def active # :nodoc:
44
+ warn "Worksheet#active is deprecated. Please use Worksheet#selected instead."
45
+ selected
46
+ end
47
+ def active= selected # :nodoc:
48
+ warn "Worksheet#active= is deprecated. Please use Worksheet#selected= instead."
49
+ self.selected = selected
50
+ end
51
+ ##
52
+ # Add a Format to the Workbook. If you use Row#set_format, you should not
53
+ # need to use this Method.
54
+ def add_format fmt
55
+ @workbook.add_format fmt if fmt
56
+ end
57
+ ##
58
+ # Get the enriched value of the Cell at _row_, _column_.
59
+ # See also Worksheet#[], Row#[].
60
+ def cell row, column
61
+ row(row)[column]
62
+ end
63
+ ##
64
+ # Returns the Column at _idx_.
65
+ def column idx
66
+ @columns[idx] || Column.new(idx, default_format, :worksheet => self)
67
+ end
68
+ ##
69
+ # The number of columns in this Worksheet which contain data.
70
+ def column_count
71
+ dimensions[3] - dimensions[2]
72
+ end
73
+ def column_updated idx, column
74
+ @columns[idx] = column
75
+ end
76
+ ##
77
+ # Delete the Row at _idx_ (0-based) from this Worksheet.
78
+ def delete_row idx
79
+ res = @rows.delete_at idx
80
+ updated_from idx
81
+ res
82
+ end
83
+ ##
84
+ # The default Format of this Worksheet, if you have set one.
85
+ # Returns the Workbook's default Format otherwise.
86
+ def default_format
87
+ @default_format || @workbook.default_format
88
+ end
89
+ ##
90
+ # Set the default Format of this Worksheet.
91
+ def default_format= format
92
+ @default_format = format
93
+ add_format format
94
+ format
95
+ end
96
+ ##
97
+ # Dimensions:: [ first used row, first unused row,
98
+ # first used column, first unused column ]
99
+ # ( First used means that all rows or columns before that are
100
+ # empty. First unused means that this and all following rows
101
+ # or columns are empty. )
102
+ def dimensions
103
+ @dimensions || recalculate_dimensions
104
+ end
105
+ ##
106
+ # If no argument is given, #each iterates over all used Rows (from the first
107
+ # used Row until but omitting the first unused Row, see also #dimensions).
108
+ #
109
+ # If the argument skip is given, #each iterates from that row until but
110
+ # omitting the first unused Row, effectively skipping the first _skip_ Rows
111
+ # from the top of the Worksheet.
112
+ def each skip=dimensions[0], &block
113
+ skip.upto(dimensions[1] - 1) do |idx|
114
+ block.call row(idx)
115
+ end
116
+ end
117
+ def encoding # :nodoc:
118
+ @workbook.encoding
119
+ end
120
+ ##
121
+ # Sets the default Format of the column at _idx_.
122
+ #
123
+ # _idx_ may be an Integer, or an Enumerable that iterates over a number of
124
+ # Integers.
125
+ #
126
+ # _format_ is a Format, or nil if you want to remove the Formatting at _idx_
127
+ #
128
+ # Returns an instance of Column if _idx_ is an Integer, an Array of Columns
129
+ # otherwise.
130
+ def format_column idx, format=nil, opts={}
131
+ opts[:worksheet] = self
132
+ res = case idx
133
+ when Integer
134
+ column = nil
135
+ if format
136
+ column = Column.new(idx, format, opts)
137
+ end
138
+ @columns[idx] = column
139
+ else
140
+ idx.collect do |col| format_column col, format, opts end
141
+ end
142
+ shorten @columns
143
+ res
144
+ end
145
+ ##
146
+ # Formats all Date, DateTime and Time cells with _format_ or the default
147
+ # formats:
148
+ # - 'DD.MM.YYYY' for Date
149
+ # - 'DD.MM.YYYY hh:mm:ss' for DateTime and Time
150
+ def format_dates! format=nil
151
+ each do |row|
152
+ row.each_with_index do |value, idx|
153
+ unless row.formats[idx] || row.format(idx).date_or_time?
154
+ numfmt = case value
155
+ when DateTime, Time
156
+ format || client('DD.MM.YYYY hh:mm:ss', 'UTF-8')
157
+ when Date
158
+ format || client('DD.MM.YYYY', 'UTF-8')
159
+ end
160
+ case numfmt
161
+ when Format
162
+ row.set_format idx, numfmt
163
+ when String
164
+ fmt = row.format(idx).dup
165
+ fmt.number_format = numfmt
166
+ row.set_format idx, fmt
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+ ##
173
+ # Insert a Row at _idx_ (0-based) containing _cells_
174
+ def insert_row idx, cells=[]
175
+ res = @rows.insert idx, Row.new(self, idx, cells)
176
+ updated_from idx
177
+ res
178
+ end
179
+ def inspect
180
+ names = instance_variables
181
+ names.delete '@rows'
182
+ variables = names.collect do |name|
183
+ "%s=%s" % [name, instance_variable_get(name)]
184
+ end.join(' ')
185
+ sprintf "#<%s:0x%014x %s @rows[%i]>", self.class, object_id,
186
+ variables, row_count
187
+ end
188
+ ## The last Row containing any data
189
+ def last_row
190
+ row(last_row_index)
191
+ end
192
+ ## The index of the last Row containing any data
193
+ def last_row_index
194
+ [dimensions[1] - 1, 0].max
195
+ end
196
+ ##
197
+ # Replace the Row at _idx_ with the following arguments. Like #update_row,
198
+ # but truncates the Row if there are fewer arguments than Cells in the Row.
199
+ def replace_row idx, *cells
200
+ if(row = @rows[idx]) && cells.size < row.size
201
+ cells.concat Array.new(row.size - cells.size)
202
+ end
203
+ update_row idx, *cells
204
+ end
205
+ ##
206
+ # The Row at _idx_ or a new Row.
207
+ def row idx
208
+ @rows[idx] || Row.new(self, idx)
209
+ end
210
+ ##
211
+ # The number of Rows in this Worksheet which contain data.
212
+ def row_count
213
+ dimensions[1] - dimensions[0]
214
+ end
215
+ ##
216
+ # Tell Worksheet that the Row at _idx_ has been updated and the #dimensions
217
+ # need to be recalculated. You should not need to call this directly.
218
+ def row_updated idx, row
219
+ @dimensions = nil
220
+ @rows[idx] = row
221
+ end
222
+ ##
223
+ # Updates the Row at _idx_ with the following arguments.
224
+ def update_row idx, *cells
225
+ res = if row = @rows[idx]
226
+ row[0, cells.size] = cells
227
+ row
228
+ else
229
+ Row.new self, idx, cells
230
+ end
231
+ row_updated idx, res
232
+ res
233
+ end
234
+ ##
235
+ # Renumbers all Rows starting at _idx_ and calls #row_updated for each of
236
+ # them.
237
+ def updated_from index
238
+ index.upto(@rows.size - 1) do |idx|
239
+ row = row(idx)
240
+ row.idx = idx
241
+ row_updated idx, row
242
+ end
243
+ end
244
+ ##
245
+ # Get the enriched value of the Cell at _row_, _column_.
246
+ # See also Worksheet#cell, Row#[].
247
+ def [] row, column
248
+ row(row)[column]
249
+ end
250
+ ##
251
+ # Set the value of the Cell at _row_, _column_ to _value_.
252
+ # See also Row#[]=.
253
+ def []= row, column, value
254
+ row(row)[column] = value
255
+ end
256
+ private
257
+ def index_of_first ary # :nodoc:
258
+ return unless ary
259
+ ary.index(ary.find do |elm| elm end)
260
+ end
261
+ def recalculate_dimensions # :nodoc:
262
+ shorten @rows
263
+ @dimensions = []
264
+ @dimensions[0] = index_of_first(@rows) || 0
265
+ @dimensions[1] = @rows.size
266
+ compact = @rows.compact
267
+ @dimensions[2] = compact.collect do |row| row.first_used end.compact.min || 0
268
+ @dimensions[3] = compact.collect do |row| row.first_unused end.max || 0
269
+ @dimensions
270
+ end
271
+ def shorten ary # :nodoc:
272
+ return unless ary
273
+ while !ary.empty? && !ary.last
274
+ ary.pop
275
+ end
276
+ ary unless ary.empty?
277
+ end
278
+ end
279
+ end
@@ -0,0 +1,30 @@
1
+ module Spreadsheet
2
+ ##
3
+ # Parent Class for all Writers. Implements the copying of unmodified
4
+ # Spreadsheet documents.
5
+ class Writer
6
+ def initialize io_or_path
7
+ @io_or_path = io_or_path
8
+ end
9
+ def write workbook
10
+ if @io_or_path.respond_to? :seek
11
+ @io_or_path.binmode
12
+ write_workbook workbook, @io_or_path
13
+ else
14
+ File.open(@io_or_path, "wb+") do |fh|
15
+ write_workbook workbook, fh
16
+ end
17
+ end
18
+ end
19
+ private
20
+ def write_workbook workbook, io
21
+ reader = workbook.io
22
+ unless io == reader
23
+ reader.rewind
24
+ data = reader.read
25
+ io.rewind
26
+ io.write data
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,126 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{ruby-spreadsheet}
8
+ s.version = "0.6.5"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Dmitry Lihachev", "Masaomi Hatakeyama", "Zeno R.R. Davatz"]
12
+ s.date = %q{2010-12-20}
13
+ s.description = %q{As of version 0.6.0, only Microsoft Excel compatible spreadsheets are supported}
14
+ s.email = %q{lda@openteam.ru, mhatakeyama@ywesee.com, zdavatz@ywesee.com}
15
+ s.executables = ["xlsopcodes", "xlsopcodes"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.txt"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ "GUIDE.txt",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "History.txt",
26
+ "LICENSE.txt",
27
+ "README.txt",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "bin/xlsopcodes",
31
+ "lib/parseexcel.rb",
32
+ "lib/parseexcel/parseexcel.rb",
33
+ "lib/parseexcel/parser.rb",
34
+ "lib/spreadsheet.rb",
35
+ "lib/spreadsheet/column.rb",
36
+ "lib/spreadsheet/compatibility.rb",
37
+ "lib/spreadsheet/datatypes.rb",
38
+ "lib/spreadsheet/encodings.rb",
39
+ "lib/spreadsheet/excel.rb",
40
+ "lib/spreadsheet/excel/error.rb",
41
+ "lib/spreadsheet/excel/internals.rb",
42
+ "lib/spreadsheet/excel/internals/biff5.rb",
43
+ "lib/spreadsheet/excel/internals/biff8.rb",
44
+ "lib/spreadsheet/excel/offset.rb",
45
+ "lib/spreadsheet/excel/reader.rb",
46
+ "lib/spreadsheet/excel/reader/biff5.rb",
47
+ "lib/spreadsheet/excel/reader/biff8.rb",
48
+ "lib/spreadsheet/excel/row.rb",
49
+ "lib/spreadsheet/excel/sst_entry.rb",
50
+ "lib/spreadsheet/excel/workbook.rb",
51
+ "lib/spreadsheet/excel/worksheet.rb",
52
+ "lib/spreadsheet/excel/writer.rb",
53
+ "lib/spreadsheet/excel/writer/biff8.rb",
54
+ "lib/spreadsheet/excel/writer/format.rb",
55
+ "lib/spreadsheet/excel/writer/workbook.rb",
56
+ "lib/spreadsheet/excel/writer/worksheet.rb",
57
+ "lib/spreadsheet/font.rb",
58
+ "lib/spreadsheet/format.rb",
59
+ "lib/spreadsheet/formula.rb",
60
+ "lib/spreadsheet/helpers.rb",
61
+ "lib/spreadsheet/link.rb",
62
+ "lib/spreadsheet/row.rb",
63
+ "lib/spreadsheet/workbook.rb",
64
+ "lib/spreadsheet/worksheet.rb",
65
+ "lib/spreadsheet/writer.rb",
66
+ "ruby-spreadsheet.gemspec",
67
+ "test/data/test_changes.xls",
68
+ "test/data/test_copy.xls",
69
+ "test/data/test_datetime.xls",
70
+ "test/data/test_empty.xls",
71
+ "test/data/test_formula.xls",
72
+ "test/data/test_missing_row.xls",
73
+ "test/data/test_version_excel5.xls",
74
+ "test/data/test_version_excel95.xls",
75
+ "test/data/test_version_excel97.xls",
76
+ "test/excel/row.rb",
77
+ "test/excel/writer/worksheet.rb",
78
+ "test/font.rb",
79
+ "test/integration.rb",
80
+ "test/row.rb",
81
+ "test/suite.rb",
82
+ "test/workbook.rb",
83
+ "test/worksheet.rb"
84
+ ]
85
+ s.homepage = %q{http://github.com/lda/ruby-spreadsheet}
86
+ s.licenses = ["GPLv3"]
87
+ s.require_paths = ["lib"]
88
+ s.rubygems_version = %q{1.3.7}
89
+ s.summary = %q{The Spreadsheet Library is designed to read and write Spreadsheet Documents}
90
+ s.test_files = [
91
+ "test/excel/row.rb",
92
+ "test/excel/writer/worksheet.rb",
93
+ "test/font.rb",
94
+ "test/integration.rb",
95
+ "test/row.rb",
96
+ "test/suite.rb",
97
+ "test/workbook.rb",
98
+ "test/worksheet.rb"
99
+ ]
100
+
101
+ if s.respond_to? :specification_version then
102
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
103
+ s.specification_version = 3
104
+
105
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
106
+ s.add_runtime_dependency(%q<ruby-ole>, [">= 0"])
107
+ s.add_development_dependency(%q<bundler>, [">= 0"])
108
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
109
+ s.add_development_dependency(%q<rcov>, [">= 0"])
110
+ s.add_runtime_dependency(%q<ruby-ole>, ["> 1.2"])
111
+ else
112
+ s.add_dependency(%q<ruby-ole>, [">= 0"])
113
+ s.add_dependency(%q<bundler>, [">= 0"])
114
+ s.add_dependency(%q<jeweler>, [">= 0"])
115
+ s.add_dependency(%q<rcov>, [">= 0"])
116
+ s.add_dependency(%q<ruby-ole>, ["> 1.2"])
117
+ end
118
+ else
119
+ s.add_dependency(%q<ruby-ole>, [">= 0"])
120
+ s.add_dependency(%q<bundler>, [">= 0"])
121
+ s.add_dependency(%q<jeweler>, [">= 0"])
122
+ s.add_dependency(%q<rcov>, [">= 0"])
123
+ s.add_dependency(%q<ruby-ole>, ["> 1.2"])
124
+ end
125
+ end
126
+