lxl 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +4 -0
- data/README +1 -1
- data/VERSION +1 -1
- data/lib/lxl.rb +21 -2
- data/test/lxl_test.rb +9 -0
- metadata +2 -2
data/CHANGES
CHANGED
data/README
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
data/lib/lxl.rb
CHANGED
@@ -150,12 +150,18 @@ class LXL::Parser
|
|
150
150
|
@constants[name] = value
|
151
151
|
end
|
152
152
|
|
153
|
-
#
|
153
|
+
# Register a constant for each symbol of the same name and value
|
154
154
|
#
|
155
155
|
def register_symbols(*symbols)
|
156
156
|
symbols.each { |s| register_constant(s, s) }
|
157
157
|
end
|
158
158
|
|
159
|
+
# Register each symbol as a Deferred function call
|
160
|
+
#
|
161
|
+
def register_deferred(*symbols)
|
162
|
+
symbols.each { |s| register_function(s) { |*args| LXL::Deferred.new(s, *args) } }
|
163
|
+
end
|
164
|
+
|
159
165
|
protected
|
160
166
|
|
161
167
|
# Translate to uppercase symbol
|
@@ -238,11 +244,24 @@ class LXL::Parser
|
|
238
244
|
|
239
245
|
end
|
240
246
|
|
247
|
+
# Deferred function call (snapshots the symbol and arguments).
|
248
|
+
#
|
249
|
+
class LXL::Deferred
|
250
|
+
|
251
|
+
attr_accessor :symbol, :args
|
252
|
+
|
253
|
+
def initialize(symbol, *args)
|
254
|
+
@symbol = symbol
|
255
|
+
@args = args
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
259
|
+
|
241
260
|
# John Carter's LittleLexer
|
242
261
|
#
|
243
262
|
# http://www.rubyforge.org/projects/littlelexer
|
244
263
|
#
|
245
|
-
# CHANGE: types are returned as [Symbol
|
264
|
+
# CHANGE: types are returned as [*Symbol] vs String
|
246
265
|
#
|
247
266
|
class LXL::LittleLexer #:nodoc: all
|
248
267
|
|
data/test/lxl_test.rb
CHANGED
@@ -31,5 +31,14 @@ class LXLTest < Test::Unit::TestCase
|
|
31
31
|
results = lxl.eval(formulas)
|
32
32
|
expected.each_index { |i| assert_equal(expected[i], results[i]) }
|
33
33
|
end
|
34
|
+
|
35
|
+
def test_deferred
|
36
|
+
lxl = LXL::Parser.new
|
37
|
+
lxl.register_deferred(:TESTING)
|
38
|
+
res = lxl.eval('=TESTING(1,2,3)')
|
39
|
+
assert_equal(LXL::Deferred, res.class)
|
40
|
+
assert_equal(:TESTING, res.symbol)
|
41
|
+
assert_equal(3, res.args.last)
|
42
|
+
end
|
34
43
|
|
35
44
|
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.2.
|
7
|
-
date: 2005-02-
|
6
|
+
version: 0.2.4
|
7
|
+
date: 2005-02-09
|
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
|