lxl 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/CHANGES +5 -1
  2. data/VERSION +1 -1
  3. data/test/lxl_spreadsheet_test.rb +37 -15
  4. metadata +2 -2
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ 0.4.2
2
+
3
+ - SpreadSheet example now works directly with ranges.
4
+
1
5
  0.4.1
2
6
 
3
7
  - LXL::Token, LXL::Parser#token_class, #store, #tokenize updated.
@@ -8,7 +12,7 @@
8
12
  - All tokenizing code moved into tokenize (out of eval)
9
13
  - Token class added
10
14
  - Fixes bug with text (non-formula) strings and constant parsing
11
- - Removed unnessecary Lexer code
15
+ - Removed unnessecary Lexer code.
12
16
 
13
17
  0.3.8
14
18
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.4.2
@@ -1,9 +1,21 @@
1
1
  #--
2
- # LXL interface to Jim Weirich�s SpreadSheet object.
3
- # http://onestepback.org/index.cgi/Tech/Ruby/SlowingDownCalculations.rdoc
4
- # http://onestepback.org/cgi-bin/osbwiki.pl?SpreadSheetCode
2
+ # =LXL SpreadSheet Interface
5
3
  #
6
- # NOTE: Spreadsheet#[a,b] does single lookups only.
4
+ # An LXL interface to Jim Weirich�s SpreadSheet object.
5
+ #
6
+ # http://onestepback.org/index.cgi/Tech/Ruby/SlowingDownCalculations.rdoc
7
+ # http://onestepback.org/cgi-bin/osbwiki.pl?SpreadSheetCode
8
+ #
9
+ # =Usage
10
+ #
11
+ # MyLXL.eval('=A2') # => <SpreadSheet:1>[1,2]
12
+ # MyLXL.eval('=Sheet2!C4') # => <SpreadSheet:2>[3,4]
13
+ #
14
+ # =Notes
15
+ #
16
+ # * Spreadsheet#[a,b] does single lookups only.
17
+ # * Uses Range#sheet to specify the SpreadSheet object.
18
+ # * Uses a custom range class to perform lookups on the SpreadSheet object.
7
19
  #++
8
20
 
9
21
  $LOAD_PATH.unshift('../lib')
@@ -15,23 +27,30 @@ require 'lxl'
15
27
  # Spreadsheet
16
28
  #++
17
29
 
18
- $ss = SpreadSheet.new
19
- $ss[1,1].value = 5
20
- $ss[1,2].value = $ss[1,1] * 6
21
- $ss[1,3].value = $ss[1,2] * 7
30
+ $sheet1 = SpreadSheet.new
31
+ $sheet1[1,2].value = 5 # Sheet1!A2
32
+
33
+ $sheet2 = SpreadSheet.new
34
+ $sheet2[3,4].value = 8 # Sheet2!C4
35
+
36
+ $book = {'Sheet1'=>$sheet1, 'Sheet2'=>$sheet2}
22
37
 
23
38
  #--
24
39
  # LXL Interface
25
40
  #++
26
41
 
27
- class MyNamespace < LXL::EmptyNamespace
28
- def lookup(range)
29
- $ss[range.first_colnum, range.first_cell].value
42
+ class SSRange < LXL::Range
43
+
44
+ def self.new(first, last)
45
+ range = super
46
+ sheet = $book[range.sheet || 'Sheet1']
47
+ sheet ? sheet[range.first_colnum, range.first_cell].value : 0
30
48
  end
31
- end
32
49
 
50
+ end
51
+
33
52
  class MyLXL < LXL::Parser
34
- def self.namespace_class() MyNamespace end
53
+ def self.range_class() SSRange end
35
54
  end
36
55
 
37
56
  #--
@@ -39,7 +58,10 @@ end
39
58
  #++
40
59
 
41
60
  class SpreadsheetTest < Test::Unit::TestCase
42
- def test_lookup
43
- assert_equal($ss[1,3].value, MyLXL.eval('=LOOKUP(A3)'))
61
+ def test_range
62
+ assert_equal(5, MyLXL.eval('=A2'))
63
+ assert_equal($sheet1[1,2].value, MyLXL.eval('=Sheet1!A2'))
64
+ assert_equal(8, MyLXL.eval('=Sheet2!C4'))
65
+ assert_equal($sheet2[3,4].value, MyLXL.eval('=Sheet2!C4'))
44
66
  end
45
67
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.3
3
3
  specification_version: 1
4
4
  name: lxl
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.1
7
- date: 2005-02-16
6
+ version: 0.4.2
7
+ date: 2005-02-18
8
8
  summary: LXL (Like Excel) is a mini-language that mimics Microsoft Excel formulas. Easily extended with new constants and functions.
9
9
  require_paths:
10
10
  - lib