diff --git a/src/Orchard.Core.Tests/Body/BodyPartTests.cs b/src/Orchard.Core.Tests/Body/BodyPartTests.cs index c847407bb..b0d128b65 100644 --- a/src/Orchard.Core.Tests/Body/BodyPartTests.cs +++ b/src/Orchard.Core.Tests/Body/BodyPartTests.cs @@ -86,8 +86,6 @@ namespace Orchard.Core.Tests.Body { } public class Thing : ContentPart { - public int Id { get { return ContentItem.Id; } } - public string Text { get { return this.As().Text; } set { this.As().Text = value; } diff --git a/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs b/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs index 848b89ab9..0ec9e4762 100644 --- a/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs +++ b/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs @@ -208,8 +208,6 @@ namespace Orchard.Core.Tests.Routable.Services { } public class Thing : ContentPart { - public int Id { get { return ContentItem.Id; } } - public string Title { get { return this.As().Title; } set { this.As().Title = value; } @@ -232,8 +230,6 @@ namespace Orchard.Core.Tests.Routable.Services { } public class Stuff : ContentPart { - public int Id { get { return ContentItem.Id; } } - public string Title { get { return this.As().Title; } set { this.As().Title = value; } diff --git a/src/Orchard.Tests/Scripting/ScriptingTests.cs b/src/Orchard.Tests/Scripting/ScriptingTests.cs index 03ae91770..c164d4080 100644 --- a/src/Orchard.Tests/Scripting/ScriptingTests.cs +++ b/src/Orchard.Tests/Scripting/ScriptingTests.cs @@ -36,11 +36,12 @@ namespace Orchard.Tests.Scripting { } [Test] - public void GetRubyEngineReturnsAWorkingRubyEngine() { - var ruby = _scriptingRuntime.GetRubyEngine(); + public void CreateScopeReturnsWorkingScope() { + var scope = _scriptingRuntime.CreateScope(); - Assert.IsNotNull(ruby); - Assert.That(ruby.Execute("21 + 21"), Is.EqualTo(42)); + Assert.IsNotNull(scope); + scope.SetVariable("alpha", 42); + Assert.That(scope.GetVariable("alpha"), Is.EqualTo(42)); } [Test] @@ -52,7 +53,7 @@ namespace Orchard.Tests.Scripting { [Test] public void ScriptingManagerCanEvalExpression() { _scriptingManager.SetVariable("foo", 21); - Assert.That(_scriptingManager.Eval("foo + 21"), Is.EqualTo(42)); + Assert.That(_scriptingManager.ExecuteExpression("foo + 21"), Is.EqualTo(42)); } [Test] @@ -63,8 +64,8 @@ namespace Orchard.Tests.Scripting { scriptManager1.SetVariable("foo", 1); scriptManager2.SetVariable("foo", 2); - var result1 = scriptManager1.Eval("3 + foo"); - var result2 = scriptManager2.Eval("3 + foo"); + var result1 = scriptManager1.ExecuteExpression("3 + foo"); + var result2 = scriptManager2.ExecuteExpression("3 + foo"); Assert.That(result1, Is.EqualTo(4)); Assert.That(result2, Is.EqualTo(5)); @@ -75,23 +76,15 @@ namespace Orchard.Tests.Scripting { var targetPath = Path.Combine(_tempFolderName, "SampleMethodDefinition.rb"); File.WriteAllText(targetPath, "def f\r\nreturn 32\r\nend\r\n"); _scriptingManager.ExecuteFile(targetPath); - Assert.That(_scriptingManager.Eval("f / 4"), Is.EqualTo(8)); + Assert.That(_scriptingManager.ExecuteExpression("f / 4"), Is.EqualTo(8)); } - [Test] - public void GlobalObjectCanBeDynamic() { - dynamic global = new Clay(new PropBehavior()); - _scriptingManager.SetScriptingScope(_scriptingRuntime.GetRubyEngine().CreateScope((IDynamicMetaObjectProvider)global)); - - global.foo = 5; - Assert.That(_scriptingManager.Eval("3 + foo"), Is.EqualTo(8)); - } [Test] public void CanDeclareCallbackOnGlobalMethod() { _scriptingManager.SetVariable("x", new Clay(new ReturnMethodNameLengthBehavior())); - Assert.That(_scriptingManager.Eval("3 + x.foo()"), Is.EqualTo(6)); + Assert.That(_scriptingManager.ExecuteExpression("3 + x.foo()"), Is.EqualTo(6)); } @@ -109,7 +102,7 @@ namespace Orchard.Tests.Scripting { _scriptingManager.ExecuteFile(targetPath); _scriptingManager.SetVariable("callbacks", new CallbackApi()); - Assert.That(_scriptingManager.Eval("execute { 1 + hello + world('yep') }"), Is.EqualTo(11)); + Assert.That(_scriptingManager.ExecuteExpression("execute { 1 + hello + world('yep') }"), Is.EqualTo(11)); } public class CallbackApi { diff --git a/src/Orchard.Web/Core/Localization/Models/LocalizationPart.cs b/src/Orchard.Web/Core/Localization/Models/LocalizationPart.cs index de5ab9a85..b376ea0d9 100644 --- a/src/Orchard.Web/Core/Localization/Models/LocalizationPart.cs +++ b/src/Orchard.Web/Core/Localization/Models/LocalizationPart.cs @@ -11,9 +11,6 @@ namespace Orchard.Core.Localization.Models { public LazyField CultureField { get { return _culture; } } public LazyField MasterContentItemField { get { return _masterContentItem; } } - [HiddenInput(DisplayValue = false)] - public int Id { get { return ContentItem.Id; } } - public CultureRecord Culture { get { return _culture.Value; } set { _culture.Value = value; } diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuItemPart.cs b/src/Orchard.Web/Core/Navigation/Models/MenuItemPart.cs index ad97500f7..6e9e0fb56 100644 --- a/src/Orchard.Web/Core/Navigation/Models/MenuItemPart.cs +++ b/src/Orchard.Web/Core/Navigation/Models/MenuItemPart.cs @@ -4,9 +4,6 @@ using Orchard.ContentManagement; namespace Orchard.Core.Navigation.Models { public class MenuItemPart : ContentPart { - [HiddenInput(DisplayValue = false)] - public int Id { get { return ContentItem.Id; } } - [Required] public string Url { get { return Record.Url; } diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs b/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs index 21fdbf7ec..70e6a43fb 100644 --- a/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs +++ b/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs @@ -4,8 +4,6 @@ using Orchard.ContentManagement; namespace Orchard.Core.Navigation.Models { public class MenuPart : ContentPart { - [HiddenInput(DisplayValue = false)] - public int Id { get { return ContentItem.Id; } } public bool OnMainMenu { get { return Record.OnMainMenu; } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogPart.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogPart.cs index 484f8ba8a..09bffdedc 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogPart.cs @@ -4,9 +4,6 @@ using Orchard.Core.Routable.Models; namespace Orchard.Blogs.Models { public class BlogPart : ContentPart { - [HiddenInput(DisplayValue = false)] - public int Id { get { return ContentItem.Id; } } - public string Name { get { return this.As().Title; } set { this.As().Title = value; } diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs index fb1ca7f60..47ddb6c91 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs @@ -15,7 +15,7 @@ namespace Orchard.Widgets.RuleEngine { public bool Matches(string expression) { _scriptingManager.SetVariable("callbacks", new CallbackApi(this)); - dynamic execContext = _scriptingManager.Eval(@" + dynamic execContext = _scriptingManager.ExecuteExpression(@" class ExecContext def initialize(callbacks) @callbacks = callbacks; diff --git a/src/Orchard/Scripting/IScriptingManager.cs b/src/Orchard/Scripting/IScriptingManager.cs index 069a4c56f..65256b0b4 100644 --- a/src/Orchard/Scripting/IScriptingManager.cs +++ b/src/Orchard/Scripting/IScriptingManager.cs @@ -1,11 +1,8 @@ -using Microsoft.Scripting.Hosting; - -namespace Orchard.Scripting { +namespace Orchard.Scripting { public interface IScriptingManager : IDependency { dynamic GetVariable(string name); void SetVariable(string name, object value); - dynamic Eval(string expression); + dynamic ExecuteExpression(string expression); void ExecuteFile(string fileName); - void SetScriptingScope(ScriptScope scriptScope); } } diff --git a/src/Orchard/Scripting/IScriptingRuntime.cs b/src/Orchard/Scripting/IScriptingRuntime.cs index e1bbd920f..5b73a166a 100644 --- a/src/Orchard/Scripting/IScriptingRuntime.cs +++ b/src/Orchard/Scripting/IScriptingRuntime.cs @@ -2,6 +2,8 @@ namespace Orchard.Scripting { public interface IScriptingRuntime : ISingletonDependency { - ScriptEngine GetRubyEngine(); + ScriptScope CreateScope(); + dynamic ExecuteExpression(string expression, ScriptScope scope); + void ExecuteFile(string fileName, ScriptScope scope); } } diff --git a/src/Orchard/Scripting/ScriptingManager.cs b/src/Orchard/Scripting/ScriptingManager.cs index f9e98d0b8..545134f20 100644 --- a/src/Orchard/Scripting/ScriptingManager.cs +++ b/src/Orchard/Scripting/ScriptingManager.cs @@ -1,38 +1,31 @@ -using Microsoft.Scripting.Hosting; +using System; +using Microsoft.Scripting.Hosting; namespace Orchard.Scripting { public class ScriptingManager : IScriptingManager { private readonly IScriptingRuntime _scriptingRuntime; - private ScriptScope _scriptingScope; + private Lazy _scope; public ScriptingManager(IScriptingRuntime scriptingRuntime) { _scriptingRuntime = scriptingRuntime; - _scriptingScope = _scriptingRuntime.GetRubyEngine().CreateScope(); + _scope = new Lazy(()=>_scriptingRuntime.CreateScope()); } - #region IScriptingContext Members - public dynamic GetVariable(string name) { - return _scriptingScope.GetVariable(name); + return _scope.Value.GetVariable(name); } public void SetVariable(string name, object value) { - _scriptingScope.SetVariable(name, value); + _scope.Value.SetVariable(name, value); } - public dynamic Eval(string expression) { - var script = _scriptingRuntime.GetRubyEngine().CreateScriptSourceFromString(expression); - return script.Execute(_scriptingScope); + public dynamic ExecuteExpression(string expression) { + return _scriptingRuntime.ExecuteExpression(expression, _scope.Value); } public void ExecuteFile(string fileName) { - _scriptingRuntime.GetRubyEngine().ExecuteFile(fileName, _scriptingScope); + _scriptingRuntime.ExecuteFile(fileName, _scope.Value); } - public void SetScriptingScope(ScriptScope scriptScope) { - _scriptingScope = scriptScope; - } - - #endregion } } diff --git a/src/Orchard/Scripting/ScriptingRuntime.cs b/src/Orchard/Scripting/ScriptingRuntime.cs index 7ffcf76f4..ccc88813f 100644 --- a/src/Orchard/Scripting/ScriptingRuntime.cs +++ b/src/Orchard/Scripting/ScriptingRuntime.cs @@ -3,16 +3,34 @@ using Microsoft.Scripting.Hosting; namespace Orchard.Scripting { public class ScriptingRuntime : IScriptingRuntime { + private readonly LanguageSetup _defaultLanguageSetup; private readonly ScriptRuntime _scriptingRuntime; public ScriptingRuntime() { + _defaultLanguageSetup = Ruby.CreateRubySetup(); + var setup = new ScriptRuntimeSetup(); - setup.LanguageSetups.Add(Ruby.CreateRubySetup()); + setup.LanguageSetups.Add(_defaultLanguageSetup); _scriptingRuntime = new ScriptRuntime(setup); } - public ScriptEngine GetRubyEngine() { - return _scriptingRuntime.GetEngine("ruby"); + ScriptEngine GetDefaultEngine() { + return _scriptingRuntime.GetEngineByTypeName(_defaultLanguageSetup.TypeName); + } + + public ScriptScope CreateScope() { + return _scriptingRuntime.CreateScope(); + } + + public dynamic ExecuteExpression(string expression, ScriptScope scope) { + var engine = GetDefaultEngine(); + var source = engine.CreateScriptSourceFromString(expression); + return source.Execute(scope); + } + + public void ExecuteFile(string fileName, ScriptScope scope) { + var engine = GetDefaultEngine(); + engine.ExecuteFile(fileName, scope); } } } diff --git a/src/Orchard/Security/IUser.cs b/src/Orchard/Security/IUser.cs index c955f3593..a68f1b215 100644 --- a/src/Orchard/Security/IUser.cs +++ b/src/Orchard/Security/IUser.cs @@ -5,7 +5,6 @@ namespace Orchard.Security { /// Interface provided by the "User" model. /// public interface IUser : IContent { - int Id { get; } string UserName { get; } string Email { get; } }