spreadbase 0.1.2 → 0.1.3
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.
- data/README.md +23 -0
- data/lib/spreadbase/table.rb +41 -14
- data/lib/spreadbase/version.rb +1 -1
- data/spec/elements/table_spec.rb +47 -0
- metadata +17 -7
data/README.md
CHANGED
@@ -53,6 +53,27 @@ Append a row:
|
|
53
53
|
|
54
54
|
table_2.append_row( [ 'Fabrizio F.' ] )
|
55
55
|
|
56
|
+
Read a column, or a range of columns:
|
57
|
+
|
58
|
+
table.column( 0 )
|
59
|
+
|
60
|
+
# [ 'Dish', 'Roasted 6502', '8080, with an 8-bit bus', '65000 with side dishes of Copper and Blitter' ]
|
61
|
+
|
62
|
+
table.column( 0 .. 1 )
|
63
|
+
|
64
|
+
# [ [ 'Dish', 'Roasted 6502', '8080, with an 8-bit bus', '65000 with side dishes of Copper and Blitter' ],
|
65
|
+
# [ 'Price', 38.911, 8, 512.0 ] ]
|
66
|
+
|
67
|
+
Read a row, or a range of rows:
|
68
|
+
|
69
|
+
table.row( 1 )
|
70
|
+
|
71
|
+
# [ 'Roasted 6502', 38.911 ]
|
72
|
+
|
73
|
+
table.row( 1 .. 2 )
|
74
|
+
|
75
|
+
# [ [ 'Roasted 6502', 38.911 ], [ '8080, with an 8-bit bus', 8 ] ]
|
76
|
+
|
56
77
|
Read a cell:
|
57
78
|
|
58
79
|
price_8080 = document.tables[ 0 ][ 1, 2 ]
|
@@ -101,6 +122,8 @@ Save the document:
|
|
101
122
|
|
102
123
|
document.save
|
103
124
|
|
125
|
+
Enjoy many other APIs.
|
126
|
+
|
104
127
|
Notes
|
105
128
|
-----
|
106
129
|
|
data/lib/spreadbase/table.rb
CHANGED
@@ -90,7 +90,7 @@ module SpreadBase # :nodoc:
|
|
90
90
|
#
|
91
91
|
# _params_:
|
92
92
|
#
|
93
|
-
# +row_index+:: int (0-based). see notes about the rows indexing.
|
93
|
+
# +row_index+:: int or range (0-based). see notes about the rows indexing.
|
94
94
|
#
|
95
95
|
def row( row_index )
|
96
96
|
check_row_index( row_index )
|
@@ -104,9 +104,9 @@ module SpreadBase # :nodoc:
|
|
104
104
|
#
|
105
105
|
# _params_:
|
106
106
|
#
|
107
|
-
# +row_index+:: int (0-based). see notes about the rows indexing.
|
107
|
+
# +row_index+:: int or range (0-based). see notes about the rows indexing.
|
108
108
|
#
|
109
|
-
# _returns_ the deleted row
|
109
|
+
# _returns_ the deleted row[s]
|
110
110
|
#
|
111
111
|
def delete_row( row_index )
|
112
112
|
check_row_index( row_index )
|
@@ -141,35 +141,60 @@ module SpreadBase # :nodoc:
|
|
141
141
|
#
|
142
142
|
# _params_:
|
143
143
|
#
|
144
|
-
# +column_indentifier+:: either an int (0-based) or the excel-format identifier (AA...).
|
144
|
+
# +column_indentifier+:: for single access, us either an int (0-based) or the excel-format identifier (AA...).
|
145
145
|
# when int, follow the same idea of the rows indexing (ruby semantics).
|
146
|
+
# for multiple access, use a range either of int or excel-format identifiers - pay attention, because ( 'A'..'c' ) is not semantically correct.
|
147
|
+
# interestingly, ruby letter ranges convention is the same as the excel columns one.
|
146
148
|
#
|
147
149
|
def column( column_identifier )
|
148
|
-
|
150
|
+
if column_identifier.is_a?( Range )
|
151
|
+
min_index = decode_column_identifier( column_identifier.min )
|
152
|
+
max_index = decode_column_identifier( column_identifier.max )
|
153
|
+
|
154
|
+
( min_index .. max_index ).map do | column_index |
|
155
|
+
@data.map do | row |
|
156
|
+
row[ column_index ]
|
157
|
+
end
|
158
|
+
end
|
159
|
+
else
|
160
|
+
column_index = decode_column_identifier( column_identifier )
|
149
161
|
|
150
|
-
|
151
|
-
|
162
|
+
@data.map do | row |
|
163
|
+
row[ column_index ]
|
164
|
+
end
|
152
165
|
end
|
153
166
|
end
|
154
167
|
|
155
168
|
# Deletes a column.
|
156
169
|
#
|
157
|
-
#
|
170
|
+
# See Table#column for the indexing notes.
|
158
171
|
#
|
159
172
|
# _params_:
|
160
173
|
#
|
161
|
-
# +column_indentifier+::
|
162
|
-
# when int, follow the same idea of the rows indexing (ruby semantics).
|
174
|
+
# +column_indentifier+:: See Table#column
|
163
175
|
#
|
164
176
|
# _returns_ the deleted column
|
165
177
|
#
|
166
178
|
def delete_column( column_identifier )
|
167
|
-
|
179
|
+
if column_identifier.is_a?( Range )
|
180
|
+
min_index = decode_column_identifier( column_identifier.min )
|
181
|
+
max_index = decode_column_identifier( column_identifier.max )
|
182
|
+
|
183
|
+
reverse_result = max_index.downto( min_index ).map do | column_index |
|
184
|
+
@data.map do | row |
|
185
|
+
row.slice!( column_index )
|
186
|
+
end
|
187
|
+
end
|
168
188
|
|
169
|
-
|
189
|
+
reverse_result.reverse
|
190
|
+
else
|
191
|
+
column_index = decode_column_identifier( column_identifier )
|
170
192
|
|
171
|
-
|
172
|
-
|
193
|
+
@column_width_styles.slice!( column_index )
|
194
|
+
|
195
|
+
@data.map do | row |
|
196
|
+
row.slice!( column_index )
|
197
|
+
end
|
173
198
|
end
|
174
199
|
end
|
175
200
|
|
@@ -226,6 +251,8 @@ module SpreadBase # :nodoc:
|
|
226
251
|
|
227
252
|
positive_limit = allow_append ? @data.size : @data.size - 1
|
228
253
|
|
254
|
+
row_index = row_index.max if row_index.is_a?( Range )
|
255
|
+
|
229
256
|
raise "Invalid row index (#{ row_index }) - allowed 0 to #{ positive_limit }" if row_index < 0 || row_index > positive_limit
|
230
257
|
end
|
231
258
|
|
data/lib/spreadbase/version.rb
CHANGED
data/spec/elements/table_spec.rb
CHANGED
@@ -102,6 +102,15 @@ describe SpreadBase::Table do
|
|
102
102
|
lambda { @sample_table.row( -1 ) }.should raise_error( RuntimeError, "Invalid row index (-1) - allowed 0 to 2" )
|
103
103
|
end
|
104
104
|
|
105
|
+
it "should access a set of rows by range" do
|
106
|
+
@sample_table.row( ( 0 .. 1 ) ).should == [
|
107
|
+
[ 1, 1.1, T_BIGDECIMAL ],
|
108
|
+
[ T_DATE, T_DATETIME, T_TIME ],
|
109
|
+
]
|
110
|
+
|
111
|
+
lambda { @sample_table.row( ( 0 .. 5 ) ) }.should raise_error( RuntimeError, "Invalid row index (5) - allowed 0 to 2" )
|
112
|
+
end
|
113
|
+
|
105
114
|
it "should delete a row" do
|
106
115
|
@sample_table.delete_row( 1 ).should == [ T_DATE, T_DATETIME, T_TIME ]
|
107
116
|
|
@@ -113,6 +122,19 @@ describe SpreadBase::Table do
|
|
113
122
|
lambda { @sample_table.delete_row( -1 ) }.should raise_error( RuntimeError, "Invalid row index (-1) - allowed 0 to 1" )
|
114
123
|
end
|
115
124
|
|
125
|
+
it "should delete a set of rows by range" do
|
126
|
+
@sample_table.delete_row( ( 0 .. 1 ) ).should == [
|
127
|
+
[ 1, 1.1, T_BIGDECIMAL ],
|
128
|
+
[ T_DATE, T_DATETIME, T_TIME ],
|
129
|
+
]
|
130
|
+
|
131
|
+
@sample_table.data.should == [
|
132
|
+
[ true, 'a', nil ]
|
133
|
+
]
|
134
|
+
|
135
|
+
lambda { @sample_table.delete_row( ( 0 .. 5 ) ) }.should raise_error( RuntimeError, "Invalid row index (5) - allowed 0 to 0" )
|
136
|
+
end
|
137
|
+
|
116
138
|
it "should insert a row" do
|
117
139
|
@sample_table.insert_row( 1, [ 4, 5, 6 ] )
|
118
140
|
|
@@ -152,6 +174,18 @@ describe SpreadBase::Table do
|
|
152
174
|
@sample_table.column( 3 ).should == [ nil, nil, nil ]
|
153
175
|
end
|
154
176
|
|
177
|
+
it "should access a set of columns by range" do
|
178
|
+
@sample_table.column( ( 0 .. 1 ) ).should == [
|
179
|
+
[ 1, T_DATE, true ],
|
180
|
+
[ 1.1, T_DATETIME, 'a' ],
|
181
|
+
]
|
182
|
+
|
183
|
+
@sample_table.column( ( 'C' .. 'D' ) ).should == [
|
184
|
+
[ T_BIGDECIMAL, T_TIME, nil ],
|
185
|
+
[ nil, nil, nil ],
|
186
|
+
]
|
187
|
+
end
|
188
|
+
|
155
189
|
it "should delete a column" do
|
156
190
|
@sample_table.column_width_styles = [ 'abc', nil, 'cde' ]
|
157
191
|
|
@@ -170,6 +204,19 @@ describe SpreadBase::Table do
|
|
170
204
|
]
|
171
205
|
end
|
172
206
|
|
207
|
+
it "should delete a set of columns by range" do
|
208
|
+
@sample_table.delete_column( ( 0 .. 1 ) ).should == [
|
209
|
+
[ 1, T_DATE, true ],
|
210
|
+
[ 1.1, T_DATETIME, 'a' ],
|
211
|
+
]
|
212
|
+
|
213
|
+
@sample_table.data.should == [
|
214
|
+
[ T_BIGDECIMAL ],
|
215
|
+
[ T_TIME ],
|
216
|
+
[ nil ],
|
217
|
+
]
|
218
|
+
end
|
219
|
+
|
173
220
|
it "should insert a column" do
|
174
221
|
# Setup/fill table
|
175
222
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spreadbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: zipruby
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 0.3.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.3.6
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,7 +37,12 @@ dependencies:
|
|
32
37
|
version: 2.9.0
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.9.0
|
36
46
|
description: Library for reading/writing OpenOffice Calc documents.
|
37
47
|
email:
|
38
48
|
- saverio.pub2@gmail.com
|
@@ -82,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
92
|
version: '0'
|
83
93
|
requirements: []
|
84
94
|
rubyforge_project:
|
85
|
-
rubygems_version: 1.8.
|
95
|
+
rubygems_version: 1.8.23
|
86
96
|
signing_key:
|
87
97
|
specification_version: 3
|
88
98
|
summary: Library for reading/writing OpenOffice Calc documents.
|