rubel 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/lib/rubel/core.rb +16 -15
- data/lib/rubel/version.rb +1 -1
- data/spec/integration/rubel_spec.rb +13 -12
- metadata +3 -2
data/lib/rubel/core.rb
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
module Rubel
|
|
2
2
|
module Core
|
|
3
|
-
#
|
|
4
|
-
def execute(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
query = sanitized_proc(query)
|
|
3
|
+
# q - The String or Proc to be executed
|
|
4
|
+
def execute(q = nil)
|
|
5
|
+
if q.is_a?(::String)
|
|
6
|
+
q = sanitized_proc(q)
|
|
8
7
|
end
|
|
9
8
|
|
|
10
|
-
instance_exec(&
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
instance_exec(&q)
|
|
10
|
+
rescue => e
|
|
11
|
+
::Rubel::ErrorReporter.new(e, q)
|
|
13
12
|
end
|
|
14
13
|
alias query execute
|
|
15
14
|
|
|
@@ -18,20 +17,22 @@ module Rubel
|
|
|
18
17
|
# It removes "::" from the string to prevent people to access
|
|
19
18
|
# classes outside Runtime::Sandbox
|
|
20
19
|
#
|
|
21
|
-
#
|
|
22
20
|
def sanitize!(string)
|
|
23
21
|
string.gsub!('::', '')
|
|
24
22
|
end
|
|
25
23
|
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
24
|
+
# Sanitizes a string from Ruby injection and *instance_eval*s it into a lambda.
|
|
25
|
+
# This is used internally by #execute
|
|
26
|
+
#
|
|
27
|
+
# If you execute lots of queries it is recommended to memoize the
|
|
28
|
+
# results somewhere in your application.
|
|
29
|
+
#
|
|
30
|
+
# The sanitation removes "::" from the string to prevent people to access
|
|
31
|
+
# classes outside Runtime::Sandbox. This has no effect in other runtimes.
|
|
31
32
|
#
|
|
32
33
|
def sanitized_proc(string)
|
|
33
34
|
sanitize!(string)
|
|
34
|
-
|
|
35
|
+
instance_eval("lambda { #{string} }")
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
# Returns method name as a Symbol if args are empty
|
data/lib/rubel/version.rb
CHANGED
|
@@ -54,18 +54,19 @@ describe do
|
|
|
54
54
|
execute("MAP([5.124], round(SUM(1)))").should == 5.1
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
pending do
|
|
58
|
+
# Disabled block support. looks cool, but does not work
|
|
59
|
+
# with method_missing, etc. So rather confusing.
|
|
60
|
+
it "should execute as do SUM(1,2,3) end" do
|
|
61
|
+
execute do
|
|
62
|
+
SUM(1,2,3)
|
|
63
|
+
end.should == 6
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should execute as { SUM(1,2,3) }" do
|
|
67
|
+
execute{SUM(1,2,3)}.should == 6
|
|
68
|
+
end
|
|
69
|
+
end
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
context "sandbox" do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-04-
|
|
12
|
+
date: 2012-04-30 00:00:00.000000000 Z
|
|
13
13
|
dependencies: []
|
|
14
14
|
description: ruby enterprise language. Run excel-like formulas ruby code. E.g. SUM(MAP(KEY_ACCOUNTS(),
|
|
15
15
|
revenue))
|
|
@@ -65,3 +65,4 @@ summary: A dsl for excel-like formulas to run as regular rubycode. E.g. SUM(MAP(
|
|
|
65
65
|
test_files:
|
|
66
66
|
- spec/integration/rubel_spec.rb
|
|
67
67
|
- spec/spec_helper.rb
|
|
68
|
+
has_rdoc:
|