Генерамба и прочие аспекты кодогенерации в viper
TRANSCRIPT
Генерамбаи прочие аспекты
кодогенерации в VIPER
Автор
Егор Толстой
Ведущий iOS разработчик
Rambler&Co
Twitter: @igrekde
www.github.com/igrekde
•Использование шаблонов Xcode
•Что такое Генерамба
•Устройство Генерамбы
Классы:
Assembly.h Assembly.m
ViewController.h ViewController.m
Presenter.h Presenter.m
Interactor.h Interactor.m
Router.h Router.m
Протоколы:
ViewInput.h ViewOutput.h
InteractorInput.h InteractorOutput.h
RouterInput.h
ModuleInput.h
Тесты:
AssemblyTests.m
ViewControllerTests.m
PresenterTests.m
InteractorTests.m
RouterTests.m
21 файл * 30 секунд =
10 минут
#import "___VARIABLE_viperModuleName:identifier___Interactor.h" #import "___VARIABLE_viperModuleName:identifier___InteractorOutput.h"
@implementation ___VARIABLE_viperModuleName:identifier___Interactor
#pragma mark - ___VARIABLE_viperModuleName:identifier___InteractorInput
@end
gem install generamba
generamba setup
generamba template install
generamba gen MyModule template_name
#import "{{ prefix }}{{ module_info.name }}Presenter.h"
@implementation {{ prefix }}{{ module_info.name }}Presenter
#pragma mark - Методы {{ prefix }}{{ module_info.name }}ViewOutput
- (void)didTriggerViewReadyEvent { [self.view setupInitialState];
}
@end
• Project/Rambafile
• Project/Templates/
• ~/.generamba/
user-
preferences.yml
• Локальные шаблоны
• Удаленные шаблоны
• Шаблоны каталога
Проект Пользователь Внешние ресурсы
{{ module_name }}
{{ prefix }}
{{ module_info.description }}
liquid
{% if user.name == 'tobi' %}
Hello tobi
{% elsif user.name == 'bob' %}
Hello bob
{% endif %}
if/else
liquid
{% for item in array %}
{{ item }}
{% endfor %}
for loop
liquid
• {{ "a~b" | split:"~" }} #=> ['a','b']
• {{ 'barbar' | remove_first:'bar' }} #=> 'bar'
• {{ 3 | pluralize: 'item', 'items' }} #=> 'items'
работа со строками
liquid
XCODEPROJ_HELPER
GEN_COMMAND
MODULE_GENERATOR
CONTENT_GENERATOR
CODE_MODULE
MODULE_TEMPLATE
Filesystem Project.xcodeproj
Command Line Interface
Code Generation
Output
TILT
SETUP_COMMAND
RAMBAFILE_ GENERATOR
Rambafile
Command Line Interface
Output
TILT
Code Generation
LOCAL_INSTALLER
TEMPLATE_ INSTALL_
COMMAND
TEMPLATE_PROCESSOR REMOTE_INSTALLERTEMPLATE_DECLARATION
Filesystem
Command Line Interface
Installation Logic
Output
CATALOG_INSTALLER
•Полное покрытие тестами,
•Автоматическая установка зависимостей,
•Автогенерация тестов по интерфейсам,
•Список всех сгенерированных модулей,
•GUI
Планы
•Ruby - отличный выбор для подобных
утилит,
•Автоматизация любых процессов - ценное
вложение труда и времени,
•rails-way для iOS приложений.
Выводы