Создание расширения для Spree Commerce, правила хорошего тона

В статье пойдет речь о том как создавать расширения для Spree Commerce точнее правила хорошего тона создания расширений, сразу вспомним что Spree — это программное обеспечение для электронной коммерции с открытым кодом, созданное на Ruby on Rails, подробности вы всегда можете подсмотреть на официальном сайте и репозитарии проекта. Мы в своей разработке 1R Commerce так же прошли этот путь, путь создания расширений, для некоторых прикладных клиентских задач были созданы расширения.

Начитавшись мануалов по Spree Commerce вы по достоинству очените все преимущества и широкие возможности платформы, отметив при этом отсутвие некоторого функционала, который широко используется в классических решениях для интренте магазинов, например: пользовательские ревью и отзывы, локализация и прочее. Но сразу же предлагается и выход из ситуации, использование расширений для Spree Commerce решает такие задачи, мы же прольем чуть света на тему создания расширений для Spree Commerce.

Начиная создавать расширение, держите в уме, что расширение будут использовать другие люди, простой вроде бы и понятный тезис, но важный, не забываем это.  Другие разработчики интернет магазинов скорее всего не захотят разбираться в вашем коде изначально, они по сути будут конечными пользователями вашего расширения, т.е. установив его они ожидают, что задача будет решена (что называется заработает из коробки), в код полезут только в случае: когда нет альтернативы и расширение не полностью решает прикладную задачу.

На старте знакомства с разработкой расширений появилось некоторое “разочарование”. Большинство официальных расширений работало как ожидалось, выполняя все что от них требуется. Но когда требовалась помощь сообщества разработчиков начинались “чудеса” и странности. Например, какое то раширение с рейтингом в одну звезду могло иметь более чем 200 форков! Какое тут “win-win”, у каждого хата с краю и он пилит свой форк. Насмотревшись этого безобразия, появилось желание написать инструкцию, что бы в идеале должны мы видеть в репозитарии расширения.

Deface

Spree Commerce использует Deface плагин для расширения возможностей ERB кастомизации без редактирования шаблонов отображения. Вы можете использовать Deface двумя путями: писать Deface::Override класс

или писать .deface файлы DSL. Все это хорошо и подробно описано в репозитории. Для исключения проблем с информированием о том какое отображение переопределяет ваше расширение, всегда при создании своего раcширения в README файле указывайте какие отображения переопределяются.

Пример:

Вариант Deface::Override

// Specify which .rb files the user should look
// Use the following filename pattern: your file should have the same name of your defacing

Defaces:

Frontend
* add_number_field_to_address_form.rb

Backend
* update_variation_image_to_show_sku.rb

 

Вариант Deface DSL

// Write the selector you defaced after naming the file that was changed

Defaces:

Frontend
* spree/checkout/_address.html.erb [data-hook=»billing_fieldset_wrapper»]
* spree/products/index.html.erb [data-hook=»search_results»]

Backend
* spree/admin/option_types/edit.html.erb #new_add_option_value

Тесты

Пишите тесты! Просто пишите тесты! Если не знаете, что делать, пишите тесты :). Spree использует RSpec, вы тоже должны использовать. Spree имеет массу хелперов, котрые могут быть использованы, найти их можно в spree/core/lib/spree/testing_support, начиная с 2.0 версии. Каждое расширения имеет свой Rake файл, который погает создавать тестовое приложение. Это тестовое приложение используется для запуска ваших тестов. Тестирование расширения имеет интересную процедуру: генерация тестового приложения с помощью bundle exec rake test_app и запуск ваших тестов. Такоя вот “интересная” процедура, очень простая. Вы можете прочесть более подробно о тестировании расширений или других компонентов Spree Commerce на страницах официальной документации: http://guides.spreecommerce.com/developer/testing.html#testing-spree-components

Совместимые версии

Используйте соглашения об именовании, которые используются в репозитарии Spree Commerce. Например, если ваше расширение совместимо с версиями 2.1.х, то назовите ветку 2-1-stable; если совместимо с 2.2.х, то назовите ветку 2-2-stable и так далее.

README

Пишите всегда README. Не сохраняйте в репозитариях README с содержимым типа “описание будет здесь” или что то в этом духе. Пишите полезную информацию, что это за расширение, что оно делает, как оно это делает.

Если ваше расширение добавляет какие либо настройки в Spree или имеет свои настройки, которые должны быть определены. то README это лучшее место где можно описать, что и как должно быть прописано в настройках.

Если вы используете настройки для вашего расширения:


 MyExtension::Config.foo_bar = false # display foo when its true. Default: true
 …

Если вы используете глобальный настройки Spree Commerce:


 This extension adds some preferences:

 preference :best_selling_products_shown, :integer, :default => 9
 …

Полезные рекомендации в качестве резюме

  • Не заполняйте установочные генераторы (избегайте импортов CSS, JS, которые ничего не выполняют).
  • Классика RTFM, прочитайте внимательно официальную документацию по расширениям http://guides.spreecommerce.com/developer/extensions_tutorial.html
  • Познакомтесь с тем как написаны официальные расширения, как организованы их репозитарии, там много полезной информации.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *