An open API service indexing awesome lists of open source software.

https://github.com/oscript-library/reflector

Улучшенная работа с рефлектором и интерфейсами
https://github.com/oscript-library/reflector

Last synced: 11 months ago
JSON representation

Улучшенная работа с рефлектором и интерфейсами

Awesome Lists containing this project

README

          

# `E`_nchanted_ `R`_eflector_ & `I`_nterfaces_ для OScript

[![Stars](https://img.shields.io/github/stars/khorevaa/reflector.svg?label=Github%20%E2%98%85&a)](https://github.com/khorevaa/reflector/stargazers)
[![Release](https://img.shields.io/github/tag/khorevaa/reflector.svg?label=Last%20release&a)](https://github.com/khorevaa/reflector/releases)
[![Открытый чат проекта https://gitter.im//oscript-reflector/Lobby](https://badges.gitter.im/khorevaa/reflector.png)](https://gitter.im/oscript-reflector/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

[![Build Status](https://travis-ci.org/khorevaa/reflector.svg?branch=master)](https://travis-ci.org/khorevaa/reflector)
[![Coverage Status](https://coveralls.io/repos/github/khorevaa/reflector/badge.svg?branch=master)](https://coveralls.io/github/khorevaa/reflector?branch=master)

Короткое название библиотеки `reflector`

Данная библиотека для языка OScript, упрощает работу с встроенным объектом `Рефлектор` и добавляет функциональность работы с интерфейсами

[Документация и описание публичного API](docs/README.md)
## Быстрый старт

Библиотека реализовывает 2 новых класса:

* `РефлекторОбъекта` - класс отвечает за обработку проверки наличия методов у объектов и кеширования результатов
* `ИнтерфейсОбъекта` - клаcс реализовывает виртуальные интерфейсы для объектов и проводит их сравнение с картами объектов (метод `ПолучитьТаблицуМетодов` объекта `Рефлектор`)

## Установка

Для установки необходимо:
* Скачать файл reflector*.ospx из раздела [releases](https://github.com/khorevaa/reflector/releases)
* Воспользоваться командой:

```
$ opm install -f <ПутьКФайлу>
```

### Пример простой проверки на метод/свойство объекта

* Проверка на функцию объекта
```bsl
РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);

ЕстьФункция = РасширенныйРефлектор.ЕстьФункция("ПроверочнаяФункция", 5);

```

* Проверка на процедуру объекта
```bsl
РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);

ЕстьПроцедура = РасширенныйРефлектор.ЕстьПроцедура("ПроверочнаяПроцедура", 1);

```

* Проверка на свойство объекта
```bsl
РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);

ЕстьСвойство = РасширенныйРефлектор.ЕстьСвойство("Свойство1");

```

* Проверка объекта на реализацию интерфейса

```bsl
Интерфейс = Новый ИнтерфейсОбъекта;
Интерфейс.Ф("Функция1")
.П("Процедура1");

РасширенныйРефлектор = Новый РефлекторОбъекта(ЭтотОбъект);

РеализуетИнтерфейс = РасширенныйРефлектор.РеализуетИнтерфейс(Интерфейс);

Утверждения.ПроверитьИстину(РеализуетИнтерфейс, "Интерфейс реализуется объектом");

```
* Получение структуры реализованных методов объекта по интерфейсу

```bsl

Интерфейс = Новый ИнтерфейсОбъекта;
Интерфейс.Ф("Функция1")
.П("Процедура1")
.Ф("ЛиповаяФункция", 2)
.П("ЛиповаяПроцедура", 3);

РасширенныйРефлектор = Новый РефлекторОбъекта(Новый ТестовыйКласс);

РеализованныеМетодыИнтерфейса = РасширенныйРефлектор.РеализованныеМетодыИнтерфейса(Интерфейс);

```

## Доработка

Доработка проводится по git-flow. Жду ваших PR.

## Лицензия

Смотри файл `LICENSE`.