diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj
index ea6196de0..2b580d82a 100644
--- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj
+++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj
@@ -38,6 +38,10 @@
..\..\..\..\lib\claysharp\ClaySharp.dll
+
+ False
+ ..\..\..\..\lib\dlr\Microsoft.Scripting.dll
+
diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs
index 6c960b494..7370f8db3 100644
--- a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs
+++ b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs
@@ -14,7 +14,7 @@ namespace Orchard.Widgets.RuleEngine {
}
public bool Matches(string expression) {
- dynamic execContext = _scriptingManager.ExecuteExpression(@"
+ object execContextType = _scriptingManager.ExecuteExpression(@"
class ExecContext
def execute(callbacks, text)
@callbacks = callbacks;
@@ -27,13 +27,16 @@ namespace Orchard.Widgets.RuleEngine {
@callbacks.send(name, args, &block);
end
end
- ExecContext.new()");
- return execContext.execute(new CallbackApi(this), expression);
+ ExecContext
+ ");
+
+ object execContext = _scriptingManager.ExecuteOperation(ops => ops.CreateInstance(execContextType));
+ return _scriptingManager.ExecuteOperation(ops => ops.InvokeMember(execContext, "execute", new CallbackApi(this), expression));
}
public class CallbackApi {
private readonly RuleManager _ruleManager;
-
+
public CallbackApi(RuleManager ruleManager) {
_ruleManager = ruleManager;
}
@@ -44,7 +47,7 @@ namespace Orchard.Widgets.RuleEngine {
}
private object Evaluate(string name, IList