Skip to content

Commit d9ff8ac

Browse files
authored
Merge pull request #1 from dmpas/feature/ref-app
Feature/ref app
2 parents 703c7ba + 6c70f9d commit d9ff8ac

24 files changed

+356
-60
lines changed

.vscode/tasks.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
"version": "0.1.0",
33
"windows": {
44
"command": "cmd",
5-
"args": ["/c", "chcp 65001 >nul ; "]
5+
"args": ["/c", "chcp 65001 ; "]
66
},
77
"linux": {
88
"command": "sh",
99
"args": ["-c"]
1010
},
1111
"isShellCommand": true,
1212
"showOutput": "silent",
13-
//"_runner": "terminal",
13+
"_runner": "terminal",
1414
"tasks": [
1515
{
1616
"taskName": "Testing project",

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ OneScript Package Manager
1919

2020
Справка из википедии: [Система управления пакетами](https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0%D0%BC%D0%B8)
2121

22+
# Сервера
23+
В настоящее время пакеты хранятся на двух серверах:
24+
- [hub.oscript.io](http://hub.oscript.io/download) - основной хаб пакетов
25+
- [hub.oscript.ru](http://hub.oscript.ru/download) - вторичный хаб пакетов. Используется, когда не удаётся получить данные с основного хаба
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
2+
#Использовать asserts
3+
4+
#Использовать "../../src"
5+
6+
Перем БДД; //контекст фреймворка 1bdd
7+
8+
// Метод выдает список шагов, реализованных в данном файле-шагов
9+
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
10+
БДД = КонтекстФреймворкаBDD;
11+
12+
ВсеШаги = Новый Массив;
13+
14+
ВсеШаги.Добавить("ЯЧитаюНастройкиИзФайла");
15+
ВсеШаги.Добавить("ЗначениеНастройкиРавно");
16+
17+
Возврат ВсеШаги;
18+
КонецФункции
19+
20+
// Реализация шагов
21+
22+
// Процедура выполняется перед запуском каждого сценария
23+
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
24+
25+
КонецПроцедуры
26+
27+
// Процедура выполняется после завершения каждого сценария
28+
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
29+
30+
КонецПроцедуры
31+
32+
//я читаю настройки из файла "opm.cfg"
33+
Процедура ЯЧитаюНастройкиИзФайла(Знач ПутьФайла) Экспорт
34+
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
35+
Ожидаем.Что(Файл.Существует(), СтрШаблон("Ожидали, что файл <%1> существует, а это не так!", Файл.ПолноеИмя)).ЭтоИстина();
36+
37+
НастройкиПриложения.УстановитьФайлНастроек(Файл.ПолноеИмя);
38+
39+
Настройки = НастройкиПриложения.Получить();
40+
БДД.СохранитьВКонтекст(КлючКонтекста(), Настройки);
41+
КонецПроцедуры
42+
43+
//значение настройки "СоздаватьShСкриптЗапуска" равно "false"
44+
Процедура ЗначениеНастройкиРавно(Знач КлючНастройки, Знач ЗначениеНастройки) Экспорт
45+
Настройки = БДД.ПолучитьИзКонтекста(КлючКонтекста());
46+
47+
Ожидаем.Что(КлючНастройки, "Ключ настройки не заполнен").Заполнено();
48+
49+
Значение = ЗначениеНастройки(Настройки, КлючНастройки);
50+
51+
ЗначениеНастройки = КонвертироватьЗначениеПриНеобходимости(ЗначениеНастройки);
52+
53+
Ожидаем.Что(Значение, СтрШаблон("Не совпадает значение настройки с именем <%1>", КлючНастройки)).Равно(ЗначениеНастройки);
54+
КонецПроцедуры
55+
56+
// учитываются простые (СоздаватьShСкриптЗапуска) и иерархические ключи (Прокси.ИспользоватьПрокси)
57+
Функция ЗначениеНастройки(Знач Настройки, Знач КлючНастройки)
58+
МассивИерархии = СтрРазделить(КлючНастройки, ".", Ложь);
59+
ПутьКлюча = "";
60+
ТекущиеНастройки = настройки;
61+
Для Счетчик = 0 По МассивИерархии.ВГраница() Цикл
62+
ТекущийКлюч = МассивИерархии[Счетчик];
63+
Если ПустаяСтрока(ПутьКлюча) Тогда
64+
ПутьКлюча = ТекущийКлюч;
65+
Иначе
66+
ПутьКлюча = СтрШаблон("%1.%2", ПутьКлюча, ТекущийКлюч);
67+
КонецЕсли;
68+
69+
Значение = Неопределено;
70+
ЕстьНастройка = ТекущиеНастройки.Свойство(ТекущийКлюч, Значение);
71+
Ожидаем.Что(ЕстьНастройка, СтрШаблон("Не удалось получить настройку с именем <%1>", ПутьКлюча)).ЭтоИстина();
72+
ТекущиеНастройки = Значение;
73+
КонецЦикла;
74+
75+
Возврат Значение;
76+
КонецФункции
77+
78+
Функция КонвертироватьЗначениеПриНеобходимости(Знач ЗначениеНастройки)
79+
ЗначениеНастройки = НРег(ЗначениеНастройки);
80+
Если ЗначениеНастройки = "false" или ЗначениеНастройки = "ложь" Тогда
81+
ЗначениеНастройки = Ложь;
82+
ИначеЕсли ЗначениеНастройки = "true" или ЗначениеНастройки = "истина" Тогда
83+
ЗначениеНастройки = Истина;
84+
ИначеЕсли ЗначениеНастройки = "неопределено" Тогда
85+
ЗначениеНастройки = Неопределено;
86+
КонецЕсли;
87+
Возврат ЗначениеНастройки;
88+
КонецФункции
89+
90+
Функция КлючКонтекста()
91+
Возврат "ТестовыеНастройкиПриложенияОМП";
92+
КонецФункции // КлючКонтекста()

features/Настройки.feature

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# language: ru
2+
3+
Функциональность: Настройки продукта
4+
5+
Как разработчик
6+
Я хочу иметь возможность настраивать параметры продукта из внешнего файла
7+
Чтобы управлять поведением продукта, например, если есть прокси
8+
9+
Контекст: файл настроек
10+
Допустим Я создаю временный каталог и сохраняю его в контекст
11+
И Я устанавливаю временный каталог как рабочий каталог
12+
13+
И Я установил рабочий каталог как текущий каталог
14+
15+
# И Я показываю рабочий каталог
16+
17+
Сценарий: Получение настроек
18+
Допустим Я копирую файл "opm.cfg" из каталога "tests/fixtures" проекта в рабочий каталог
19+
Когда я читаю настройки из файла "opm.cfg"
20+
Тогда значение настройки "СоздаватьShСкриптЗапуска" равно "false"
21+
И значение настройки "Прокси.ИспользоватьПрокси" равно "false"
22+
И значение настройки "Прокси.ПроксиПоУмолчанию" равно "false"
23+
И значение настройки "Прокси.Сервер" равно ""
24+
И значение настройки "Прокси.Порт" равно ""
25+
И значение настройки "Прокси.Пользователь" равно ""
26+
И значение настройки "Прокси.Пароль" равно ""
27+
И значение настройки "Прокси.ИспользоватьАутентификациюОС" равно "false"
28+
29+
Сценарий: Получение значения по умолчанию, если настройка не задана в файле настроек
30+
Допустим Я копирую файл "opm-incomplete.cfg" из каталога "tests/fixtures" проекта в рабочий каталог
31+
Когда я читаю настройки из файла "opm-incomplete.cfg"
32+
Тогда значение настройки "СоздаватьShСкриптЗапуска" равно "false"
33+
И значение настройки "Прокси.ИспользоватьПрокси" равно "false"
34+
И значение настройки "Прокси.ПроксиПоУмолчанию" равно "Истина"
35+
И значение настройки "Прокси.Сервер" равно "Неопределено"
36+
И значение настройки "Прокси.Порт" равно "Неопределено"
37+
И значение настройки "Прокси.Пользователь" равно "Неопределено"
38+
И значение настройки "Прокси.Пароль" равно "Неопределено"
39+
И значение настройки "Прокси.ИспользоватьАутентификациюОС" равно "false"

src/opm.os

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,15 @@
1+
///////////////////////////////////////////////////////////////////////////
2+
//
3+
// OneScript Package Manager
4+
// Установщик пакетов для OneScript
5+
// Выполняется, как os-приложение в командной строке:
6+
//
7+
// opm install my-package.ospx
8+
//
19
////////////////////////////////////////////////////////////////////////
210
//
311
// CLI-интерфейс для oscript-app
412
//
5-
//The MIT License (MIT)
6-
//
7-
// Copyright (c) 2016 Andrei Ovsiankin
8-
//
9-
// Permission is hereby granted, free of charge, to any person obtaining a copy
10-
// of this software and associated documentation files (the "Software"), to deal
11-
// in the Software without restriction, including without limitation the rights
12-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13-
// copies of the Software, and to permit persons to whom the Software is
14-
// furnished to do so, subject to the following conditions:
15-
//
16-
// The above copyright notice and this permission notice shall be included in all
17-
// copies or substantial portions of the Software.
18-
//
19-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25-
// SOFTWARE.
26-
//
2713
///////////////////////////////////////////////////////////////////////
2814

2915
#Использовать cmdline

src/Классы/Зеркало.os

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
Перем СерверУдаленногоХранилища Экспорт;
2+
Перем ПутьВХранилище Экспорт;
3+
4+
Перем Соединение;
5+
6+
Функция ИнициализироватьСоединение() Экспорт
7+
8+
Если Не Соединение = Неопределено Тогда
9+
Возврат Соединение;
10+
КонецЕсли;
11+
12+
НастройкиПрокси = НастройкиПриложенияOpm.Получить().Прокси;
13+
Если НастройкиПрокси.ИспользоватьПрокси Тогда
14+
Прокси = Новый ИнтернетПрокси(НастройкиПрокси.ПроксиПоУмолчанию);
15+
Если НастройкиПрокси.ПроксиПоУмолчанию Тогда
16+
Прокси.Установить("http",НастройкиПрокси.Сервер,НастройкиПрокси.Порт,НастройкиПрокси.Пользователь,НастройкиПрокси.Пароль,НастройкиПрокси.ИспользоватьАутентификациюОС);
17+
КонецЕсли;
18+
Соединение = Новый HTTPСоединение(СерверУдаленногоХранилища,,,,Прокси);
19+
Иначе
20+
Соединение = Новый HTTPСоединение(СерверУдаленногоХранилища);
21+
КонецЕсли;
22+
23+
Возврат Соединение;
24+
25+
КонецФункции
26+
27+
// ИмяРесурса - имя файла относительно "Сервер/ПутьВХранилище"
28+
// Возвращает HttpОтвет или Неопределено, если запрос вернул исключение.
29+
Функция ПолучитьРесурс(Знач ИмяРесурса) Экспорт
30+
31+
Соединение = ИнициализироватьСоединение();
32+
Ресурс = ПутьВХранилище + ИмяРесурса;
33+
Запрос = Новый HTTPЗапрос(Ресурс);
34+
35+
Попытка
36+
37+
Возврат Соединение.Получить(Запрос);
38+
39+
Исключение
40+
41+
Возврат Неопределено;
42+
43+
КонецПопытки;
44+
45+
КонецФункции

src/Классы/КомандаOpm_App.os

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
2121

2222
СоздатьСкриптЗапуска(ПараметрыКоманды["ИмяСкрипта"], ПараметрыКоманды["Каталог"], ПараметрыКоманды["-name"]);
23+
Возврат 0;
2324

2425
КонецФункции
2526

src/Классы/КомандаOpm_Build.os

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
2020

2121
ВыполнитьСборку(ПараметрыКоманды["КаталогИсходников"], ПараметрыКоманды["-mf"], ПараметрыКоманды["-out"]);
22+
Возврат 0;
2223

2324
КонецФункции
2425

src/Классы/КомандаOpm_Config.os

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@
2121
//
2222
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
2323
НастройкиПриложенияOpm.СохранитьНастройки(ПараметрыКоманды);
24+
Возврат 0;
2425
КонецФункции

src/Классы/КомандаOpm_Install.os

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
// ПараметрыКоманды - Соответствие ключей командной строки и их значений
1919
//
2020
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
21-
УстановитьПакет(ПараметрыКоманды);
21+
УстановитьПакет(ПараметрыКоманды);
22+
Возврат 0;
2223
КонецФункции
2324

2425
Процедура УстановитьПакет(Знач ЗначенияПараметров) Экспорт

src/Классы/КомандаOpm_List.os

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
1919

2020
ВывестиСписокПакетов(ПараметрыКоманды);
21+
Возврат 0;
2122

2223
КонецФункции
2324

src/Классы/КомандаOpm_Prepare.os

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
// ПараметрыКоманды - Соответствие ключей командной строки и их значений
1616
//
1717
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
18-
ПодготовитьКаталогПроекта(ПараметрыКоманды["КаталогСборкиПакета"]);
18+
ПодготовитьКаталогПроекта(ПараметрыКоманды["КаталогСборкиПакета"]);
19+
Возврат 0;
1920
КонецФункции
2021

2122
Процедура ПодготовитьКаталогПроекта(Знач ВыходнойКаталог) Экспорт

src/Классы/КомандаOpm_Run.os

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
// ПараметрыКоманды - Соответствие ключей командной строки и их значений
1717
//
1818
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
19-
ВыполнитьЗадачу(ПараметрыКоманды["ИмяЗадачи"], ПараметрыКоманды["ПараметрыЗадачи"]);
19+
ВыполнитьЗадачу(ПараметрыКоманды["ИмяЗадачи"], ПараметрыКоманды["ПараметрыЗадачи"]);
20+
Возврат 0;
2021
КонецФункции
2122

2223
Процедура ВыполнитьЗадачу(Знач ИмяЗадачи, Знач ПараметрыЗадачи)

src/Классы/КомандаOpm_Test.os

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
1818

1919
ВыполнитьЗадачу("test", ПараметрыКоманды["ПараметрыЗадачи"]);
20+
Возврат 0;
2021

2122
КонецФункции
2223

src/Классы/КомандаOpm_Update.os

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
2020

2121
ОбновитьПакет(ПараметрыКоманды);
22+
Возврат 0;
2223

2324
КонецФункции
2425

src/Классы/КомандаOpm_Version.os

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
// ПараметрыКоманды - Соответствие ключей командной строки и их значений
1515
//
1616
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
17-
Сообщить(КонстантыOpm.ВерсияПродукта);
17+
Сообщить(КонстантыOpm.ВерсияПродукта);
18+
Возврат 0;
1819
КонецФункции

src/Классы/КэшПакетовХаба.os

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,10 @@
88
Процедура Обновить() Экспорт
99

1010
УстановкаПакета = Новый Установкапакета();
11-
Сервер = КонстантыOpm.СерверУдаленногоХранилища;
12-
Соединение = УстановкаПакета.ИнициализироватьСоединение(Сервер);
13-
Ресурс = КонстантыOpm.ПутьВХранилище + "list.txt";
14-
Запрос = Новый HTTPЗапрос(Ресурс);
15-
Ответ = Соединение.Получить(Запрос);
16-
17-
Если НЕ Ответ.КодСостояния = 200 Тогда
18-
ТекстИсключения = СтрШаблон("Ошибка подключения к хабу <%1>", Ответ.КодСостояния);
19-
Ответ.Закрыть();
11+
Ответ = Зеркала.ПолучитьРесурс("list.txt");
12+
13+
Если Ответ = Неопределено Тогда
14+
ТекстИсключения = СтрШаблон("Ошибка подключения");
2015
ВызватьИсключение ТекстИсключения;
2116
КонецЕсли;
2217

@@ -48,7 +43,6 @@
4843
Процедура Инициализация()
4944

5045
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
51-
//Лог.УстановитьУровень(УровниЛога.Отладка);
5246

5347
Обновить();
5448

0 commit comments

Comments
 (0)