Skip to content

Commit

Permalink
Документировал часть классов
Browse files Browse the repository at this point in the history
  • Loading branch information
EvilBeaver committed Feb 4, 2018
1 parent 65bee9e commit f840635
Show file tree
Hide file tree
Showing 11 changed files with 154 additions and 5 deletions.
9 changes: 9 additions & 0 deletions src/OneScript/Application/FormDataCollectionContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@

namespace OneScript.WebHost.Application
{
/// <summary>
/// Значения полей формы во входящем запросе.
/// Обращения к полям формы выполняется с помощью оператора [].
/// В качестве индекса используется имя поля.
/// </summary>
[ContextClass("КоллекцияДанныхФормы")]
public class FormDataCollectionContext : AutoContext<FormDataCollectionContext>, ICollectionContext, IEnumerable<KeyAndValueImpl>
{
Expand All @@ -35,9 +40,13 @@ public override void SetIndexedValue(IValue index, IValue val)
throw RuntimeException.PropIsNotWritableException("index");
}

/// <summary>
/// Коллекция загружаемых файлов (upload)
/// </summary>
[ContextProperty("Файлы")]
public FormFilesCollectionContext Files => _files;

[ContextMethod("Количество")]
public int Count()
{
return _data.Count;
Expand Down
16 changes: 16 additions & 0 deletions src/OneScript/Application/FormFileContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@

namespace OneScript.WebHost.Application
{
/// <summary>
/// Описание файла формы
/// </summary>
[ContextClass("ФайлФормы")]
public class FormFileContext : AutoContext<FormFileContext>
{
Expand Down Expand Up @@ -38,15 +41,28 @@ public FormFileContext(IFormFile realObject)
[ContextProperty("Размер")]
public long Length => _realObject.Length;

/// <summary>
/// Заголовки данного файла.
/// </summary>
[ContextProperty("Заголовки")]
public FixedMapImpl Headers => _headers.Value;

/// <summary>
/// Значение заголовка Content-type для данного файла.
/// </summary>
[ContextProperty("ТипСодержимого")]
public string ContentType => _realObject.ContentType;

/// <summary>
/// Значение заголовка Content-disposition для данного файла.
/// </summary>
[ContextProperty("РасположениеСодержимого")]
public string ContentDisposition => _realObject.ContentDisposition;

/// <summary>
/// Открывает поток для чтения содержимого файла
/// </summary>
/// <returns></returns>
[ContextMethod("ОткрытьПотокДляЧтения")]
public GenericStream OpenReadStream()
{
Expand Down
5 changes: 5 additions & 0 deletions src/OneScript/Application/FormFilesCollectionContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@

namespace OneScript.WebHost.Application
{
/// <summary>
/// Коллекция переданных с клиента файлов.
/// Обращение к коллекции возможно по числовому индексу или имени поля-файла.
/// </summary>
[ContextClass("КоллекцияФайловФормы")]
public class FormFilesCollectionContext : AutoContext<FormFilesCollectionContext>, ICollectionContext, IEnumerable<FormFileContext>
{
Expand Down Expand Up @@ -48,6 +52,7 @@ public FormFileContext this[string index]
}
}

[ContextMethod("Количество")]
public int Count()
{
return _data.Count;
Expand Down
29 changes: 25 additions & 4 deletions src/OneScript/Application/HttpRequestImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@

namespace OneScript.WebHost.Application
{
/// <summary>
/// Описание входящего запроса HTTP
/// </summary>
[ContextClass("HTTPЗапросВходящий", "HTTPIncomingRequest")]
public class HttpRequestImpl : AutoContext<HttpRequestImpl>
{
Expand Down Expand Up @@ -55,19 +58,31 @@ private void UpdateCookies()
// для внутреннего пользования
public HttpRequest RealObject => _realObject;


/// <summary>
/// ФиксированноеСоответствие. Заголовки входящего запроса
/// </summary>
[ContextProperty("Заголовки")]
public FixedMapImpl Headers { get; private set; }

/// <summary>
/// ФиксированноеСоответствие. Cookies входящего запроса
/// </summary>
[ContextProperty("Cookies")]
public FixedMapImpl Cookies { get; private set; }

/// <summary>
/// Получение тела запроса в виде потока для чтения
/// </summary>
/// <returns>Поток</returns>
[ContextMethod("ПолучитьТелоКакПоток")]
public GenericStream GetBodyAsStream()
{
return new GenericStream(_realObject.Body);
}

/// <summary>
/// Коллекция переменных, переданных в качестве данных формы
/// </summary>
[ContextProperty("ДанныеФормы")]
public FormDataCollectionContext FormData
{
Expand All @@ -85,16 +100,22 @@ public FormDataCollectionContext FormData
}
}

/// <summary>
/// Текущий метод HTTP
/// </summary>
[ContextProperty("Метод")]
public string Method => _realObject.Method;

/// <summary>
/// Текущая строка запроса (QueryString)
/// </summary>
[ContextProperty("СтрокаЗапроса")]
public string QueryString => _realObject.QueryString.Value;

/// <summary>
/// Путь текущего ресурса
/// </summary>
[ContextProperty("Путь")]
public string Path => _realObject.Path;

//[ContextProperty("Cookies")]
//public object Cookies
}
}
43 changes: 42 additions & 1 deletion src/OneScript/Application/HttpResponseImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@

namespace OneScript.WebHost.Application
{
/// <summary>
/// Описание исходящего HTTP-ответа
/// </summary>
[ContextClass("HttpОтветИсходящий","HttpOutgoingResponse")]
public class HttpResponseImpl : AutoContext<HttpResponseImpl>
{
Expand All @@ -32,13 +35,23 @@ private void UpdateHeaders()
}
Headers = new FixedMapImpl(mapHdrs);
}


/// <summary>
/// Фиксированное соответствие. Заголовки исходящего запроса.
/// Для установки заголовков см. метод УстановитьЗаголовки.
/// </summary>
[ContextProperty("Заголовки")]
public FixedMapImpl Headers { get; private set; }

/// <summary>
/// Возвращаемый код состояния.
/// </summary>
[ContextProperty("КодСостояния")]
public int StatusCode { get=>_realObject.StatusCode; set => _realObject.StatusCode = value; }

/// <summary>
/// Возвращаемый тип содержимого (Content-type)
/// </summary>
[ContextProperty("ТипСодержимого")]
public string ContentType
{
Expand All @@ -54,6 +67,10 @@ public string ContentType
// для внутреннего пользования
public HttpResponse RealObject => _realObject;

/// <summary>
/// Устанавливает заголовки текущего ответа
/// </summary>
/// <param name="headers">Соответствие. Устанавливаемые заголовки</param>
[ContextMethod("УстановитьЗаголовки")]
public void SetHeaders(MapImpl headers)
{
Expand All @@ -65,6 +82,12 @@ public void SetHeaders(MapImpl headers)
Headers = new FixedMapImpl(headers);
}

/// <summary>
/// Добавляет значение Cookie в ответ
/// </summary>
/// <param name="key">Имя параметра</param>
/// <param name="value">Значение параметра</param>
/// <param name="options">Опции Cookie</param>
[ContextMethod("УстановитьCookie")]
public void SetCookie(string key, string value, CookieOptionsWraper options = null)
{
Expand All @@ -74,6 +97,11 @@ public void SetCookie(string key, string value, CookieOptionsWraper options = nu
_realObject.Cookies.Append(key, value, (CookieOptions)options.UnderlyingObject);
}

/// <summary>
/// Удаление значения Cookie
/// </summary>
/// <param name="key">Имя параметра</param>
/// <param name="options">Опции Cookie</param>
[ContextMethod("УдалитьCookie")]
public void RemoveCookie(string key, CookieOptionsWraper options = null)
{
Expand All @@ -83,12 +111,21 @@ public void RemoveCookie(string key, CookieOptionsWraper options = null)
_realObject.Cookies.Delete(key, (CookieOptions)options.UnderlyingObject);
}

/// <summary>
/// Открывает Поток, применяемый для наполнения тела ответа.
/// </summary>
/// <returns>Поток</returns>
[ContextMethod("ПолучитьТелоКакПоток")]
public GenericStream GetBodyAsStream()
{
return new GenericStream(_realObject.Body);
}

/// <summary>
/// Устанавливает тело ответа из строки с заданной кодировкой.
/// </summary>
/// <param name="body">Тело ответа</param>
/// <param name="encoding">Кодировка текста ответа</param>
[ContextMethod("УстановитьТелоИзСтроки")]
public void SetBodyFromString(string body, IValue encoding = null)
{
Expand All @@ -100,6 +137,10 @@ public void SetBodyFromString(string body, IValue encoding = null)
}
}

/// <summary>
/// Устанавливает ДвоичныеДанные в качестве тела ответа
/// </summary>
/// <param name="data">Данные</param>
[ContextMethod("УстановитьТелоИзДвоичныхДанных")]
public void SetBodyFromBinaryData(BinaryDataContext data)
{
Expand Down
51 changes: 51 additions & 0 deletions src/OneScript/Application/ScriptedController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@

namespace OneScript.WebHost.Application
{
/// <summary>
/// Главный класс, отвечающий за обработку входящего запроса и генерацию ответа.
/// </summary>
[NonController]
public class ScriptedController : ScriptDrivenObject
{
Expand Down Expand Up @@ -79,15 +82,29 @@ public ViewDataDictionary FrameworkViewData
}
}

/// <summary>
/// Входящий запрос HTTP
/// </summary>
[ContextProperty("ЗапросHttp")]
public HttpRequestImpl HttpRequest { get; }

/// <summary>
/// Исходящий ответ HTTP
/// </summary>
[ContextProperty("ОтветHttp")]
public HttpResponseImpl HttpResponse { get; }

/// <summary>
/// Действующие значения маршрута для текущего вызова.
/// Тип: Соответствие или Неопределено.
/// Ключами соответствия являются переменные маршрута.
/// </summary>
[ContextProperty("ЗначенияМаршрута")]
public IValue RouteValues { get; }

/// <summary>
/// Данные http-сессии. Механизм сессий использует Cookies для привязки сессии и InMemory хранилище для данных сессии.
/// </summary>
[ContextProperty("Сессия")]
public SessionImpl Session
{
Expand All @@ -99,13 +116,23 @@ public SessionImpl Session
}
}

/// <summary>
/// Специализированный объект, предназначенный для передачи данных в генерируемое Представление.
/// Элементы коллекции доступны в Представлении через свойства ViewBag и ViewData.
/// </summary>
[ContextProperty("ДанныеПредставления")]
public ViewDataDictionaryWrapper ViewData
{
get => _osViewData ?? (_osViewData = new ViewDataDictionaryWrapper());
set => _osViewData = value ?? throw new ArgumentException();
}

/// <summary>
/// Вспомогательный метод генерации ответа в виде представления.
/// </summary>
/// <param name="nameOrModel">Имя представления или объект Модели (если используется представление по умолчанию)</param>
/// <param name="model">Объект модели (произвольный)</param>
/// <returns>РезультатДействияПредставление.</returns>
[ContextMethod("Представление")]
public ViewActionResult View(IValue nameOrModel = null, IValue model = null)
{
Expand All @@ -132,6 +159,12 @@ public ViewActionResult View(IValue nameOrModel = null, IValue model = null)
return ViewResultByName(nameOrModel.AsString(), model);
}

/// <summary>
/// Вспомогательный метод генерации ответа в виде текстового содержимого
/// </summary>
/// <param name="content">Содержимое ответа</param>
/// <param name="contentType">Кодировка текста ответа</param>
/// <returns>РезультатДействияСодержимое</returns>
[ContextMethod("Содержимое")]
public ContentActionResult Content(string content, string contentType = null)
{
Expand All @@ -144,6 +177,13 @@ public ContentActionResult Content(string content, string contentType = null)
return ctResult;
}

/// <summary>
/// Вспомогательный метод генерации ответа в виде скачиваемого файла.
/// </summary>
/// <param name="data">Данные файла (путь или ДвоичныеДанные)</param>
/// <param name="contentType">Содержимое заголовка Content-type</param>
/// <param name="downloadFileName">Имя скачиваемого файла</param>
/// <returns>РезультатДействияФайл</returns>
[ContextMethod("Файл")]
public FileActionResult File(IValue data, string contentType = null, string downloadFileName = null)
{
Expand All @@ -167,12 +207,23 @@ public FileActionResult File(IValue data, string contentType = null, string down
return fileResult;
}

/// <summary>
/// Вспомогательный метод, генерирующий код состояния HTTP
/// </summary>
/// <param name="code">Код состояния</param>
/// <returns>РезультатДействияКодСостояния</returns>
[ContextMethod("КодСостояния")]
public StatusCodeActionResult StatusCode(int code)
{
return StatusCodeActionResult.Constructor(code);
}

/// <summary>
/// Вспомогательный метод, генерирующий ответ в виде http-редиректа
/// </summary>
/// <param name="url">Адрес перенаправления</param>
/// <param name="permanent">Признак постоянного (permanent) перенаправления.</param>
/// <returns>РезультатДействияПеренаправление</returns>
[ContextMethod("Перенаправление")]
public RedirectActionResult Redirect(string url, bool permanent = false)
{
Expand Down
2 changes: 2 additions & 0 deletions src/OneScript/Application/WebGlobalContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
using ScriptEngine.HostedScript;
using ScriptEngine.HostedScript.Library;
using ScriptEngine.Machine;
using ScriptEngine.Machine.Contexts;

namespace OneScript.WebHost.Application
{
[GlobalContext(Category = "Глобальный контекст", ManualRegistration = true)]
public class WebGlobalContext : IAttachableContext
{
// в вебе не все части SystemGlobalContext должны быть доступны
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using OneScript.WebHost.Application;
using ScriptEngine.Environment;
using ScriptEngine.Machine.Contexts;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using OneScript.WebHost.Application;
using ScriptEngine;
using ScriptEngine.Environment;
using ScriptEngine.Machine;
Expand Down
Loading

0 comments on commit f840635

Please sign in to comment.