spreet 0.0.2 → 0.0.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.rdoc +47 -1
- data/VERSION +1 -1
- data/lib/big_array.rb +100 -0
- data/lib/duration.rb +145 -0
- data/lib/spreet.rb +75 -103
- data/lib/spreet/coordinates.rb +62 -0
- data/lib/spreet/handlers/open_document.rb +310 -31
- data/lib/time.rb +13 -0
- data/test/helper.rb +15 -0
- data/test/samples/pascal.ods +0 -0
- data/test/test_big_array.rb +24 -0
- data/test/test_coordinates.rb +31 -0
- data/test/test_csv.rb +39 -0
- data/test/test_duration.rb +34 -0
- data/test/test_open_document.rb +17 -0
- data/test/test_spreet.rb +58 -36
- metadata +56 -9
data/test/helper.rb
CHANGED
@@ -1,9 +1,24 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
|
+
require "digest/sha2"
|
3
4
|
|
4
5
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
6
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
7
|
require 'spreet'
|
7
8
|
|
8
9
|
class Test::Unit::TestCase
|
10
|
+
|
11
|
+
def assert_checksums(expected, actual, message=nil)
|
12
|
+
checksums = []
|
13
|
+
assert File.exist?(expected)
|
14
|
+
File.open(expected, "rb") do |f|
|
15
|
+
checksums << Digest::SHA256.hexdigest(f.read)
|
16
|
+
end
|
17
|
+
assert File.exist?(actual)
|
18
|
+
File.open(actual, "rb") do |f|
|
19
|
+
checksums << Digest::SHA256.hexdigest(f.read)
|
20
|
+
end
|
21
|
+
assert_equal checksums[0], checksums[1], message
|
22
|
+
end
|
23
|
+
|
9
24
|
end
|
Binary file
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestBigArray < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_big_hash
|
7
|
+
assert_nothing_raised do
|
8
|
+
BigArray.new("MyBigArray", 2, 8)
|
9
|
+
end
|
10
|
+
array = nil
|
11
|
+
assert_nothing_raised do
|
12
|
+
array = BigArray::MyBigArray.new
|
13
|
+
end
|
14
|
+
assert_nothing_raised do
|
15
|
+
array[0] = 123
|
16
|
+
end
|
17
|
+
assert_equal(123, array[0])
|
18
|
+
assert_nothing_raised do
|
19
|
+
array[2**32 - 1] = "Test"
|
20
|
+
end
|
21
|
+
assert_equal("Test", array[2**32 - 1])
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestCoordinates < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_importations
|
7
|
+
assert_equal Spreet::Coordinates.new(0,0), Spreet::Coordinates.new("A1")
|
8
|
+
assert_equal Spreet::Coordinates.new(0,0), Spreet::Coordinates.new("0-0")
|
9
|
+
assert_equal Spreet::Coordinates.new(1,1), Spreet::Coordinates.new("B2")
|
10
|
+
assert_equal Spreet::Coordinates.new(2,2), Spreet::Coordinates.new(:x=>2, :y=>2)
|
11
|
+
assert_equal Spreet::Coordinates.new(3,3), Spreet::Coordinates.new(3,3)
|
12
|
+
assert_equal Spreet::Coordinates.new(3,3), Spreet::Coordinates.new([3,3])
|
13
|
+
assert_equal Spreet::Coordinates.new(4,4), Spreet::Coordinates.new(Spreet::Coordinates.new(4,4).to_i)
|
14
|
+
assert_equal Spreet::Coordinates.new(5,5), Spreet::Coordinates.new(Spreet::Coordinates.new(5,5))
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_exportations
|
18
|
+
assert_equal("D25", Spreet::Coordinates.new(3,24).to_s)
|
19
|
+
assert_equal([3, 24], Spreet::Coordinates.new(3,24).to_a)
|
20
|
+
assert_equal({:x=>3, :y=>24}, Spreet::Coordinates.new(3,24).to_hash)
|
21
|
+
assert_equal(24, Spreet::Coordinates.new(0,24).to_i)
|
22
|
+
assert_equal((3 << Spreet::Coordinates::X_BIT_SHIFT)+24, Spreet::Coordinates.new(3,24).to_i)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_sorting
|
26
|
+
assert Spreet::Coordinates.new(0,0) <=> Spreet::Coordinates.new(0,1)
|
27
|
+
assert Spreet::Coordinates.new(0,1) <=> Spreet::Coordinates.new(1,0)
|
28
|
+
assert Spreet::Coordinates.new(1,0) <=> Spreet::Coordinates.new(1,1)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/test/test_csv.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestCSV < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_read_and_write
|
7
|
+
doc = nil
|
8
|
+
assert_nothing_raised do
|
9
|
+
doc = Spreet::Document.read("test/samples/pascal.csv")
|
10
|
+
end
|
11
|
+
|
12
|
+
sheet = doc.sheets[0]
|
13
|
+
sheet.each_row do |row|
|
14
|
+
for cell in row
|
15
|
+
if cell.text.to_i == 0
|
16
|
+
cell.clear!
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
doc.write("test/samples/cleaned-pascal.csv")
|
22
|
+
|
23
|
+
doc.write("test/samples/cleaned-pascal.xcsv")
|
24
|
+
doc.write("test/samples/cleaned-pascal-excel.csv", :format=>:xcsv)
|
25
|
+
|
26
|
+
assert_checksums "test/samples/cleaned-pascal.xcsv", "test/samples/cleaned-pascal-excel.csv"
|
27
|
+
|
28
|
+
assert_nothing_raised do
|
29
|
+
doc = Spreet::Document.read("test/samples/cleaned-pascal.csv")
|
30
|
+
end
|
31
|
+
|
32
|
+
assert_nothing_raised do
|
33
|
+
doc = Spreet::Document.read("test/samples/cleaned-pascal.xcsv")
|
34
|
+
end
|
35
|
+
|
36
|
+
FileUtils.rm_f("test/samples/cleaned-pascal*")
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestDuration < Test::Unit::TestCase
|
5
|
+
|
6
|
+
# Test syntax like defined for xsd:duration
|
7
|
+
def test_importations
|
8
|
+
# Valid values include PT1004199059S, PT130S, PT2M10S, P1DT2S, -P1Y, or P1Y2M3DT5H20M30.123S.
|
9
|
+
for value in ["PT1004199059S", "PT130S", "PT2M10S", "P1DT2S", "-P1Y", "P1Y2M3DT5H20M30.123S"]
|
10
|
+
duration = nil
|
11
|
+
assert_nothing_raised do
|
12
|
+
duration = Duration.new(value)
|
13
|
+
end
|
14
|
+
assert_equal value, duration.to_s(:maximum)
|
15
|
+
end
|
16
|
+
|
17
|
+
# The following values are invalid: 1Y (leading P is missing), P1S (T separator is missing), P-1Y (all parts must be positive), P1M2Y (parts order is significant and Y must precede M), or P1Y-1M (all parts must be positive).
|
18
|
+
for value in ["1Y", "P1S", "P-1Y", "P1M2Y", "P1Y-1M"]
|
19
|
+
assert_raise(ArgumentError) do
|
20
|
+
Duration.new(value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
duration = Duration.new("P5Y250M1D")
|
25
|
+
assert_not_nil duration
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_normalization
|
29
|
+
duration = Duration.new("PT1004199059S")
|
30
|
+
assert_equal duration.to_i, duration.normalize(:right).to_i
|
31
|
+
assert_equal duration.to_i, duration.normalize(:seconds).to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestOpenDocument < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_read_and_write
|
7
|
+
doc = nil
|
8
|
+
assert_nothing_raised do
|
9
|
+
doc = Spreet::Document.read("test/samples/pascal.ods")
|
10
|
+
end
|
11
|
+
|
12
|
+
assert_nothing_raised do
|
13
|
+
doc.write("test/samples/rewrited-pascal.ods")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/test/test_spreet.rb
CHANGED
@@ -1,25 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'helper'
|
3
|
+
require "digest/sha2"
|
3
4
|
|
4
5
|
class TestSpreet < Test::Unit::TestCase
|
5
6
|
|
6
|
-
def
|
7
|
-
assert_equal Spreet::Coordinates.new(0,0), Spreet::Coordinates.new("A1")
|
8
|
-
assert_equal Spreet::Coordinates.new(0,0), Spreet::Coordinates.new("0-0")
|
9
|
-
assert_equal Spreet::Coordinates.new(1,1), Spreet::Coordinates.new("B2")
|
10
|
-
assert_equal Spreet::Coordinates.new(2,2), Spreet::Coordinates.new(:x=>2, :y=>2)
|
11
|
-
assert_equal Spreet::Coordinates.new(3,3), Spreet::Coordinates.new(3,3)
|
12
|
-
assert_equal Spreet::Coordinates.new(3,3), Spreet::Coordinates.new([3,3])
|
13
|
-
assert_equal Spreet::Coordinates.new(4,4), Spreet::Coordinates.new(Spreet::Coordinates.new(4,4).to_i)
|
14
|
-
assert_equal Spreet::Coordinates.new(5,5), Spreet::Coordinates.new(Spreet::Coordinates.new(5,5))
|
15
|
-
assert_equal("D25", Spreet::Coordinates.new(3,24).to_s)
|
16
|
-
assert_equal([3, 24], Spreet::Coordinates.new(3,24).to_a)
|
17
|
-
assert_equal({:x=>3, :y=>24}, Spreet::Coordinates.new(3,24).to_hash)
|
18
|
-
assert Spreet::Coordinates.new(0,0) <=> Spreet::Coordinates.new(0,1)
|
19
|
-
assert Spreet::Coordinates.new(0,1) <=> Spreet::Coordinates.new(1,0)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_spreet_version
|
7
|
+
def test_version
|
23
8
|
assert_not_nil Spreet::VERSION
|
24
9
|
assert_not_nil Spreet::VERSION::MAJOR
|
25
10
|
assert_not_nil Spreet::VERSION::MINOR
|
@@ -34,10 +19,35 @@ class TestSpreet < Test::Unit::TestCase
|
|
34
19
|
|
35
20
|
spreet = Spreet::Document.new
|
36
21
|
assert_not_nil spreet
|
22
|
+
assert_equal 0, spreet.sheets.count
|
37
23
|
sheet = spreet.sheets.add
|
38
24
|
assert_not_nil sheet
|
25
|
+
assert_equal 1, spreet.sheets.count
|
39
26
|
assert_not_nil spreet.sheets.add("Feuille 2")
|
27
|
+
assert_equal 2, spreet.sheets.count
|
40
28
|
assert_not_nil spreet.sheets.add("ソフト 3")
|
29
|
+
assert_equal 3, spreet.sheets.count
|
30
|
+
assert_not_nil spreet.sheets.add("Feuille 4")
|
31
|
+
assert_equal 4, spreet.sheets.count
|
32
|
+
spreet.sheets.remove("Feuille 2")
|
33
|
+
assert_equal 3, spreet.sheets.count
|
34
|
+
assert_equal "Sheet 1", spreet.sheets[0].name
|
35
|
+
assert_equal "ソフト 3", spreet.sheets[1].name
|
36
|
+
assert_equal "Feuille 4", spreet.sheets[2].name
|
37
|
+
spreet.sheets[2].name = "Feuille 2"
|
38
|
+
spreet.sheets.move("Feuille 2", -1)
|
39
|
+
assert_equal 1, spreet.sheets.index("Feuille 2")
|
40
|
+
spreet.sheets.move("Feuille 2", -10)
|
41
|
+
assert_equal 0, spreet.sheets.index("Feuille 2")
|
42
|
+
spreet.sheets.move("Feuille 2", +10)
|
43
|
+
assert_equal 2, spreet.sheets.index("Feuille 2")
|
44
|
+
spreet.sheets.move_at("Feuille 2", 1)
|
45
|
+
assert_equal 1, spreet.sheets.index("Feuille 2")
|
46
|
+
assert_equal "Sheet 1", spreet.sheets[0].name
|
47
|
+
assert_equal "Feuille 2", spreet.sheets[1].name
|
48
|
+
assert_equal "ソフト 3", spreet.sheets[2].name
|
49
|
+
spreet.sheets.add "Empty sheet"
|
50
|
+
assert_equal 4, spreet.sheets.count
|
41
51
|
|
42
52
|
assert_equal Spreet::Sheet, spreet.sheets[1].class
|
43
53
|
assert_equal "Feuille 2", spreet.sheets[1].name
|
@@ -53,38 +63,50 @@ class TestSpreet < Test::Unit::TestCase
|
|
53
63
|
assert_not_nil sheet["C30"]
|
54
64
|
|
55
65
|
sheet["F20"] = Date.today
|
66
|
+
sheet["F20"].annotation = "Date.today"
|
56
67
|
|
57
68
|
spreet.write("test/samples/cleaned-nothing.ods")
|
69
|
+
|
70
|
+
spreet2 = Spreet::Document.read("test/samples/cleaned-nothing.ods")
|
71
|
+
|
72
|
+
spreet2.write("test/samples/cleaned-nothing2.ods")
|
73
|
+
|
74
|
+
# Assert equality of file size ?
|
75
|
+
assert_checksums "test/samples/cleaned-nothing.ods", "test/samples/cleaned-nothing2.ods", "SHA256 sums differs between the copy and the original. Check if the reader is a good 'mirror' of the writer..."
|
58
76
|
end
|
77
|
+
|
59
78
|
|
79
|
+
def test_pascal
|
80
|
+
size = 50
|
81
|
+
doc = Spreet::Document.new
|
82
|
+
sheet = doc.sheets.add("Pascal Tree")
|
83
|
+
sheet[0,0] = 1
|
84
|
+
start = Time.now
|
85
|
+
for y in 1..(size-1)
|
86
|
+
sheet[0,y] = 1
|
87
|
+
for x in 1..(size-1)
|
88
|
+
sheet[x,y] = sheet[x,y-1].value.to_i + sheet[x-1,y-1].value.to_i
|
89
|
+
sheet[x,y].clear! if sheet[x,y].value.zero?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
stop = Time.now
|
93
|
+
sheet["B1"] = "Computed in #{stop-start} seconds"
|
94
|
+
|
95
|
+
assert_equal size-1, sheet.bound.x
|
96
|
+
assert_equal size-1, sheet.bound.y
|
60
97
|
|
61
|
-
def test_handlers
|
62
|
-
doc = nil
|
63
98
|
assert_nothing_raised do
|
64
|
-
doc
|
99
|
+
doc.write("test/samples/pascal-tree-#{size}.ods")
|
65
100
|
end
|
66
|
-
|
67
|
-
|
68
|
-
sheet.each_row do |row|
|
69
|
-
for cell in row
|
70
|
-
if cell.text.to_i == 0
|
71
|
-
cell.clear!
|
72
|
-
end
|
73
|
-
end
|
101
|
+
assert_nothing_raised do
|
102
|
+
doc.write("test/samples/pascal-tree-#{size}.csv")
|
74
103
|
end
|
75
|
-
|
76
|
-
doc.write("test/samples/cleaned-pascal.csv", :format=>:xcsv)
|
77
|
-
doc.write("test/samples/cleaned-pascal.ods")
|
78
|
-
|
79
104
|
assert_nothing_raised do
|
80
|
-
doc
|
105
|
+
doc.write("test/samples/pascal-tree-#{size}.xcsv")
|
81
106
|
end
|
82
|
-
|
83
|
-
FileUtils.rm_f("test/samples/cleaned-pascal.csv")
|
84
107
|
end
|
85
108
|
|
86
109
|
|
87
|
-
|
88
110
|
|
89
111
|
end
|
90
112
|
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spreet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: !binary |-
|
5
|
+
MC4wLjM=
|
5
6
|
prerelease:
|
6
7
|
platform: ruby
|
7
8
|
authors:
|
@@ -9,11 +10,11 @@ authors:
|
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2012-09-05 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: fastercsv
|
16
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ! '>='
|
@@ -21,10 +22,15 @@ dependencies:
|
|
21
22
|
version: '0'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
25
31
|
- !ruby/object:Gem::Dependency
|
26
32
|
name: libxml-ruby
|
27
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
28
34
|
none: false
|
29
35
|
requirements:
|
30
36
|
- - ! '>='
|
@@ -32,18 +38,44 @@ dependencies:
|
|
32
38
|
version: '0'
|
33
39
|
type: :runtime
|
34
40
|
prerelease: false
|
35
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: rubyzip
|
38
|
-
requirement:
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.9.4
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
58
|
none: false
|
40
59
|
requirements:
|
41
60
|
- - ! '>='
|
42
61
|
- !ruby/object:Gem::Version
|
43
62
|
version: 0.9.4
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: money
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 4.0.0
|
44
71
|
type: :runtime
|
45
72
|
prerelease: false
|
46
|
-
version_requirements:
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 4.0.0
|
47
79
|
description: Spr[eadsh]eet handler for CSV(RW), Excel CSV(RW) and ODS(W). The goal
|
48
80
|
is to read and write in many open formats.
|
49
81
|
email: brice.texier@ekylibre.org
|
@@ -56,12 +88,22 @@ files:
|
|
56
88
|
- MIT-LICENSE
|
57
89
|
- README.rdoc
|
58
90
|
- VERSION
|
91
|
+
- lib/big_array.rb
|
92
|
+
- lib/duration.rb
|
59
93
|
- lib/spreet.rb
|
94
|
+
- lib/spreet/coordinates.rb
|
60
95
|
- lib/spreet/handlers.rb
|
61
96
|
- lib/spreet/handlers/csv.rb
|
62
97
|
- lib/spreet/handlers/open_document.rb
|
98
|
+
- lib/time.rb
|
63
99
|
- test/helper.rb
|
64
100
|
- test/samples/pascal.csv
|
101
|
+
- test/samples/pascal.ods
|
102
|
+
- test/test_big_array.rb
|
103
|
+
- test/test_coordinates.rb
|
104
|
+
- test/test_csv.rb
|
105
|
+
- test/test_duration.rb
|
106
|
+
- test/test_open_document.rb
|
65
107
|
- test/test_spreet.rb
|
66
108
|
homepage: http://github.com/burisu/spreet
|
67
109
|
licenses:
|
@@ -84,9 +126,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
126
|
version: '0'
|
85
127
|
requirements: []
|
86
128
|
rubyforge_project:
|
87
|
-
rubygems_version: 1.8.
|
129
|
+
rubygems_version: 1.8.23
|
88
130
|
signing_key:
|
89
131
|
specification_version: 3
|
90
132
|
summary: Spr[eadsh]eet handler
|
91
133
|
test_files:
|
134
|
+
- test/test_big_array.rb
|
135
|
+
- test/test_coordinates.rb
|
136
|
+
- test/test_csv.rb
|
137
|
+
- test/test_duration.rb
|
138
|
+
- test/test_open_document.rb
|
92
139
|
- test/test_spreet.rb
|